args_register:
   27|      6|{
   28|      6|	if (context == NULL)
  ------------------
  |  Branch (28:6): [True: 2, False: 4]
  ------------------
   29|      2|		context = g_option_context_new("");
   30|       |
   31|      6|	g_option_context_add_main_entries(context, options, PACKAGE_TARNAME);
  ------------------
  |  |   38|      6|#define PACKAGE_TARNAME "irssi"
  ------------------
   32|      6|}
args_execute:
   35|      2|{
   36|      2|	GError* error = NULL;
   37|       |
   38|      2|	if (context == NULL)
  ------------------
  |  Branch (38:6): [True: 0, False: 2]
  ------------------
   39|      0|		return;
   40|       |
   41|      2|	g_option_context_parse(context, &argc, &argv, &error);
   42|      2|	g_option_context_free(context);
   43|      2|	context = NULL;
   44|       |
   45|      2|	if (error != NULL) {
  ------------------
  |  Branch (45:6): [True: 0, False: 2]
  ------------------
   46|      0|		printf("%s\n"
   47|      0|		       "Run '%s --help' to see a full list of "
   48|      0|		       "available command line options.\n",
   49|      0|		       error->message, argv[0]);
   50|      0|		exit(1);
   51|      0|	}
   52|      2|}

channel_setup_find:
  151|  19.0k|{
  152|  19.0k|	GSList *tmp;
  153|       |
  154|  19.0k|	g_return_val_if_fail(channel != NULL, NULL);
  ------------------
  |  Branch (154:2): [True: 19.0k, False: 0]
  |  Branch (154:2): [True: 19.0k, False: 0]
  |  Branch (154:2): [Folded, False: 19.0k]
  ------------------
  155|       |
  156|   171k|	for (tmp = setupchannels; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (156:28): [True: 152k, False: 19.0k]
  ------------------
  157|   152k|		CHANNEL_SETUP_REC *rec = tmp->data;
  158|       |
  159|   152k|		if (g_ascii_strcasecmp(rec->name, channel) == 0 &&
  ------------------
  |  Branch (159:7): [True: 0, False: 152k]
  ------------------
  160|      0|		    channel_chatnet_match(rec->chatnet, chatnet))
  ------------------
  |  |   31|      0|	((rec) == NULL || (rec)[0] == '\0' || \
  |  |  ------------------
  |  |  |  Branch (31:3): [True: 0, False: 0]
  |  |  |  Branch (31:20): [True: 0, False: 0]
  |  |  ------------------
  |  |   32|      0|	 ((chatnet) != NULL && g_ascii_strcasecmp(rec, chatnet) == 0))
  |  |  ------------------
  |  |  |  Branch (32:4): [True: 0, False: 0]
  |  |  |  Branch (32:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  161|      0|			return rec;
  162|   152k|	}
  163|       |
  164|  19.0k|	return NULL;
  165|  19.0k|}
channels_setup_init:
  226|      2|{
  227|      2|        setupchannels = NULL;
  228|      2|	source_host_ok = FALSE;
  229|       |
  230|       |	signal_add("setup reread channels", (SIGNAL_FUNC) channels_read_config);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  231|      2|}
channels-setup.c:channels_read_config:
  200|      2|{
  201|      2|	CONFIG_NODE *node;
  202|      2|	GSList *tmp;
  203|       |
  204|      2|	while (setupchannels != NULL)
  ------------------
  |  Branch (204:9): [True: 0, False: 2]
  ------------------
  205|      0|		channel_setup_destroy(setupchannels->data);
  206|       |
  207|       |	/* Read channels */
  208|      2|	node = iconfig_node_traverse("channels", FALSE);
  ------------------
  |  |   51|      2|#define iconfig_node_traverse(a, b) config_node_traverse(mainconfig, a, b)
  ------------------
  209|      2|	if (node != NULL) {
  ------------------
  |  Branch (209:6): [True: 2, False: 0]
  ------------------
  210|      2|		int i = 0;
  211|      2|		tmp = config_node_first(node->value);
  212|     20|		for (; tmp != NULL; tmp = config_node_next(tmp), i++) {
  ------------------
  |  Branch (212:10): [True: 18, False: 2]
  ------------------
  213|     18|			node = tmp->data;
  214|     18|			if (node->type != NODE_TYPE_BLOCK) {
  ------------------
  |  Branch (214:8): [True: 0, False: 18]
  ------------------
  215|      0|				g_critical("Expected block node at `channels[%d]' was of %s type. "
  ------------------
  |  Branch (215:5): [True: 0, False: 0]
  ------------------
  216|      0|				           "Corrupt config?",
  217|      0|				           i, node->type == NODE_TYPE_LIST ? "list" : "scalar");
  218|     18|			} else {
  219|     18|				channel_setup_read(node);
  220|     18|			}
  221|     18|		}
  222|      2|	}
  223|      2|}
channels-setup.c:channel_setup_read:
  168|     18|{
  169|     18|	CHANNEL_SETUP_REC *rec;
  170|     18|        CHATNET_REC *chatnetrec;
  171|     18|	char *channel, *chatnet;
  172|       |
  173|     18|	g_return_val_if_fail(node != NULL, NULL);
  ------------------
  |  Branch (173:2): [True: 18, False: 0]
  |  Branch (173:2): [True: 18, False: 0]
  |  Branch (173:2): [Folded, False: 18]
  ------------------
  174|       |
  175|     18|	channel = config_node_get_str(node, "name", NULL);
  176|     18|        chatnet = config_node_get_str(node, "chatnet", NULL);
  177|       |
  178|     18|	chatnetrec = chatnet == NULL ? NULL : chatnet_find(chatnet);
  ------------------
  |  Branch (178:15): [True: 0, False: 18]
  ------------------
  179|     18|	if (channel == NULL || chatnetrec == NULL) {
  ------------------
  |  Branch (179:6): [True: 0, False: 18]
  |  Branch (179:25): [True: 2, False: 16]
  ------------------
  180|       |		/* missing information.. */
  181|      2|		return NULL;
  182|      2|	}
  183|       |
  184|     16|	rec = CHAT_PROTOCOL(chatnetrec)->create_channel_setup();
  ------------------
  |  |   35|     16|	((object) == NULL ? chat_protocol_get_default() : \
  |  |  ------------------
  |  |  |  Branch (35:3): [True: 0, False: 16]
  |  |  ------------------
  |  |   36|     16|	chat_protocol_find_id((object)->chat_type))
  ------------------
  185|     16|	rec->type = module_get_uniq_id("CHANNEL SETUP", 0);
  186|     16|	rec->chat_type = CHAT_PROTOCOL(chatnetrec)->id;
  ------------------
  |  |   35|     16|	((object) == NULL ? chat_protocol_get_default() : \
  |  |  ------------------
  |  |  |  Branch (35:3): [True: 0, False: 16]
  |  |  ------------------
  |  |   36|     16|	chat_protocol_find_id((object)->chat_type))
  ------------------
  187|     16|	rec->autojoin = config_node_get_bool(node, "autojoin", FALSE);
  188|     16|	rec->name = g_strdup(channel);
  189|     16|	rec->chatnet = g_strdup(chatnetrec != NULL ? chatnetrec->name : chatnet);
  ------------------
  |  Branch (189:26): [True: 16, False: 0]
  ------------------
  190|     16|	rec->password = g_strdup(config_node_get_str(node, "password", NULL));
  191|     16|	rec->botmasks = g_strdup(config_node_get_str(node, "botmasks", NULL));
  192|     16|	rec->autosendcmd = g_strdup(config_node_get_str(node, "autosendcmd", NULL));
  193|       |
  194|     16|	setupchannels = g_slist_append(setupchannels, rec);
  195|     16|	signal_emit("channel setup created", 2, rec, node);
  196|     16|	return rec;
  197|     18|}

channel_init:
   45|   117k|{
   46|   117k|	g_return_if_fail(channel != NULL);
  ------------------
  |  Branch (46:2): [True: 117k, False: 0]
  |  Branch (46:2): [True: 117k, False: 0]
  |  Branch (46:2): [Folded, False: 117k]
  ------------------
   47|   117k|	g_return_if_fail(name != NULL);
  ------------------
  |  Branch (47:2): [True: 117k, False: 0]
  |  Branch (47:2): [True: 117k, False: 0]
  |  Branch (47:2): [Folded, False: 117k]
  ------------------
   48|   117k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (48:2): [True: 117k, False: 0]
  |  Branch (48:2): [True: 117k, False: 0]
  |  Branch (48:2): [Folded, False: 117k]
  ------------------
   49|       |
   50|   117k|	if (visible_name == NULL)
  ------------------
  |  Branch (50:6): [True: 112k, False: 4.67k]
  ------------------
   51|   112k|		visible_name = name;
   52|       |
   53|   117k|        MODULE_DATA_INIT(channel);
  ------------------
  |  |    5|   117k|        (rec)->module_data = g_hash_table_new(g_str_hash, g_str_equal)
  ------------------
   54|   117k|	channel->type = module_get_uniq_id_str("WINDOW ITEM TYPE", "CHANNEL");
   55|   117k|        channel->destroy = (void (*) (WI_ITEM_REC *)) channel_destroy;
   56|   117k|	channel->get_target = channel_get_target;
   57|   117k|        channel->get_join_data = get_join_data;
   58|       |
   59|   117k|	channel->chat_type = server->chat_type;
   60|   117k|	channel->server = server;
   61|   117k|	channel->name = g_strdup(name);
   62|   117k|	channel->visible_name = g_strdup(visible_name);
   63|   117k|	channel->mode = g_strdup("");
   64|   117k|	channel->createtime = time(NULL);
   65|       |
   66|   117k|	channels = g_slist_append(channels, channel);
   67|   117k|	server->channels = g_slist_append(server->channels, channel);
   68|       |
   69|       |	signal_emit("channel created", 2, channel, GINT_TO_POINTER(automatic));
   70|   117k|}
channel_destroy:
   73|   234k|{
   74|   234k|	g_return_if_fail(IS_CHANNEL(channel));
  ------------------
  |  Branch (74:2): [True: 234k, False: 0]
  |  Branch (74:2): [True: 234k, False: 0]
  |  Branch (74:2): [True: 234k, False: 0]
  |  Branch (74:2): [Folded, False: 234k]
  ------------------
   75|       |
   76|   234k|	if (channel->destroying) return;
  ------------------
  |  Branch (76:6): [True: 117k, False: 117k]
  ------------------
   77|   117k|	channel->destroying = TRUE;
   78|       |
   79|   117k|	channels = g_slist_remove(channels, channel);
   80|   117k|	channel->server->channels =
   81|   117k|		g_slist_remove(channel->server->channels, channel);
   82|       |
   83|   117k|	signal_emit("channel destroyed", 1, channel);
   84|       |
   85|   117k|        MODULE_DATA_DEINIT(channel);
  ------------------
  |  |    8|   117k|        g_hash_table_destroy((rec)->module_data)
  ------------------
   86|   117k|	g_free_not_null(channel->hilight_color);
  ------------------
  |  |   64|   117k|#define g_free_not_null(a) g_free(a)
  ------------------
   87|   117k|	g_free_not_null(channel->topic);
  ------------------
  |  |   64|   117k|#define g_free_not_null(a) g_free(a)
  ------------------
   88|   117k|	g_free_not_null(channel->topic_by);
  ------------------
  |  |   64|   117k|#define g_free_not_null(a) g_free(a)
  ------------------
   89|   117k|	g_free_not_null(channel->key);
  ------------------
  |  |   64|   117k|#define g_free_not_null(a) g_free(a)
  ------------------
   90|   117k|	g_free(channel->mode);
   91|   117k|	g_free(channel->name);
   92|   117k|	g_free(channel->visible_name);
   93|       |
   94|   117k|        channel->type = 0;
   95|   117k|	g_free(channel);
   96|   117k|}
channel_find:
  121|  1.82M|{
  122|  1.82M|	g_return_val_if_fail(server == NULL || IS_SERVER(server), NULL);
  ------------------
  |  Branch (122:2): [True: 1.82M, False: 0]
  |  Branch (122:2): [True: 0, False: 1.82M]
  |  Branch (122:2): [True: 1.82M, False: 0]
  |  Branch (122:2): [True: 1.82M, False: 0]
  |  Branch (122:2): [Folded, False: 1.82M]
  ------------------
  123|  1.82M|	g_return_val_if_fail(name != NULL, NULL);
  ------------------
  |  Branch (123:2): [True: 1.82M, False: 0]
  |  Branch (123:2): [True: 1.82M, False: 0]
  |  Branch (123:2): [Folded, False: 1.82M]
  ------------------
  124|       |
  125|  1.82M|	if (server != NULL)
  ------------------
  |  Branch (125:6): [True: 1.82M, False: 0]
  ------------------
  126|  1.82M|		return channel_find_server(server, name);
  127|       |
  128|       |	/* find from any server */
  129|      0|	return i_slist_foreach_find(servers, (FOREACH_FIND_FUNC) channel_find_server,
  130|      0|	                            (void *) name);
  131|  1.82M|}
channel_send_autocommands:
  232|  5.26k|{
  233|  5.26k|	CHANNEL_SETUP_REC *rec;
  234|       |
  235|  5.26k|	g_return_if_fail(IS_CHANNEL(channel));
  ------------------
  |  Branch (235:2): [True: 5.26k, False: 0]
  |  Branch (235:2): [True: 5.26k, False: 0]
  |  Branch (235:2): [True: 5.26k, False: 0]
  |  Branch (235:2): [Folded, False: 5.26k]
  ------------------
  236|       |
  237|  5.26k|	if (channel->session_rejoin)
  ------------------
  |  Branch (237:6): [True: 0, False: 5.26k]
  ------------------
  238|      0|		return;
  239|       |
  240|  5.26k|	rec = channel_setup_find(channel->name, channel->server->connrec->chatnet);
  241|  5.26k|	if (rec == NULL || rec->autosendcmd == NULL || !*rec->autosendcmd)
  ------------------
  |  Branch (241:6): [True: 5.26k, False: 0]
  |  Branch (241:21): [True: 0, False: 0]
  |  Branch (241:49): [True: 0, False: 0]
  ------------------
  242|  5.26k|		return;
  243|       |
  244|       |	/* if the autosendcmd alone (with no -bots parameter) has been
  245|       |	 * specified then send it right after joining the channel, when
  246|       |	 * the WHO list hasn't been yet retrieved.
  247|       |	 * Depending on the value of the 'channel_max_who_sync' option
  248|       |	 * the WHO list might not be retrieved after the join event. */
  249|       |
  250|      0|	if (rec->botmasks == NULL || !*rec->botmasks) {
  ------------------
  |  Branch (250:6): [True: 0, False: 0]
  |  Branch (250:31): [True: 0, False: 0]
  ------------------
  251|       |		/* just send the command. */
  252|      0|		eval_special_string(rec->autosendcmd, "", channel->server, channel);
  253|      0|	}
  254|      0|}
channels_init:
  297|      2|{
  298|      2|	channels_setup_init();
  299|       |
  300|       |	signal_add("event connected", (SIGNAL_FUNC) event_connected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  301|      2|}
channels.c:channel_get_target:
   39|  1.35k|{
   40|  1.35k|	return ((CHANNEL_REC *) item)->name;
   41|  1.35k|}
channels.c:channel_find_server:
  100|  1.82M|{
  101|  1.82M|	GSList *tmp;
  102|       |
  103|  1.82M|	g_return_val_if_fail(IS_SERVER(server), NULL);
  ------------------
  |  Branch (103:2): [True: 1.82M, False: 0]
  |  Branch (103:2): [True: 1.82M, False: 0]
  |  Branch (103:2): [True: 1.82M, False: 0]
  |  Branch (103:2): [Folded, False: 1.82M]
  ------------------
  104|       |
  105|  1.82M|	if (server->channel_find_func != NULL) {
  ------------------
  |  Branch (105:6): [True: 1.82M, False: 0]
  ------------------
  106|       |		/* use the server specific channel find function */
  107|  1.82M|		return server->channel_find_func(server, name);
  108|  1.82M|	}
  109|       |
  110|      0|	for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (110:31): [True: 0, False: 0]
  ------------------
  111|      0|		CHANNEL_REC *rec = tmp->data;
  112|       |
  113|      0|		if (g_ascii_strcasecmp(name, rec->name) == 0)
  ------------------
  |  Branch (113:7): [True: 0, False: 0]
  ------------------
  114|      0|			return rec;
  115|      0|	}
  116|       |
  117|      0|	return NULL;
  118|      0|}
channels.c:event_connected:
  180|  21.8k|{
  181|  21.8k|	GString *chans;
  182|  21.8k|	GSList *tmp, *chatnet_servers;
  183|       |
  184|  21.8k|	g_return_if_fail(SERVER(server));
  ------------------
  |  Branch (184:2): [True: 21.8k, False: 0]
  |  Branch (184:2): [True: 21.8k, False: 0]
  |  Branch (184:2): [Folded, False: 21.8k]
  ------------------
  185|       |
  186|  21.8k|	if (server->connrec->reconnection ||
  ------------------
  |  Branch (186:6): [True: 0, False: 21.8k]
  ------------------
  187|  21.8k|	    server->connrec->no_autojoin_channels)
  ------------------
  |  Branch (187:6): [True: 0, False: 21.8k]
  ------------------
  188|      0|		return;
  189|       |
  190|       |	/* get list of servers in same chat network */
  191|  21.8k|	chatnet_servers = server->connrec->chatnet == NULL ? NULL:
  ------------------
  |  Branch (191:20): [True: 21.8k, False: 0]
  ------------------
  192|  21.8k|		servers_find_chatnet_except(server);
  193|       |
  194|       |	/* join to the channels marked with autojoin in setup */
  195|  21.8k|	chans = g_string_new(NULL);
  196|   196k|	for (tmp = setupchannels; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (196:28): [True: 174k, False: 21.8k]
  ------------------
  197|   174k|		CHANNEL_SETUP_REC *rec = tmp->data;
  198|       |
  199|   174k|		if (!rec->autojoin ||
  ------------------
  |  Branch (199:7): [True: 174k, False: 0]
  ------------------
  200|      0|		    !channel_chatnet_match(rec->chatnet,
  ------------------
  |  |   31|      0|	((rec) == NULL || (rec)[0] == '\0' || \
  |  |  ------------------
  |  |  |  Branch (31:3): [True: 0, False: 0]
  |  |  |  Branch (31:20): [True: 0, False: 0]
  |  |  ------------------
  |  |   32|      0|	 ((chatnet) != NULL && g_ascii_strcasecmp(rec, chatnet) == 0))
  |  |  ------------------
  |  |  |  Branch (32:4): [True: 0, False: 0]
  |  |  |  Branch (32:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  201|   174k|					   server->connrec->chatnet))
  202|   174k|			continue;
  203|       |
  204|       |		/* check that we haven't already joined this channel in
  205|       |		   same chat network connection.. */
  206|      0|                if (channel_find_servers(chatnet_servers, rec->name) == NULL)
  ------------------
  |  Branch (206:21): [True: 0, False: 0]
  ------------------
  207|      0|			g_string_append_printf(chans, "%s,", rec->name);
  208|      0|	}
  209|  21.8k|        g_slist_free(chatnet_servers);
  210|       |
  211|  21.8k|	if (chans->len > 0) {
  ------------------
  |  Branch (211:6): [True: 0, False: 21.8k]
  ------------------
  212|      0|		g_string_truncate(chans, chans->len-1);
  213|      0|		server->channels_join(server, chans->str, TRUE);
  214|      0|	}
  215|       |
  216|       |	g_string_free(chans, TRUE);
  217|  21.8k|}

chat_commands_init:
  467|      2|{
  468|      2|	settings_add_str("misc", "quit_message", "leaving");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  469|       |
  470|      2|	command_bind("server", NULL, (SIGNAL_FUNC) cmd_server);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  471|      2|	command_bind("server connect", NULL, (SIGNAL_FUNC) cmd_server_connect);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  472|      2|	command_bind("connect", NULL, (SIGNAL_FUNC) cmd_connect);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  473|      2|	command_bind("disconnect", NULL, (SIGNAL_FUNC) cmd_disconnect);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  474|      2|	command_bind("quit", NULL, (SIGNAL_FUNC) cmd_quit);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  475|      2|	command_bind("msg", NULL, (SIGNAL_FUNC) cmd_msg);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  476|      2|	command_bind("foreach", NULL, (SIGNAL_FUNC) cmd_foreach);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  477|      2|	command_bind("foreach server", NULL, (SIGNAL_FUNC) cmd_foreach_server);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  478|      2|	command_bind("foreach channel", NULL, (SIGNAL_FUNC) cmd_foreach_channel);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  479|      2|	command_bind("foreach query", NULL, (SIGNAL_FUNC) cmd_foreach_query);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  480|       |
  481|      2|	signal_add("server sendmsg", (SIGNAL_FUNC) sig_server_sendmsg);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  482|       |
  483|      2|	command_set_options(
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  484|      2|	    "connect",
  485|      2|	    "4 6 !! -network ~ssl ~+ssl_cert ~+ssl_pkey ~+ssl_pass ~ssl_verify ~+ssl_cafile "
  486|      2|	    "~+ssl_capath ~+ssl_ciphers ~+ssl_pinned_cert ~+ssl_pinned_pubkey tls notls +tls_cert "
  487|      2|	    "+tls_pkey +tls_pass tls_verify notls_verify +tls_cafile +tls_capath +tls_ciphers "
  488|      2|	    "+tls_pinned_cert +tls_pinned_pubkey +host noproxy -rawlog noautosendcmd");
  489|      2|	command_set_options("msg", "channel nick");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  490|      2|}

chat_protocol_check_cast:
   36|  20.3M|{
   37|  20.3M|	return object == NULL ||
  ------------------
  |  Branch (37:9): [True: 194k, False: 20.1M]
  ------------------
   38|  20.1M|		chat_protocol_lookup(id) !=
  ------------------
  |  Branch (38:3): [True: 0, False: 20.1M]
  ------------------
   39|  20.3M|		G_STRUCT_MEMBER(int, object, type_pos) ? NULL : object;
   40|  20.3M|}
chat_protocol_lookup:
   44|  20.1M|{
   45|  20.1M|	CHAT_PROTOCOL_REC *rec;
   46|       |
   47|  20.1M|	g_return_val_if_fail(name != NULL, -1);
  ------------------
  |  Branch (47:2): [True: 20.1M, False: 0]
  |  Branch (47:2): [True: 20.1M, False: 0]
  |  Branch (47:2): [Folded, False: 20.1M]
  ------------------
   48|       |
   49|  20.1M|	rec = chat_protocol_find(name);
   50|  20.1M|	return rec == NULL ? -1 : rec->not_initialized ? CHAT_PROTOCOL_NOT_INITIALIZED : rec->id;
  ------------------
  |  |   38|      0|#define CHAT_PROTOCOL_NOT_INITIALIZED -2
  ------------------
  |  Branch (50:9): [True: 114, False: 20.1M]
  |  Branch (50:28): [True: 0, False: 20.1M]
  ------------------
   51|  20.1M|}
chat_protocol_find:
   54|  20.2M|{
   55|  20.2M|	GSList *tmp;
   56|       |
   57|  20.2M|	g_return_val_if_fail(name != NULL, NULL);
  ------------------
  |  Branch (57:2): [True: 20.2M, False: 0]
  |  Branch (57:2): [True: 20.2M, False: 0]
  |  Branch (57:2): [Folded, False: 20.2M]
  ------------------
   58|       |
   59|  20.2M|	for (tmp = chat_protocols; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (59:29): [True: 20.2M, False: 118]
  ------------------
   60|  20.2M|		CHAT_PROTOCOL_REC *rec = tmp->data;
   61|       |
   62|  20.2M|		if (g_ascii_strcasecmp(rec->name, name) == 0)
  ------------------
  |  Branch (62:7): [True: 20.2M, False: 2]
  ------------------
   63|  20.2M|			return rec;
   64|  20.2M|	}
   65|       |
   66|    118|	return NULL;
   67|  20.2M|}
chat_protocol_find_id:
   70|  59.1k|{
   71|  59.1k|	GSList *tmp;
   72|       |
   73|  59.1k|	g_return_val_if_fail(id > 0, NULL);
  ------------------
  |  Branch (73:2): [True: 59.1k, False: 0]
  |  Branch (73:2): [True: 59.1k, False: 0]
  |  Branch (73:2): [Folded, False: 59.1k]
  ------------------
   74|       |
   75|  59.1k|	for (tmp = chat_protocols; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (75:29): [True: 59.1k, False: 0]
  ------------------
   76|  59.1k|		CHAT_PROTOCOL_REC *rec = tmp->data;
   77|       |
   78|  59.1k|		if (rec->id == id)
  ------------------
  |  Branch (78:7): [True: 59.1k, False: 0]
  ------------------
   79|  59.1k|			return rec;
   80|  59.1k|	}
   81|       |
   82|      0|	return NULL;
   83|  59.1k|}
chat_protocol_register:
  120|      2|{
  121|      2|	CHAT_PROTOCOL_REC *newrec;
  122|      2|        int created;
  123|       |
  124|      2|	g_return_val_if_fail(rec != NULL, NULL);
  ------------------
  |  Branch (124:2): [True: 2, False: 0]
  |  Branch (124:2): [True: 2, False: 0]
  |  Branch (124:2): [Folded, False: 2]
  ------------------
  125|       |
  126|      2|	newrec = chat_protocol_find(rec->name);
  127|      2|	if (newrec != NULL && newrec->not_initialized) {
  ------------------
  |  Branch (127:6): [True: 0, False: 2]
  |  Branch (127:24): [True: 0, False: 0]
  ------------------
  128|      0|		chat_protocol_destroy(newrec);
  129|      0|		newrec = NULL;
  130|      0|	}
  131|      2|	created = newrec == NULL;
  132|      2|	if (newrec == NULL) {
  ------------------
  |  Branch (132:6): [True: 2, False: 0]
  ------------------
  133|      2|		newrec = g_new0(CHAT_PROTOCOL_REC, 1);
  ------------------
  |  Branch (133:12): [True: 2, False: 0]
  |  Branch (133:12): [True: 0, False: 2]
  ------------------
  134|      2|		chat_protocols = g_slist_append(chat_protocols, newrec);
  135|      2|	} else {
  136|       |		/* updating existing protocol */
  137|      0|                g_free(newrec->name);
  138|      0|	}
  139|       |
  140|      2|	memcpy(newrec, rec, sizeof(CHAT_PROTOCOL_REC));
  141|      2|	newrec->id = module_get_uniq_id_str("PROTOCOL", rec->name);
  142|      2|	newrec->name = g_strdup(rec->name);
  143|       |
  144|      2|	if (default_proto == NULL)
  ------------------
  |  Branch (144:6): [True: 2, False: 0]
  ------------------
  145|      2|                chat_protocol_set_default(newrec);
  146|       |
  147|      2|        if (created)
  ------------------
  |  Branch (147:13): [True: 2, False: 0]
  ------------------
  148|      2|		signal_emit("chat protocol created", 1, newrec);
  149|      0|        else
  150|      0|		signal_emit("chat protocol updated", 1, newrec);
  151|      2|        return newrec;
  152|      2|}
chat_protocol_set_default:
  173|      2|{
  174|      2|        default_proto = rec;
  175|      2|}
chat_protocols_init:
  226|      2|{
  227|      2|	default_proto = NULL;
  228|       |	chat_protocols = NULL;
  229|      2|}

chatnet_find:
  102|  88.2k|{
  103|  88.2k|	GSList *tmp;
  104|       |
  105|  88.2k|	g_return_val_if_fail(name != NULL, NULL);
  ------------------
  |  Branch (105:2): [True: 88.2k, False: 0]
  |  Branch (105:2): [True: 88.2k, False: 0]
  |  Branch (105:2): [Folded, False: 88.2k]
  ------------------
  106|       |
  107|  1.14M|	for (tmp = chatnets; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (107:23): [True: 1.05M, False: 88.2k]
  ------------------
  108|  1.05M|		CHATNET_REC *rec = tmp->data;
  109|       |
  110|  1.05M|		if (g_ascii_strcasecmp(rec->name, name) == 0)
  ------------------
  |  Branch (110:7): [True: 42, False: 1.05M]
  ------------------
  111|     42|			return rec;
  112|  1.05M|	}
  113|       |
  114|  88.2k|	return NULL;
  115|  88.2k|}
chatnet_find_unavailable:
  118|      2|{
  119|      2|	CHAT_PROTOCOL_REC *proto;
  120|       |
  121|      2|	if (i_slist_find_icase_string(chatnets_unavailable, name) != NULL)
  ------------------
  |  Branch (121:6): [True: 2, False: 0]
  ------------------
  122|      2|		return TRUE;
  123|       |
  124|      0|	proto = CHAT_PROTOCOL(chatnet_find(name));
  ------------------
  |  |   35|      0|	((object) == NULL ? chat_protocol_get_default() : \
  |  |  ------------------
  |  |  |  Branch (35:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|	chat_protocol_find_id((object)->chat_type))
  ------------------
  125|       |
  126|      0|	if (proto == NULL || proto->not_initialized)
  ------------------
  |  Branch (126:6): [True: 0, False: 0]
  |  Branch (126:23): [True: 0, False: 0]
  ------------------
  127|      0|		return TRUE;
  128|       |
  129|      0|	return FALSE;
  130|      0|}
chatnets_init:
  210|      2|{
  211|      2|	chatnets = NULL;
  212|       |
  213|      2|	signal_add_first("event connected", (SIGNAL_FUNC) sig_connected);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  214|       |	signal_add("setup reread chatnets", (SIGNAL_FUNC) read_chatnets);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  215|      2|}
chatnets.c:sig_connected:
  133|  21.8k|{
  134|  21.8k|	CHATNET_REC *rec;
  135|       |
  136|  21.8k|	g_return_if_fail(IS_SERVER(server));
  ------------------
  |  Branch (136:2): [True: 21.8k, False: 0]
  |  Branch (136:2): [True: 21.8k, False: 0]
  |  Branch (136:2): [True: 21.8k, False: 0]
  |  Branch (136:2): [Folded, False: 21.8k]
  ------------------
  137|       |
  138|  21.8k|	if (server->connrec->chatnet == NULL || server->session_reconnect)
  ------------------
  |  Branch (138:6): [True: 21.8k, False: 0]
  |  Branch (138:42): [True: 0, False: 0]
  ------------------
  139|  21.8k|		return;
  140|       |
  141|      0|	rec = chatnet_find(server->connrec->chatnet);
  142|      0|	if (!server->connrec->no_autosendcmd && rec != NULL && rec->autosendcmd)
  ------------------
  |  Branch (142:6): [True: 0, False: 0]
  |  Branch (142:42): [True: 0, False: 0]
  |  Branch (142:57): [True: 0, False: 0]
  ------------------
  143|      0|		eval_special_string(rec->autosendcmd, "", server, NULL);
  144|      0|}
chatnets.c:read_chatnets:
  188|      2|{
  189|      2|	CONFIG_NODE *node;
  190|      2|        GSList *tmp;
  191|       |
  192|      2|	while (chatnets != NULL)
  ------------------
  |  Branch (192:9): [True: 0, False: 2]
  ------------------
  193|      0|                chatnet_destroy(chatnets->data);
  194|       |
  195|      2|	while (chatnets_unavailable != NULL) {
  ------------------
  |  Branch (195:9): [True: 0, False: 2]
  ------------------
  196|      0|		char *name = chatnets_unavailable->data;
  197|      0|		chatnets_unavailable = g_slist_remove(chatnets_unavailable, name);
  198|      0|		g_free(name);
  199|      0|	}
  200|       |
  201|      2|	node = iconfig_node_traverse("chatnets", FALSE);
  ------------------
  |  |   51|      2|#define iconfig_node_traverse(a, b) config_node_traverse(mainconfig, a, b)
  ------------------
  202|      2|	if (node != NULL) {
  ------------------
  |  Branch (202:6): [True: 2, False: 0]
  ------------------
  203|      2|		tmp = config_node_first(node->value);
  204|     28|		for (; tmp != NULL; tmp = config_node_next(tmp))
  ------------------
  |  Branch (204:10): [True: 26, False: 2]
  ------------------
  205|     26|                        chatnet_read(tmp->data);
  206|      2|	}
  207|      2|}
chatnets.c:chatnet_read:
  147|     26|{
  148|     26|        CHAT_PROTOCOL_REC *proto;
  149|     26|	CHATNET_REC *rec;
  150|     26|        char *type;
  151|       |
  152|     26|	if (node == NULL || node->key == NULL || !is_node_list(node))
  ------------------
  |  |   15|     26|        ((a)->type == NODE_TYPE_BLOCK || (a)->type == NODE_TYPE_LIST)
  |  |  ------------------
  |  |  |  Branch (15:10): [True: 26, False: 0]
  |  |  |  Branch (15:42): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (152:6): [True: 0, False: 26]
  |  Branch (152:22): [True: 0, False: 26]
  ------------------
  153|      0|		return;
  154|       |
  155|     26|	type = config_node_get_str(node, "type", NULL);
  156|     26|	if (type == NULL) {
  ------------------
  |  Branch (156:6): [True: 0, False: 26]
  ------------------
  157|      0|		proto = chat_protocol_get_default();
  158|     26|	} else {
  159|     26|		proto = chat_protocol_find(type);
  160|     26|	}
  161|       |
  162|     26|	if (proto == NULL) {
  ------------------
  |  Branch (162:6): [True: 2, False: 24]
  ------------------
  163|       |		/* protocol not loaded */
  164|      2|		if (i_slist_find_icase_string(chatnets_unavailable, node->key) == NULL)
  ------------------
  |  Branch (164:7): [True: 2, False: 0]
  ------------------
  165|      2|			chatnets_unavailable =
  166|      2|			    g_slist_append(chatnets_unavailable, g_strdup(node->key));
  167|       |
  168|      2|		return;
  169|     24|	} else if (type == NULL) {
  ------------------
  |  Branch (169:13): [True: 0, False: 24]
  ------------------
  170|      0|		iconfig_node_set_str(node, "type", proto->name);
  ------------------
  |  |   52|      0|#define iconfig_node_set_str(a, b, c) config_node_set_str(mainconfig, a, b, c)
  ------------------
  171|      0|	}
  172|       |
  173|     24|	rec = proto->create_chatnet();
  174|     24|	rec->type = module_get_uniq_id("CHATNET", 0);
  175|     24|	rec->chat_type = proto->id;
  176|     24|	rec->name = g_strdup(node->key);
  177|     24|	rec->nick = g_strdup(config_node_get_str(node, "nick", NULL));
  178|     24|	rec->username = g_strdup(config_node_get_str(node, "username", NULL));
  179|     24|	rec->realname = g_strdup(config_node_get_str(node, "realname", NULL));
  180|     24|	rec->own_host = g_strdup(config_node_get_str(node, "host", NULL));
  181|     24|	rec->autosendcmd = g_strdup(config_node_get_str(node, "autosendcmd", NULL));
  182|       |
  183|     24|	chatnets = g_slist_append(chatnets, rec);
  184|     24|        signal_emit("chatnet read", 2, rec, node);
  185|     24|}

command_find:
   42|  2.23k|{
   43|  2.23k|	GSList *tmp;
   44|       |
   45|  2.23k|	g_return_val_if_fail(cmd != NULL, NULL);
  ------------------
  |  Branch (45:2): [True: 2.23k, False: 0]
  |  Branch (45:2): [True: 2.23k, False: 0]
  |  Branch (45:2): [Folded, False: 2.23k]
  ------------------
   46|       |
   47|   277k|	for (tmp = commands; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (47:23): [True: 277k, False: 328]
  ------------------
   48|   277k|		COMMAND_REC *rec = tmp->data;
   49|       |
   50|   277k|		if (g_ascii_strcasecmp(rec->cmd, cmd) == 0)
  ------------------
  |  Branch (50:7): [True: 1.90k, False: 275k]
  ------------------
   51|  1.90k|			return rec;
   52|   277k|	}
   53|       |
   54|    328|	return NULL;
   55|  2.23k|}
command_bind_full:
  145|    362|{
  146|    362|	COMMAND_REC *rec;
  147|    362|	COMMAND_MODULE_REC *modrec;
  148|    362|        COMMAND_CALLBACK_REC *cb;
  149|    362|	char *str;
  150|       |
  151|    362|	g_return_if_fail(module != NULL);
  ------------------
  |  Branch (151:2): [True: 362, False: 0]
  |  Branch (151:2): [True: 362, False: 0]
  |  Branch (151:2): [Folded, False: 362]
  ------------------
  152|    362|	g_return_if_fail(cmd != NULL);
  ------------------
  |  Branch (152:2): [True: 362, False: 0]
  |  Branch (152:2): [True: 362, False: 0]
  |  Branch (152:2): [Folded, False: 362]
  ------------------
  153|       |
  154|    362|	rec = command_find(cmd);
  155|    362|	if (rec == NULL) {
  ------------------
  |  Branch (155:6): [True: 328, False: 34]
  ------------------
  156|    328|		rec = g_new0(COMMAND_REC, 1);
  ------------------
  |  Branch (156:9): [True: 328, False: 0]
  |  Branch (156:9): [True: 0, False: 328]
  ------------------
  157|    328|		rec->cmd = g_strdup(cmd);
  158|    328|		rec->category = category == NULL ? NULL : g_strdup(category);
  ------------------
  |  Branch (158:19): [True: 328, False: 0]
  ------------------
  159|    328|		commands = g_slist_append(commands, rec);
  160|    328|	}
  161|    362|        modrec = command_module_get(rec, module, protocol);
  162|       |
  163|    362|	cb = g_new0(COMMAND_CALLBACK_REC, 1);
  ------------------
  |  Branch (163:7): [True: 362, False: 0]
  |  Branch (163:7): [True: 0, False: 362]
  ------------------
  164|    362|	cb->func = func;
  165|    362|	cb->user_data = user_data;
  166|    362|	modrec->callbacks = g_slist_append(modrec->callbacks, cb);
  167|       |
  168|    362|	if (func != NULL) {
  ------------------
  |  Branch (168:6): [True: 362, False: 0]
  ------------------
  169|    362|		str = g_strconcat("command ", cmd, NULL);
  170|    362|		signal_add_full(module, priority, str, func, user_data);
  171|    362|		g_free(str);
  172|    362|	}
  173|       |
  174|    362|	signal_emit("commandlist new", 1, rec);
  175|    362|}
command_set_options_module:
  460|     74|{
  461|     74|	COMMAND_REC *rec;
  462|     74|	COMMAND_MODULE_REC *modrec;
  463|     74|        int reload;
  464|       |
  465|     74|	g_return_if_fail(module != NULL);
  ------------------
  |  Branch (465:2): [True: 74, False: 0]
  |  Branch (465:2): [True: 74, False: 0]
  |  Branch (465:2): [Folded, False: 74]
  ------------------
  466|     74|	g_return_if_fail(cmd != NULL);
  ------------------
  |  Branch (466:2): [True: 74, False: 0]
  |  Branch (466:2): [True: 74, False: 0]
  |  Branch (466:2): [Folded, False: 74]
  ------------------
  467|     74|	g_return_if_fail(options != NULL);
  ------------------
  |  Branch (467:2): [True: 74, False: 0]
  |  Branch (467:2): [True: 74, False: 0]
  |  Branch (467:2): [Folded, False: 74]
  ------------------
  468|       |
  469|     74|        rec = command_find(cmd);
  470|     74|	g_return_if_fail(rec != NULL);
  ------------------
  |  Branch (470:2): [True: 74, False: 0]
  |  Branch (470:2): [True: 74, False: 0]
  |  Branch (470:2): [Folded, False: 74]
  ------------------
  471|     74|        modrec = command_module_get(rec, module, -1);
  472|       |
  473|     74|	reload = modrec->options != NULL;
  474|     74|        if (reload) {
  ------------------
  |  Branch (474:13): [True: 0, False: 74]
  ------------------
  475|       |		/* options already set for the module ..
  476|       |		   we need to recalculate everything */
  477|      0|		g_free(modrec->options);
  478|      0|	}
  479|       |
  480|     74|	modrec->options = g_strdup(options);
  481|       |
  482|     74|        if (reload)
  ------------------
  |  Branch (482:13): [True: 0, False: 74]
  ------------------
  483|      0|		command_update_options(rec);
  484|     74|        else
  485|     74|		command_calc_options(rec, options);
  486|     74|}
cmd_get_param:
  489|   109k|{
  490|   109k|	char *pos;
  491|       |
  492|   109k|	g_return_val_if_fail(data != NULL, NULL);
  ------------------
  |  Branch (492:2): [True: 109k, False: 0]
  |  Branch (492:2): [True: 109k, False: 0]
  |  Branch (492:2): [Folded, False: 109k]
  ------------------
  493|   109k|	g_return_val_if_fail(*data != NULL, NULL);
  ------------------
  |  Branch (493:2): [True: 109k, False: 0]
  |  Branch (493:2): [True: 109k, False: 0]
  |  Branch (493:2): [Folded, False: 109k]
  ------------------
  494|       |
  495|   112k|	while (**data == ' ') (*data)++;
  ------------------
  |  Branch (495:9): [True: 3.32k, False: 109k]
  ------------------
  496|   109k|	pos = *data;
  497|       |
  498|  16.5M|	while (**data != '\0' && **data != ' ') (*data)++;
  ------------------
  |  Branch (498:9): [True: 16.4M, False: 94.1k]
  |  Branch (498:27): [True: 16.4M, False: 15.2k]
  ------------------
  499|   109k|	if (**data == ' ') *(*data)++ = '\0';
  ------------------
  |  Branch (499:6): [True: 15.2k, False: 94.1k]
  ------------------
  500|       |
  501|   109k|	return pos;
  502|   109k|}
cmd_get_quoted_param:
  505|  3.59k|{
  506|  3.59k|	char *pos, quote;
  507|       |
  508|  3.59k|	g_return_val_if_fail(data != NULL, NULL);
  ------------------
  |  Branch (508:2): [True: 3.59k, False: 0]
  |  Branch (508:2): [True: 3.59k, False: 0]
  |  Branch (508:2): [Folded, False: 3.59k]
  ------------------
  509|  3.59k|	g_return_val_if_fail(*data != NULL, NULL);
  ------------------
  |  Branch (509:2): [True: 3.59k, False: 0]
  |  Branch (509:2): [True: 3.59k, False: 0]
  |  Branch (509:2): [Folded, False: 3.59k]
  ------------------
  510|       |
  511|  3.59k|	while (**data == ' ') (*data)++;
  ------------------
  |  Branch (511:9): [True: 0, False: 3.59k]
  ------------------
  512|  3.59k|	if (**data != '\'' && **data != '"')
  ------------------
  |  Branch (512:6): [True: 3.59k, False: 0]
  |  Branch (512:24): [True: 1.79k, False: 1.79k]
  ------------------
  513|  1.79k|		return cmd_get_param(data);
  514|       |
  515|  1.79k|	quote = **data; (*data)++;
  516|       |
  517|  1.79k|	pos = *data;
  518|  39.5k|	while (**data != '\0' && (**data != quote ||
  ------------------
  |  Branch (518:9): [True: 39.5k, False: 0]
  |  Branch (518:28): [True: 37.7k, False: 1.79k]
  ------------------
  519|  37.7k|				  ((*data)[1] != ' ' && (*data)[1] != '\0'))) {
  ------------------
  |  Branch (519:8): [True: 0, False: 1.79k]
  |  Branch (519:29): [True: 0, False: 0]
  ------------------
  520|  37.7k|		if (**data == '\\' && (*data)[1] != '\0')
  ------------------
  |  Branch (520:7): [True: 0, False: 37.7k]
  |  Branch (520:25): [True: 0, False: 0]
  ------------------
  521|      0|                        memmove(*data, (*data)+1, strlen(*data));
  522|  37.7k|		(*data)++;
  523|  37.7k|	}
  524|       |
  525|  1.79k|	if (**data == quote) {
  ------------------
  |  Branch (525:6): [True: 1.79k, False: 0]
  ------------------
  526|  1.79k|		*(*data)++ = '\0';
  527|  1.79k|		if (**data == ' ')
  ------------------
  |  Branch (527:7): [True: 1.79k, False: 0]
  ------------------
  528|  1.79k|			(*data)++;
  529|  1.79k|	}
  530|       |
  531|  1.79k|	return pos;
  532|  3.59k|}
cmd_get_params:
  716|  1.79k|{
  717|  1.79k|        WI_ITEM_REC *item;
  718|  1.79k|	CMD_TEMP_REC *rec;
  719|  1.79k|	GHashTable **opthash;
  720|  1.79k|	char **str, *arg, *datad;
  721|  1.79k|	va_list args;
  722|  1.79k|	int cnt, error, ignore_unknown, require_name;
  723|       |
  724|  1.79k|	g_return_val_if_fail(data != NULL, FALSE);
  ------------------
  |  Branch (724:2): [True: 1.79k, False: 0]
  |  Branch (724:2): [True: 1.79k, False: 0]
  |  Branch (724:2): [Folded, False: 1.79k]
  ------------------
  725|       |
  726|  1.79k|	va_start(args, count);
  727|       |
  728|  1.79k|	rec = g_new0(CMD_TEMP_REC, 1);
  ------------------
  |  Branch (728:8): [True: 1.79k, False: 0]
  |  Branch (728:8): [True: 0, False: 1.79k]
  ------------------
  729|  1.79k|	rec->data = g_strdup(data);
  730|  1.79k|	*free_me = rec;
  731|       |
  732|  1.79k|        datad = rec->data;
  733|  1.79k|	error = FALSE;
  734|       |
  735|  1.79k|	item = (count & PARAM_FLAG_OPTCHAN) == 0 ? NULL:
  ------------------
  |  |  153|  1.79k|#define PARAM_FLAG_OPTCHAN 0x00010000
  ------------------
  |  Branch (735:9): [True: 1.79k, False: 0]
  ------------------
  736|  1.79k|		(WI_ITEM_REC *) va_arg(args, WI_ITEM_REC *);
  737|       |
  738|  1.79k|	if (count & PARAM_FLAG_OPTIONS) {
  ------------------
  |  |  149|  1.79k|#define PARAM_FLAG_OPTIONS 0x00004000
  ------------------
  |  Branch (738:6): [True: 1.79k, False: 0]
  ------------------
  739|  1.79k|		arg = (char *) va_arg(args, char *);
  740|  1.79k|		opthash = (GHashTable **) va_arg(args, GHashTable **);
  741|       |
  742|  1.79k|		rec->options = *opthash =
  743|  1.79k|		    g_hash_table_new((GHashFunc) i_istr_hash, (GCompareFunc) i_istr_equal);
  744|       |
  745|  1.79k|		ignore_unknown = count & PARAM_FLAG_UNKNOWN_OPTIONS;
  ------------------
  |  |  151|  1.79k|#define PARAM_FLAG_UNKNOWN_OPTIONS 0x00008000
  ------------------
  746|  1.79k|		error = get_cmd_options(&datad, ignore_unknown,
  747|  1.79k|					arg, *opthash);
  748|  1.79k|	}
  749|       |
  750|  1.79k|	if (!error) {
  ------------------
  |  Branch (750:6): [True: 1.79k, False: 0]
  ------------------
  751|       |		/* and now handle the string */
  752|  1.79k|		cnt = PARAM_WITHOUT_FLAGS(count);
  ------------------
  |  |  122|  1.79k|#define PARAM_WITHOUT_FLAGS(a) ((a) & 0x00000fff)
  ------------------
  753|  1.79k|		if (count & PARAM_FLAG_OPTCHAN) {
  ------------------
  |  |  153|  1.79k|#define PARAM_FLAG_OPTCHAN 0x00010000
  ------------------
  |  Branch (753:7): [True: 0, False: 1.79k]
  ------------------
  754|       |			/* optional channel as first parameter */
  755|      0|			require_name = (count & PARAM_FLAG_OPTCHAN_NAME) ==
  ------------------
  |  |  155|      0|#define PARAM_FLAG_OPTCHAN_NAME (0x00020000|PARAM_FLAG_OPTCHAN)
  |  |  ------------------
  |  |  |  |  153|      0|#define PARAM_FLAG_OPTCHAN 0x00010000
  |  |  ------------------
  ------------------
  756|      0|				PARAM_FLAG_OPTCHAN_NAME;
  ------------------
  |  |  155|      0|#define PARAM_FLAG_OPTCHAN_NAME (0x00020000|PARAM_FLAG_OPTCHAN)
  |  |  ------------------
  |  |  |  |  153|      0|#define PARAM_FLAG_OPTCHAN 0x00010000
  |  |  ------------------
  ------------------
  757|      0|			arg = (char *) get_optional_channel(item, &datad, require_name);
  758|       |
  759|      0|			str = (char **) va_arg(args, char **);
  760|      0|			if (str != NULL) *str = arg;
  ------------------
  |  Branch (760:8): [True: 0, False: 0]
  ------------------
  761|      0|			cnt--;
  762|      0|		}
  763|       |
  764|  5.39k|		while (cnt-- > 0) {
  ------------------
  |  Branch (764:10): [True: 3.59k, False: 1.79k]
  ------------------
  765|  3.59k|			if (cnt == 0 && count & PARAM_FLAG_GETREST) {
  ------------------
  |  |  126|  1.79k|#define PARAM_FLAG_GETREST 0x00002000
  ------------------
  |  Branch (765:8): [True: 1.79k, False: 1.79k]
  |  Branch (765:20): [True: 0, False: 1.79k]
  ------------------
  766|       |				/* get rest */
  767|      0|				arg = datad;
  768|       |
  769|       |				/* strip the trailing whitespace */
  770|      0|				if (count & PARAM_FLAG_STRIP_TRAILING_WS) {
  ------------------
  |  |  157|      0|#define PARAM_FLAG_STRIP_TRAILING_WS 0x00040000
  ------------------
  |  Branch (770:9): [True: 0, False: 0]
  ------------------
  771|      0|					arg = g_strchomp(arg);
  772|      0|				}
  773|  3.59k|			} else {
  774|  3.59k|				arg = (count & PARAM_FLAG_NOQUOTES) ?
  ------------------
  |  |  124|  3.59k|#define PARAM_FLAG_NOQUOTES 0x00001000
  ------------------
  |  Branch (774:11): [True: 0, False: 3.59k]
  ------------------
  775|      0|					cmd_get_param(&datad) :
  776|  3.59k|					cmd_get_quoted_param(&datad);
  777|  3.59k|			}
  778|       |
  779|  3.59k|			str = (char **) va_arg(args, char **);
  780|  3.59k|			if (str != NULL) *str = arg;
  ------------------
  |  Branch (780:8): [True: 3.59k, False: 0]
  ------------------
  781|  3.59k|		}
  782|  1.79k|	}
  783|  1.79k|	va_end(args);
  784|       |
  785|  1.79k|	if (error) {
  ------------------
  |  Branch (785:6): [True: 0, False: 1.79k]
  ------------------
  786|      0|                signal_emit("error command", 2, GINT_TO_POINTER(error), datad);
  787|      0|		signal_stop();
  788|       |
  789|      0|                cmd_params_free(rec);
  790|      0|		*free_me = NULL;
  791|      0|	}
  792|       |
  793|  1.79k|	return !error;
  794|  1.79k|}
cmd_params_free:
  797|  1.79k|{
  798|  1.79k|	CMD_TEMP_REC *rec = free_me;
  799|       |
  800|  1.79k|	if (rec->options != NULL) g_hash_table_destroy(rec->options);
  ------------------
  |  Branch (800:6): [True: 1.79k, False: 0]
  ------------------
  801|  1.79k|	g_free(rec->data);
  802|  1.79k|	g_free(rec);
  803|  1.79k|}
commands_init:
  999|      2|{
 1000|      2|	commands = NULL;
 1001|      2|	current_command = NULL;
 1002|      2|	alias_runstack = NULL;
 1003|       |
 1004|      2|	signal_default_command = signal_get_uniq_id("default command");
  ------------------
  |  |   68|      2|        module_get_uniq_id_str("signals", signal)
  ------------------
 1005|       |
 1006|      2|	settings_add_str("misc", "cmdchars", "/");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
 1007|      2|	signal_add("send command", (SIGNAL_FUNC) event_command);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1008|       |
 1009|      2|	command_bind("eval", NULL, (SIGNAL_FUNC) cmd_eval);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1010|       |	command_bind("cd", NULL, (SIGNAL_FUNC) cmd_cd);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1011|      2|}
commands.c:command_module_get:
  123|    436|{
  124|    436|        COMMAND_MODULE_REC *modrec;
  125|       |
  126|    436|	g_return_val_if_fail(rec != NULL, NULL);
  ------------------
  |  Branch (126:2): [True: 436, False: 0]
  |  Branch (126:2): [True: 436, False: 0]
  |  Branch (126:2): [Folded, False: 436]
  ------------------
  127|       |
  128|    436|	modrec = command_module_find(rec, module);
  129|    436|	if (modrec == NULL) {
  ------------------
  |  Branch (129:6): [True: 360, False: 76]
  ------------------
  130|    360|		modrec = g_new0(COMMAND_MODULE_REC, 1);
  ------------------
  |  Branch (130:12): [True: 360, False: 0]
  |  Branch (130:12): [True: 0, False: 360]
  ------------------
  131|    360|		modrec->name = g_strdup(module);
  132|    360|                modrec->protocol = -1;
  133|    360|		rec->modules = g_slist_append(rec->modules, modrec);
  134|    360|	}
  135|       |
  136|    436|        if (protocol != -1)
  ------------------
  |  Branch (136:13): [True: 26, False: 410]
  ------------------
  137|     26|		modrec->protocol = protocol;
  138|       |
  139|    436|        return modrec;
  140|    436|}
commands.c:command_module_find:
   59|    436|{
   60|    436|	GSList *tmp;
   61|       |
   62|    436|	g_return_val_if_fail(rec != NULL, NULL);
  ------------------
  |  Branch (62:2): [True: 436, False: 0]
  |  Branch (62:2): [True: 436, False: 0]
  |  Branch (62:2): [Folded, False: 436]
  ------------------
   63|    436|	g_return_val_if_fail(module != NULL, NULL);
  ------------------
  |  Branch (63:2): [True: 436, False: 0]
  |  Branch (63:2): [True: 436, False: 0]
  |  Branch (63:2): [Folded, False: 436]
  ------------------
   64|       |
   65|    472|	for (tmp = rec->modules; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (65:27): [True: 112, False: 360]
  ------------------
   66|    112|		COMMAND_MODULE_REC *rec = tmp->data;
   67|       |
   68|    112|		if (g_ascii_strcasecmp(rec->name, module) == 0)
  ------------------
  |  Branch (68:7): [True: 76, False: 36]
  ------------------
   69|     76|			return rec;
   70|    112|	}
   71|       |
   72|    360|	return NULL;
   73|    436|}
commands.c:optname:
  343|  1.97k|{
  344|  1.97k|	char *opt = option;
  345|  1.97k|	if (*opt == '~')
  ------------------
  |  Branch (345:6): [True: 564, False: 1.41k]
  ------------------
  346|    564|		opt++;
  347|  1.97k|	if (iscmdtype(*opt))
  ------------------
  |  |  112|  1.97k|        ((c) == '!' || (c) == '-' || (c) == '+' || (c) == '@')
  |  |  ------------------
  |  |  |  Branch (112:10): [True: 52, False: 1.92k]
  |  |  |  Branch (112:24): [True: 284, False: 1.64k]
  |  |  |  Branch (112:38): [True: 804, False: 836]
  |  |  |  Branch (112:52): [True: 0, False: 836]
  |  |  ------------------
  ------------------
  348|  1.14k|		opt++;
  349|  1.97k|	return opt;
  350|  1.97k|}
commands.c:command_calc_options:
  399|     74|{
  400|     74|	char **optlist, **tmp, *name, *str;
  401|     74|	GSList *list, *oldopt;
  402|       |
  403|     74|	optlist = g_strsplit(options, " ", -1);
  404|       |
  405|     74|	if (rec->options == NULL) {
  ------------------
  |  Branch (405:6): [True: 68, False: 6]
  ------------------
  406|       |                /* first call - use specified args directly */
  407|     68|		rec->options = optlist;
  408|     68|		return;
  409|     68|	}
  410|       |
  411|       |	/* save old options to linked list */
  412|      6|	list = NULL;
  413|    198|	for (tmp = rec->options; *tmp != NULL; tmp++)
  ------------------
  |  Branch (413:27): [True: 192, False: 6]
  ------------------
  414|    192|                list = g_slist_append(list, g_strdup(*tmp));
  415|      6|	g_strfreev(rec->options);
  416|       |
  417|       |	/* merge the options */
  418|     58|	for (tmp = optlist; *tmp != NULL; tmp++) {
  ------------------
  |  Branch (418:22): [True: 52, False: 6]
  ------------------
  419|     52|		name = optname(*tmp);
  420|       |
  421|     52|		oldopt = optlist_find(list, name);
  422|     52|		if (oldopt != NULL) {
  ------------------
  |  Branch (422:7): [True: 0, False: 52]
  ------------------
  423|       |                        /* already specified - overwrite old definition */
  424|      0|			g_free(oldopt->data);
  425|      0|			oldopt->data = g_strdup(*tmp);
  426|     52|		} else {
  427|       |			/* new option, append to list */
  428|     52|                        list = g_slist_append(list, g_strdup(*tmp));
  429|     52|		}
  430|     52|	}
  431|      6|	g_strfreev(optlist);
  432|       |
  433|       |	/* linked list -> string[] */
  434|      6|	str = i_slist_to_string(list, " ");
  435|      6|	rec->options = g_strsplit(str, " ", -1);
  436|      6|        g_free(str);
  437|       |
  438|       |        g_slist_foreach(list, (GFunc) g_free, NULL);
  439|      6|	g_slist_free(list);
  440|      6|}
commands.c:optlist_find:
  361|     52|{
  362|  1.97k|	while (optlist != NULL) {
  ------------------
  |  Branch (362:9): [True: 1.92k, False: 52]
  ------------------
  363|  1.92k|		char *name = optname(optlist->data);
  364|       |
  365|  1.92k|		if (g_ascii_strcasecmp(name, option) == 0)
  ------------------
  |  Branch (365:7): [True: 0, False: 1.92k]
  ------------------
  366|      0|			return optlist;
  367|       |
  368|  1.92k|		optlist = optlist->next;
  369|  1.92k|	}
  370|       |
  371|     52|	return NULL;
  372|     52|}
commands.c:get_cmd_options:
  576|  1.79k|{
  577|  1.79k|	COMMAND_REC *rec;
  578|  1.79k|	char *option, *arg, **optlist;
  579|  1.79k|	int pos;
  580|       |
  581|       |	/* get option definitions */
  582|  1.79k|	rec = cmd == NULL ? NULL : command_find(cmd);
  ------------------
  |  Branch (582:8): [True: 0, False: 1.79k]
  ------------------
  583|  1.79k|	optlist = rec == NULL ? NULL : rec->options;
  ------------------
  |  Branch (583:12): [True: 0, False: 1.79k]
  ------------------
  584|       |
  585|  1.79k|	option = NULL; pos = -1;
  586|  1.79k|	for (;;) {
  587|  1.79k|		if (**data == '\0' || **data == '-') {
  ------------------
  |  Branch (587:7): [True: 0, False: 1.79k]
  |  Branch (587:25): [True: 0, False: 1.79k]
  ------------------
  588|      0|			if (option != NULL && optflag(optlist[pos], "+")) {
  ------------------
  |  Branch (588:8): [True: 0, False: 0]
  |  Branch (588:26): [True: 0, False: 0]
  ------------------
  589|       |				/* required argument missing! */
  590|      0|				*data = optname(optlist[pos]);
  591|      0|				return CMDERR_OPTION_ARG_MISSING;
  592|      0|			}
  593|      0|		}
  594|  1.79k|		if (**data == '-') {
  ------------------
  |  Branch (594:7): [True: 0, False: 1.79k]
  ------------------
  595|      0|			(*data)++;
  596|      0|			if (**data == '-' && (*data)[1] == ' ') {
  ------------------
  |  Branch (596:8): [True: 0, False: 0]
  |  Branch (596:25): [True: 0, False: 0]
  ------------------
  597|       |				/* -- option means end of options even
  598|       |				   if next word starts with - */
  599|      0|				(*data)++;
  600|      0|				while (**data == ' ') (*data)++;
  ------------------
  |  Branch (600:12): [True: 0, False: 0]
  ------------------
  601|      0|				break;
  602|      0|			}
  603|       |
  604|      0|			if (**data == '\0')
  ------------------
  |  Branch (604:8): [True: 0, False: 0]
  ------------------
  605|      0|				option = "-";
  606|      0|			else if (**data != ' ')
  ------------------
  |  Branch (606:13): [True: 0, False: 0]
  ------------------
  607|      0|				option = cmd_get_param(data);
  608|      0|			else {
  609|      0|				option = "-";
  610|      0|				(*data)++;
  611|      0|			}
  612|       |
  613|       |			/* check if this option can have argument */
  614|      0|			pos = optlist == NULL ? -1 :
  ------------------
  |  Branch (614:10): [True: 0, False: 0]
  ------------------
  615|      0|				option_find(optlist, option);
  616|       |
  617|      0|			if (pos == -1 && optlist != NULL &&
  ------------------
  |  Branch (617:8): [True: 0, False: 0]
  |  Branch (617:21): [True: 0, False: 0]
  ------------------
  618|      0|			    is_numeric(option, '\0')) {
  ------------------
  |  Branch (618:8): [True: 0, False: 0]
  ------------------
  619|       |				/* check if we want -<number> option */
  620|      0|				pos = option_find(optlist, "#");
  621|      0|				if (pos != -1) {
  ------------------
  |  Branch (621:9): [True: 0, False: 0]
  ------------------
  622|      0|					g_hash_table_insert(options, "#",
  623|      0|							    option);
  624|      0|                                        pos = -3;
  625|      0|				}
  626|      0|			}
  627|       |
  628|      0|			if (pos == -1 && !ignore_unknown) {
  ------------------
  |  Branch (628:8): [True: 0, False: 0]
  |  Branch (628:21): [True: 0, False: 0]
  ------------------
  629|       |				/* unknown option! */
  630|      0|                                *data = option;
  631|      0|				return CMDERR_OPTION_UNKNOWN;
  632|      0|			}
  633|      0|			if (pos == -2 && !ignore_unknown) {
  ------------------
  |  Branch (633:8): [True: 0, False: 0]
  |  Branch (633:21): [True: 0, False: 0]
  ------------------
  634|       |                                /* multiple matches */
  635|      0|				*data = option;
  636|      0|				return CMDERR_OPTION_AMBIGUOUS;
  637|      0|			}
  638|      0|			if (pos >= 0) {
  ------------------
  |  Branch (638:8): [True: 0, False: 0]
  ------------------
  639|       |				/* if we used a shortcut of parameter, put
  640|       |				   the whole parameter name in options table */
  641|      0|				option = optname(optlist[pos]);
  642|      0|			}
  643|      0|			if (options != NULL && pos != -3)
  ------------------
  |  Branch (643:8): [True: 0, False: 0]
  |  Branch (643:27): [True: 0, False: 0]
  ------------------
  644|      0|				g_hash_table_insert(options, option, "");
  645|       |
  646|      0|			if (pos < 0 || optflag(optlist[pos], " !"))
  ------------------
  |  Branch (646:8): [True: 0, False: 0]
  |  Branch (646:19): [True: 0, False: 0]
  ------------------
  647|      0|				option = NULL;
  648|       |
  649|      0|			while (**data == ' ') (*data)++;
  ------------------
  |  Branch (649:11): [True: 0, False: 0]
  ------------------
  650|      0|			continue;
  651|      0|		}
  652|       |
  653|  1.79k|		if (option == NULL)
  ------------------
  |  Branch (653:7): [True: 1.79k, False: 0]
  ------------------
  654|  1.79k|			break;
  655|       |
  656|      0|		if (optflag(optlist[pos], "@") && !is_numeric(*data, ' '))
  ------------------
  |  Branch (656:7): [True: 0, False: 0]
  |  Branch (656:37): [True: 0, False: 0]
  ------------------
  657|      0|			break; /* expected a numeric argument */
  658|       |
  659|       |		/* save the argument */
  660|      0|		arg = cmd_get_quoted_param(data);
  661|      0|		if (options != NULL) {
  ------------------
  |  Branch (661:7): [True: 0, False: 0]
  ------------------
  662|      0|			g_hash_table_remove(options, option);
  663|      0|			g_hash_table_insert(options, option, arg);
  664|      0|		}
  665|      0|		option = NULL;
  666|       |
  667|      0|		while (**data == ' ') (*data)++;
  ------------------
  |  Branch (667:10): [True: 0, False: 0]
  ------------------
  668|      0|	}
  669|       |
  670|  1.79k|	return 0;
  671|  1.79k|}

get_irssi_dir:
   78|     11|{
   79|     11|        return irssi_dir;
   80|     11|}
get_irssi_config:
   84|      2|{
   85|      2|        return irssi_config_file;
   86|      2|}
core_register_options:
  192|      2|{
  193|      2|	static GOptionEntry options[] = {
  194|      2|		{ "config", 0, 0, G_OPTION_ARG_STRING, &irssi_config_file, "Configuration file location (~/.irssi/config)", "PATH" },
  195|      2|		{ "home", 0, 0, G_OPTION_ARG_STRING, &irssi_dir, "Irssi home dir location (~/.irssi)", "PATH" },
  196|      2|		{ NULL }
  197|      2|	};
  198|       |
  199|      2|	args_register(options);
  200|      2|	session_register_options();
  201|      2|}
core_preinit:
  204|      2|{
  205|      2|	const char *home;
  206|      2|	char *str;
  207|      2|	int len;
  208|       |
  209|      2|	if (irssi_dir == NULL) {
  ------------------
  |  Branch (209:6): [True: 2, False: 0]
  ------------------
  210|      2|		home = g_get_home_dir();
  211|      2|		if (home == NULL)
  ------------------
  |  Branch (211:7): [True: 0, False: 2]
  ------------------
  212|      0|			home = ".";
  213|       |
  214|      2|		irssi_dir = g_strdup_printf(IRSSI_DIR_FULL, home);
  ------------------
  |  |    4|      2|#define IRSSI_DIR_FULL "%s/.irssi" /* %s == g_get_home_dir() */
  ------------------
  215|      2|	} else {
  216|      0|		str = irssi_dir;
  217|      0|		irssi_dir = fix_path(str);
  218|      0|		g_free(str);
  219|      0|		len = strlen(irssi_dir);
  220|      0|		if (irssi_dir[len-1] == G_DIR_SEPARATOR)
  ------------------
  |  Branch (220:7): [True: 0, False: 0]
  ------------------
  221|      0|			irssi_dir[len-1] = '\0';
  222|      0|	}
  223|      2|	if (irssi_config_file == NULL)
  ------------------
  |  Branch (223:6): [True: 2, False: 0]
  ------------------
  224|      2|		irssi_config_file = g_strdup_printf("%s/"IRSSI_HOME_CONFIG, irssi_dir);
  ------------------
  |  |    7|      2|#define IRSSI_HOME_CONFIG "config" /* config file name in ~/.irssi/ */
  ------------------
  225|      0|	else {
  226|      0|		str = irssi_config_file;
  227|      0|		irssi_config_file = fix_path(str);
  228|      0|		g_free(str);
  229|      0|	}
  230|       |
  231|      2|	session_set_binary(path);
  232|      2|}
core_init:
  247|      2|{
  248|      2|	dialog_type_queue = NULL;
  249|      2|	dialog_text_queue = NULL;
  250|      2|	client_start_time = time(NULL);
  251|       |
  252|      2|	modules_init();
  253|      2|	pidwait_init();
  254|       |
  255|      2|	net_disconnect_init();
  256|      2|	signals_init();
  257|       |
  258|      2|	signal_add_first("gui dialog", (SIGNAL_FUNC) sig_gui_dialog);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  259|      2|	signal_add_first("irssi init finished", (SIGNAL_FUNC) sig_init_finished);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  260|       |
  261|      2|	settings_init();
  262|      2|	commands_init();
  263|      2|	nickmatch_cache_init();
  264|      2|        session_init();
  265|       |#ifdef HAVE_CAPSICUM
  266|       |	capsicum_init();
  267|       |#endif
  268|       |
  269|      2|	chat_protocols_init();
  270|      2|	chatnets_init();
  271|      2|        expandos_init();
  272|      2|	ignore_init();
  273|      2|	servers_init();
  274|      2|        write_buffer_init();
  275|      2|	log_init();
  276|      2|	log_away_init();
  277|      2|	rawlog_init();
  278|      2|	recode_init();
  279|       |
  280|      2|	channels_init();
  281|      2|	queries_init();
  282|      2|	nicklist_init();
  283|       |
  284|      2|	chat_commands_init();
  285|      2|	i_refstr_init();
  286|      2|	special_vars_init();
  287|      2|	wcwidth_wrapper_init();
  288|       |
  289|      2|	settings_add_str("misc", "ignore_signals", "");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  290|      2|	settings_add_bool("misc", "override_coredump_limit", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  291|      2|	settings_add_bool("misc", "quit_on_hup", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  292|      2|	settings_add_str("misc", "autoload_modules", "irc dcc flood notifylist perl otr");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  293|       |
  294|      2|#ifdef HAVE_SYS_RESOURCE_H
  295|      2|	getrlimit(RLIMIT_CORE, &orig_core_rlimit);
  296|      2|#endif
  297|      2|	read_settings();
  298|      2|	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  299|      2|	signal_add("setup reread", (SIGNAL_FUNC) reread_setup);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  300|      2|	signal_add("irssi init read settings", (SIGNAL_FUNC) reread_setup);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  301|      2|	signal_add_last("chat protocol created", (SIGNAL_FUNC) reread_setup);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  302|      2|	signal_add("irssi init finished", (SIGNAL_FUNC) sig_irssi_init_finished);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  303|       |
  304|      2|	settings_check();
  ------------------
  |  |  125|      2|#define settings_check() settings_check_module(MODULE_NAME)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  305|       |
  306|      2|        module_register("core", "core");
  ------------------
  |  |   59|      2|        module_register_full(name, submodule, MODULE_NAME)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  307|      2|}
core.c:read_settings:
   99|      2|{
  100|      2|	static int signals[] = {
  101|      2|		SIGINT, SIGQUIT, SIGTERM,
  102|      2|		SIGALRM, SIGUSR1, SIGUSR2
  103|      2|	};
  104|      2|	static char *signames[] = {
  105|      2|		"int", "quit", "term",
  106|      2|		"alrm", "usr1", "usr2"
  107|      2|	};
  108|       |
  109|      2|	const char *ignores;
  110|      2|	struct sigaction act;
  111|      2|        int n;
  112|       |
  113|      2|	ignores = settings_get_str("ignore_signals");
  114|       |
  115|      2|	sigemptyset (&act.sa_mask);
  116|      2|	act.sa_flags = 0;
  117|       |
  118|      2|	act.sa_handler = sig_hup;
  119|      2|	sigaction(SIGHUP, &act, NULL);
  120|       |
  121|     14|	for (n = 0; n < sizeof(signals)/sizeof(signals[0]); n++) {
  ------------------
  |  Branch (121:14): [True: 12, False: 2]
  ------------------
  122|     12|		if (find_substr(ignores, signames[n])) {
  ------------------
  |  Branch (122:7): [True: 0, False: 12]
  ------------------
  123|      0|			act.sa_handler = SIG_IGN;
  124|     12|		} else {
  125|       |			/* set default handlers */
  126|     12|			if (signals[n] == SIGTERM)
  ------------------
  |  Branch (126:8): [True: 2, False: 10]
  ------------------
  127|      2|				act.sa_handler = sig_term;
  128|     10|			else
  129|     10|				act.sa_handler = SIG_DFL;
  130|     12|		}
  131|     12|		sigaction(signals[n], &act, NULL);
  132|     12|	}
  133|       |
  134|      2|#ifdef HAVE_SYS_RESOURCE_H
  135|      2|	if (!settings_get_bool("override_coredump_limit"))
  ------------------
  |  Branch (135:6): [True: 2, False: 0]
  ------------------
  136|      2|		setrlimit(RLIMIT_CORE, &orig_core_rlimit);
  137|      0|	else {
  138|      0|		struct rlimit rlimit;
  139|       |
  140|      0|                rlimit.rlim_cur = RLIM_INFINITY;
  141|      0|                rlimit.rlim_max = RLIM_INFINITY;
  142|      0|		if (setrlimit(RLIMIT_CORE, &rlimit) == -1)
  ------------------
  |  Branch (142:7): [True: 0, False: 0]
  ------------------
  143|      0|                        settings_set_bool("override_coredump_limit", FALSE);
  144|      0|	}
  145|      2|#endif
  146|      2|}
core.c:reread_setup:
  240|      2|{
  241|      2|	signal_emit("setup reread chatnets", 0);
  242|      2|	signal_emit("setup reread servers", 0);
  243|      2|	signal_emit("setup reread channels", 0);
  244|      2|}

expando_create:
   72|     84|{
   73|     84|        EXPANDO_REC *rec;
   74|     84|        const char *signal;
   75|     84|	va_list va;
   76|       |
   77|     84|	g_return_if_fail(key != NULL && *key != '\0');
  ------------------
  |  Branch (77:2): [True: 84, False: 0]
  |  Branch (77:2): [True: 84, False: 0]
  |  Branch (77:2): [True: 84, False: 0]
  |  Branch (77:2): [Folded, False: 84]
  ------------------
   78|     84|	g_return_if_fail(func != NULL);
  ------------------
  |  Branch (78:2): [True: 84, False: 0]
  |  Branch (78:2): [True: 84, False: 0]
  |  Branch (78:2): [Folded, False: 84]
  ------------------
   79|       |
   80|     84|	if (key[1] != '\0')
  ------------------
  |  Branch (80:6): [True: 28, False: 56]
  ------------------
   81|     28|		rec = g_hash_table_lookup(expandos, key);
   82|     56|	else {
   83|       |		/* single character expando */
   84|     56|		rec = CHAR_EXPANDO(*key);
  ------------------
  |  |   68|     56|	(char_expandos[(int) (unsigned char) chr])
  ------------------
   85|     56|	}
   86|       |
   87|     84|	if (rec != NULL)
  ------------------
  |  Branch (87:6): [True: 0, False: 84]
  ------------------
   88|      0|		rec->signals = 0;
   89|     84|	else {
   90|     84|		rec = g_new0(EXPANDO_REC, 1);
  ------------------
  |  Branch (90:9): [True: 84, False: 0]
  |  Branch (90:9): [True: 0, False: 84]
  ------------------
   91|     84|                if (key[1] != '\0')
  ------------------
  |  Branch (91:21): [True: 28, False: 56]
  ------------------
   92|     28|			g_hash_table_insert(expandos, g_strdup(key), rec);
   93|     56|		else
   94|     56|			char_expandos[(int) (unsigned char) *key] = rec;
   95|     84|	}
   96|       |
   97|     84|	rec->func = func;
   98|       |
   99|     84|	va_start(va, func);
  100|    240|	while ((signal = (const char *) va_arg(va, const char *)) != NULL)
  ------------------
  |  Branch (100:9): [True: 156, False: 84]
  ------------------
  101|    156|               expando_add_signal(key, signal, (int) va_arg(va, int));
  102|       |        va_end(va);
  103|     84|}
expando_add_signal:
  115|    158|{
  116|    158|	EXPANDO_REC *rec;
  117|       |
  118|    158|	g_return_if_fail(key != NULL);
  ------------------
  |  Branch (118:2): [True: 158, False: 0]
  |  Branch (118:2): [True: 158, False: 0]
  |  Branch (118:2): [Folded, False: 158]
  ------------------
  119|    158|	g_return_if_fail(signal != NULL);
  ------------------
  |  Branch (119:2): [True: 158, False: 0]
  |  Branch (119:2): [True: 158, False: 0]
  |  Branch (119:2): [Folded, False: 158]
  ------------------
  120|       |
  121|    158|        rec = expando_find(key);
  122|    158|        g_return_if_fail(rec != NULL);
  ------------------
  |  Branch (122:9): [True: 158, False: 0]
  |  Branch (122:9): [True: 158, False: 0]
  |  Branch (122:9): [Folded, False: 158]
  ------------------
  123|       |
  124|    158|	if (arg == EXPANDO_NEVER) {
  ------------------
  |  Branch (124:6): [True: 18, False: 140]
  ------------------
  125|       |                /* expando changes never */
  126|     18|		rec->signals = -1;
  127|    140|	} else if (rec->signals < MAX_EXPANDO_SIGNALS) {
  ------------------
  |  |   40|    140|#define MAX_EXPANDO_SIGNALS 10
  ------------------
  |  Branch (127:13): [True: 140, False: 0]
  ------------------
  128|    140|		g_return_if_fail(rec->signals != -1);
  ------------------
  |  Branch (128:3): [True: 140, False: 0]
  |  Branch (128:3): [True: 140, False: 0]
  |  Branch (128:3): [Folded, False: 140]
  ------------------
  129|       |
  130|    140|		rec->signal_ids[rec->signals] = signal_get_uniq_id(signal);
  ------------------
  |  |   68|    140|        module_get_uniq_id_str("signals", signal)
  ------------------
  131|    140|		rec->signal_args[rec->signals] = arg;
  132|    140|                rec->signals++;
  133|    140|	}
  134|    158|}
expando_find_char:
  255|  1.06M|{
  256|  1.06M|	return CHAR_EXPANDO(chr) == NULL ? NULL :
  ------------------
  |  |   68|  1.06M|	(char_expandos[(int) (unsigned char) chr])
  ------------------
  |  Branch (256:9): [True: 0, False: 1.06M]
  ------------------
  257|  1.06M|		CHAR_EXPANDO(chr)->func;
  ------------------
  |  |   68|  1.06M|	(char_expandos[(int) (unsigned char) chr])
  ------------------
  258|  1.06M|}
expando_find_long:
  261|     22|{
  262|     22|	EXPANDO_REC *rec = g_hash_table_lookup(expandos, key);
  263|     22|	return rec == NULL ? NULL : rec->func;
  ------------------
  |  Branch (263:9): [True: 0, False: 22]
  ------------------
  264|     22|}
expandos_init:
  607|      2|{
  608|      2|#ifdef HAVE_SYS_UTSNAME_H
  609|      2|	struct utsname un;
  610|      2|#endif
  611|      2|	settings_add_str("misc", "STATUS_OPER", "*");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  612|      2|	settings_add_str("lookandfeel", "timestamp_format", "%H:%M");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  613|      2|	settings_add_str("lookandfeel", "timestamp_format_alt", "%a %e %b %H:%M");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  614|      2|	settings_add_bool("lookandfeel", "chanmode_expando_strip", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  615|       |
  616|      2|	last_sent_msg = NULL; last_sent_msg_body = NULL;
  617|      2|	last_privmsg_from = NULL; last_public_from = NULL;
  618|      2|        last_timestamp = 0;
  619|       |
  620|      2|        sysname = sysrelease = sysarch = NULL;
  621|      2|#ifdef HAVE_SYS_UTSNAME_H
  622|      2|	if (uname(&un) >= 0) {
  ------------------
  |  Branch (622:6): [True: 2, False: 0]
  ------------------
  623|      2|		sysname = g_strdup(un.sysname);
  624|      2|		sysrelease = g_strdup(un.release);
  625|      2|		sysarch = g_strdup(un.machine);
  626|      2|	}
  627|      2|#endif
  628|       |
  629|      2|	memset(char_expandos, 0, sizeof(char_expandos));
  630|      2|	expandos = g_hash_table_new((GHashFunc) g_str_hash,
  631|      2|				    (GCompareFunc) g_str_equal);
  632|       |
  633|      2|	expando_create(",", expando_lastmsg,
  634|      2|		       "message private", EXPANDO_ARG_SERVER, NULL);
  635|      2|	expando_create(".", expando_lastmymsg,
  636|      2|		       "command msg", EXPANDO_ARG_NONE, NULL);
  637|      2|	expando_create(";", expando_lastpublic,
  638|      2|		       "message public", EXPANDO_ARG_SERVER, NULL);
  639|      2|	expando_create("A", expando_awaymsg,
  640|      2|		       "away mode changed", EXPANDO_ARG_NONE, NULL);
  641|      2|	expando_create("B", expando_lastmymsg_body,
  642|      2|		       "command msg", EXPANDO_ARG_NONE, NULL);
  643|      2|	expando_create("C", expando_channel,
  644|      2|		       "window changed", EXPANDO_ARG_NONE,
  645|      2|		       "window item changed", EXPANDO_ARG_WINDOW, NULL);
  646|      2|	expando_create("F", expando_clientstarted,
  647|      2|		       "", EXPANDO_NEVER, NULL);
  648|      2|	expando_create("I", expando_last_invite, NULL);
  649|      2|	expando_create("J", expando_version,
  650|      2|		       "", EXPANDO_NEVER, NULL);
  651|      2|	expando_create("K", expando_cmdchars,
  652|      2|		       "setup changed", EXPANDO_ARG_NONE, NULL);
  653|      2|	expando_create("k", expando_cmdchar,
  654|      2|		       "setup changed", EXPANDO_ARG_NONE, NULL);
  655|      2|	expando_create("M", expando_chanmode,
  656|      2|		       "window changed", EXPANDO_ARG_NONE,
  657|      2|		       "window item changed", EXPANDO_ARG_WINDOW,
  658|      2|		       "channel mode changed", EXPANDO_ARG_WINDOW_ITEM, NULL);
  659|      2|	expando_create("N", expando_nick,
  660|      2|		       "window changed", EXPANDO_ARG_NONE,
  661|      2|		       "window connect changed", EXPANDO_ARG_WINDOW,
  662|      2|		       "window server changed", EXPANDO_ARG_WINDOW,
  663|      2|                       "server nick changed", EXPANDO_ARG_SERVER, NULL);
  664|      2|	expando_create("O", expando_statusoper,
  665|      2|		       "setup changed", EXPANDO_ARG_NONE,
  666|      2|		       "window changed", EXPANDO_ARG_NONE,
  667|      2|		       "window server changed", EXPANDO_ARG_WINDOW,
  668|      2|		       "user mode changed", EXPANDO_ARG_WINDOW, NULL);
  669|      2|	expando_create("P", expando_chanop,
  670|      2|		       "window changed", EXPANDO_ARG_NONE,
  671|      2|		       "window item changed", EXPANDO_ARG_WINDOW,
  672|      2|		       "nick mode changed", EXPANDO_ARG_WINDOW_ITEM, NULL);
  673|      2|	expando_create("Q", expando_query,
  674|      2|		       "window changed", EXPANDO_ARG_NONE,
  675|      2|		       "window item changed", EXPANDO_ARG_WINDOW, NULL);
  676|      2|	expando_create("R", expando_serverversion,
  677|      2|		       "window changed", EXPANDO_ARG_NONE,
  678|      2|		       "window server changed", EXPANDO_ARG_WINDOW, NULL);
  679|      2|	expando_create("T", expando_target,
  680|      2|		       "window changed", EXPANDO_ARG_NONE,
  681|      2|		       "window item changed", EXPANDO_ARG_WINDOW, NULL);
  682|      2|	expando_create("V", expando_releasedate,
  683|      2|		       "", EXPANDO_NEVER, NULL);
  684|      2|	expando_create("versiontime", expando_releasetime,
  685|      2|		       "", EXPANDO_NEVER, NULL);
  686|      2|	expando_create("abiversion", expando_abiversion,
  687|      2|		       "", EXPANDO_NEVER, NULL);
  688|      2|	expando_create("W", expando_workdir, NULL);
  689|      2|	expando_create("Y", expando_realname,
  690|      2|		       "window changed", EXPANDO_ARG_NONE,
  691|      2|		       "window connect changed", EXPANDO_ARG_WINDOW,
  692|      2|		       "window server changed", EXPANDO_ARG_WINDOW, NULL);
  693|      2|	expando_create("Z", expando_time,
  694|      2|		       "time changed", EXPANDO_ARG_NONE, NULL);
  695|      2|	expando_create("$", expando_dollar,
  696|      2|		       "", EXPANDO_NEVER, NULL);
  697|       |
  698|      2|	expando_create("sysname", expando_sysname,
  699|      2|		       "", EXPANDO_NEVER, NULL);
  700|      2|	expando_create("sysrelease", expando_sysrelease,
  701|      2|		       "", EXPANDO_NEVER, NULL);
  702|      2|	expando_create("sysarch", expando_sysarch,
  703|      2|		       "", EXPANDO_NEVER, NULL);
  704|      2|	expando_create("topic", expando_topic,
  705|      2|		       "window changed", EXPANDO_ARG_NONE,
  706|      2|		       "window item changed", EXPANDO_ARG_WINDOW,
  707|      2|		       "channel topic changed", EXPANDO_ARG_WINDOW_ITEM,
  708|      2|		       "query address changed", EXPANDO_ARG_WINDOW_ITEM, NULL);
  709|      2|	expando_create("tag", expando_servertag,
  710|      2|		       "window changed", EXPANDO_ARG_NONE,
  711|      2|		       "window connect changed", EXPANDO_ARG_WINDOW,
  712|      2|		       "window server changed", EXPANDO_ARG_WINDOW, NULL);
  713|      2|	expando_create("chatnet", expando_chatnet,
  714|      2|		       "window changed", EXPANDO_ARG_NONE,
  715|      2|		       "window connect changed", EXPANDO_ARG_WINDOW,
  716|      2|		       "window server changed", EXPANDO_ARG_WINDOW, NULL);
  717|      2|	expando_create("itemname", expando_itemname,
  718|      2|		       "window changed", EXPANDO_ARG_NONE,
  719|      2|		       "window item changed", EXPANDO_ARG_WINDOW,
  720|      2|		       "window item name changed", EXPANDO_ARG_WINDOW_ITEM,
  721|      2|		       NULL);
  722|       |
  723|      2|	read_settings();
  724|       |
  725|      2|        timer_tag = g_timeout_add(1000, (GSourceFunc) sig_timer, NULL);
  726|      2|	signal_add("message public", (SIGNAL_FUNC) sig_message_public);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  727|      2|	signal_add("message private", (SIGNAL_FUNC) sig_message_private);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  728|      2|	signal_add("message own_private", (SIGNAL_FUNC) sig_message_own_private);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  729|       |	signal_add_first("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  730|      2|}
expandos.c:expando_find:
  106|    158|{
  107|    158|	if (key[1] != '\0')
  ------------------
  |  Branch (107:6): [True: 66, False: 92]
  ------------------
  108|     66|		return g_hash_table_lookup(expandos, key);
  109|     92|        else
  110|     92|		return CHAR_EXPANDO(*key);
  ------------------
  |  |   68|     92|	(char_expandos[(int) (unsigned char) chr])
  ------------------
  111|    158|}
expandos.c:expando_version:
  324|     11|{
  325|     11|	return PACKAGE_VERSION;
  ------------------
  |  |    2|     11|#define PACKAGE_VERSION "1.5+1-dev-330-g43f1727e-dirty"
  ------------------
  326|     11|}
expandos.c:expando_time:
  442|  1.06M|{
  443|  1.06M|	time_t now;
  444|  1.06M|	struct tm *tm;
  445|  1.06M|        char str[256];
  446|  1.06M|	char *format;
  447|       |
  448|  1.06M|	now = current_time != (time_t) -1 ? current_time : time(NULL);
  ------------------
  |  Branch (448:8): [True: 0, False: 1.06M]
  ------------------
  449|  1.06M|	tm = localtime(&now);
  450|  1.06M|	format = timestamp_format;
  451|       |
  452|  1.06M|	if (reference_time != (time_t) -1) {
  ------------------
  |  Branch (452:6): [True: 0, False: 1.06M]
  ------------------
  453|      0|		time_t ref = reference_time;
  454|      0|		struct tm tm_ref;
  455|      0|		if (localtime_r(&ref, &tm_ref)) {
  ------------------
  |  Branch (455:7): [True: 0, False: 0]
  ------------------
  456|      0|			if (tm_ref.tm_yday != tm->tm_yday || tm_ref.tm_year != tm->tm_year) {
  ------------------
  |  Branch (456:8): [True: 0, False: 0]
  |  Branch (456:41): [True: 0, False: 0]
  ------------------
  457|      0|				format = timestamp_format_alt;
  458|      0|			}
  459|      0|		}
  460|      0|	}
  461|       |
  462|  1.06M|	if (strftime(str, sizeof(str), format, tm) == 0)
  ------------------
  |  Branch (462:6): [True: 0, False: 1.06M]
  ------------------
  463|      0|		return "";
  464|       |
  465|  1.06M|	*free_ret = TRUE;
  466|  1.06M|        return g_strdup(str);
  467|  1.06M|}
expandos.c:expando_sysname:
  477|     11|{
  478|     11|	return sysname;
  479|     11|}
expandos.c:expando_sysarch:
  489|     11|{
  490|     11|        return sysarch;
  491|     11|}
expandos.c:read_settings:
  591|      2|{
  592|      2|	g_free_not_null(timestamp_format);
  ------------------
  |  |   64|      2|#define g_free_not_null(a) g_free(a)
  ------------------
  593|      2|	g_free_not_null(timestamp_format_alt);
  ------------------
  |  |   64|      2|#define g_free_not_null(a) g_free(a)
  ------------------
  594|      2|	timestamp_format = g_strdup(settings_get_str("timestamp_format"));
  595|      2|	timestamp_format_alt = g_strdup(settings_get_str("timestamp_format_alt"));
  596|       |
  597|      2|	timestamp_seconds =
  598|      2|		strstr(timestamp_format, "%r") != NULL ||
  ------------------
  |  Branch (598:3): [True: 0, False: 2]
  ------------------
  599|      2|		strstr(timestamp_format, "%s") != NULL ||
  ------------------
  |  Branch (599:3): [True: 0, False: 2]
  ------------------
  600|      2|		strstr(timestamp_format, "%S") != NULL ||
  ------------------
  |  Branch (600:3): [True: 0, False: 2]
  ------------------
  601|      2|		strstr(timestamp_format, "%X") != NULL ||
  ------------------
  |  Branch (601:3): [True: 0, False: 2]
  ------------------
  602|      2|		strstr(timestamp_format, "%T") != NULL;
  ------------------
  |  Branch (602:3): [True: 0, False: 2]
  ------------------
  603|       |
  604|      2|}
expandos.c:sig_message_public:
  534|  4.87k|{
  535|  4.87k|	g_free_not_null(last_public_from);
  ------------------
  |  |   64|  4.87k|#define g_free_not_null(a) g_free(a)
  ------------------
  536|  4.87k|	last_public_from = g_strdup(nick);
  537|  4.87k|}
expandos.c:sig_message_private:
  541|  9.80k|{
  542|  9.80k|	g_free_not_null(last_privmsg_from);
  ------------------
  |  |   64|  9.80k|#define g_free_not_null(a) g_free(a)
  ------------------
  543|  9.80k|	last_privmsg_from = g_strdup(nick);
  544|  9.80k|}

ignore_check_flags:
  140|  1.17M|{
  141|  1.17M|	CHANNEL_REC *chanrec;
  142|  1.17M|	NICK_REC *nickrec;
  143|  1.17M|        IGNORE_REC *rec;
  144|  1.17M|	GSList *tmp;
  145|  1.17M|        char *nickmask;
  146|  1.17M|        int len, best_mask, best_match, best_patt;
  147|       |
  148|  1.17M|        if (nick == NULL) nick = "";
  ------------------
  |  Branch (148:13): [True: 641k, False: 531k]
  ------------------
  149|       |
  150|  1.17M|	chanrec = server == NULL || channel == NULL ? NULL :
  ------------------
  |  Branch (150:12): [True: 0, False: 1.17M]
  |  Branch (150:30): [True: 107k, False: 1.06M]
  ------------------
  151|  1.17M|		channel_find(server, channel);
  152|  1.17M|	if (chanrec != NULL && nick != NULL &&
  ------------------
  |  Branch (152:6): [True: 758k, False: 414k]
  |  Branch (152:25): [True: 758k, False: 0]
  ------------------
  153|   758k|	    (nickrec = nicklist_find(chanrec, nick)) != NULL) {
  ------------------
  |  Branch (153:6): [True: 97.0k, False: 661k]
  ------------------
  154|       |                /* nick found - check only ignores in nickmatch cache */
  155|  97.0k|		if (nickrec->host == NULL)
  ------------------
  |  Branch (155:7): [True: 75.1k, False: 21.9k]
  ------------------
  156|  75.1k|			nicklist_set_host(chanrec, nickrec, host);
  157|       |
  158|  97.0k|		tmp = nickmatch_find(nickmatch, nickrec);
  ------------------
  |  |   22|  97.0k|        g_hash_table_lookup((rec)->nicks, nick)
  ------------------
  159|  97.0k|		nickmask = NULL;
  160|  1.07M|	} else {
  161|  1.07M|		tmp = ignores;
  162|  1.07M|		nickmask = g_strconcat(nick, "!", host, NULL);
  163|  1.07M|	}
  164|       |
  165|  1.17M|        best_mask = best_patt = -1; best_match = FALSE;
  166|  1.17M|	for (; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (166:9): [True: 0, False: 1.17M]
  ------------------
  167|      0|		int match = 1;
  168|      0|		rec = tmp->data;
  169|       |
  170|      0|		if (nickmask != NULL)
  ------------------
  |  Branch (170:7): [True: 0, False: 0]
  ------------------
  171|      0|			match = ignore_match_server(rec, server) &&
  ------------------
  |  |  110|      0|	((rec)->servertag == NULL || ((server) != NULL && \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 0, False: 0]
  |  |  |  Branch (110:32): [True: 0, False: 0]
  |  |  ------------------
  |  |  111|      0|		g_ascii_strcasecmp((server)->tag, (rec)->servertag) == 0))
  |  |  ------------------
  |  |  |  Branch (111:3): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  172|      0|				ignore_match_channel(rec, channel) &&
  ------------------
  |  |  114|      0|	((rec)->channels == NULL || ((channel) != NULL && \
  |  |  ------------------
  |  |  |  Branch (114:3): [True: 0, False: 0]
  |  |  |  Branch (114:31): [True: 0, False: 0]
  |  |  ------------------
  |  |  115|      0|		strarray_find((rec)->channels, (channel)) != -1))
  |  |  ------------------
  |  |  |  Branch (115:3): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  173|      0|				ignore_match_nickmask(rec, nick, nickmask);
  ------------------
  |  |  104|      0|	((rec)->mask == NULL || \
  |  |  ------------------
  |  |  |  Branch (104:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  105|      0|	(strchr((rec)->mask, '!') != NULL ? \
  |  |  ------------------
  |  |  |  Branch (105:2): [True: 0, False: 0]
  |  |  |  Branch (105:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  106|      0|		match_wildcards((rec)->mask, nickmask) : \
  |  |  107|      0|		match_wildcards((rec)->mask, nick)))
  ------------------
  174|      0|		if (match &&
  ------------------
  |  Branch (174:7): [True: 0, False: 0]
  ------------------
  175|      0|		    ignore_match_level(rec, level, flags) &&
  ------------------
  |  Branch (175:7): [True: 0, False: 0]
  ------------------
  176|      0|		    ignore_match_pattern(rec, text)) {
  ------------------
  |  Branch (176:7): [True: 0, False: 0]
  ------------------
  177|      0|			len = rec->mask == NULL ? 0 : strlen(rec->mask);
  ------------------
  |  Branch (177:10): [True: 0, False: 0]
  ------------------
  178|      0|			if (len > best_mask) {
  ------------------
  |  Branch (178:8): [True: 0, False: 0]
  ------------------
  179|      0|				best_mask = len;
  180|      0|				best_match = !rec->exception;
  181|      0|			} else if (len == best_mask) {
  ------------------
  |  Branch (181:15): [True: 0, False: 0]
  ------------------
  182|      0|				len = rec->pattern == NULL ? 0 : strlen(rec->pattern);
  ------------------
  |  Branch (182:11): [True: 0, False: 0]
  ------------------
  183|      0|				if (len > best_patt) {
  ------------------
  |  Branch (183:9): [True: 0, False: 0]
  ------------------
  184|      0|					best_patt = len;
  185|      0|					best_match = !rec->exception;
  186|      0|				} else if (len == best_patt && rec->exception)
  ------------------
  |  Branch (186:16): [True: 0, False: 0]
  |  Branch (186:36): [True: 0, False: 0]
  ------------------
  187|      0|					best_match = 0;
  188|      0|			}
  189|      0|		}
  190|      0|	}
  191|  1.17M|        g_free(nickmask);
  192|       |
  193|  1.17M|	if (best_match || (level & MSGLEVEL_PUBLIC) == 0)
  ------------------
  |  Branch (193:6): [True: 0, False: 1.17M]
  |  Branch (193:20): [True: 1.13M, False: 34.3k]
  ------------------
  194|  1.13M|		return best_match;
  195|       |
  196|  34.3k|        return ignore_check_replies(chanrec, text, level, flags);
  197|  1.17M|}
ignore_check:
  200|   441k|		 const char *channel, const char *text, int level) {
  201|   441k|	return ignore_check_flags(server, nick, host, channel, text, level, 0);
  202|   441k|}
ignore_check_plus:
  205|   244k|		      const char *target, const char *msg, int *level, int test_ignore) {
  206|   244k|	int olevel = *level;
  207|       |
  208|   244k|	if (test_ignore && ignore_check(server, nick, address, target, msg, olevel))
  ------------------
  |  Branch (208:6): [True: 69.0k, False: 174k]
  |  Branch (208:21): [True: 0, False: 69.0k]
  ------------------
  209|      0|		return TRUE;
  210|       |
  211|   244k|	if (ignore_check_flags(server, nick, address, target, msg, olevel, MSGLEVEL_NO_ACT))
  ------------------
  |  Branch (211:6): [True: 0, False: 244k]
  ------------------
  212|      0|		*level |= MSGLEVEL_NO_ACT;
  213|       |
  214|   244k|	if (ignore_check_flags(server, nick, address, target, msg, olevel, MSGLEVEL_HIDDEN))
  ------------------
  |  Branch (214:6): [True: 0, False: 244k]
  ------------------
  215|      0|		*level |= MSGLEVEL_HIDDEN;
  216|       |
  217|   244k|	if (ignore_check_flags(server, nick, address, target, msg, olevel, MSGLEVEL_NOHILIGHT))
  ------------------
  |  Branch (217:6): [True: 0, False: 244k]
  ------------------
  218|      0|		*level |= MSGLEVEL_NOHILIGHT;
  219|       |
  220|       |	return FALSE;
  221|   244k|}
ignore_init:
  526|      2|{
  527|      2|	ignores = NULL;
  528|      2|	nickmatch = nickmatch_init(ignore_nick_cache, (GDestroyNotify) free_cache_matches);
  529|      2|	time_tag = g_timeout_add(1000, (GSourceFunc) unignore_timeout, NULL);
  530|       |
  531|      2|        read_ignores();
  532|       |        signal_add("setup reread", (SIGNAL_FUNC) read_ignores);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  533|      2|}
ignore.c:ignore_check_replies:
  118|  34.3k|{
  119|  34.3k|	GSList *tmp;
  120|       |
  121|  34.3k|	if (text == NULL || chanrec == NULL)
  ------------------
  |  Branch (121:6): [True: 0, False: 34.3k]
  |  Branch (121:22): [True: 29.6k, False: 4.72k]
  ------------------
  122|  29.6k|		return FALSE;
  123|       |
  124|       |        /* check reply ignores */
  125|  4.72k|	for (tmp = ignores; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (125:22): [True: 0, False: 4.72k]
  ------------------
  126|      0|		IGNORE_REC *rec = tmp->data;
  127|       |
  128|      0|		if (rec->mask != NULL && rec->replies &&
  ------------------
  |  Branch (128:7): [True: 0, False: 0]
  |  Branch (128:28): [True: 0, False: 0]
  ------------------
  129|      0|		    ignore_match_level(rec, level, flags) &&
  ------------------
  |  Branch (129:7): [True: 0, False: 0]
  ------------------
  130|      0|		    ignore_match_channel(rec, chanrec->name) &&
  ------------------
  |  |  114|      0|	((rec)->channels == NULL || ((channel) != NULL && \
  |  |  ------------------
  |  |  |  Branch (114:3): [True: 0, False: 0]
  |  |  |  Branch (114:31): [True: 0, False: 0]
  |  |  ------------------
  |  |  115|      0|		strarray_find((rec)->channels, (channel)) != -1))
  |  |  ------------------
  |  |  |  Branch (115:3): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  131|      0|		    ignore_check_replies_rec(rec, chanrec, text))
  ------------------
  |  Branch (131:7): [True: 0, False: 0]
  ------------------
  132|      0|			return TRUE;
  133|      0|	}
  134|       |
  135|  4.72k|	return FALSE;
  136|  4.72k|}
ignore.c:ignore_nick_cache:
  500|   104k|{
  501|   104k|	GSList *tmp, *matches;
  502|   104k|        char *nickmask;
  503|       |
  504|   104k|	if (nick->host == NULL)
  ------------------
  |  Branch (504:6): [True: 96.4k, False: 8.51k]
  ------------------
  505|  96.4k|		return; /* don't check until host is known */
  506|       |
  507|  8.51k|        matches = NULL;
  508|  8.51k|	nickmask = g_strconcat(nick->nick, "!", nick->host, NULL);
  509|  8.51k|	for (tmp = ignores; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (509:22): [True: 0, False: 8.51k]
  ------------------
  510|      0|		IGNORE_REC *rec = tmp->data;
  511|       |
  512|      0|		if (ignore_match_nickmask(rec, nick->nick, nickmask) &&
  ------------------
  |  |  104|      0|	((rec)->mask == NULL || \
  |  |  ------------------
  |  |  |  Branch (104:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  105|      0|	(strchr((rec)->mask, '!') != NULL ? \
  |  |  ------------------
  |  |  |  Branch (105:2): [True: 0, False: 0]
  |  |  |  Branch (105:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  106|      0|		match_wildcards((rec)->mask, nickmask) : \
  |  |  107|      0|		match_wildcards((rec)->mask, nick)))
  ------------------
  513|      0|		    ignore_match_server(rec, channel->server) &&
  ------------------
  |  |  110|      0|	((rec)->servertag == NULL || ((server) != NULL && \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 0, False: 0]
  |  |  |  Branch (110:32): [True: 0, False: 0]
  |  |  ------------------
  |  |  111|      0|		g_ascii_strcasecmp((server)->tag, (rec)->servertag) == 0))
  |  |  ------------------
  |  |  |  Branch (111:3): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  514|      0|		    ignore_match_channel(rec, channel->name))
  ------------------
  |  |  114|      0|	((rec)->channels == NULL || ((channel) != NULL && \
  |  |  ------------------
  |  |  |  Branch (114:3): [True: 0, False: 0]
  |  |  |  Branch (114:31): [True: 0, False: 0]
  |  |  ------------------
  |  |  115|      0|		strarray_find((rec)->channels, (channel)) != -1))
  |  |  ------------------
  |  |  |  Branch (115:3): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  515|      0|			matches = g_slist_append(matches, rec);
  516|      0|	}
  517|  8.51k|	g_free_not_null(nickmask);
  ------------------
  |  |   64|  8.51k|#define g_free_not_null(a) g_free(a)
  ------------------
  518|       |
  519|  8.51k|	if (matches == NULL)
  ------------------
  |  Branch (519:6): [True: 8.51k, False: 0]
  ------------------
  520|  8.51k|		g_hash_table_remove(list, nick);
  521|      0|        else
  522|      0|                g_hash_table_insert(list, nick, matches);
  523|  8.51k|}
ignore.c:read_ignores:
  450|      2|{
  451|      2|	IGNORE_REC *rec;
  452|      2|	CONFIG_NODE *node;
  453|      2|	GSList *tmp;
  454|       |
  455|      2|	while (ignores != NULL)
  ------------------
  |  Branch (455:9): [True: 0, False: 2]
  ------------------
  456|      0|                ignore_destroy(ignores->data, FALSE);
  457|       |
  458|      2|	node = iconfig_node_traverse("ignores", FALSE);
  ------------------
  |  |   51|      2|#define iconfig_node_traverse(a, b) config_node_traverse(mainconfig, a, b)
  ------------------
  459|      2|	if (node == NULL) {
  ------------------
  |  Branch (459:6): [True: 2, False: 0]
  ------------------
  460|      2|		nickmatch_rebuild(nickmatch);
  461|      2|		return;
  462|      2|	}
  463|       |
  464|      0|	tmp = config_node_first(node->value);
  465|      0|	for (; tmp != NULL; tmp = config_node_next(tmp)) {
  ------------------
  |  Branch (465:9): [True: 0, False: 0]
  ------------------
  466|      0|		node = tmp->data;
  467|       |
  468|      0|		if (node->type != NODE_TYPE_BLOCK)
  ------------------
  |  Branch (468:7): [True: 0, False: 0]
  ------------------
  469|      0|			continue;
  470|       |
  471|      0|		rec = g_new0(IGNORE_REC, 1);
  ------------------
  |  Branch (471:9): [True: 0, False: 0]
  |  Branch (471:9): [True: 0, False: 0]
  ------------------
  472|      0|		ignores = g_slist_append(ignores, rec);
  473|       |
  474|      0|		rec->mask = g_strdup(config_node_get_str(node, "mask", NULL));
  475|      0|		rec->pattern = g_strdup(config_node_get_str(node, "pattern", NULL));
  476|      0|		rec->level = level2bits(config_node_get_str(node, "level", ""), NULL);
  477|      0|                rec->exception = config_node_get_bool(node, "exception", FALSE);
  478|      0|		rec->regexp = config_node_get_bool(node, "regexp", FALSE);
  479|      0|		rec->fullword = config_node_get_bool(node, "fullword", FALSE);
  480|      0|		rec->replies = config_node_get_bool(node, "replies", FALSE);
  481|      0|		rec->unignore_time = config_node_get_int(node, "unignore_time", 0);
  482|      0|		rec->servertag = g_strdup(config_node_get_str(node, "servertag", 0));
  483|       |
  484|      0|		node = iconfig_node_section(node, "channels", -1);
  ------------------
  |  |   49|      0|#define iconfig_node_section(a, b, c) config_node_section(mainconfig, a, b, c)
  ------------------
  485|      0|		if (node != NULL) rec->channels = config_node_get_list(node);
  ------------------
  |  Branch (485:7): [True: 0, False: 0]
  ------------------
  486|       |
  487|      0|		ignore_init_rec(rec);
  488|      0|	}
  489|       |
  490|      0|	nickmatch_rebuild(nickmatch);
  491|      0|}

level_get:
   56|   119k|{
   57|   119k|	int n, len, match;
   58|       |
   59|   119k|	if (g_ascii_strcasecmp(level, "ALL") == 0 || g_strcmp0(level, "*") == 0)
  ------------------
  |  Branch (59:6): [True: 6, False: 119k]
  |  Branch (59:47): [True: 0, False: 119k]
  ------------------
   60|      6|		return MSGLEVEL_ALL;
   61|       |
   62|   119k|	if (g_ascii_strcasecmp(level, "NEVER") == 0)
  ------------------
  |  Branch (62:6): [True: 4, False: 119k]
  ------------------
   63|      4|		return MSGLEVEL_NEVER;
   64|       |
   65|   119k|	if (g_ascii_strcasecmp(level, "NO_ACT") == 0)
  ------------------
  |  Branch (65:6): [True: 4, False: 119k]
  ------------------
   66|      4|		return MSGLEVEL_NO_ACT;
   67|       |
   68|   119k|	if (g_ascii_strcasecmp(level, "NOHILIGHT") == 0)
  ------------------
  |  Branch (68:6): [True: 4, False: 119k]
  ------------------
   69|      4|		return MSGLEVEL_NOHILIGHT;
   70|       |
   71|   119k|	if (g_ascii_strcasecmp(level, "HIDDEN") == 0)
  ------------------
  |  Branch (71:6): [True: 4, False: 119k]
  ------------------
   72|      4|		return MSGLEVEL_HIDDEN;
   73|       |
   74|   119k|	len = strlen(level);
   75|   119k|	if (len == 0) return 0;
  ------------------
  |  Branch (75:6): [True: 0, False: 119k]
  ------------------
   76|       |
   77|       |	/* partial match allowed, as long as it's the only one that matches */
   78|   119k|	match = 0;
   79|  2.63M|	for (n = 0; levels[n] != NULL; n++) {
  ------------------
  |  Branch (79:14): [True: 2.52M, False: 108k]
  ------------------
   80|  2.52M|		if (g_ascii_strncasecmp(levels[n], level, len) == 0) {
  ------------------
  |  Branch (80:7): [True: 20.8k, False: 2.50M]
  ------------------
   81|  20.8k|			if ((int)strlen(levels[n]) == len) {
  ------------------
  |  Branch (81:8): [True: 10.4k, False: 10.4k]
  ------------------
   82|       |				/* full match */
   83|  10.4k|				return 1L << n;
   84|  10.4k|			}
   85|  10.4k|			if (match > 0) {
  ------------------
  |  Branch (85:8): [True: 0, False: 10.4k]
  ------------------
   86|       |				/* ambiguous - abort */
   87|      0|				return 0;
   88|      0|			}
   89|  10.4k|			match = 1L << n;
   90|  10.4k|		}
   91|  2.52M|	}
   92|       |
   93|   108k|	return match;
   94|   119k|}
level2bits:
   97|   108k|{
   98|   108k|	char *orig, *str, *ptr;
   99|   108k|	int ret, singlelevel, negative;
  100|       |
  101|   108k|	if (errorp != NULL)
  ------------------
  |  Branch (101:6): [True: 0, False: 108k]
  ------------------
  102|      0|		*errorp = FALSE;
  103|       |
  104|   108k|	g_return_val_if_fail(level != NULL, 0);
  ------------------
  |  Branch (104:2): [True: 108k, False: 0]
  |  Branch (104:2): [True: 108k, False: 0]
  |  Branch (104:2): [Folded, False: 108k]
  ------------------
  105|       |
  106|   108k|	if (*level == '\0')
  ------------------
  |  Branch (106:6): [True: 4, False: 108k]
  ------------------
  107|      4|		return 0;
  108|       |
  109|   108k|	orig = str = g_strdup(level);
  110|       |
  111|   108k|	ret = 0;
  112|   616k|	for (ptr = str; ; str++) {
  113|   616k|		if (*str == ' ')
  ------------------
  |  Branch (113:7): [True: 10.4k, False: 606k]
  ------------------
  114|  10.4k|			*str++ = '\0';
  115|   606k|		else if (*str != '\0')
  ------------------
  |  Branch (115:12): [True: 497k, False: 108k]
  ------------------
  116|   497k|			continue;
  117|       |
  118|   119k|		negative = *ptr == '-';
  119|   119k|		if (*ptr == '-' || *ptr == '+') ptr++;
  ------------------
  |  Branch (119:7): [True: 0, False: 119k]
  |  Branch (119:22): [True: 0, False: 119k]
  ------------------
  120|       |
  121|   119k|		singlelevel = level_get(ptr);
  122|   119k|		if (singlelevel != 0) {
  ------------------
  |  Branch (122:7): [True: 20.8k, False: 98.3k]
  ------------------
  123|  20.8k|			ret = !negative ? (ret | singlelevel) :
  ------------------
  |  Branch (123:10): [True: 20.8k, False: 0]
  ------------------
  124|  20.8k|				(ret & ~singlelevel);
  125|  98.3k|		} else if (errorp != NULL)
  ------------------
  |  Branch (125:14): [True: 0, False: 98.3k]
  ------------------
  126|      0|			*errorp = TRUE;
  127|       |
  128|   119k|       		while (*str == ' ') str++;
  ------------------
  |  Branch (128:17): [True: 0, False: 119k]
  ------------------
  129|   119k|		if (*str == '\0') break;
  ------------------
  |  Branch (129:7): [True: 108k, False: 10.4k]
  ------------------
  130|       |
  131|  10.4k|       		ptr = str;
  132|  10.4k|	}
  133|   108k|	g_free(orig);
  134|       |
  135|   108k|	return ret;
  136|   108k|}
bits2level:
  139|      2|{
  140|      2|	GString *str;
  141|      2|	char *ret;
  142|      2|	int n;
  143|       |
  144|      2|	if (bits == 0)
  ------------------
  |  Branch (144:6): [True: 0, False: 2]
  ------------------
  145|      0|		return g_strdup("");
  146|       |
  147|       |
  148|      2|	str = g_string_new(NULL);
  149|      2|	if (bits & MSGLEVEL_NEVER)
  ------------------
  |  Branch (149:6): [True: 2, False: 0]
  ------------------
  150|      2|		g_string_append(str, "NEVER ");
  151|       |
  152|      2|	if (bits & MSGLEVEL_NO_ACT)
  ------------------
  |  Branch (152:6): [True: 2, False: 0]
  ------------------
  153|      2|		g_string_append(str, "NO_ACT ");
  154|       |
  155|      2|	if ((bits & MSGLEVEL_ALL) == MSGLEVEL_ALL) {
  ------------------
  |  Branch (155:6): [True: 2, False: 0]
  ------------------
  156|      2|		g_string_append(str, "ALL ");
  157|      2|	} else {
  158|      0|		for (n = 0; levels[n] != NULL; n++) {
  ------------------
  |  Branch (158:15): [True: 0, False: 0]
  ------------------
  159|      0|			if (bits & (1L << n))
  ------------------
  |  Branch (159:8): [True: 0, False: 0]
  ------------------
  160|      0|				g_string_append_printf(str, "%s ", levels[n]);
  161|      0|		}
  162|      0|	}
  163|       |
  164|      2|	if (bits & MSGLEVEL_NOHILIGHT)
  ------------------
  |  Branch (164:6): [True: 2, False: 0]
  ------------------
  165|      2|		g_string_append(str, "NOHILIGHT ");
  166|       |
  167|      2|	if (bits & MSGLEVEL_HIDDEN)
  ------------------
  |  Branch (167:6): [True: 2, False: 0]
  ------------------
  168|      2|		g_string_append(str, "HIDDEN ");
  169|       |
  170|      2|        if (str->len > 0)
  ------------------
  |  Branch (170:13): [True: 2, False: 0]
  ------------------
  171|      2|		g_string_truncate(str, str->len-1);
  172|       |
  173|      2|	ret = g_string_free_and_steal(str);
  174|       |
  175|      2|	return ret;
  176|      2|}

log_away_init:
  107|      2|{
  108|      2|	char *awaylog_file;
  109|       |
  110|      2|	awaylog = NULL;
  111|      2|	away_filepos = 0;
  112|      2|	away_msgs = 0;
  113|       |
  114|      2|	awaylog_file = g_strconcat(get_irssi_dir(), "/away.log", NULL);
  115|      2|	settings_add_str("log", "awaylog_file", awaylog_file);
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  116|      2|	g_free(awaylog_file);
  117|      2|	settings_add_level("log", "awaylog_level", "msgs hilight");
  ------------------
  |  |  101|      2|	settings_add_level_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  118|       |
  119|      2|	signal_add("log written", (SIGNAL_FUNC) sig_log_written);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  120|       |	signal_add("away mode changed", (SIGNAL_FUNC) sig_away_changed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  121|      2|}
log-away.c:sig_log_written:
   34|  49.2k|{
   35|  49.2k|	if (log != awaylog) return;
  ------------------
  |  Branch (35:6): [True: 0, False: 49.2k]
  ------------------
   36|       |
   37|  49.2k|        away_msgs++;
   38|  49.2k|}
log-away.c:sig_away_changed:
   99|  22.2k|{
  100|  22.2k|	if (server->usermode_away)
  ------------------
  |  Branch (100:6): [True: 10.3k, False: 11.8k]
  ------------------
  101|  10.3k|		awaylog_open();
  102|  11.8k|	else
  103|  11.8k|                awaylog_close();
  104|  22.2k|}
log-away.c:awaylog_open:
   41|  10.3k|{
   42|  10.3k|	const char *fname;
   43|  10.3k|	LOG_REC *log;
   44|  10.3k|	int level;
   45|       |
   46|  10.3k|	fname = settings_get_str("awaylog_file");
   47|  10.3k|	level = settings_get_level("awaylog_level");
   48|  10.3k|	if (*fname == '\0' || level == 0) return;
  ------------------
  |  Branch (48:6): [True: 0, False: 10.3k]
  |  Branch (48:24): [True: 0, False: 10.3k]
  ------------------
   49|       |
   50|  10.3k|	log = log_find(fname);
   51|  10.3k|	if (log != NULL && log->handle != -1)
  ------------------
  |  Branch (51:6): [True: 2.80k, False: 7.59k]
  |  Branch (51:21): [True: 2.80k, False: 0]
  ------------------
   52|  2.80k|		return; /* already open */
   53|       |
   54|  7.59k|	if (log == NULL) {
  ------------------
  |  Branch (54:6): [True: 7.59k, False: 0]
  ------------------
   55|  7.59k|		log = log_create_rec(fname, level);
   56|  7.59k|		log->temp = TRUE;
   57|  7.59k|		log_update(log);
   58|  7.59k|	}
   59|       |
   60|  7.59k|	if (!log_start_logging(log)) {
  ------------------
  |  Branch (60:6): [True: 0, False: 7.59k]
  ------------------
   61|       |		/* creating log file failed? close it. */
   62|      0|		log_close(log);
   63|      0|		return;
   64|      0|	}
   65|       |
   66|       |	/* Flush the dirty buffers to disk before acquiring the file position */
   67|  7.59k|	write_buffer_flush();
   68|       |
   69|  7.59k|	awaylog = log;
   70|       |	away_filepos = lseek(log->handle, 0, SEEK_CUR);
   71|  7.59k|	away_msgs = 0;
   72|  7.59k|}
log-away.c:awaylog_close:
   75|  11.8k|{
   76|  11.8k|	const char *fname;
   77|  11.8k|	LOG_REC *log;
   78|       |
   79|  11.8k|	fname = settings_get_str("awaylog_file");
   80|  11.8k|	if (*fname == '\0') return;
  ------------------
  |  Branch (80:6): [True: 0, False: 11.8k]
  ------------------
   81|       |
   82|  11.8k|	log = log_find(fname);
   83|  11.8k|	if (log == NULL || log->handle == -1) {
  ------------------
  |  Branch (83:6): [True: 4.20k, False: 7.59k]
  |  Branch (83:21): [True: 0, False: 7.59k]
  ------------------
   84|       |		/* awaylog not open */
   85|  4.20k|		return;
   86|  4.20k|	}
   87|       |
   88|  7.59k|	if (awaylog == log) awaylog = NULL;
  ------------------
  |  Branch (88:6): [True: 7.59k, False: 0]
  ------------------
   89|       |
   90|       |	/* Flush the dirty buffers to disk before showing the away log */
   91|  7.59k|	write_buffer_flush();
   92|       |
   93|  7.59k|	signal_emit("awaylog show", 3, log, GINT_TO_POINTER(away_msgs),
   94|       |		    GINT_TO_POINTER(away_filepos));
   95|  7.59k|	log_close(log);
   96|  7.59k|}

log_start_logging:
  102|  7.59k|{
  103|  7.59k|	char *dir;
  104|  7.59k|	struct flock lock;
  105|       |
  106|  7.59k|	g_return_val_if_fail(log != NULL, FALSE);
  ------------------
  |  Branch (106:2): [True: 7.59k, False: 0]
  |  Branch (106:2): [True: 7.59k, False: 0]
  |  Branch (106:2): [Folded, False: 7.59k]
  ------------------
  107|       |
  108|  7.59k|	if (log->handle != -1)
  ------------------
  |  Branch (108:6): [True: 0, False: 7.59k]
  ------------------
  109|      0|		return TRUE;
  110|       |
  111|       |	/* Append/create log file */
  112|  7.59k|	g_free_not_null(log->real_fname);
  ------------------
  |  |   64|  7.59k|#define g_free_not_null(a) g_free(a)
  ------------------
  113|  7.59k|	log->real_fname = log_filename(log);
  114|       |
  115|  7.59k|	if (log->real_fname != NULL &&
  ------------------
  |  Branch (115:6): [True: 7.59k, False: 0]
  ------------------
  116|  7.59k|	    g_strcmp0(log->real_fname, log->fname) != 0) {
  ------------------
  |  Branch (116:6): [True: 0, False: 7.59k]
  ------------------
  117|       |		/* path may contain variables (%time, $vars),
  118|       |		   make sure the directory is created */
  119|      0|		dir = g_path_get_dirname(log->real_fname);
  120|       |#ifdef HAVE_CAPSICUM
  121|       |		capsicum_mkdir_with_parents_wrapper(dir, log_dir_create_mode);
  122|       |#else
  123|      0|		g_mkdir_with_parents(dir, log_dir_create_mode);
  124|      0|#endif
  125|      0|		g_free(dir);
  126|      0|	}
  127|       |
  128|       |#ifdef HAVE_CAPSICUM
  129|       |	log->handle = log->real_fname == NULL ? -1 :
  130|       |		capsicum_open_wrapper(log->real_fname, O_WRONLY | O_APPEND | O_CREAT,
  131|       |		     log_file_create_mode);
  132|       |#else
  133|  7.59k|	log->handle = log->real_fname == NULL ? -1 :
  ------------------
  |  Branch (133:16): [True: 0, False: 7.59k]
  ------------------
  134|  7.59k|		open(log->real_fname, O_WRONLY | O_APPEND | O_CREAT,
  135|  7.59k|		     log_file_create_mode);
  136|  7.59k|#endif
  137|  7.59k|	if (log->handle == -1) {
  ------------------
  |  Branch (137:6): [True: 0, False: 7.59k]
  ------------------
  138|      0|		signal_emit("log create failed", 1, log);
  139|      0|		log->failed = TRUE;
  140|      0|		return FALSE;
  141|      0|	}
  142|  7.59k|        memset(&lock, 0, sizeof(lock));
  143|  7.59k|	lock.l_type = F_WRLCK;
  144|  7.59k|	if (fcntl(log->handle, F_SETLK, &lock) == -1 && errno == EACCES) {
  ------------------
  |  Branch (144:6): [True: 0, False: 7.59k]
  |  Branch (144:50): [True: 0, False: 0]
  ------------------
  145|      0|		close(log->handle);
  146|      0|		log->handle = -1;
  147|      0|		signal_emit("log locked", 1, log);
  148|      0|		log->failed = TRUE;
  149|      0|		return FALSE;
  150|      0|	}
  151|  7.59k|	lseek(log->handle, 0, SEEK_END);
  152|       |
  153|  7.59k|	log->opened = log->last = time(NULL);
  154|  7.59k|	log_write_timestamp(log->handle,
  155|  7.59k|			    settings_get_str("log_open_string"),
  156|  7.59k|			    "\n", log->last);
  157|       |
  158|  7.59k|	signal_emit("log started", 1, log);
  159|  7.59k|	log->failed = FALSE;
  160|       |	return TRUE;
  161|  7.59k|}
log_stop_logging:
  164|  7.59k|{
  165|  7.59k|	struct flock lock;
  166|       |
  167|  7.59k|	g_return_if_fail(log != NULL);
  ------------------
  |  Branch (167:2): [True: 7.59k, False: 0]
  |  Branch (167:2): [True: 7.59k, False: 0]
  |  Branch (167:2): [Folded, False: 7.59k]
  ------------------
  168|       |
  169|  7.59k|	if (log->handle == -1)
  ------------------
  |  Branch (169:6): [True: 0, False: 7.59k]
  ------------------
  170|      0|		return;
  171|       |
  172|  7.59k|	signal_emit("log stopped", 1, log);
  173|       |
  174|  7.59k|	log_write_timestamp(log->handle,
  175|  7.59k|			    settings_get_str("log_close_string"),
  176|  7.59k|			    "\n", time(NULL));
  177|       |
  178|  7.59k|        memset(&lock, 0, sizeof(lock));
  179|  7.59k|	lock.l_type = F_UNLCK;
  180|  7.59k|	fcntl(log->handle, F_SETLK, &lock);
  181|       |
  182|  7.59k|	write_buffer_flush();
  183|  7.59k|	close(log->handle);
  184|  7.59k|	log->handle = -1;
  185|  7.59k|}
log_write_rec:
  208|  49.2k|{
  209|  49.2k|        char *colorstr;
  210|  49.2k|	struct tm *tm;
  211|  49.2k|	int hour, day;
  212|       |
  213|  49.2k|	g_return_if_fail(log != NULL);
  ------------------
  |  Branch (213:2): [True: 49.2k, False: 0]
  |  Branch (213:2): [True: 49.2k, False: 0]
  |  Branch (213:2): [Folded, False: 49.2k]
  ------------------
  214|  49.2k|	g_return_if_fail(str != NULL);
  ------------------
  |  Branch (214:2): [True: 49.2k, False: 0]
  |  Branch (214:2): [True: 49.2k, False: 0]
  |  Branch (214:2): [Folded, False: 49.2k]
  ------------------
  215|       |
  216|  49.2k|	if (log->handle == -1)
  ------------------
  |  Branch (216:6): [True: 0, False: 49.2k]
  ------------------
  217|      0|		return;
  218|       |
  219|  49.2k|	if (now == (time_t) -1)
  ------------------
  |  Branch (219:6): [True: 49.2k, False: 0]
  ------------------
  220|  49.2k|		now = time(NULL);
  221|  49.2k|	tm = localtime(&now);
  222|  49.2k|	hour = tm->tm_hour;
  223|  49.2k|	day = tm->tm_mday;
  224|       |
  225|  49.2k|	tm = localtime(&log->last);
  226|  49.2k|	day -= tm->tm_mday; /* tm breaks in log_rotate_check() .. */
  227|  49.2k|	if (tm->tm_hour != hour) {
  ------------------
  |  Branch (227:6): [True: 0, False: 49.2k]
  ------------------
  228|       |		/* hour changed, check if we need to rotate log file */
  229|      0|                log_rotate_check(log);
  230|      0|	}
  231|       |
  232|  49.2k|	if (day != 0) {
  ------------------
  |  Branch (232:6): [True: 0, False: 49.2k]
  ------------------
  233|       |		/* day changed */
  234|      0|		log_write_timestamp(log->handle,
  235|      0|				    settings_get_str("log_day_changed"),
  236|      0|				    "\n", now);
  237|      0|	}
  238|       |
  239|  49.2k|	log->last = now;
  240|       |
  241|  49.2k|	if (log->colorizer == NULL)
  ------------------
  |  Branch (241:6): [True: 49.2k, False: 0]
  ------------------
  242|  49.2k|		colorstr = NULL;
  243|      0|        else
  244|      0|                str = colorstr = log->colorizer(str);
  245|       |
  246|  49.2k|        if ((level & MSGLEVEL_LASTLOG) == 0)
  ------------------
  |  Branch (246:13): [True: 49.2k, False: 0]
  ------------------
  247|  49.2k|		log_write_timestamp(log->handle, log_timestamp, str, now);
  248|      0|	else
  249|      0|		write_buffer(log->handle, str, strlen(str));
  250|  49.2k|	write_buffer(log->handle, "\n", 1);
  251|       |
  252|  49.2k|	signal_emit("log written", 2, log, str);
  253|       |
  254|  49.2k|        g_free_not_null(colorstr);
  ------------------
  |  |   64|  49.2k|#define g_free_not_null(a) g_free(a)
  ------------------
  255|  49.2k|}
log_item_find:
  268|  4.50M|{
  269|  4.50M|	GSList *tmp;
  270|       |
  271|  4.50M|	g_return_val_if_fail(log != NULL, NULL);
  ------------------
  |  Branch (271:2): [True: 4.50M, False: 0]
  |  Branch (271:2): [True: 4.50M, False: 0]
  |  Branch (271:2): [Folded, False: 4.50M]
  ------------------
  272|       |
  273|  4.50M|	for (tmp = log->items; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (273:25): [True: 0, False: 4.50M]
  ------------------
  274|      0|		LOG_ITEM_REC *rec = tmp->data;
  275|       |
  276|      0|		if (rec->type == type && itemcmp(rec->name, item) == 0 &&
  ------------------
  |  Branch (276:7): [True: 0, False: 0]
  |  Branch (276:28): [True: 0, False: 0]
  ------------------
  277|      0|		    (rec->servertag == NULL || (servertag != NULL &&
  ------------------
  |  Branch (277:8): [True: 0, False: 0]
  |  Branch (277:35): [True: 0, False: 0]
  ------------------
  278|      0|		    g_ascii_strcasecmp(rec->servertag, servertag) == 0)))
  ------------------
  |  Branch (278:7): [True: 0, False: 0]
  ------------------
  279|      0|			return rec;
  280|      0|	}
  281|       |
  282|  4.50M|	return NULL;
  283|  4.50M|}
log_file_write:
  287|  3.42M|{
  288|  3.42M|	GSList *tmp, *fallbacks;
  289|  3.42M|	char *tmpstr;
  290|  3.42M|	int found;
  291|       |
  292|  3.42M|	g_return_if_fail(str != NULL);
  ------------------
  |  Branch (292:2): [True: 3.42M, False: 0]
  |  Branch (292:2): [True: 3.42M, False: 0]
  |  Branch (292:2): [Folded, False: 3.42M]
  ------------------
  293|       |
  294|  3.42M|	if (logs == NULL)
  ------------------
  |  Branch (294:6): [True: 0, False: 3.42M]
  ------------------
  295|      0|		return;
  296|       |
  297|  3.42M|	fallbacks = NULL; found = FALSE;
  298|       |
  299|  6.85M|	for (tmp = logs; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (299:19): [True: 3.42M, False: 3.42M]
  ------------------
  300|  3.42M|		LOG_REC *rec = tmp->data;
  301|       |
  302|  3.42M|		if (rec->handle == -1)
  ------------------
  |  Branch (302:7): [True: 0, False: 3.42M]
  ------------------
  303|      0|			continue; /* log not opened yet */
  304|       |
  305|  3.42M|		if ((level & rec->level) == 0)
  ------------------
  |  Branch (305:7): [True: 3.37M, False: 49.2k]
  ------------------
  306|  3.37M|			continue;
  307|       |
  308|  49.2k|		if (rec->items == NULL)
  ------------------
  |  Branch (308:7): [True: 49.2k, False: 0]
  ------------------
  309|  49.2k|			fallbacks = g_slist_append(fallbacks, rec);
  310|      0|		else if (log_item_find(rec, LOG_ITEM_TARGET, item,
  ------------------
  |  Branch (310:12): [True: 0, False: 0]
  ------------------
  311|      0|				       server_tag) != NULL)
  312|      0|			log_write_rec(rec, str, level, t);
  313|  49.2k|	}
  314|       |
  315|  3.42M|	if (!found && !no_fallbacks && fallbacks != NULL) {
  ------------------
  |  Branch (315:6): [True: 3.42M, False: 0]
  |  Branch (315:16): [True: 3.42M, False: 0]
  |  Branch (315:33): [True: 49.2k, False: 3.37M]
  ------------------
  316|       |		/* not found from any items, so write it to all main logs */
  317|  49.2k|		tmpstr = (level & MSGLEVEL_PUBLIC) && item != NULL ?
  ------------------
  |  Branch (317:12): [True: 38, False: 49.1k]
  |  Branch (317:41): [True: 38, False: 0]
  ------------------
  318|     38|			g_strconcat(item, ": ", str, NULL) :
  319|  49.2k|			g_strdup(str);
  320|       |
  321|  98.4k|		for (tmp = fallbacks; tmp != NULL; tmp = tmp->next)
  ------------------
  |  Branch (321:25): [True: 49.2k, False: 49.2k]
  ------------------
  322|  49.2k|			log_write_rec(tmp->data, tmpstr, level, t);
  323|       |
  324|  49.2k|		g_free(tmpstr);
  325|  49.2k|	}
  326|  3.42M|        g_slist_free(fallbacks);
  327|  3.42M|}
log_find:
  330|  37.3k|{
  331|  37.3k|	GSList *tmp;
  332|       |
  333|  37.3k|	for (tmp = logs; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (333:19): [True: 10.3k, False: 27.0k]
  ------------------
  334|  10.3k|		LOG_REC *rec = tmp->data;
  335|       |
  336|  10.3k|		if (g_strcmp0(rec->fname, fname) == 0)
  ------------------
  |  Branch (336:7): [True: 10.3k, False: 0]
  ------------------
  337|  10.3k|			return rec;
  338|  10.3k|	}
  339|       |
  340|  27.0k|	return NULL;
  341|  37.3k|}
log_create_rec:
  393|  7.59k|{
  394|  7.59k|	LOG_REC *rec;
  395|       |
  396|  7.59k|	g_return_val_if_fail(fname != NULL, NULL);
  ------------------
  |  Branch (396:2): [True: 7.59k, False: 0]
  |  Branch (396:2): [True: 7.59k, False: 0]
  |  Branch (396:2): [Folded, False: 7.59k]
  ------------------
  397|       |
  398|  7.59k|	rec = log_find(fname);
  399|  7.59k|	if (rec == NULL) {
  ------------------
  |  Branch (399:6): [True: 7.59k, False: 0]
  ------------------
  400|  7.59k|		rec = g_new0(LOG_REC, 1);
  ------------------
  |  Branch (400:9): [True: 7.59k, False: 0]
  |  Branch (400:9): [True: 0, False: 7.59k]
  ------------------
  401|  7.59k|		rec->fname = g_strdup(fname);
  402|  7.59k|		rec->real_fname = log_filename(rec);
  403|  7.59k|		rec->handle = -1;
  404|  7.59k|	}
  405|       |
  406|  7.59k|	rec->level = level;
  407|  7.59k|	return rec;
  408|  7.59k|}
log_update:
  430|  7.59k|{
  431|  7.59k|	g_return_if_fail(log != NULL);
  ------------------
  |  Branch (431:2): [True: 7.59k, False: 0]
  |  Branch (431:2): [True: 7.59k, False: 0]
  |  Branch (431:2): [Folded, False: 7.59k]
  ------------------
  432|       |
  433|  7.59k|	if (log_find(log->fname) == NULL) {
  ------------------
  |  Branch (433:6): [True: 7.59k, False: 0]
  ------------------
  434|  7.59k|		logs = g_slist_append(logs, log);
  435|  7.59k|		log->handle = -1;
  436|  7.59k|	}
  437|       |
  438|  7.59k|	log_update_config(log);
  439|  7.59k|	signal_emit("log new", 1, log);
  440|  7.59k|}
log_close:
  469|  7.59k|{
  470|  7.59k|	g_return_if_fail(log != NULL);
  ------------------
  |  Branch (470:2): [True: 7.59k, False: 0]
  |  Branch (470:2): [True: 7.59k, False: 0]
  |  Branch (470:2): [Folded, False: 7.59k]
  ------------------
  471|       |
  472|  7.59k|	log_remove_config(log);
  473|  7.59k|	log_destroy(log);
  474|  7.59k|}
log_init:
  585|      2|{
  586|      2|	rotate_tag = g_timeout_add(60000, (GSourceFunc) sig_rotate_check, NULL);
  587|      2|	logs = NULL;
  588|       |
  589|      2|	settings_add_int("log", "log_create_mode",
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  590|      2|			 DEFAULT_LOG_FILE_CREATE_MODE);
  591|      2|	settings_add_str("log", "log_timestamp", "%H:%M ");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  592|      2|	settings_add_str("log", "log_open_string",
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  593|      2|			 "--- Log opened %a %b %d %H:%M:%S %Y");
  594|      2|	settings_add_str("log", "log_close_string",
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  595|      2|			 "--- Log closed %a %b %d %H:%M:%S %Y");
  596|      2|	settings_add_str("log", "log_day_changed",
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  597|      2|			 "--- Day changed %a %b %d %Y");
  598|       |
  599|      2|	read_settings();
  600|      2|        signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  601|      2|        signal_add("setup reread", (SIGNAL_FUNC) log_read_config);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  602|       |        signal_add("irssi init finished", (SIGNAL_FUNC) log_read_config);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  603|      2|}
log.c:log_filename:
   80|  15.1k|{
   81|  15.1k|	char *str, fname[1024];
   82|  15.1k|	struct tm *tm;
   83|  15.1k|        size_t ret;
   84|  15.1k|	time_t now;
   85|       |
   86|  15.1k|	now = time(NULL);
   87|  15.1k|	tm = localtime(&now);
   88|       |
   89|  15.1k|	str = convert_home(log->fname);
   90|  15.1k|	ret = strftime(fname, sizeof(fname), str, tm);
   91|  15.1k|	g_free(str);
   92|       |
   93|  15.1k|	if (ret <= 0) {
  ------------------
  |  Branch (93:6): [True: 0, False: 15.1k]
  ------------------
   94|      0|		g_warning("log_filename() : strftime() failed");
   95|      0|                return NULL;
   96|      0|	}
   97|       |
   98|  15.1k|	return g_strdup(fname);
   99|  15.1k|}
log.c:log_write_timestamp:
   66|  64.4k|{
   67|  64.4k|	struct tm *tm;
   68|  64.4k|	char str[256];
   69|       |
   70|  64.4k|	g_return_if_fail(format != NULL);
  ------------------
  |  Branch (70:2): [True: 64.4k, False: 0]
  |  Branch (70:2): [True: 64.4k, False: 0]
  |  Branch (70:2): [Folded, False: 64.4k]
  ------------------
   71|  64.4k|	if (*format == '\0') return;
  ------------------
  |  Branch (71:6): [True: 0, False: 64.4k]
  ------------------
   72|       |
   73|  64.4k|	tm = localtime(&stamp);
   74|  64.4k|	if (strftime(str, sizeof(str), format, tm) > 0)
  ------------------
  |  Branch (74:6): [True: 64.4k, False: 0]
  ------------------
   75|  64.4k|		write_buffer(handle, str, strlen(str));
   76|  64.4k|	if (text != NULL) write_buffer(handle, text, strlen(text));
  ------------------
  |  Branch (76:6): [True: 64.4k, False: 0]
  ------------------
   77|  64.4k|}
log.c:log_update_config:
  360|  7.59k|{
  361|  7.59k|	CONFIG_NODE *node;
  362|  7.59k|	char *levelstr;
  363|       |
  364|  7.59k|	if (log->temp)
  ------------------
  |  Branch (364:6): [True: 7.59k, False: 0]
  ------------------
  365|  7.59k|		return;
  366|       |
  367|      0|	node = iconfig_node_traverse("logs", TRUE);
  ------------------
  |  |   51|      0|#define iconfig_node_traverse(a, b) config_node_traverse(mainconfig, a, b)
  ------------------
  368|      0|	node = iconfig_node_section(node, log->fname, NODE_TYPE_BLOCK);
  ------------------
  |  |   49|      0|#define iconfig_node_section(a, b, c) config_node_section(mainconfig, a, b, c)
  ------------------
  369|       |
  370|      0|	if (log->autoopen)
  ------------------
  |  Branch (370:6): [True: 0, False: 0]
  ------------------
  371|      0|		iconfig_node_set_bool(node, "auto_open", TRUE);
  ------------------
  |  |   54|      0|#define iconfig_node_set_bool(a, b, c) config_node_set_bool(mainconfig, a, b, c)
  ------------------
  372|      0|	else
  373|      0|		iconfig_node_set_str(node, "auto_open", NULL);
  ------------------
  |  |   52|      0|#define iconfig_node_set_str(a, b, c) config_node_set_str(mainconfig, a, b, c)
  ------------------
  374|       |
  375|      0|	levelstr = bits2level(log->level);
  376|      0|	iconfig_node_set_str(node, "level", levelstr);
  ------------------
  |  |   52|      0|#define iconfig_node_set_str(a, b, c) config_node_set_str(mainconfig, a, b, c)
  ------------------
  377|      0|	g_free(levelstr);
  378|       |
  379|      0|	iconfig_node_set_str(node, "items", NULL);
  ------------------
  |  |   52|      0|#define iconfig_node_set_str(a, b, c) config_node_set_str(mainconfig, a, b, c)
  ------------------
  380|       |
  381|      0|	if (log->items != NULL)
  ------------------
  |  Branch (381:6): [True: 0, False: 0]
  ------------------
  382|      0|		log_items_update_config(log, node);
  383|       |
  384|      0|	signal_emit("log config save", 2, log, node);
  385|      0|}
log.c:log_remove_config:
  388|  7.59k|{
  389|  7.59k|	iconfig_set_str("logs", log->fname, NULL);
  ------------------
  |  |   45|  7.59k|#define iconfig_set_str(a, b, c) config_set_str(mainconfig, a, b, c)
  ------------------
  390|  7.59k|}
log.c:log_destroy:
  452|  7.59k|{
  453|  7.59k|	g_return_if_fail(log != NULL);
  ------------------
  |  Branch (453:2): [True: 7.59k, False: 0]
  |  Branch (453:2): [True: 7.59k, False: 0]
  |  Branch (453:2): [Folded, False: 7.59k]
  ------------------
  454|       |
  455|  7.59k|	if (log->handle != -1)
  ------------------
  |  Branch (455:6): [True: 7.59k, False: 0]
  ------------------
  456|  7.59k|		log_stop_logging(log);
  457|       |
  458|  7.59k|	logs = g_slist_remove(logs, log);
  459|  7.59k|	signal_emit("log remove", 1, log);
  460|       |
  461|  7.59k|	while (log->items != NULL)
  ------------------
  |  Branch (461:9): [True: 0, False: 7.59k]
  ------------------
  462|      0|		log_item_destroy(log, log->items->data);
  463|  7.59k|	g_free(log->fname);
  464|  7.59k|	g_free_not_null(log->real_fname);
  ------------------
  |  |   64|  7.59k|#define g_free_not_null(a) g_free(a)
  ------------------
  465|  7.59k|	g_free(log);
  466|  7.59k|}
log.c:read_settings:
  573|      2|{
  574|      2|	g_free_not_null(log_timestamp);
  ------------------
  |  |   64|      2|#define g_free_not_null(a) g_free(a)
  ------------------
  575|      2|	log_timestamp = g_strdup(settings_get_str("log_timestamp"));
  576|       |
  577|      2|	log_file_create_mode = octal2dec(settings_get_int("log_create_mode"));
  578|      2|	log_dir_create_mode = log_file_create_mode;
  579|      2|	if (log_file_create_mode & 0400) log_dir_create_mode |= 0100;
  ------------------
  |  Branch (579:6): [True: 2, False: 0]
  ------------------
  580|      2|	if (log_file_create_mode & 0040) log_dir_create_mode |= 0010;
  ------------------
  |  Branch (580:6): [True: 0, False: 2]
  ------------------
  581|      2|	if (log_file_create_mode & 0004) log_dir_create_mode |= 0001;
  ------------------
  |  Branch (581:6): [True: 0, False: 2]
  ------------------
  582|      2|}

i_input_add_full:
   58|    251|{
   59|    251|        IRSSI_INPUT_REC *rec;
   60|    251|	unsigned int result;
   61|    251|	GIOCondition cond;
   62|       |
   63|    251|	rec = g_new(IRSSI_INPUT_REC, 1);
  ------------------
  |  Branch (63:8): [True: 251, False: 0]
  |  Branch (63:8): [True: 0, False: 251]
  ------------------
   64|    251|	rec->condition = condition;
   65|    251|	rec->function = function;
   66|    251|	rec->data = data;
   67|       |
   68|    251|	cond = (GIOCondition) (G_IO_ERR|G_IO_HUP|G_IO_NVAL);
   69|    251|	if (condition & I_INPUT_READ)
  ------------------
  |  |   47|    251|#define I_INPUT_READ (1 << 0)
  ------------------
  |  Branch (69:6): [True: 251, False: 0]
  ------------------
   70|    251|		cond |= G_IO_IN|G_IO_PRI;
   71|    251|	if (condition & I_INPUT_WRITE)
  ------------------
  |  |   48|    251|#define I_INPUT_WRITE (1 << 1)
  ------------------
  |  Branch (71:6): [True: 0, False: 251]
  ------------------
   72|      0|		cond |= G_IO_OUT;
   73|       |
   74|    251|	result = g_io_add_watch_full(source, priority, cond,
   75|    251|				     irssi_io_invoke, rec, g_free);
   76|       |
   77|    251|	return result;
   78|    251|}
i_input_add:
   81|    251|{
   82|       |	return i_input_add_full(source, G_PRIORITY_DEFAULT, condition, function, data);
   83|    251|}
g_string_free_and_steal:
  142|  4.73M|{
  143|       |	return g_string_free(string, FALSE);
  144|  4.73M|}
find_substr:
  148|     12|{
  149|     12|	const char *ptr;
  150|       |
  151|     12|	g_return_val_if_fail(list != NULL, FALSE);
  ------------------
  |  Branch (151:2): [True: 12, False: 0]
  |  Branch (151:2): [True: 12, False: 0]
  |  Branch (151:2): [Folded, False: 12]
  ------------------
  152|     12|	g_return_val_if_fail(item != NULL, FALSE);
  ------------------
  |  Branch (152:2): [True: 12, False: 0]
  |  Branch (152:2): [True: 12, False: 0]
  |  Branch (152:2): [Folded, False: 12]
  ------------------
  153|       |
  154|     12|	if (*item == '\0')
  ------------------
  |  Branch (154:6): [True: 0, False: 12]
  ------------------
  155|      0|		return FALSE;
  156|       |
  157|     12|	for (;;) {
  158|     12|		while (i_isspace(*list)) list++;
  ------------------
  |  Branch (158:10): [True: 0, False: 12]
  ------------------
  159|     12|		if (*list == '\0') break;
  ------------------
  |  Branch (159:7): [True: 12, False: 0]
  ------------------
  160|       |
  161|      0|		ptr = strchr(list, ' ');
  162|      0|		if (ptr == NULL) ptr = list+strlen(list);
  ------------------
  |  Branch (162:7): [True: 0, False: 0]
  ------------------
  163|       |
  164|      0|		if (g_ascii_strncasecmp(list, item, ptr-list) == 0 &&
  ------------------
  |  Branch (164:7): [True: 0, False: 0]
  ------------------
  165|      0|		    item[ptr-list] == '\0')
  ------------------
  |  Branch (165:7): [True: 0, False: 0]
  ------------------
  166|      0|			return TRUE;
  167|       |
  168|      0|		list = ptr;
  169|      0|	}
  170|       |
  171|     12|	return FALSE;
  172|     12|}
i_slist_find_string:
  192|   232k|{
  193|   471k|	for (; list != NULL; list = list->next)
  ------------------
  |  Branch (193:9): [True: 265k, False: 205k]
  ------------------
  194|   265k|		if (g_strcmp0(list->data, key) == 0) return list;
  ------------------
  |  Branch (194:7): [True: 26.9k, False: 238k]
  ------------------
  195|       |
  196|   205k|	return NULL;
  197|   232k|}
i_slist_find_icase_string:
  200|      4|{
  201|      4|	for (; list != NULL; list = list->next)
  ------------------
  |  Branch (201:9): [True: 2, False: 2]
  ------------------
  202|      2|		if (g_ascii_strcasecmp(list->data, key) == 0) return list;
  ------------------
  |  Branch (202:7): [True: 2, False: 0]
  ------------------
  203|       |
  204|      2|	return NULL;
  205|      4|}
i_slist_free_full:
  222|  58.8k|{
  223|  58.8k|	GSList *tmp;
  224|       |
  225|  58.8k|	if (list == NULL)
  ------------------
  |  Branch (225:6): [True: 58.4k, False: 337]
  ------------------
  226|  58.4k|		return;
  227|       |
  228|  2.32k|	for (tmp = list; tmp != NULL; tmp = tmp->next)
  ------------------
  |  Branch (228:19): [True: 1.99k, False: 337]
  ------------------
  229|  1.99k|		free_func(tmp->data);
  230|       |
  231|    337|	g_slist_free(list);
  232|    337|}
i_slist_delete_string:
  246|  2.30k|{
  247|  2.30k|	GSList *l;
  248|       |
  249|  2.30k|	l = g_slist_find_custom(list, str, (GCompareFunc) g_strcmp0);
  250|  2.30k|	if (l != NULL) {
  ------------------
  |  Branch (250:6): [True: 238, False: 2.06k]
  ------------------
  251|    238|		free_func(l->data);
  252|    238|		return g_slist_delete_link(list, l);
  253|    238|	}
  254|       |
  255|  2.06k|	return list;
  256|  2.30k|}
gslistptr_to_string:
  260|  7.40k|{
  261|  7.40k|	GString *str;
  262|  7.40k|	char **data, *ret;
  263|       |
  264|  7.40k|	str = g_string_new(NULL);
  265|  14.8k|	while (list != NULL) {
  ------------------
  |  Branch (265:9): [True: 7.40k, False: 7.40k]
  ------------------
  266|  7.40k|		data = G_STRUCT_MEMBER_P(list->data, offset);
  267|       |
  268|  7.40k|		if (str->len != 0) g_string_append(str, delimiter);
  ------------------
  |  Branch (268:7): [True: 0, False: 7.40k]
  ------------------
  269|  7.40k|		g_string_append(str, *data);
  270|  7.40k|		list = list->next;
  271|  7.40k|	}
  272|       |
  273|  7.40k|	ret = g_string_free_and_steal(str);
  274|  7.40k|	return ret;
  275|  7.40k|}
i_slist_to_string:
  279|  2.97k|{
  280|  2.97k|	GString *str;
  281|  2.97k|	char *ret;
  282|       |
  283|  2.97k|	str = g_string_new(NULL);
  284|  7.07k|	while (list != NULL) {
  ------------------
  |  Branch (284:9): [True: 4.09k, False: 2.97k]
  ------------------
  285|  4.09k|		if (str->len != 0) g_string_append(str, delimiter);
  ------------------
  |  Branch (285:7): [True: 240, False: 3.85k]
  ------------------
  286|  4.09k|		g_string_append(str, list->data);
  287|       |
  288|  4.09k|		list = list->next;
  289|  4.09k|	}
  290|       |
  291|  2.97k|	ret = g_string_free_and_steal(str);
  292|  2.97k|	return ret;
  293|  2.97k|}
stristr:
  332|    400|{
  333|    400|	const char *max;
  334|    400|	int keylen, datalen, pos;
  335|       |
  336|    400|	keylen = strlen(key);
  337|    400|	datalen = strlen(data);
  338|       |
  339|    400|	if (keylen > datalen)
  ------------------
  |  Branch (339:6): [True: 168, False: 232]
  ------------------
  340|    168|		return NULL;
  341|    232|	if (keylen == 0)
  ------------------
  |  Branch (341:6): [True: 0, False: 232]
  ------------------
  342|      0|		return (char *) data;
  343|       |
  344|    232|	max = data+datalen-keylen;
  345|    232|	pos = 0;
  346|  3.04k|	while (data <= max) {
  ------------------
  |  Branch (346:9): [True: 2.81k, False: 232]
  ------------------
  347|  2.81k|		if (key[pos] == '\0')
  ------------------
  |  Branch (347:7): [True: 0, False: 2.81k]
  ------------------
  348|      0|                        return (char *) data;
  349|       |
  350|  2.81k|		if (i_toupper(data[pos]) == i_toupper(key[pos]))
  ------------------
  |  |   72|  2.81k|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
              		if (i_toupper(data[pos]) == i_toupper(key[pos]))
  ------------------
  |  |   72|  2.81k|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
  |  Branch (350:7): [True: 0, False: 0]
  |  Branch (350:7): [True: 0, False: 2.81k]
  |  Branch (350:7): [True: 2.81k, Folded]
  |  Branch (350:7): [True: 24, False: 2.79k]
  |  Branch (350:31): [True: 0, False: 0]
  |  Branch (350:31): [True: 0, False: 2.81k]
  |  Branch (350:31): [True: 2.81k, Folded]
  ------------------
  351|     24|			pos++;
  352|  2.79k|		else {
  353|  2.79k|			data++;
  354|  2.79k|                        pos = 0;
  355|  2.79k|		}
  356|  2.81k|	}
  357|       |
  358|    232|	return NULL;
  359|    232|}
convert_home:
  416|  16.9k|{
  417|  16.9k|	const char *home;
  418|       |
  419|  16.9k|	if (*path == '~' && (*(path+1) == '/' || *(path+1) == '\0')) {
  ------------------
  |  Branch (419:6): [True: 0, False: 16.9k]
  |  Branch (419:23): [True: 0, False: 0]
  |  Branch (419:43): [True: 0, False: 0]
  ------------------
  420|      0|		home = g_get_home_dir();
  421|      0|		if (home == NULL)
  ------------------
  |  Branch (421:7): [True: 0, False: 0]
  ------------------
  422|      0|			home = ".";
  423|       |
  424|      0|		return g_strconcat(home, path+1, NULL);
  425|  16.9k|	} else {
  426|  16.9k|		return g_strdup(path);
  427|  16.9k|	}
  428|  16.9k|}
i_istr_equal:
  431|  5.50M|{
  432|  5.50M|	return g_ascii_strcasecmp((const char *) v, (const char *) v2) == 0;
  433|  5.50M|}
i_istr_hash:
  441|  12.6M|{
  442|  12.6M|	const signed char *p;
  443|  12.6M|	guint32 h = 5381;
  444|       |
  445|   239M|	for (p = v; *p != '\0'; p++)
  ------------------
  |  Branch (445:14): [True: 226M, False: 12.6M]
  ------------------
  446|   226M|		h = (h << 5) + h + g_ascii_toupper(*p);
  447|       |
  448|  12.6M|	return h;
  449|  12.6M|}
octal2dec:
  525|      2|{
  526|      2|	int dec, n;
  527|       |
  528|      2|	dec = 0; n = 1;
  529|      8|	while (octal != 0) {
  ------------------
  |  Branch (529:9): [True: 6, False: 2]
  ------------------
  530|      6|		dec += n*(octal%10);
  531|      6|		octal /= 10; n *= 8;
  532|      6|	}
  533|       |
  534|      2|	return dec;
  535|      2|}
show_lowascii:
  563|  5.63k|{
  564|  5.63k|	char *ret, *p;
  565|       |
  566|  5.63k|	ret = p = g_malloc(strlen(str)*2+1);
  567|  1.84M|	while (*str != '\0') {
  ------------------
  |  Branch (567:9): [True: 1.83M, False: 5.63k]
  ------------------
  568|  1.83M|		if ((unsigned char) *str >= 32)
  ------------------
  |  Branch (568:7): [True: 1.80M, False: 29.6k]
  ------------------
  569|  1.80M|			*p++ = *str;
  570|  29.6k|		else {
  571|  29.6k|			*p++ = '^';
  572|  29.6k|			*p++ = *str + 'A'-1;
  573|  29.6k|		}
  574|  1.83M|		str++;
  575|  1.83M|	}
  576|  5.63k|	*p = '\0';
  577|       |
  578|  5.63k|	return ret;
  579|  5.63k|}
my_asctime:
  583|  5.85k|{
  584|  5.85k|	struct tm *tm;
  585|  5.85k|	char *str;
  586|  5.85k|        int len;
  587|       |
  588|  5.85k|	tm = localtime(&t);
  589|  5.85k|	if (tm == NULL)
  ------------------
  |  Branch (589:6): [True: 505, False: 5.34k]
  ------------------
  590|    505|	    return g_strdup("???");
  591|       |
  592|  5.34k|	str = g_strdup(asctime(tm));
  593|       |
  594|  5.34k|	len = strlen(str);
  595|  5.34k|	if (len > 0) str[len-1] = '\0';
  ------------------
  |  Branch (595:6): [True: 5.34k, False: 0]
  ------------------
  596|  5.34k|        return str;
  597|  5.85k|}
get_max_column_count:
  605|  4.63k|{
  606|  4.63k|        GSList *tmp;
  607|  4.63k|	int **columns, *columns_width, *columns_rows;
  608|  4.63k|	int item_pos, items_count;
  609|  4.63k|	int ret, len, max_len, n, col;
  610|       |
  611|  4.63k|	items_count = g_slist_length(items);
  612|  4.63k|	if (items_count == 0) {
  ------------------
  |  Branch (612:6): [True: 0, False: 4.63k]
  ------------------
  613|      0|		*save_column_widths = NULL;
  614|      0|                *rows = 0;
  615|      0|		return 0;
  616|      0|	}
  617|       |
  618|  4.63k|	len = max_width/(item_extra+item_min_size);
  619|  4.63k|        if (len <= 0) len = 1;
  ------------------
  |  Branch (619:13): [True: 0, False: 4.63k]
  ------------------
  620|  4.63k|	if (max_columns <= 0 || len < max_columns)
  ------------------
  |  Branch (620:6): [True: 0, False: 4.63k]
  |  Branch (620:26): [True: 4.63k, False: 0]
  ------------------
  621|  4.63k|                max_columns = len;
  622|       |
  623|  4.63k|	columns = g_new0(int *, max_columns);
  ------------------
  |  Branch (623:12): [True: 0, False: 4.63k]
  |  Branch (623:12): [True: 0, False: 4.63k]
  ------------------
  624|  4.63k|	columns_width = g_new0(int, max_columns);
  ------------------
  |  Branch (624:18): [True: 0, False: 4.63k]
  |  Branch (624:18): [True: 0, False: 4.63k]
  ------------------
  625|  4.63k|	columns_rows = g_new0(int, max_columns);
  ------------------
  |  Branch (625:17): [True: 0, False: 4.63k]
  |  Branch (625:17): [True: 0, False: 4.63k]
  ------------------
  626|       |
  627|  4.63k|	for (n = 1; n < max_columns; n++) {
  ------------------
  |  Branch (627:14): [True: 0, False: 4.63k]
  ------------------
  628|      0|		columns[n] = g_new0(int, n+1);
  ------------------
  |  Branch (628:16): [True: 0, False: 0]
  |  Branch (628:16): [True: 0, False: 0]
  ------------------
  629|      0|		columns_rows[n] = items_count <= n+1 ? 1 :
  ------------------
  |  Branch (629:21): [True: 0, False: 0]
  ------------------
  630|      0|                        (items_count+n)/(n+1);
  631|      0|	}
  632|       |
  633|       |	/* for each possible column count, save the column widths and
  634|       |	   find the biggest column count that fits to screen. */
  635|  4.63k|        item_pos = 0; max_len = 0;
  636|  19.4k|	for (tmp = items; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (636:20): [True: 14.8k, False: 4.63k]
  ------------------
  637|  14.8k|		len = item_extra+len_func(tmp->data);
  638|  14.8k|		if (max_len < len)
  ------------------
  |  Branch (638:7): [True: 7.23k, False: 7.59k]
  ------------------
  639|  7.23k|			max_len = len;
  640|       |
  641|  14.8k|		for (n = 1; n < max_columns; n++) {
  ------------------
  |  Branch (641:15): [True: 0, False: 14.8k]
  ------------------
  642|      0|			if (columns_width[n] > max_width)
  ------------------
  |  Branch (642:8): [True: 0, False: 0]
  ------------------
  643|      0|				continue; /* too wide */
  644|       |
  645|      0|			col = item_pos/columns_rows[n];
  646|      0|			if (columns[n][col] < len) {
  ------------------
  |  Branch (646:8): [True: 0, False: 0]
  ------------------
  647|      0|				columns_width[n] += len-columns[n][col];
  648|      0|                                columns[n][col] = len;
  649|      0|			}
  650|      0|		}
  651|       |
  652|  14.8k|                item_pos++;
  653|  14.8k|	}
  654|       |
  655|  4.63k|	for (n = max_columns-1; n >= 1; n--) {
  ------------------
  |  Branch (655:26): [True: 0, False: 4.63k]
  ------------------
  656|      0|		if (columns_width[n] <= max_width &&
  ------------------
  |  Branch (656:7): [True: 0, False: 0]
  ------------------
  657|      0|		    columns[n][n] > 0)
  ------------------
  |  Branch (657:7): [True: 0, False: 0]
  ------------------
  658|      0|                        break;
  659|      0|	}
  660|  4.63k|        ret = n+1;
  661|       |
  662|  4.63k|	*save_column_widths = g_new(int, ret);
  ------------------
  |  Branch (662:24): [True: 0, False: 4.63k]
  |  Branch (662:24): [True: 0, False: 4.63k]
  ------------------
  663|  4.63k|	if (ret == 1) {
  ------------------
  |  Branch (663:6): [True: 4.63k, False: 0]
  ------------------
  664|  4.63k|                **save_column_widths = max_len;
  665|  4.63k|                *rows = 1;
  666|  4.63k|	} else {
  667|      0|		memcpy(*save_column_widths, columns[ret-1], sizeof(int)*ret);
  668|      0|		*rows = columns_rows[ret-1];
  669|      0|	}
  670|       |
  671|  4.63k|	for (n = 1; n < max_columns; n++)
  ------------------
  |  Branch (671:14): [True: 0, False: 4.63k]
  ------------------
  672|      0|                g_free(columns[n]);
  673|  4.63k|	g_free(columns_width);
  674|  4.63k|	g_free(columns_rows);
  675|  4.63k|	g_free(columns);
  676|       |
  677|  4.63k|        return ret;
  678|  4.63k|}
columns_sort_list:
  682|  4.63k|{
  683|  4.63k|        GSList *tmp, *sorted;
  684|  4.63k|	int row, skip;
  685|       |
  686|  4.63k|	if (list == NULL || rows == 0)
  ------------------
  |  Branch (686:6): [True: 0, False: 4.63k]
  |  Branch (686:22): [True: 0, False: 4.63k]
  ------------------
  687|      0|                return list;
  688|       |
  689|  4.63k|	sorted = NULL;
  690|       |
  691|  9.26k|	for (row = 0; row < rows; row++) {
  ------------------
  |  Branch (691:16): [True: 4.63k, False: 4.63k]
  ------------------
  692|  4.63k|                tmp = g_slist_nth(list, row);
  693|  4.63k|                skip = 1;
  694|  19.4k|		for (; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (694:10): [True: 14.8k, False: 4.63k]
  ------------------
  695|  14.8k|			if (--skip == 0) {
  ------------------
  |  Branch (695:8): [True: 14.8k, False: 0]
  ------------------
  696|  14.8k|                                skip = rows;
  697|  14.8k|				sorted = g_slist_append(sorted, tmp->data);
  698|  14.8k|			}
  699|  14.8k|		}
  700|  4.63k|	}
  701|       |
  702|  4.63k|	g_return_val_if_fail(g_slist_length(sorted) ==
  ------------------
  |  Branch (702:2): [True: 4.63k, False: 0]
  |  Branch (702:2): [True: 4.63k, False: 0]
  |  Branch (702:2): [Folded, False: 4.63k]
  ------------------
  703|  4.63k|			     g_slist_length(list), sorted);
  704|  4.63k|        return sorted;
  705|  4.63k|}
expand_escape:
  710|    106|{
  711|    106|        char digit[4];
  712|       |
  713|    106|	switch (**data) {
  714|      0|	case 't':
  ------------------
  |  Branch (714:2): [True: 0, False: 106]
  ------------------
  715|      0|		return '\t';
  716|      0|	case 'r':
  ------------------
  |  Branch (716:2): [True: 0, False: 106]
  ------------------
  717|      0|		return '\r';
  718|      0|	case 'n':
  ------------------
  |  Branch (718:2): [True: 0, False: 106]
  ------------------
  719|      0|		return '\n';
  720|      0|	case 'e':
  ------------------
  |  Branch (720:2): [True: 0, False: 106]
  ------------------
  721|      0|		return 27; /* ESC */
  722|      0|	case '\\':
  ------------------
  |  Branch (722:2): [True: 0, False: 106]
  ------------------
  723|      0|		return '\\';
  724|       |
  725|    106|	case 'x':
  ------------------
  |  Branch (725:2): [True: 106, False: 0]
  ------------------
  726|       |                /* hex digit */
  727|    106|		if (!i_isxdigit((*data)[1]) || !i_isxdigit((*data)[2]))
  ------------------
  |  |   86|    106|#define i_isxdigit(x) isxdigit((int) (unsigned char) (x))
  ------------------
              		if (!i_isxdigit((*data)[1]) || !i_isxdigit((*data)[2]))
  ------------------
  |  |   86|    106|#define i_isxdigit(x) isxdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (727:7): [True: 0, False: 106]
  |  Branch (727:34): [True: 0, False: 106]
  ------------------
  728|      0|			return -1;
  729|       |
  730|    106|		digit[0] = (*data)[1];
  731|    106|		digit[1] = (*data)[2];
  732|    106|                digit[2] = '\0';
  733|    106|		*data += 2;
  734|    106|		return strtol(digit, NULL, 16);
  735|      0|	case 'c':
  ------------------
  |  Branch (735:2): [True: 0, False: 106]
  ------------------
  736|       |		/* check for end of string */
  737|      0|		if ((*data)[1] == '\0')
  ------------------
  |  Branch (737:7): [True: 0, False: 0]
  ------------------
  738|      0|			return 0;
  739|       |		/* control character (\cA = ^A) */
  740|      0|		(*data)++;
  741|      0|		return i_toupper(**data) - 64;
  ------------------
  |  |   72|      0|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
  |  Branch (741:10): [True: 0, False: 0]
  |  Branch (741:10): [True: 0, False: 0]
  |  Branch (741:10): [True: 0, Folded]
  ------------------
  742|      0|	case '0': case '1': case '2': case '3':
  ------------------
  |  Branch (742:2): [True: 0, False: 106]
  |  Branch (742:12): [True: 0, False: 106]
  |  Branch (742:22): [True: 0, False: 106]
  |  Branch (742:32): [True: 0, False: 106]
  ------------------
  743|      0|	case '4': case '5': case '6': case '7':
  ------------------
  |  Branch (743:2): [True: 0, False: 106]
  |  Branch (743:12): [True: 0, False: 106]
  |  Branch (743:22): [True: 0, False: 106]
  |  Branch (743:32): [True: 0, False: 106]
  ------------------
  744|       |                /* octal */
  745|      0|		digit[1] = digit[2] = digit[3] = '\0';
  746|      0|                digit[0] = (*data)[0];
  747|      0|		if ((*data)[1] >= '0' && (*data)[1] <= '7') {
  ------------------
  |  Branch (747:7): [True: 0, False: 0]
  |  Branch (747:28): [True: 0, False: 0]
  ------------------
  748|      0|			++*data;
  749|      0|			digit[1] = **data;
  750|      0|			if ((*data)[1] >= '0' && (*data)[1] <= '7') {
  ------------------
  |  Branch (750:8): [True: 0, False: 0]
  |  Branch (750:29): [True: 0, False: 0]
  ------------------
  751|      0|				++*data;
  752|      0|				digit[2] = **data;
  753|      0|			}
  754|      0|		}
  755|      0|		return strtol(digit, NULL, 8);
  756|      0|	default:
  ------------------
  |  Branch (756:2): [True: 0, False: 106]
  ------------------
  757|      0|		return -1;
  758|    106|	}
  759|    106|}
parse_uint:
  805|   319k|{
  806|   319k|	char *endptr_;
  807|   319k|	gulong parsed;
  808|       |
  809|       |	/* strtoul accepts whitespace and plus/minus signs, for some reason */
  810|   319k|	if (!i_isdigit(*nptr)) {
  ------------------
  |  |   79|   319k|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (810:6): [True: 8.75k, False: 310k]
  ------------------
  811|  8.75k|		return FALSE;
  812|  8.75k|	}
  813|       |
  814|   319k|	errno = 0;
  815|   310k|	parsed = strtoul(nptr, &endptr_, base);
  816|       |
  817|   310k|	if (errno || endptr_ == nptr || parsed >= (1U << 31)) {
  ------------------
  |  Branch (817:6): [True: 598, False: 309k]
  |  Branch (817:15): [True: 0, False: 309k]
  |  Branch (817:34): [True: 5.22k, False: 304k]
  ------------------
  818|  5.81k|		return FALSE;
  819|  5.81k|	}
  820|       |
  821|   304k|	if (endptr) {
  ------------------
  |  Branch (821:6): [True: 304k, False: 0]
  ------------------
  822|   304k|		*endptr = endptr_;
  823|   304k|	}
  824|       |
  825|   304k|	if (number) {
  ------------------
  |  Branch (825:6): [True: 304k, False: 0]
  ------------------
  826|   304k|		*number = (guint) parsed;
  827|   304k|	}
  828|       |
  829|       |	return TRUE;
  830|   310k|}
parse_size:
 1003|      2|{
 1004|      2|	guint bytes_;
 1005|      2|	int ret;
 1006|       |
 1007|      2|	ret = parse_size_uint(size, &bytes_);
 1008|       |
 1009|      2|	if (bytes_ > (1U << 31)) {
  ------------------
  |  Branch (1009:6): [True: 0, False: 2]
  ------------------
 1010|      0|		return FALSE;
 1011|      0|	}
 1012|       |
 1013|      2|	*bytes = bytes_;
 1014|      2|	return ret;
 1015|      2|}
parse_time_interval:
 1018|  37.1k|{
 1019|  37.1k|	guint msecs_;
 1020|  37.1k|	char *number;
 1021|  37.1k|	int ret, sign;
 1022|       |
 1023|  37.1k|	parse_number_sign(time, &number, &sign);
 1024|       |
 1025|  37.1k|	ret = parse_time_interval_uint(number, &msecs_);
 1026|       |
 1027|  37.1k|	if (msecs_ > (1U << 31)) {
  ------------------
  |  Branch (1027:6): [True: 0, False: 37.1k]
  ------------------
 1028|      0|		return FALSE;
 1029|      0|	}
 1030|       |
 1031|  37.1k|	*msecs = msecs_ * sign;
 1032|  37.1k|	return ret;
 1033|  37.1k|}
ascii_strdown:
 1046|   768k|{
 1047|   768k|	char *s;
 1048|       |
 1049|  11.7M|	for (s = str; *s; s++)
  ------------------
  |  Branch (1049:16): [True: 10.9M, False: 768k]
  ------------------
 1050|  10.9M|		*s = g_ascii_tolower (*s);
 1051|   768k|	return str;
 1052|   768k|}
misc.c:parse_size_uint:
  931|      2|{
  932|      2|	const char *desc;
  933|      2|	guint number, multiplier, limit;
  934|      2|	int len;
  935|       |
  936|      2|	*bytes = 0;
  937|       |
  938|       |	/* max. return value is about 1.6 years */
  939|      2|	number = 0;
  940|      4|	while (*size != '\0') {
  ------------------
  |  Branch (940:9): [True: 2, False: 2]
  ------------------
  941|      2|		if (i_isdigit(*size)) {
  ------------------
  |  |   79|      2|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (941:7): [True: 2, False: 0]
  ------------------
  942|      2|			char *endptr;
  943|      2|			if (!parse_uint(size, &endptr, 10, &number)) {
  ------------------
  |  Branch (943:8): [True: 0, False: 2]
  ------------------
  944|      0|				return FALSE;
  945|      0|			}
  946|      2|			size = endptr;
  947|      2|			continue;
  948|      2|		}
  949|       |
  950|       |		/* skip punctuation */
  951|      0|		while (*size != '\0' && i_ispunct(*size))
  ------------------
  |  |   83|      0|#define i_ispunct(x) ispunct((int) (unsigned char) (x))
  ------------------
  |  Branch (951:10): [True: 0, False: 0]
  |  Branch (951:27): [True: 0, False: 0]
  ------------------
  952|      0|			size++;
  953|       |
  954|       |		/* get description */
  955|      0|		for (len = 0, desc = size; i_isalpha(*size); size++)
  ------------------
  |  Branch (955:30): [True: 0, False: 0]
  ------------------
  956|      0|			len++;
  957|       |
  958|      0|		if (len == 0) {
  ------------------
  |  Branch (958:7): [True: 0, False: 0]
  ------------------
  959|      0|			if (number == 0) {
  ------------------
  |  Branch (959:8): [True: 0, False: 0]
  ------------------
  960|       |				/* "0" - allow it */
  961|      0|				return TRUE;
  962|      0|			}
  963|       |
  964|      0|			*bytes += number*1024; /* assume kilobytes */
  965|      0|			return FALSE;
  966|      0|		}
  967|       |
  968|      0|		multiplier = 0;
  969|      0|		limit = 0;
  970|       |
  971|      0|		if (g_ascii_strncasecmp(desc, "gbytes", len) == 0) {
  ------------------
  |  Branch (971:7): [True: 0, False: 0]
  ------------------
  972|      0|			multiplier = 1U << 30;
  973|      0|			limit = 2U << 0;
  974|      0|		}
  975|      0|		if (g_ascii_strncasecmp(desc, "mbytes", len) == 0) {
  ------------------
  |  Branch (975:7): [True: 0, False: 0]
  ------------------
  976|      0|			multiplier = 1U << 20;
  977|      0|			limit = 2U << 10;
  978|      0|		}
  979|      0|		if (g_ascii_strncasecmp(desc, "kbytes", len) == 0) {
  ------------------
  |  Branch (979:7): [True: 0, False: 0]
  ------------------
  980|      0|			multiplier = 1U << 10;
  981|      0|			limit = 2U << 20;
  982|      0|		}
  983|      0|		if (g_ascii_strncasecmp(desc, "bytes", len) == 0) {
  ------------------
  |  Branch (983:7): [True: 0, False: 0]
  ------------------
  984|      0|			multiplier = 1;
  985|      0|			limit = 2U << 30;
  986|      0|		}
  987|       |
  988|      0|		if (limit && number > limit) {
  ------------------
  |  Branch (988:7): [True: 0, False: 0]
  |  Branch (988:16): [True: 0, False: 0]
  ------------------
  989|      0|			return FALSE;
  990|      0|		}
  991|       |
  992|      0|		*bytes += number * multiplier;
  993|       |
  994|       |		/* skip punctuation */
  995|      0|		while (*size != '\0' && i_ispunct(*size))
  ------------------
  |  |   83|      0|#define i_ispunct(x) ispunct((int) (unsigned char) (x))
  ------------------
  |  Branch (995:10): [True: 0, False: 0]
  |  Branch (995:27): [True: 0, False: 0]
  ------------------
  996|      0|			size++;
  997|      0|	}
  998|       |
  999|      2|	return TRUE;
 1000|      2|}
misc.c:parse_number_sign:
  833|  37.1k|{
  834|  37.1k|	int sign_ = 1;
  835|       |
  836|  37.1k|	while (i_isspace(*input))
  ------------------
  |  Branch (836:9): [True: 0, False: 37.1k]
  ------------------
  837|      0|		input++;
  838|       |
  839|  37.1k|	if (*input == '-') {
  ------------------
  |  Branch (839:6): [True: 0, False: 37.1k]
  ------------------
  840|      0|		sign_ = -sign_;
  841|      0|		input++;
  842|      0|	}
  843|       |
  844|  37.1k|	*sign = sign_;
  845|  37.1k|	*endptr = (char *) input;
  846|       |	return TRUE;
  847|  37.1k|}
misc.c:parse_time_interval_uint:
  850|  37.1k|{
  851|  37.1k|	const char *desc;
  852|  37.1k|	guint number;
  853|  37.1k|	int len, ret, digits;
  854|       |
  855|  37.1k|	*msecs = 0;
  856|       |
  857|       |	/* max. return value is around 24 days */
  858|  37.1k|	number = 0; ret = TRUE; digits = FALSE;
  859|  37.1k|	while (i_isspace(*time))
  ------------------
  |  Branch (859:9): [True: 0, False: 37.1k]
  ------------------
  860|      0|		time++;
  861|  74.2k|	for (;;) {
  862|  74.2k|		if (i_isdigit(*time)) {
  ------------------
  |  |   79|  74.2k|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (862:7): [True: 37.1k, False: 37.1k]
  ------------------
  863|  37.1k|			char *endptr;
  864|  37.1k|			if (!parse_uint(time, &endptr, 10, &number)) {
  ------------------
  |  Branch (864:8): [True: 0, False: 37.1k]
  ------------------
  865|      0|				return FALSE;
  866|      0|			}
  867|  37.1k|			time = endptr;
  868|  37.1k|			digits = TRUE;
  869|  37.1k|			continue;
  870|  37.1k|		}
  871|       |
  872|  37.1k|		if (!digits)
  ------------------
  |  Branch (872:7): [True: 0, False: 37.1k]
  ------------------
  873|      0|			return FALSE;
  874|       |
  875|       |		/* skip punctuation */
  876|  37.1k|		while (*time != '\0' && i_ispunct(*time) && *time != '-')
  ------------------
  |  |   83|  37.1k|#define i_ispunct(x) ispunct((int) (unsigned char) (x))
  ------------------
  |  Branch (876:10): [True: 37.1k, False: 6]
  |  Branch (876:27): [True: 0, False: 37.1k]
  |  Branch (876:47): [True: 0, False: 0]
  ------------------
  877|      0|			time++;
  878|       |
  879|       |		/* get description */
  880|   140k|		for (len = 0, desc = time; i_isalpha(*time); time++)
  ------------------
  |  Branch (880:30): [True: 140k, False: 37.1k]
  ------------------
  881|   140k|			len++;
  882|       |
  883|  37.1k|		while (i_isspace(*time))
  ------------------
  |  Branch (883:10): [True: 0, False: 37.1k]
  ------------------
  884|      0|			time++;
  885|       |
  886|  37.1k|		if (len == 0) {
  ------------------
  |  Branch (886:7): [True: 6, False: 37.1k]
  ------------------
  887|      6|			if (*time != '\0')
  ------------------
  |  Branch (887:8): [True: 0, False: 6]
  ------------------
  888|      0|				return FALSE;
  889|      6|			*msecs += number * 1000; /* assume seconds */
  890|      6|			return TRUE;
  891|      6|		}
  892|       |
  893|  37.1k|		if (g_ascii_strncasecmp(desc, "days", len) == 0) {
  ------------------
  |  Branch (893:7): [True: 0, False: 37.1k]
  ------------------
  894|      0|			if (number > 24) {
  ------------------
  |  Branch (894:8): [True: 0, False: 0]
  ------------------
  895|       |				/* would overflow */
  896|      0|				return FALSE;
  897|      0|			}
  898|      0|			*msecs += number * 1000*3600*24;
  899|  37.1k|		} else if (g_ascii_strncasecmp(desc, "hours", len) == 0)
  ------------------
  |  Branch (899:14): [True: 0, False: 37.1k]
  ------------------
  900|      0|			*msecs += number * 1000*3600;
  901|  37.1k|		else if (g_ascii_strncasecmp(desc, "minutes", len) == 0 ||
  ------------------
  |  Branch (901:12): [True: 7.69k, False: 29.4k]
  ------------------
  902|  29.4k|			 g_ascii_strncasecmp(desc, "mins", len) == 0)
  ------------------
  |  Branch (902:5): [True: 0, False: 29.4k]
  ------------------
  903|  7.69k|			*msecs += number * 1000*60;
  904|  29.4k|		else if (g_ascii_strncasecmp(desc, "seconds", len) == 0 ||
  ------------------
  |  Branch (904:12): [True: 0, False: 29.4k]
  ------------------
  905|  29.4k|			 g_ascii_strncasecmp(desc, "secs", len) == 0)
  ------------------
  |  Branch (905:5): [True: 0, False: 29.4k]
  ------------------
  906|      0|			*msecs += number * 1000;
  907|  29.4k|		else if (g_ascii_strncasecmp(desc, "milliseconds", len) == 0 ||
  ------------------
  |  Branch (907:12): [True: 0, False: 29.4k]
  ------------------
  908|  29.4k|			 g_ascii_strncasecmp(desc, "millisecs", len) == 0 ||
  ------------------
  |  Branch (908:5): [True: 0, False: 29.4k]
  ------------------
  909|  29.4k|			 g_ascii_strncasecmp(desc, "mseconds", len) == 0 ||
  ------------------
  |  Branch (909:5): [True: 29.4k, False: 0]
  ------------------
  910|      0|			 g_ascii_strncasecmp(desc, "msecs", len) == 0)
  ------------------
  |  Branch (910:5): [True: 0, False: 0]
  ------------------
  911|  29.4k|			*msecs += number;
  912|      0|		else {
  913|      0|			ret = FALSE;
  914|      0|		}
  915|       |
  916|       |		/* skip punctuation */
  917|  37.1k|		while (*time != '\0' && i_ispunct(*time) && *time != '-')
  ------------------
  |  |   83|  37.1k|#define i_ispunct(x) ispunct((int) (unsigned char) (x))
  ------------------
  |  Branch (917:10): [True: 0, False: 37.1k]
  |  Branch (917:27): [True: 0, False: 0]
  |  Branch (917:47): [True: 0, False: 0]
  ------------------
  918|      0|			time++;
  919|       |
  920|  37.1k|		if (*time == '\0')
  ------------------
  |  Branch (920:7): [True: 37.1k, False: 0]
  ------------------
  921|  37.1k|			break;
  922|       |
  923|      0|		number = 0;
  924|      0|		digits = FALSE;
  925|      0|	}
  926|       |
  927|  37.1k|	return ret;
  928|  37.1k|}

module_check_cast:
   32|   197M|{
   33|   197M|	return object == NULL || module_find_id(id,
  ------------------
  |  Branch (33:9): [True: 0, False: 197M]
  |  Branch (33:27): [True: 0, False: 197M]
  ------------------
   34|   197M|		G_STRUCT_MEMBER(int, object, type_pos)) == -1 ? NULL : object;
   35|   197M|}
module_check_cast_module:
   39|  32.4M|{
   40|  32.4M|	const char *str;
   41|       |
   42|  32.4M|	if (object == NULL)
  ------------------
  |  Branch (42:6): [True: 194k, False: 32.2M]
  ------------------
   43|   194k|		return NULL;
   44|       |
   45|  32.2M|	str = module_find_id_str(module,
   46|  32.2M|				 G_STRUCT_MEMBER(int, object, type_pos));
   47|  32.2M|	return str == NULL || g_strcmp0(str, id) != 0 ? NULL : object;
  ------------------
  |  Branch (47:9): [True: 0, False: 32.2M]
  |  Branch (47:24): [True: 230k, False: 32.0M]
  ------------------
   48|  32.4M|}
module_get_uniq_id:
   52|   174k|{
   53|   174k|        GHashTable *ids;
   54|   174k|	gpointer origkey, uniqid, idp;
   55|   174k|	int ret;
   56|       |
   57|   174k|	g_return_val_if_fail(module != NULL, -1);
  ------------------
  |  Branch (57:2): [True: 174k, False: 0]
  |  Branch (57:2): [True: 174k, False: 0]
  |  Branch (57:2): [Folded, False: 174k]
  ------------------
   58|       |
   59|   174k|	ids = g_hash_table_lookup(idlookup, module);
   60|   174k|	if (ids == NULL) {
  ------------------
  |  Branch (60:6): [True: 9, False: 174k]
  ------------------
   61|       |		/* new module */
   62|      9|		ids = g_hash_table_new((GHashFunc) g_direct_hash,
   63|      9|				       (GCompareFunc) g_direct_equal);
   64|      9|		g_hash_table_insert(idlookup, g_strdup(module), ids);
   65|      9|	}
   66|       |
   67|   174k|	idp = GINT_TO_POINTER(id);
   68|   174k|	if (!g_hash_table_lookup_extended(ids, idp, &origkey, &uniqid)) {
  ------------------
  |  Branch (68:6): [True: 9, False: 174k]
  ------------------
   69|       |		/* not found */
   70|      9|		ret = next_uniq_id++;
   71|      9|                g_hash_table_insert(ids, idp, GINT_TO_POINTER(ret));
   72|      9|                g_hash_table_insert(uniqids, GINT_TO_POINTER(ret), idp);
   73|   174k|	} else {
   74|   174k|                ret = GPOINTER_TO_INT(uniqid);
   75|   174k|	}
   76|       |
   77|   174k|	return ret;
   78|   174k|}
module_get_uniq_id_str:
   82|   383M|{
   83|   383M|        GHashTable *ids;
   84|   383M|	gpointer origkey, uniqid;
   85|   383M|	int ret;
   86|       |
   87|   383M|	g_return_val_if_fail(module != NULL, -1);
  ------------------
  |  Branch (87:2): [True: 383M, False: 0]
  |  Branch (87:2): [True: 383M, False: 0]
  |  Branch (87:2): [Folded, False: 383M]
  ------------------
   88|       |
   89|   383M|	ids = g_hash_table_lookup(stridlookup, module);
   90|   383M|	if (ids == NULL) {
  ------------------
  |  Branch (90:6): [True: 6, False: 383M]
  ------------------
   91|       |		/* new module */
   92|      6|		ids = g_hash_table_new((GHashFunc) g_str_hash,
   93|      6|				       (GCompareFunc) g_str_equal);
   94|      6|		g_hash_table_insert(stridlookup, g_strdup(module), ids);
   95|      6|	}
   96|       |
   97|   383M|	if (!g_hash_table_lookup_extended(ids, id, &origkey, &uniqid)) {
  ------------------
  |  Branch (97:6): [True: 4.24k, False: 383M]
  ------------------
   98|       |		/* not found */
   99|  4.24k|		char *saveid;
  100|       |
  101|  4.24k|		saveid = g_strdup(id);
  102|  4.24k|		ret = next_uniq_id++;
  103|  4.24k|                g_hash_table_insert(ids, saveid, GINT_TO_POINTER(ret));
  104|  4.24k|                g_hash_table_insert(uniqstrids, GINT_TO_POINTER(ret), saveid);
  105|   383M|	} else {
  106|   383M|                ret = GPOINTER_TO_INT(uniqid);
  107|   383M|	}
  108|       |
  109|   383M|	return ret;
  110|   383M|}
module_find_id:
  114|   197M|{
  115|   197M|	GHashTable *idlist;
  116|   197M|	gpointer origkey, id;
  117|   197M|	int ret;
  118|       |
  119|   197M|	g_return_val_if_fail(module != NULL, -1);
  ------------------
  |  Branch (119:2): [True: 197M, False: 0]
  |  Branch (119:2): [True: 197M, False: 0]
  |  Branch (119:2): [Folded, False: 197M]
  ------------------
  120|       |
  121|   197M|	if (!g_hash_table_lookup_extended(uniqids, GINT_TO_POINTER(uniqid),
  ------------------
  |  Branch (121:6): [True: 0, False: 197M]
  ------------------
  122|   197M|					  &origkey, &id))
  123|      0|		return -1;
  124|       |
  125|       |	/* check that module matches */
  126|   197M|	idlist = g_hash_table_lookup(idlookup, module);
  127|   197M|	if (idlist == NULL)
  ------------------
  |  Branch (127:6): [True: 0, False: 197M]
  ------------------
  128|      0|		return -1;
  129|       |
  130|   197M|	ret = GPOINTER_TO_INT(id);
  131|   197M|	if (!g_hash_table_lookup_extended(idlist, id, &origkey, &id) ||
  ------------------
  |  Branch (131:6): [True: 0, False: 197M]
  ------------------
  132|   197M|	    GPOINTER_TO_INT(id) != uniqid)
  ------------------
  |  Branch (132:6): [True: 0, False: 197M]
  ------------------
  133|      0|		ret = -1;
  134|       |
  135|   197M|	return ret;
  136|   197M|}
module_find_id_str:
  140|  32.2M|{
  141|  32.2M|	GHashTable *idlist;
  142|  32.2M|	gpointer origkey, id;
  143|  32.2M|	const char *ret;
  144|       |
  145|  32.2M|	g_return_val_if_fail(module != NULL, NULL);
  ------------------
  |  Branch (145:2): [True: 32.2M, False: 0]
  |  Branch (145:2): [True: 32.2M, False: 0]
  |  Branch (145:2): [Folded, False: 32.2M]
  ------------------
  146|       |
  147|  32.2M|	if (!g_hash_table_lookup_extended(uniqstrids, GINT_TO_POINTER(uniqid),
  ------------------
  |  Branch (147:6): [True: 0, False: 32.2M]
  ------------------
  148|  32.2M|					  &origkey, &id))
  149|      0|		return NULL;
  150|       |
  151|       |	/* check that module matches */
  152|  32.2M|	idlist = g_hash_table_lookup(stridlookup, module);
  153|  32.2M|	if (idlist == NULL)
  ------------------
  |  Branch (153:6): [True: 0, False: 32.2M]
  ------------------
  154|      0|		return NULL;
  155|       |
  156|  32.2M|	ret = id;
  157|  32.2M|	if (!g_hash_table_lookup_extended(idlist, id, &origkey, &id) ||
  ------------------
  |  Branch (157:6): [True: 0, False: 32.2M]
  ------------------
  158|  32.2M|	    GPOINTER_TO_INT(id) != uniqid)
  ------------------
  |  Branch (158:6): [True: 0, False: 32.2M]
  ------------------
  159|      0|		ret = NULL;
  160|       |
  161|  32.2M|	return ret;
  162|  32.2M|}
module_register_full:
  208|     10|{
  209|     10|	MODULE_REC *module;
  210|     10|        MODULE_FILE_REC *file;
  211|       |
  212|     10|	module = module_find(name);
  213|     10|	if (module == NULL) {
  ------------------
  |  Branch (213:6): [True: 4, False: 6]
  ------------------
  214|      4|		module = g_new0(MODULE_REC, 1);
  ------------------
  |  Branch (214:12): [True: 4, False: 0]
  |  Branch (214:12): [True: 0, False: 4]
  ------------------
  215|      4|		module->name = g_strdup(name);
  216|       |
  217|      4|		modules = g_slist_prepend(modules, module);
  218|      4|	}
  219|       |
  220|     10|	file = module_file_find(module, submodule);
  221|     10|	if (file != NULL)
  ------------------
  |  Branch (221:6): [True: 0, False: 10]
  ------------------
  222|      0|		return file;
  223|       |
  224|     10|	file = g_new0(MODULE_FILE_REC, 1);
  ------------------
  |  Branch (224:9): [True: 10, False: 0]
  |  Branch (224:9): [True: 0, False: 10]
  ------------------
  225|     10|	file->root = module;
  226|     10|	file->name = g_strdup(submodule);
  227|     10|        file->defined_module_name = g_strdup(defined_module_name);
  228|       |
  229|     10|	module->files = g_slist_prepend(module->files, file);
  230|     10|	return file;
  231|     10|}
module_find:
  234|     10|{
  235|     10|	GSList *tmp;
  236|       |
  237|     16|	for (tmp = modules; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (237:22): [True: 12, False: 4]
  ------------------
  238|     12|		MODULE_REC *rec = tmp->data;
  239|       |
  240|     12|		if (g_ascii_strcasecmp(rec->name, name) == 0)
  ------------------
  |  Branch (240:7): [True: 6, False: 6]
  ------------------
  241|      6|			return rec;
  242|     12|	}
  243|       |
  244|      4|	return NULL;
  245|     10|}
module_file_find:
  248|     10|{
  249|     10|	GSList *tmp;
  250|     10|	char *tmpname, *p;
  251|     10|	tmpname = g_strdup(name);
  252|     62|	for (p = tmpname; *p != '\0'; p++) {
  ------------------
  |  Branch (252:20): [True: 52, False: 10]
  ------------------
  253|     52|		if (*p == '_')
  ------------------
  |  Branch (253:7): [True: 0, False: 52]
  ------------------
  254|      0|			*p = '-';
  255|     52|	}
  256|       |
  257|     18|	for (tmp = module->files; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (257:28): [True: 8, False: 10]
  ------------------
  258|      8|		MODULE_FILE_REC *rec = tmp->data;
  259|       |
  260|      8|		if (g_strcmp0(rec->name, name) == 0 ||
  ------------------
  |  Branch (260:7): [True: 0, False: 8]
  ------------------
  261|      8|		    g_strcmp0(rec->name, tmpname) == 0) {
  ------------------
  |  Branch (261:7): [True: 0, False: 8]
  ------------------
  262|      0|			g_free(tmpname);
  263|      0|                        return rec;
  264|      0|		}
  265|      8|	}
  266|       |
  267|     10|	g_free(tmpname);
  268|       |        return NULL;
  269|     10|}
modules_init:
  277|      2|{
  278|      2|	modules = NULL;
  279|       |
  280|      2|	idlookup = g_hash_table_new((GHashFunc) g_str_hash,
  281|      2|				    (GCompareFunc) g_str_equal);
  282|      2|	uniqids = g_hash_table_new((GHashFunc) g_direct_hash,
  283|      2|				   (GCompareFunc) g_direct_equal);
  284|       |
  285|      2|	stridlookup = g_hash_table_new((GHashFunc) g_str_hash,
  286|      2|				       (GCompareFunc) g_str_equal);
  287|      2|	uniqstrids = g_hash_table_new((GHashFunc) g_direct_hash,
  288|      2|				      (GCompareFunc) g_direct_equal);
  289|      2|	next_uniq_id = 0;
  290|      2|}

net_disconnect_later:
   96|    251|{
   97|    251|	NET_DISCONNECT_REC *rec;
   98|       |
   99|    251|	rec = g_new(NET_DISCONNECT_REC, 1);
  ------------------
  |  Branch (99:8): [True: 251, False: 0]
  |  Branch (99:8): [True: 0, False: 251]
  ------------------
  100|    251|	rec->created = time(NULL);
  101|    251|	rec->handle = handle;
  102|    251|	rec->tag = i_input_add(handle, I_INPUT_READ, (GInputFunction) sig_disconnect, rec);
  ------------------
  |  |   47|    251|#define I_INPUT_READ (1 << 0)
  ------------------
  103|       |
  104|    251|	if (timeout_tag == -1) {
  ------------------
  |  Branch (104:6): [True: 1, False: 250]
  ------------------
  105|      1|		timeout_tag = g_timeout_add(10000, (GSourceFunc)
  106|      1|					    sig_timeout_disconnect, NULL);
  107|      1|	}
  108|       |
  109|    251|	disconnects = g_slist_append(disconnects, rec);
  110|    251|}
net_disconnect_init:
  113|      2|{
  114|       |	disconnects = NULL;
  115|      2|	timeout_tag = -1;
  116|      2|}

net_sendbuffer_create:
   30|  29.4k|{
   31|  29.4k|	NET_SENDBUF_REC *rec;
   32|       |
   33|  29.4k|	g_return_val_if_fail(handle != NULL, NULL);
  ------------------
  |  Branch (33:2): [True: 29.4k, False: 0]
  |  Branch (33:2): [True: 29.4k, False: 0]
  |  Branch (33:2): [Folded, False: 29.4k]
  ------------------
   34|       |
   35|  29.4k|	rec = g_new0(NET_SENDBUF_REC, 1);
  ------------------
  |  Branch (35:8): [True: 29.4k, False: 0]
  |  Branch (35:8): [True: 0, False: 29.4k]
  ------------------
   36|  29.4k|        rec->send_tag = -1;
   37|  29.4k|	rec->handle = handle;
   38|  29.4k|	rec->bufsize = bufsize > 0 ? bufsize : DEFAULT_BUFFER_SIZE;
  ------------------
  |  |    4|  58.8k|#define DEFAULT_BUFFER_SIZE 8192
  ------------------
  |  Branch (38:17): [True: 0, False: 29.4k]
  ------------------
   39|  29.4k|	rec->def_bufsize = rec->bufsize;
   40|       |
   41|  29.4k|	return rec;
   42|  29.4k|}
net_sendbuffer_destroy:
   46|  29.4k|{
   47|  29.4k|        if (rec->send_tag != -1) g_source_remove(rec->send_tag);
  ------------------
  |  Branch (47:13): [True: 0, False: 29.4k]
  ------------------
   48|  29.4k|	if (close) net_disconnect(rec->handle);
  ------------------
  |  Branch (48:6): [True: 29.1k, False: 251]
  ------------------
   49|  29.4k|	if (rec->readbuffer != NULL) line_split_free(rec->readbuffer);
  ------------------
  |  Branch (49:6): [True: 0, False: 29.4k]
  ------------------
   50|  29.4k|	g_free_not_null(rec->buffer);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
   51|  29.4k|	g_free(rec);
   52|  29.4k|}
net_sendbuffer_send:
  114|  62.7k|{
  115|  62.7k|	int ret;
  116|       |
  117|  62.7k|	g_return_val_if_fail(rec != NULL, -1);
  ------------------
  |  Branch (117:2): [True: 62.7k, False: 0]
  |  Branch (117:2): [True: 62.7k, False: 0]
  |  Branch (117:2): [Folded, False: 62.7k]
  ------------------
  118|  62.7k|	g_return_val_if_fail(data != NULL, -1);
  ------------------
  |  Branch (118:2): [True: 62.7k, False: 0]
  |  Branch (118:2): [True: 62.7k, False: 0]
  |  Branch (118:2): [Folded, False: 62.7k]
  ------------------
  119|  62.7k|	if (size <= 0) return 0;
  ------------------
  |  Branch (119:6): [True: 0, False: 62.7k]
  ------------------
  120|       |
  121|  62.7k|	if (rec->buffer == NULL || rec->bufpos == 0) {
  ------------------
  |  Branch (121:6): [True: 62.7k, False: 0]
  |  Branch (121:29): [True: 0, False: 0]
  ------------------
  122|       |                /* nothing in buffer - transmit immediately */
  123|  62.7k|		ret = net_transmit(rec->handle, data, size);
  124|  62.7k|		if (ret < 0) return -1;
  ------------------
  |  Branch (124:7): [True: 0, False: 62.7k]
  ------------------
  125|  62.7k|		size -= ret;
  126|  62.7k|		data = ((const char *) data) + ret;
  127|  62.7k|	}
  128|       |
  129|  62.7k|	if (size <= 0)
  ------------------
  |  Branch (129:6): [True: 62.7k, False: 0]
  ------------------
  130|  62.7k|		return 0;
  131|       |
  132|       |	/* everything couldn't be sent. */
  133|      0|	if (rec->send_tag == -1) {
  ------------------
  |  Branch (133:6): [True: 0, False: 0]
  ------------------
  134|      0|		rec->send_tag =
  135|      0|		    i_input_add(rec->handle, I_INPUT_WRITE, (GInputFunction) sig_sendbuffer, rec);
  ------------------
  |  |   48|      0|#define I_INPUT_WRITE (1 << 1)
  ------------------
  136|      0|	}
  137|       |
  138|      0|	return buffer_add(rec, data, size) ? 0 : -1;
  ------------------
  |  Branch (138:9): [True: 0, False: 0]
  ------------------
  139|  62.7k|}
net_sendbuffer_handle:
  169|  29.2k|{
  170|  29.2k|	g_return_val_if_fail(rec != NULL, NULL);
  ------------------
  |  Branch (170:2): [True: 29.2k, False: 0]
  |  Branch (170:2): [True: 29.2k, False: 0]
  |  Branch (170:2): [Folded, False: 29.2k]
  ------------------
  171|       |
  172|  29.2k|	return rec->handle;
  173|  29.2k|}

irssi_ssl_init:
  389|      2|{
  390|      2|#if (OPENSSL_VERSION_NUMBER >= 0x10002000L)
  391|      2|	int success;
  392|      2|#endif
  393|       |
  394|      2|#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER)
  395|      2|	if (!OPENSSL_init_ssl(OPENSSL_INIT_SSL_DEFAULT, NULL)) {
  ------------------
  |  | 2362|      2|        (OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS)
  |  |  ------------------
  |  |  |  | 2359|      2|# define OPENSSL_INIT_LOAD_SSL_STRINGS       0x00200000L
  |  |  ------------------
  |  |                       (OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS)
  |  |  ------------------
  |  |  |  |  357|      2|# define OPENSSL_INIT_LOAD_CRYPTO_STRINGS    0x00000002L
  |  |  ------------------
  ------------------
  |  Branch (395:6): [True: 0, False: 2]
  ------------------
  396|      0|		g_error("Could not initialize OpenSSL");
  ------------------
  |  Branch (396:3): [Folded, False: 0]
  ------------------
  397|      0|		return FALSE;
  398|      0|	}
  399|       |#else
  400|       |	SSL_library_init();
  401|       |	SSL_load_error_strings();
  402|       |	OpenSSL_add_all_algorithms();
  403|       |#endif
  404|       |
  405|      2|#if (OPENSSL_VERSION_NUMBER >= 0x10002000L)
  406|      2|	store = X509_STORE_new();
  407|      2|	if (store == NULL) {
  ------------------
  |  Branch (407:6): [True: 0, False: 2]
  ------------------
  408|      0|		g_error("Could not initialize OpenSSL: X509_STORE_new() failed");
  ------------------
  |  Branch (408:3): [Folded, False: 0]
  ------------------
  409|      0|		return FALSE;
  410|      0|	}
  411|       |
  412|      2|	success = X509_STORE_set_default_paths(store);
  413|      2|	if (success == 0) {
  ------------------
  |  Branch (413:6): [True: 0, False: 2]
  ------------------
  414|      0|		g_warning("Could not load default certificates");
  415|      0|		X509_STORE_free(store);
  416|      0|		store = NULL;
  417|       |		/* Don't return an error; the user might have their own cafile/capath. */
  418|      0|	}
  419|      2|#endif
  420|       |
  421|      2|	ssl_inited = TRUE;
  422|       |
  423|       |	return TRUE;
  424|      2|}
net_start_ssl:
  819|  28.9k|{
  820|  28.9k|	GIOChannel *handle, *ssl_handle;
  821|       |
  822|  28.9k|	g_return_val_if_fail(server != NULL, NULL);
  ------------------
  |  Branch (822:2): [True: 28.9k, False: 0]
  |  Branch (822:2): [True: 28.9k, False: 0]
  |  Branch (822:2): [Folded, False: 28.9k]
  ------------------
  823|       |
  824|  28.9k|	handle = net_sendbuffer_handle(server->handle);
  825|  28.9k|	if (handle == NULL)
  ------------------
  |  Branch (825:6): [True: 0, False: 28.9k]
  ------------------
  826|      0|		return NULL;
  827|       |
  828|  28.9k|	ssl_handle  = irssi_ssl_get_iochannel(handle, server->connrec->port, server);
  829|  28.9k|	return ssl_handle;
  830|  28.9k|}
irssi_ssl_handshake:
  834|  28.9k|{
  835|  28.9k|	GIOSSLChannel *chan = (GIOSSLChannel *)handle;
  836|  28.9k|	int ret, err;
  837|  28.9k|	const char *errstr = NULL;
  838|  28.9k|	X509 *cert = NULL;
  839|  28.9k|	X509_PUBKEY *pubkey = NULL;
  840|  28.9k|	int pubkey_size = 0;
  841|  28.9k|	unsigned char *pubkey_der = NULL;
  842|  28.9k|	unsigned char *pubkey_der_tmp = NULL;
  843|  28.9k|	unsigned char pubkey_fingerprint[EVP_MAX_MD_SIZE];
  844|  28.9k|	unsigned int pubkey_fingerprint_size;
  845|  28.9k|	unsigned char cert_fingerprint[EVP_MAX_MD_SIZE];
  846|  28.9k|	unsigned int cert_fingerprint_size;
  847|  28.9k|	const char *pinned_cert_fingerprint = chan->server->connrec->tls_pinned_cert;
  848|  28.9k|	const char *pinned_pubkey_fingerprint = chan->server->connrec->tls_pinned_pubkey;
  849|  28.9k|	TLS_REC *tls = NULL;
  850|       |
  851|  28.9k|	ERR_clear_error();
  852|  28.9k|	ret = SSL_connect(chan->ssl);
  853|  28.9k|	if (ret <= 0) {
  ------------------
  |  Branch (853:6): [True: 28.9k, False: 0]
  ------------------
  854|  28.9k|		err = SSL_get_error(chan->ssl, ret);
  855|  28.9k|		switch (err) {
  856|      0|			case SSL_ERROR_WANT_READ:
  ------------------
  |  | 1182|      0|# define SSL_ERROR_WANT_READ             2
  ------------------
  |  Branch (856:4): [True: 0, False: 28.9k]
  ------------------
  857|      0|				return 1;
  858|      0|			case SSL_ERROR_WANT_WRITE:
  ------------------
  |  | 1183|      0|# define SSL_ERROR_WANT_WRITE            3
  ------------------
  |  Branch (858:4): [True: 0, False: 28.9k]
  ------------------
  859|      0|				return 3;
  860|      0|			case SSL_ERROR_ZERO_RETURN:
  ------------------
  |  | 1187|      0|# define SSL_ERROR_ZERO_RETURN           6
  ------------------
  |  Branch (860:4): [True: 0, False: 28.9k]
  ------------------
  861|      0|				g_warning("SSL handshake failed: %s", "server closed connection");
  862|      0|				return -1;
  863|  28.9k|			case SSL_ERROR_SYSCALL:
  ------------------
  |  | 1185|  28.9k|# define SSL_ERROR_SYSCALL               5/* look at error stack/return
  ------------------
  |  Branch (863:4): [True: 28.9k, False: 0]
  ------------------
  864|  28.9k|				errstr = ERR_reason_error_string(ERR_get_error());
  865|  28.9k|				if (errstr == NULL && ret == -1 && errno)
  ------------------
  |  Branch (865:9): [True: 28.9k, False: 0]
  |  Branch (865:27): [True: 28.9k, False: 0]
  |  Branch (865:40): [True: 0, False: 28.9k]
  ------------------
  866|      0|					errstr = strerror(errno);
  867|  28.9k|				g_warning("SSL handshake failed: %s", errstr != NULL ? errstr : "server closed connection unexpectedly");
  ------------------
  |  Branch (867:5): [True: 0, False: 28.9k]
  ------------------
  868|  28.9k|				return -1;
  869|      0|			default:
  ------------------
  |  Branch (869:4): [True: 0, False: 28.9k]
  ------------------
  870|      0|				errstr = ERR_reason_error_string(ERR_get_error());
  871|      0|				g_warning("SSL handshake failed: %s", errstr != NULL ? errstr : "unknown SSL error");
  ------------------
  |  Branch (871:5): [True: 0, False: 0]
  ------------------
  872|      0|				return -1;
  873|  28.9k|		}
  874|  28.9k|	}
  875|       |
  876|      0|	cert = SSL_get_peer_certificate(chan->ssl);
  877|      0|	if (cert == NULL) {
  ------------------
  |  Branch (877:6): [True: 0, False: 0]
  ------------------
  878|      0|		g_warning("TLS server supplied no certificate");
  879|      0|		ret = 0;
  880|      0|		goto done;
  881|      0|	}
  882|       |
  883|      0|	pubkey = X509_get_X509_PUBKEY(cert);
  884|      0|	if (pubkey == NULL) {
  ------------------
  |  Branch (884:6): [True: 0, False: 0]
  ------------------
  885|      0|		g_warning("TLS server supplied no certificate public key");
  886|      0|		ret = 0;
  887|      0|		goto done;
  888|      0|	}
  889|       |
  890|      0|	if (! X509_digest(cert, EVP_sha256(), cert_fingerprint, &cert_fingerprint_size)) {
  ------------------
  |  Branch (890:6): [True: 0, False: 0]
  ------------------
  891|      0|		g_warning("Unable to generate certificate fingerprint");
  892|      0|		ret = 0;
  893|      0|		goto done;
  894|      0|	}
  895|       |
  896|      0|	pubkey_size = i2d_X509_PUBKEY(pubkey, NULL);
  897|      0|	pubkey_der = pubkey_der_tmp = g_new(unsigned char, pubkey_size);
  ------------------
  |  Branch (897:32): [True: 0, False: 0]
  |  Branch (897:32): [True: 0, False: 0]
  ------------------
  898|      0|	i2d_X509_PUBKEY(pubkey, &pubkey_der_tmp);
  899|       |
  900|      0|	EVP_Digest(pubkey_der, pubkey_size, pubkey_fingerprint, &pubkey_fingerprint_size, EVP_sha256(), 0);
  901|       |
  902|      0|	tls = tls_create_rec();
  903|      0|	set_cipher_info(tls, chan->ssl);
  904|      0|	if (! set_pubkey_info(tls, cert, cert_fingerprint, cert_fingerprint_size, pubkey_fingerprint, pubkey_fingerprint_size)) {
  ------------------
  |  Branch (904:6): [True: 0, False: 0]
  ------------------
  905|      0|		g_warning("Couldn't set pubkey information");
  906|      0|		ret = 0;
  907|      0|		goto done;
  908|      0|	}
  909|      0|	set_peer_cert_chain_info(tls, chan->ssl);
  910|      0|	set_server_temporary_key_info(tls, chan->ssl);
  911|       |
  912|       |	/* Emit the TLS rec. */
  913|      0|	signal_emit("tls handshake finished", 2, chan->server, tls);
  914|       |
  915|      0|	ret = 1;
  916|       |
  917|      0|	if (pinned_cert_fingerprint != NULL && pinned_cert_fingerprint[0] != '\0') {
  ------------------
  |  Branch (917:6): [True: 0, False: 0]
  |  Branch (917:41): [True: 0, False: 0]
  ------------------
  918|      0|		ret = g_ascii_strcasecmp(pinned_cert_fingerprint, tls->certificate_fingerprint) == 0;
  919|       |
  920|      0|		if (! ret) {
  ------------------
  |  Branch (920:7): [True: 0, False: 0]
  ------------------
  921|      0|			g_warning("  Pinned certificate mismatch");
  922|      0|			goto done;
  923|      0|		}
  924|      0|	}
  925|       |
  926|      0|	if (pinned_pubkey_fingerprint != NULL && pinned_pubkey_fingerprint[0] != '\0') {
  ------------------
  |  Branch (926:6): [True: 0, False: 0]
  |  Branch (926:43): [True: 0, False: 0]
  ------------------
  927|      0|		ret = g_ascii_strcasecmp(pinned_pubkey_fingerprint, tls->public_key_fingerprint) == 0;
  928|       |
  929|      0|		if (! ret) {
  ------------------
  |  Branch (929:7): [True: 0, False: 0]
  ------------------
  930|      0|			g_warning("  Pinned public key mismatch");
  931|      0|			goto done;
  932|      0|		}
  933|      0|	}
  934|       |
  935|      0|	if (chan->verify) {
  ------------------
  |  Branch (935:6): [True: 0, False: 0]
  ------------------
  936|      0|		ret = irssi_ssl_verify(chan->ssl, chan->ctx, chan->server->connrec->address, chan->port, cert, chan->server, tls);
  937|       |
  938|      0|		if (! ret) {
  ------------------
  |  Branch (938:7): [True: 0, False: 0]
  ------------------
  939|       |			/* irssi_ssl_verify emits a warning itself. */
  940|      0|			goto done;
  941|      0|		}
  942|      0|	}
  943|       |
  944|      0|done:
  945|      0|	tls_rec_free(tls);
  946|      0|	X509_free(cert);
  947|      0|	g_free(pubkey_der);
  948|       |
  949|      0|	return ret ? 0 : -1;
  ------------------
  |  Branch (949:9): [True: 0, False: 0]
  ------------------
  950|      0|}
network-openssl.c:irssi_ssl_get_iochannel:
  445|  28.9k|{
  446|  28.9k|	GIOSSLChannel *chan;
  447|  28.9k|	GIOChannel *gchan;
  448|  28.9k|	int fd;
  449|  28.9k|	SSL *ssl;
  450|  28.9k|	SSL_CTX *ctx = NULL;
  451|       |
  452|  28.9k|	const char *mycert = server->connrec->tls_cert;
  453|  28.9k|	const char *mypkey = server->connrec->tls_pkey;
  454|  28.9k|	const char *mypass = server->connrec->tls_pass;
  455|  28.9k|	const char *cafile = server->connrec->tls_cafile;
  456|  28.9k|	const char *capath = server->connrec->tls_capath;
  457|  28.9k|	const char *ciphers = server->connrec->tls_ciphers;
  458|  28.9k|	gboolean verify = server->connrec->tls_verify;
  459|       |
  460|  28.9k|	g_return_val_if_fail(handle != NULL, NULL);
  ------------------
  |  Branch (460:2): [True: 28.9k, False: 0]
  |  Branch (460:2): [True: 28.9k, False: 0]
  |  Branch (460:2): [Folded, False: 28.9k]
  ------------------
  461|       |
  462|  28.9k|	if(!ssl_inited && !irssi_ssl_init())
  ------------------
  |  Branch (462:5): [True: 0, False: 28.9k]
  |  Branch (462:20): [True: 0, False: 0]
  ------------------
  463|      0|		return NULL;
  464|       |
  465|  28.9k|	if(!(fd = g_io_channel_unix_get_fd(handle)))
  ------------------
  |  Branch (465:5): [True: 0, False: 28.9k]
  ------------------
  466|      0|		return NULL;
  467|       |
  468|  28.9k|	ERR_clear_error();
  469|  28.9k|	ctx = SSL_CTX_new(SSLv23_client_method());
  ------------------
  |  | 1869|  28.9k|#define SSLv23_client_method    TLS_client_method
  ------------------
  470|  28.9k|	if (ctx == NULL) {
  ------------------
  |  Branch (470:6): [True: 0, False: 28.9k]
  ------------------
  471|      0|		g_error("Could not allocate memory for SSL context");
  ------------------
  |  Branch (471:3): [Folded, False: 0]
  ------------------
  472|      0|		return NULL;
  473|      0|	}
  474|  28.9k|	SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
  ------------------
  |  |  443|  28.9k|# define SSL_OP_NO_SSLv2                                 0x0
  ------------------
              	SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
  ------------------
  |  |  377|  28.9k|# define SSL_OP_NO_SSLv3                                 0x02000000U
  ------------------
  475|  28.9k|	SSL_CTX_set_default_passwd_cb(ctx, get_pem_password_callback);
  476|  28.9k|	SSL_CTX_set_default_passwd_cb_userdata(ctx, (void *)mypass);
  477|       |
  478|  28.9k|	if (ciphers != NULL && ciphers[0] != '\0') {
  ------------------
  |  Branch (478:6): [True: 0, False: 28.9k]
  |  Branch (478:25): [True: 0, False: 0]
  ------------------
  479|      0|		if (SSL_CTX_set_cipher_list(ctx, ciphers) != 1)
  ------------------
  |  Branch (479:7): [True: 0, False: 0]
  ------------------
  480|      0|			g_warning("No valid SSL cipher suite could be selected");
  481|      0|	}
  482|       |
  483|  28.9k|	if (mycert && *mycert) {
  ------------------
  |  Branch (483:6): [True: 0, False: 28.9k]
  |  Branch (483:16): [True: 0, False: 0]
  ------------------
  484|      0|		char *scert = NULL, *spkey = NULL;
  485|      0|		FILE *fp;
  486|      0|		scert = convert_home(mycert);
  487|      0|		if (mypkey && *mypkey)
  ------------------
  |  Branch (487:7): [True: 0, False: 0]
  |  Branch (487:17): [True: 0, False: 0]
  ------------------
  488|      0|			spkey = convert_home(mypkey);
  489|       |
  490|      0|		if ((fp = fopen(scert, "r"))) {
  ------------------
  |  Branch (490:7): [True: 0, False: 0]
  ------------------
  491|      0|			X509 *cert;
  492|       |			/* Let's parse the certificate by hand instead of using
  493|       |			 * SSL_CTX_use_certificate_file so that we can validate
  494|       |			 * some parts of it. */
  495|      0|			cert = PEM_read_X509(fp, NULL, get_pem_password_callback, (void *)mypass);
  496|      0|			if (cert != NULL) {
  ------------------
  |  Branch (496:8): [True: 0, False: 0]
  ------------------
  497|       |				/* Only the expiration date is checked right now */
  498|      0|				if (X509_cmp_current_time(X509_get_notAfter(cert))  <= 0 ||
  ------------------
  |  |   46|      0|#define X509_get_notAfter(x)      X509_get0_notAfter(x)
  ------------------
  |  Branch (498:9): [True: 0, False: 0]
  ------------------
  499|      0|				    X509_cmp_current_time(X509_get_notBefore(cert)) >= 0)
  ------------------
  |  |   45|      0|#define X509_get_notBefore(x)     X509_get0_notBefore(x)
  ------------------
  |  Branch (499:9): [True: 0, False: 0]
  ------------------
  500|      0|					g_warning("The client certificate is expired");
  501|       |
  502|      0|				ERR_clear_error();
  503|      0|				if (! SSL_CTX_use_certificate(ctx, cert))
  ------------------
  |  Branch (503:9): [True: 0, False: 0]
  ------------------
  504|      0|					g_warning("Loading of client certificate '%s' failed: %s", mycert, ERR_reason_error_string(ERR_get_error()));
  505|      0|				else if (! SSL_CTX_use_PrivateKey_file(ctx, spkey ? spkey : scert, SSL_FILETYPE_PEM))
  ------------------
  |  |  203|      0|# define SSL_FILETYPE_PEM        X509_FILETYPE_PEM
  |  |  ------------------
  |  |  |  |   44|      0|# define X509_FILETYPE_PEM       1
  |  |  ------------------
  ------------------
  |  Branch (505:14): [True: 0, False: 0]
  |  Branch (505:49): [True: 0, False: 0]
  ------------------
  506|      0|					g_warning("Loading of private key '%s' failed: %s", mypkey ? mypkey : mycert, ERR_reason_error_string(ERR_get_error()));
  ------------------
  |  Branch (506:6): [True: 0, False: 0]
  ------------------
  507|      0|				else if (! SSL_CTX_check_private_key(ctx))
  ------------------
  |  Branch (507:14): [True: 0, False: 0]
  ------------------
  508|      0|					g_warning("Private key does not match the certificate");
  509|       |
  510|      0|				X509_free(cert);
  511|      0|			} else
  512|      0|				g_warning("Loading of client certificate '%s' failed: %s", mycert, ERR_reason_error_string(ERR_get_error()));
  513|       |
  514|      0|			fclose(fp);
  515|      0|		} else
  516|      0|			g_warning("Could not find client certificate '%s'", scert);
  517|      0|		g_free(scert);
  518|      0|		g_free(spkey);
  519|      0|	}
  520|       |
  521|  28.9k|	if ((cafile && *cafile) || (capath && *capath)) {
  ------------------
  |  Branch (521:7): [True: 0, False: 28.9k]
  |  Branch (521:17): [True: 0, False: 0]
  |  Branch (521:30): [True: 0, False: 28.9k]
  |  Branch (521:40): [True: 0, False: 0]
  ------------------
  522|      0|		char *scafile = NULL;
  523|      0|		char *scapath = NULL;
  524|      0|		if (cafile && *cafile)
  ------------------
  |  Branch (524:7): [True: 0, False: 0]
  |  Branch (524:17): [True: 0, False: 0]
  ------------------
  525|      0|			scafile = convert_home(cafile);
  526|      0|		if (capath && *capath)
  ------------------
  |  Branch (526:7): [True: 0, False: 0]
  |  Branch (526:17): [True: 0, False: 0]
  ------------------
  527|      0|			scapath = convert_home(capath);
  528|      0|		if (! SSL_CTX_load_verify_locations(ctx, scafile, scapath)) {
  ------------------
  |  Branch (528:7): [True: 0, False: 0]
  ------------------
  529|      0|			g_warning("Could not load CA list for verifying TLS server certificate");
  530|      0|			g_free(scafile);
  531|      0|			g_free(scapath);
  532|      0|			SSL_CTX_free(ctx);
  533|      0|			return NULL;
  534|      0|		}
  535|      0|		g_free(scafile);
  536|      0|		g_free(scapath);
  537|      0|		verify = TRUE;
  538|      0|	}
  539|  28.9k|#if (OPENSSL_VERSION_NUMBER >= 0x10002000L)
  540|  28.9k|	  else if (store != NULL) {
  ------------------
  |  Branch (540:13): [True: 28.9k, False: 0]
  ------------------
  541|       |		/* Make sure to increment the refcount every time the store is
  542|       |		 * used, that's essential not to get it free'd by OpenSSL when
  543|       |		 * the SSL_CTX is destroyed. */
  544|  28.9k|		X509_STORE_up_ref(store);
  545|  28.9k|		SSL_CTX_set_cert_store(ctx, store);
  546|  28.9k|	}
  547|       |#else
  548|       |	  else {
  549|       |		if (!SSL_CTX_set_default_verify_paths(ctx))
  550|       |			g_warning("Could not load default certificates");
  551|       |	}
  552|       |#endif
  553|       |
  554|  28.9k|	if(!(ssl = SSL_new(ctx)))
  ------------------
  |  Branch (554:5): [True: 0, False: 28.9k]
  ------------------
  555|      0|	{
  556|      0|		g_warning("Failed to allocate SSL structure");
  557|      0|		SSL_CTX_free(ctx);
  558|      0|		return NULL;
  559|      0|	}
  560|       |
  561|  28.9k|	if(!SSL_set_fd(ssl, fd))
  ------------------
  |  Branch (561:5): [True: 0, False: 28.9k]
  ------------------
  562|      0|	{
  563|      0|		g_warning("Failed to associate socket to SSL stream");
  564|      0|		SSL_free(ssl);
  565|      0|		SSL_CTX_free(ctx);
  566|      0|		return NULL;
  567|      0|	}
  568|       |
  569|  28.9k|#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
  570|  28.9k|	SSL_set_tlsext_host_name(ssl, server->connrec->address);
  ------------------
  |  |  257|  28.9k|        SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,\
  |  |  ------------------
  |  |  |  | 1232|  28.9k|# define SSL_CTRL_SET_TLSEXT_HOSTNAME            55
  |  |  ------------------
  |  |                       SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,\
  |  |  ------------------
  |  |  |  |  157|  28.9k|# define TLSEXT_NAMETYPE_host_name 0
  |  |  ------------------
  |  |  258|  28.9k|                (void *)name)
  ------------------
  571|  28.9k|#endif
  572|       |
  573|  28.9k|	SSL_set_mode(ssl, SSL_MODE_ENABLE_PARTIAL_WRITE |
  ------------------
  |  |  599|  28.9k|        SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL)
  |  |  ------------------
  |  |  |  | 1219|  28.9k|# define SSL_CTRL_MODE                           33
  |  |  ------------------
  ------------------
  574|  28.9k|			SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);
  575|       |
  576|  28.9k|	chan = g_new0(GIOSSLChannel, 1);
  ------------------
  |  Branch (576:9): [True: 28.9k, False: 0]
  |  Branch (576:9): [True: 0, False: 28.9k]
  ------------------
  577|  28.9k|	chan->fd = fd;
  578|  28.9k|	chan->giochan = handle;
  579|  28.9k|	chan->ssl = ssl;
  580|  28.9k|	chan->ctx = ctx;
  581|  28.9k|	chan->server = server;
  582|  28.9k|	chan->port = port;
  583|  28.9k|	chan->verify = verify;
  584|       |
  585|  28.9k|	gchan = (GIOChannel *)chan;
  586|  28.9k|	gchan->funcs = &irssi_ssl_channel_funcs;
  587|  28.9k|	g_io_channel_init(gchan);
  588|  28.9k|	gchan->is_readable = gchan->is_writeable = TRUE;
  589|  28.9k|	gchan->use_buffer = FALSE;
  590|       |
  591|  28.9k|	return gchan;
  592|  28.9k|}
network-openssl.c:irssi_ssl_close:
  350|  28.9k|{
  351|  28.9k|	GIOSSLChannel *chan = (GIOSSLChannel *)handle;
  352|       |
  353|  28.9k|	return chan->giochan->funcs->io_close(handle, gerr);
  354|  28.9k|}
network-openssl.c:irssi_ssl_free:
   86|  28.9k|{
   87|  28.9k|	GIOSSLChannel *chan = (GIOSSLChannel *)handle;
   88|  28.9k|	g_io_channel_unref(chan->giochan);
   89|  28.9k|	SSL_free(chan->ssl);
   90|  28.9k|	SSL_CTX_free(chan->ctx);
   91|  28.9k|	g_free(chan);
   92|  28.9k|}

net_disconnect:
  237|  29.1k|{
  238|  29.1k|	g_return_if_fail(handle != NULL);
  ------------------
  |  Branch (238:2): [True: 29.1k, False: 0]
  |  Branch (238:2): [True: 29.1k, False: 0]
  |  Branch (238:2): [Folded, False: 29.1k]
  ------------------
  239|       |
  240|  29.1k|	g_io_channel_shutdown(handle, TRUE, NULL);
  241|  29.1k|	g_io_channel_unref(handle);
  242|  29.1k|}
net_transmit:
  343|  62.7k|{
  344|  62.7k|        gsize ret;
  345|  62.7k|	GIOStatus status;
  346|  62.7k|	GError *err = NULL;
  347|       |
  348|  62.7k|	g_return_val_if_fail(handle != NULL, -1);
  ------------------
  |  Branch (348:2): [True: 62.7k, False: 0]
  |  Branch (348:2): [True: 62.7k, False: 0]
  |  Branch (348:2): [Folded, False: 62.7k]
  ------------------
  349|  62.7k|	g_return_val_if_fail(data != NULL, -1);
  ------------------
  |  Branch (349:2): [True: 62.7k, False: 0]
  |  Branch (349:2): [True: 62.7k, False: 0]
  |  Branch (349:2): [Folded, False: 62.7k]
  ------------------
  350|       |
  351|  62.7k|	status = g_io_channel_write_chars(handle, (char *) data, len, &ret, &err);
  352|  62.7k|	if (err != NULL) {
  ------------------
  |  Branch (352:6): [True: 0, False: 62.7k]
  ------------------
  353|      0|	        g_warning("%s", err->message);
  354|      0|	        g_error_free(err);
  355|      0|	}
  356|  62.7k|	if (status == G_IO_STATUS_ERROR)
  ------------------
  |  Branch (356:6): [True: 0, False: 62.7k]
  ------------------
  357|      0|		return -1;
  358|       |
  359|  62.7k|	return ret;
  360|  62.7k|}

nicklist_insert:
   81|  88.1k|{
   82|       |	/*MODULE_DATA_INIT(nick);*/
   83|       |
   84|  88.1k|	nick->type = module_get_uniq_id("NICK", 0);
   85|  88.1k|        nick->chat_type = channel->chat_type;
   86|       |
   87|  88.1k|        nick_hash_add(channel, nick);
   88|  88.1k|	signal_emit("nicklist new", 2, channel, nick);
   89|  88.1k|}
nicklist_set_host:
   93|  95.7k|{
   94|  95.7k|        g_return_if_fail(channel != NULL);
  ------------------
  |  Branch (94:9): [True: 95.7k, False: 0]
  |  Branch (94:9): [True: 95.7k, False: 0]
  |  Branch (94:9): [Folded, False: 95.7k]
  ------------------
   95|  95.7k|        g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (95:9): [True: 95.7k, False: 0]
  |  Branch (95:9): [True: 95.7k, False: 0]
  |  Branch (95:9): [Folded, False: 95.7k]
  ------------------
   96|  95.7k|	g_return_if_fail(host != NULL);
  ------------------
  |  Branch (96:2): [True: 6.97k, False: 88.7k]
  |  Branch (96:2): [True: 6.97k, False: 88.7k]
  |  Branch (96:2): [Folded, False: 6.97k]
  ------------------
   97|       |
   98|  6.97k|        g_free_not_null(nick->host);
  ------------------
  |  |   64|  6.97k|#define g_free_not_null(a) g_free(a)
  ------------------
   99|  6.97k|	nick->host = g_strdup(host);
  100|       |
  101|  6.97k|        signal_emit("nicklist host changed", 2, channel, nick);
  102|  6.97k|}
nicklist_set_account:
  105|  5.91k|{
  106|  5.91k|	g_free(nick->account);
  107|  5.91k|	nick->account = g_strdup(account);
  108|       |
  109|  5.91k|	signal_emit("nicklist account changed", 2, channel, nick);
  110|  5.91k|}
nicklist_remove:
  129|  4.86k|{
  130|  4.86k|	g_return_if_fail(IS_CHANNEL(channel));
  ------------------
  |  Branch (130:2): [True: 4.86k, False: 0]
  |  Branch (130:2): [True: 4.86k, False: 0]
  |  Branch (130:2): [True: 4.86k, False: 0]
  |  Branch (130:2): [Folded, False: 4.86k]
  ------------------
  131|  4.86k|	g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (131:2): [True: 4.86k, False: 0]
  |  Branch (131:2): [True: 4.86k, False: 0]
  |  Branch (131:2): [Folded, False: 4.86k]
  ------------------
  132|       |
  133|  4.86k|        nick_hash_remove(channel, nick);
  134|  4.86k|	nicklist_destroy(channel, nick);
  135|  4.86k|}
nicklist_rename:
  168|  10.4k|{
  169|       |	nicklist_rename_list(server, NULL, old_nick, new_nick,
  170|  10.4k|			     nicklist_get_same(server, old_nick));
  171|  10.4k|}
nicklist_find:
  224|  1.52M|{
  225|  1.52M|	g_return_val_if_fail(IS_CHANNEL(channel), NULL);
  ------------------
  |  Branch (225:2): [True: 1.52M, False: 0]
  |  Branch (225:2): [True: 1.52M, False: 0]
  |  Branch (225:2): [True: 1.52M, False: 0]
  |  Branch (225:2): [Folded, False: 1.52M]
  ------------------
  226|  1.52M|	g_return_val_if_fail(nick != NULL, NULL);
  ------------------
  |  Branch (226:2): [True: 1.34M, False: 175k]
  |  Branch (226:2): [True: 1.34M, False: 175k]
  |  Branch (226:2): [Folded, False: 1.34M]
  ------------------
  227|       |
  228|  1.34M|	return g_hash_table_lookup(channel->nicks, nick);
  229|  1.52M|}
nicklist_getnicks:
  288|  5.26k|{
  289|  5.26k|	GSList *list;
  290|       |
  291|  5.26k|	g_return_val_if_fail(IS_CHANNEL(channel), NULL);
  ------------------
  |  Branch (291:2): [True: 5.26k, False: 0]
  |  Branch (291:2): [True: 5.26k, False: 0]
  |  Branch (291:2): [True: 5.26k, False: 0]
  |  Branch (291:2): [Folded, False: 5.26k]
  ------------------
  292|       |
  293|  5.26k|	list = NULL;
  294|  5.26k|	g_hash_table_foreach(channel->nicks, (GHFunc) get_nicks_hash, &list);
  295|  5.26k|	return list;
  296|  5.26k|}
nicklist_get_same:
  299|  73.9k|{
  300|  73.9k|	GSList *tmp;
  301|  73.9k|	GSList *list = NULL;
  302|       |
  303|  73.9k|	g_return_val_if_fail(IS_SERVER(server), NULL);
  ------------------
  |  Branch (303:2): [True: 73.9k, False: 0]
  |  Branch (303:2): [True: 73.9k, False: 0]
  |  Branch (303:2): [True: 73.9k, False: 0]
  |  Branch (303:2): [Folded, False: 73.9k]
  ------------------
  304|       |
  305|  1.39M|	for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (305:31): [True: 1.31M, False: 73.9k]
  ------------------
  306|  1.31M|		NICK_REC *nick_rec;
  307|  1.31M|		CHANNEL_REC *channel = tmp->data;
  308|       |
  309|  1.31M|		for (nick_rec = g_hash_table_lookup(channel->nicks, nick);
  310|  1.37M|		     nick_rec != NULL;
  ------------------
  |  Branch (310:8): [True: 54.7k, False: 1.31M]
  ------------------
  311|  1.31M|		     nick_rec = nick_rec->next) {
  312|  54.7k|			list = g_slist_append(list, channel);
  313|  54.7k|			list = g_slist_append(list, nick_rec);
  314|  54.7k|		}
  315|  1.31M|	}
  316|       |
  317|  73.9k|	return list;
  318|  73.9k|}
nicklist_compare:
  361|   311k|{
  362|   311k|	int i;
  363|       |
  364|   311k|	if (p1 == NULL) return -1;
  ------------------
  |  Branch (364:6): [True: 0, False: 311k]
  ------------------
  365|   311k|	if (p2 == NULL) return 1;
  ------------------
  |  Branch (365:6): [True: 0, False: 311k]
  ------------------
  366|       |
  367|   311k|	if (p1->prefixes[0] == p2->prefixes[0])
  ------------------
  |  Branch (367:6): [True: 293k, False: 18.0k]
  ------------------
  368|   293k|		return g_ascii_strcasecmp(p1->nick, p2->nick);
  369|       |
  370|  18.0k|	if (!p1->prefixes[0])
  ------------------
  |  Branch (370:6): [True: 7.50k, False: 10.5k]
  ------------------
  371|  7.50k|		return 1;
  372|  10.5k|	if (!p2->prefixes[0])
  ------------------
  |  Branch (372:6): [True: 6.52k, False: 4.04k]
  ------------------
  373|  6.52k|		return -1;
  374|       |
  375|       |	/* They aren't equal.  We've taken care of that already.
  376|       |	 * The first one we encounter in this list is the greater.
  377|       |	 */
  378|       |
  379|  6.27k|	for (i = 0; nick_prefix[i] != '\0'; i++) {
  ------------------
  |  Branch (379:14): [True: 6.26k, False: 14]
  ------------------
  380|  6.26k|		if (p1->prefixes[0] == nick_prefix[i])
  ------------------
  |  Branch (380:7): [True: 2.01k, False: 4.25k]
  ------------------
  381|  2.01k|			return -1;
  382|  4.25k|		if (p2->prefixes[0] == nick_prefix[i])
  ------------------
  |  Branch (382:7): [True: 2.02k, False: 2.23k]
  ------------------
  383|  2.02k|			return 1;
  384|  4.25k|	}
  385|       |
  386|       |	/* we should never have gotten here... */
  387|     14|	return g_ascii_strcasecmp(p1->nick, p2->nick);
  388|  4.04k|}
nicklist_update_flags:
  420|  41.8k|{
  421|  41.8k|	nicklist_update_flags_list(server, gone, serverop,
  422|  41.8k|				   nicklist_get_same(server, nick));
  423|  41.8k|}
nicklist_set_own:
  434|  5.64k|{
  435|  5.64k|	NICK_REC *first, *next;
  436|       |
  437|  5.64k|        channel->ownnick = nick;
  438|       |
  439|       |	/* move our nick in the list to first, makes some things easier
  440|       |	   (like handling multiple identical nicks in fe-messages.c) */
  441|  5.64k|	first = g_hash_table_lookup(channel->nicks, nick->nick);
  442|  5.64k|	if (first->next == NULL)
  ------------------
  |  Branch (442:6): [True: 5.24k, False: 397]
  ------------------
  443|  5.24k|		return;
  444|       |
  445|    397|	next = nick->next;
  446|    397|	nick->next = first;
  447|       |
  448|    397|	while (first->next != nick)
  ------------------
  |  Branch (448:9): [True: 0, False: 397]
  ------------------
  449|      0|                first = first->next;
  450|    397|	first->next = next;
  451|       |
  452|    397|        g_hash_table_insert(channel->nicks, nick->nick, nick);
  453|    397|}
nick_match_msg:
  506|  8.13k|{
  507|  8.13k|	const char *msgstart, *orignick;
  508|  8.13k|	int len, fullmatch;
  509|       |
  510|  8.13k|	g_return_val_if_fail(nick != NULL, FALSE);
  ------------------
  |  Branch (510:2): [True: 8.13k, False: 0]
  |  Branch (510:2): [True: 8.13k, False: 0]
  |  Branch (510:2): [Folded, False: 8.13k]
  ------------------
  511|  8.13k|	g_return_val_if_fail(msg != NULL, FALSE);
  ------------------
  |  Branch (511:2): [True: 8.13k, False: 0]
  |  Branch (511:2): [True: 8.13k, False: 0]
  |  Branch (511:2): [Folded, False: 8.13k]
  ------------------
  512|       |
  513|  8.13k|	if (channel != NULL && channel->server->nick_match_msg != NULL)
  ------------------
  |  Branch (513:6): [True: 1.83k, False: 6.30k]
  |  Branch (513:25): [True: 0, False: 1.83k]
  ------------------
  514|      0|		return channel->server->nick_match_msg(msg, nick);
  515|       |
  516|       |	/* first check for identical match */
  517|  8.13k|	len = strlen(nick);
  518|  8.13k|	if (g_ascii_strncasecmp(msg, nick, len) == 0 &&
  ------------------
  |  Branch (518:6): [True: 19, False: 8.11k]
  ------------------
  519|     19|	    !isalnumhigh((int) msg[len]))
  ------------------
  |  |   31|     19|        (i_isalnum(a) || (unsigned char) (a) >= 128)
  |  |  ------------------
  |  |  |  |   74|     19|#define i_isalnum(x) isalnum((int) (unsigned char) (x))
  |  |  ------------------
  |  |  |  Branch (31:26): [True: 0, False: 19]
  |  |  ------------------
  ------------------
  |  Branch (519:7): [True: 0, False: 19]
  ------------------
  520|     19|		return TRUE;
  521|       |
  522|  8.11k|	orignick = nick;
  523|  8.23k|	for (;;) {
  524|  8.23k|		nick = orignick;
  525|  8.23k|		msgstart = msg;
  526|  8.23k|                fullmatch = TRUE;
  527|       |
  528|       |		/* check if it matches for alphanumeric parts of nick */
  529|  10.7k|		while (*nick != '\0' && *msg != '\0') {
  ------------------
  |  Branch (529:10): [True: 9.59k, False: 1.11k]
  |  Branch (529:27): [True: 7.66k, False: 1.93k]
  ------------------
  530|  7.66k|			if (i_toupper(*nick) == i_toupper(*msg)) {
  ------------------
  |  |   72|  7.66k|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
              			if (i_toupper(*nick) == i_toupper(*msg)) {
  ------------------
  |  |   72|  7.66k|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
  |  Branch (530:8): [True: 0, False: 0]
  |  Branch (530:8): [True: 0, False: 7.66k]
  |  Branch (530:8): [True: 7.66k, Folded]
  |  Branch (530:8): [True: 0, False: 7.66k]
  |  Branch (530:28): [True: 0, False: 0]
  |  Branch (530:28): [True: 0, False: 7.66k]
  |  Branch (530:28): [True: 7.66k, Folded]
  ------------------
  531|       |				/* total match */
  532|      0|				msg++;
  533|  7.66k|			} else if (i_isalnum(*msg) && !i_isalnum(*nick)) {
  ------------------
  |  |   74|  7.66k|#define i_isalnum(x) isalnum((int) (unsigned char) (x))
  ------------------
              			} else if (i_isalnum(*msg) && !i_isalnum(*nick)) {
  ------------------
  |  |   74|  5.32k|#define i_isalnum(x) isalnum((int) (unsigned char) (x))
  ------------------
  |  Branch (533:15): [True: 5.32k, False: 2.34k]
  |  Branch (533:34): [True: 2.48k, False: 2.83k]
  ------------------
  534|       |				/* some strange char in your nick, pass it */
  535|  2.48k|                                fullmatch = FALSE;
  536|  2.48k|			} else
  537|  5.18k|				break;
  538|       |
  539|  2.48k|			nick++;
  540|  2.48k|		}
  541|       |
  542|  8.23k|		if (msg != msgstart && !isalnumhigh(*msg)) {
  ------------------
  |  |   31|      0|        (i_isalnum(a) || (unsigned char) (a) >= 128)
  |  |  ------------------
  |  |  |  |   74|      0|#define i_isalnum(x) isalnum((int) (unsigned char) (x))
  |  |  ------------------
  |  |  |  Branch (31:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (542:7): [True: 0, False: 8.23k]
  |  Branch (542:27): [True: 0, False: 0]
  ------------------
  543|       |			/* at least some of the chars in line matched the
  544|       |			   nick, and msg continue with non-alphanum character,
  545|       |			   this might be for us.. */
  546|      0|			if (*nick != '\0') {
  ------------------
  |  Branch (546:8): [True: 0, False: 0]
  ------------------
  547|       |				/* remove the rest of the non-alphanum chars
  548|       |				   from nick and check if it then matches. */
  549|      0|                                fullmatch = FALSE;
  550|      0|				while (*nick != '\0' && !i_isalnum(*nick))
  ------------------
  |  |   74|      0|#define i_isalnum(x) isalnum((int) (unsigned char) (x))
  ------------------
  |  Branch (550:12): [True: 0, False: 0]
  |  Branch (550:29): [True: 0, False: 0]
  ------------------
  551|      0|					nick++;
  552|      0|			}
  553|       |
  554|      0|			if (*nick == '\0') {
  ------------------
  |  Branch (554:8): [True: 0, False: 0]
  ------------------
  555|       |				/* yes, match! */
  556|      0|                                break;
  557|      0|			}
  558|      0|		}
  559|       |
  560|       |		/* no match. check if this is a message to multiple people
  561|       |		   (like nick1,nick2: text) */
  562|  43.8k|		while (*msg != '\0' && *msg != ' ' && *msg != ',') msg++;
  ------------------
  |  Branch (562:10): [True: 39.8k, False: 4.01k]
  |  Branch (562:26): [True: 35.7k, False: 4.09k]
  |  Branch (562:41): [True: 35.6k, False: 120]
  ------------------
  563|       |
  564|  8.23k|		if (*msg != ',') {
  ------------------
  |  Branch (564:7): [True: 8.11k, False: 120]
  ------------------
  565|  8.11k|                        nick = orignick;
  566|  8.11k|			break;
  567|  8.11k|		}
  568|       |
  569|    120|                msg++;
  570|    120|	}
  571|       |
  572|  8.11k|	if (*nick != '\0')
  ------------------
  |  Branch (572:6): [True: 8.11k, False: 0]
  ------------------
  573|  8.11k|		return FALSE; /* didn't match */
  574|       |
  575|      0|	if (fullmatch)
  ------------------
  |  Branch (575:6): [True: 0, False: 0]
  ------------------
  576|      0|		return TRUE; /* matched without fuzzyness */
  577|       |
  578|      0|	if (channel != NULL) {
  ------------------
  |  Branch (578:6): [True: 0, False: 0]
  ------------------
  579|       |		/* matched with some fuzzyness .. check if there's an exact match
  580|       |		   for some other nick in the same channel. */
  581|      0|		return nick_nfind(channel, msgstart, (int) (msg-msgstart)) == NULL;
  582|      0|	} else {
  583|       |		return TRUE;
  584|      0|	}
  585|      0|}
nicklist_init:
  596|      2|{
  597|      2|	signal_add_first("channel created", (SIGNAL_FUNC) sig_channel_created);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  598|       |	signal_add("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  599|      2|}
nicklist.c:nick_hash_add:
   34|  97.4k|{
   35|  97.4k|	NICK_REC *list;
   36|       |
   37|  97.4k|	nick->next = NULL;
   38|       |
   39|  97.4k|	list = g_hash_table_lookup(channel->nicks, nick->nick);
   40|  97.4k|        if (list == NULL)
  ------------------
  |  Branch (40:13): [True: 89.9k, False: 7.43k]
  ------------------
   41|  89.9k|		g_hash_table_insert(channel->nicks, nick->nick, nick);
   42|  7.43k|	else {
   43|       |                /* multiple nicks with same name */
   44|  67.7k|		while (list->next != NULL)
  ------------------
  |  Branch (44:10): [True: 60.2k, False: 7.43k]
  ------------------
   45|  60.2k|			list = list->next;
   46|  7.43k|		list->next = nick;
   47|  7.43k|	}
   48|       |
   49|  97.4k|	if (nick == channel->ownnick) {
  ------------------
  |  Branch (49:6): [True: 375, False: 97.0k]
  ------------------
   50|       |                /* move our own nick to beginning of the nick list.. */
   51|    375|		nicklist_set_own(channel, nick);
   52|    375|	}
   53|  97.4k|}
nicklist.c:nick_hash_remove:
   56|  14.1k|{
   57|  14.1k|	NICK_REC *list, *newlist;
   58|       |
   59|  14.1k|	list = g_hash_table_lookup(channel->nicks, nick->nick);
   60|  14.1k|	if (list == NULL)
  ------------------
  |  Branch (60:6): [True: 0, False: 14.1k]
  ------------------
   61|      0|		return;
   62|       |
   63|  14.1k|	if (list == nick) {
  ------------------
  |  Branch (63:6): [True: 14.1k, False: 0]
  ------------------
   64|  14.1k|		newlist = nick->next;
   65|  14.1k|	} else {
   66|      0|		newlist = list;
   67|      0|		while (list->next != nick)
  ------------------
  |  Branch (67:10): [True: 0, False: 0]
  ------------------
   68|      0|			list = list->next;
   69|      0|		list->next = nick->next;
   70|      0|	}
   71|       |
   72|  14.1k|	g_hash_table_remove(channel->nicks, nick->nick);
   73|  14.1k|	if (newlist != NULL) {
  ------------------
  |  Branch (73:6): [True: 0, False: 14.1k]
  ------------------
   74|      0|		g_hash_table_insert(channel->nicks, newlist->nick,
   75|      0|				    newlist);
   76|      0|	}
   77|  14.1k|}
nicklist.c:nicklist_destroy:
  113|  88.1k|{
  114|  88.1k|	signal_emit("nicklist remove", 2, channel, nick);
  115|       |
  116|  88.1k|	if (channel->ownnick == nick)
  ------------------
  |  Branch (116:6): [True: 5.26k, False: 82.8k]
  ------------------
  117|  5.26k|                channel->ownnick = NULL;
  118|       |
  119|       |        /*MODULE_DATA_DEINIT(nick);*/
  120|  88.1k|	g_free(nick->nick);
  121|  88.1k|	g_free_not_null(nick->realname);
  ------------------
  |  |   64|  88.1k|#define g_free_not_null(a) g_free(a)
  ------------------
  122|  88.1k|	g_free_not_null(nick->host);
  ------------------
  |  |   64|  88.1k|#define g_free_not_null(a) g_free(a)
  ------------------
  123|  88.1k|	g_free(nick->account);
  124|  88.1k|	g_free(nick);
  125|  88.1k|}
nicklist.c:nicklist_rename_list:
  140|  10.4k|{
  141|  10.4k|	CHANNEL_REC *channel;
  142|  10.4k|	NICK_REC *nickrec;
  143|  10.4k|	GSList *tmp;
  144|       |
  145|  19.7k|	for (tmp = nicks; tmp != NULL; tmp = tmp->next->next) {
  ------------------
  |  Branch (145:20): [True: 9.28k, False: 10.4k]
  ------------------
  146|  9.28k|		channel = tmp->data;
  147|  9.28k|		nickrec = tmp->next->data;
  148|       |
  149|       |		/* remove old nick from hash table */
  150|  9.28k|                nick_hash_remove(channel, nickrec);
  151|       |
  152|  9.28k|		if (new_nick_id != NULL)
  ------------------
  |  Branch (152:7): [True: 0, False: 9.28k]
  ------------------
  153|      0|			nickrec->unique_id = new_nick_id;
  154|       |
  155|  9.28k|		g_free(nickrec->nick);
  156|  9.28k|		nickrec->nick = g_strdup(new_nick);
  157|       |
  158|       |		/* add new nick to hash table */
  159|  9.28k|                nick_hash_add(channel, nickrec);
  160|       |
  161|  9.28k|		signal_emit("nicklist changed", 3, channel, nickrec, old_nick);
  162|  9.28k|	}
  163|  10.4k|	g_slist_free(nicks);
  164|  10.4k|}
nicklist.c:get_nicks_hash:
  279|  55.5k|{
  280|   111k|	while (rec != NULL) {
  ------------------
  |  Branch (280:9): [True: 55.9k, False: 55.5k]
  ------------------
  281|  55.9k|		*list = g_slist_prepend(*list, rec);
  282|  55.9k|		rec = rec->next;
  283|  55.9k|	}
  284|  55.5k|}
nicklist.c:nicklist_update_flags_list:
  392|  41.8k|{
  393|  41.8k|	GSList *tmp;
  394|  41.8k|	CHANNEL_REC *channel;
  395|  41.8k|	NICK_REC *rec;
  396|       |
  397|  41.8k|	g_return_if_fail(IS_SERVER(server));
  ------------------
  |  Branch (397:2): [True: 41.8k, False: 0]
  |  Branch (397:2): [True: 41.8k, False: 0]
  |  Branch (397:2): [True: 41.8k, False: 0]
  |  Branch (397:2): [Folded, False: 41.8k]
  ------------------
  398|       |
  399|  59.0k|	for (tmp = nicks; tmp != NULL; tmp = tmp->next->next) {
  ------------------
  |  Branch (399:20): [True: 17.1k, False: 41.8k]
  ------------------
  400|  17.1k|		channel = tmp->data;
  401|  17.1k|		rec = tmp->next->data;
  402|       |
  403|  17.1k|		rec->last_check = time(NULL);
  404|       |
  405|  17.1k|		if (gone != -1 && (int)rec->gone != gone) {
  ------------------
  |  Branch (405:7): [True: 17.1k, False: 0]
  |  Branch (405:21): [True: 11.6k, False: 5.45k]
  ------------------
  406|  11.6k|			rec->gone = gone;
  407|  11.6k|			signal_emit("nicklist gone changed", 2, channel, rec);
  408|  11.6k|		}
  409|       |
  410|  17.1k|		if (serverop != -1 && (int)rec->serverop != serverop) {
  ------------------
  |  Branch (410:7): [True: 16.2k, False: 847]
  |  Branch (410:25): [True: 11.2k, False: 5.00k]
  ------------------
  411|  11.2k|			rec->serverop = serverop;
  412|  11.2k|			signal_emit("nicklist serverop changed", 2, channel, rec);
  413|  11.2k|		}
  414|  17.1k|	}
  415|  41.8k|	g_slist_free(nicks);
  416|  41.8k|}
nicklist.c:sig_channel_created:
  456|   117k|{
  457|   117k|	g_return_if_fail(IS_CHANNEL(channel));
  ------------------
  |  Branch (457:2): [True: 117k, False: 0]
  |  Branch (457:2): [True: 117k, False: 0]
  |  Branch (457:2): [True: 117k, False: 0]
  |  Branch (457:2): [Folded, False: 117k]
  ------------------
  458|       |
  459|   117k|	channel->nicks = g_hash_table_new((GHashFunc) i_istr_hash, (GCompareFunc) i_istr_equal);
  460|   117k|}
nicklist.c:sig_channel_destroyed:
  475|   117k|{
  476|   117k|	g_return_if_fail(IS_CHANNEL(channel));
  ------------------
  |  Branch (476:2): [True: 117k, False: 0]
  |  Branch (476:2): [True: 117k, False: 0]
  |  Branch (476:2): [True: 117k, False: 0]
  |  Branch (476:2): [Folded, False: 117k]
  ------------------
  477|       |
  478|   117k|	g_hash_table_foreach(channel->nicks,
  479|   117k|			     (GHFunc) nicklist_remove_hash, channel);
  480|   117k|	g_hash_table_destroy(channel->nicks);
  481|   117k|}
nicklist.c:nicklist_remove_hash:
  464|  75.8k|{
  465|  75.8k|	NICK_REC *next;
  466|       |
  467|   159k|	while (nick != NULL) {
  ------------------
  |  Branch (467:9): [True: 83.2k, False: 75.8k]
  ------------------
  468|  83.2k|                next = nick->next;
  469|  83.2k|		nicklist_destroy(channel, nick);
  470|  83.2k|                nick = next;
  471|  83.2k|	}
  472|  75.8k|}

nickmatch_init:
   32|      4|{
   33|      4|	NICKMATCH_REC *rec;
   34|       |
   35|      4|	rec = g_new0(NICKMATCH_REC, 1);
  ------------------
  |  Branch (35:8): [True: 4, False: 0]
  |  Branch (35:8): [True: 0, False: 4]
  ------------------
   36|      4|	rec->func = func;
   37|      4|	rec->value_destroy_func = value_destroy_func;
   38|       |
   39|      4|	lists = g_slist_append(lists, rec);
   40|      4|        return rec;
   41|      4|}
nickmatch_rebuild:
   66|      4|{
   67|      4|	if (rec->nicks != NULL)
  ------------------
  |  Branch (67:6): [True: 0, False: 4]
  ------------------
   68|      0|		g_hash_table_destroy(rec->nicks);
   69|       |
   70|      4|	rec->nicks = g_hash_table_new_full((GHashFunc) g_direct_hash, (GCompareFunc) g_direct_equal,
   71|      4|	                                   NULL, (GDestroyNotify) rec->value_destroy_func);
   72|       |
   73|      4|	g_slist_foreach(channels, (GFunc) nickmatch_check_channel, rec);
   74|      4|}
nickmatch_cache_init:
  105|      2|{
  106|      2|	lists = NULL;
  107|      2|        signal_add("nicklist new", (SIGNAL_FUNC) sig_nick_new);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  108|      2|        signal_add("nicklist changed", (SIGNAL_FUNC) sig_nick_new);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  109|      2|        signal_add("nicklist host changed", (SIGNAL_FUNC) sig_nick_new);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  110|       |        signal_add("nicklist remove", (SIGNAL_FUNC) sig_nick_remove);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  111|      2|}
nickmatch-cache.c:sig_nick_new:
   77|   104k|{
   78|   104k|	GSList *tmp;
   79|       |
   80|   104k|        g_return_if_fail(channel != NULL);
  ------------------
  |  Branch (80:9): [True: 104k, False: 0]
  |  Branch (80:9): [True: 104k, False: 0]
  |  Branch (80:9): [Folded, False: 104k]
  ------------------
   81|   104k|	g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (81:2): [True: 104k, False: 0]
  |  Branch (81:2): [True: 104k, False: 0]
  |  Branch (81:2): [Folded, False: 104k]
  ------------------
   82|       |
   83|   314k|	for (tmp = lists; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (83:20): [True: 209k, False: 104k]
  ------------------
   84|   209k|		NICKMATCH_REC *rec = tmp->data;
   85|       |
   86|   209k|		rec->func(rec->nicks, channel, nick);
   87|   209k|	}
   88|   104k|}
nickmatch-cache.c:sig_nick_remove:
   91|  88.1k|{
   92|  88.1k|	GSList *tmp;
   93|       |
   94|  88.1k|        g_return_if_fail(channel != NULL);
  ------------------
  |  Branch (94:9): [True: 88.1k, False: 0]
  |  Branch (94:9): [True: 88.1k, False: 0]
  |  Branch (94:9): [Folded, False: 88.1k]
  ------------------
   95|  88.1k|	g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (95:2): [True: 88.1k, False: 0]
  |  Branch (95:2): [True: 88.1k, False: 0]
  |  Branch (95:2): [Folded, False: 88.1k]
  ------------------
   96|       |
   97|   264k|	for (tmp = lists; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (97:20): [True: 176k, False: 88.1k]
  ------------------
   98|   176k|		NICKMATCH_REC *rec = tmp->data;
   99|       |
  100|   176k|                g_hash_table_remove(rec->nicks, nick);
  101|   176k|	}
  102|  88.1k|}

pidwait_init:
   67|      2|{
   68|      2|	child_pids = g_hash_table_new(g_direct_hash, g_direct_equal);
   69|      2|	pids = NULL;
   70|       |
   71|      2|	signal_pidwait = signal_get_uniq_id("pidwait");
  ------------------
  |  |   68|      2|        module_get_uniq_id_str("signals", signal)
  ------------------
   72|      2|}

query_init:
   36|    285|{
   37|    285|	g_return_if_fail(query != NULL);
  ------------------
  |  Branch (37:2): [True: 285, False: 0]
  |  Branch (37:2): [True: 285, False: 0]
  |  Branch (37:2): [Folded, False: 285]
  ------------------
   38|    285|	g_return_if_fail(query->name != NULL);
  ------------------
  |  Branch (38:2): [True: 285, False: 0]
  |  Branch (38:2): [True: 285, False: 0]
  |  Branch (38:2): [Folded, False: 285]
  ------------------
   39|       |
   40|    285|	queries = g_slist_append(queries, query);
   41|       |
   42|    285|        MODULE_DATA_INIT(query);
  ------------------
  |  |    5|    285|        (rec)->module_data = g_hash_table_new(g_str_hash, g_str_equal)
  ------------------
   43|    285|	query->type = module_get_uniq_id_str("WINDOW ITEM TYPE", "QUERY");
   44|    285|        query->destroy = (void (*) (WI_ITEM_REC *)) query_destroy;
   45|    285|	query->get_target = query_get_target;
   46|    285|	query->createtime = time(NULL);
   47|    285|	query->last_unread_msg = time(NULL);
   48|    285|	query->visible_name = g_strdup(query->name);
   49|       |
   50|    285|	if (query->server_tag != NULL) {
  ------------------
  |  Branch (50:6): [True: 285, False: 0]
  ------------------
   51|    285|		query->server = server_find_tag(query->server_tag);
   52|    285|		if (query->server != NULL) {
  ------------------
  |  Branch (52:7): [True: 285, False: 0]
  ------------------
   53|    285|			query->server->queries =
   54|    285|				g_slist_append(query->server->queries, query);
   55|    285|		}
   56|    285|	}
   57|       |
   58|       |	signal_emit("query created", 2, query, GINT_TO_POINTER(automatic));
   59|    285|}
query_find:
  108|  54.2k|{
  109|  54.2k|	GSList *tmp;
  110|       |
  111|  54.2k|	g_return_val_if_fail(server == NULL || IS_SERVER(server), NULL);
  ------------------
  |  Branch (111:2): [True: 54.2k, False: 0]
  |  Branch (111:2): [True: 0, False: 54.2k]
  |  Branch (111:2): [True: 54.2k, False: 0]
  |  Branch (111:2): [True: 54.2k, False: 0]
  |  Branch (111:2): [Folded, False: 54.2k]
  ------------------
  112|  54.2k|	g_return_val_if_fail(nick != NULL, NULL);
  ------------------
  |  Branch (112:2): [True: 42.5k, False: 11.7k]
  |  Branch (112:2): [True: 42.5k, False: 11.7k]
  |  Branch (112:2): [Folded, False: 42.5k]
  ------------------
  113|       |
  114|  42.5k|	if (server != NULL)
  ------------------
  |  Branch (114:6): [True: 42.5k, False: 0]
  ------------------
  115|  42.5k|		return query_find_server(server, nick);
  116|       |
  117|      0|	for (tmp = queries; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (117:22): [True: 0, False: 0]
  ------------------
  118|      0|		QUERY_REC *rec = tmp->data;
  119|       |
  120|      0|		if (g_ascii_strcasecmp(rec->name, nick) == 0)
  ------------------
  |  Branch (120:7): [True: 0, False: 0]
  ------------------
  121|      0|			return rec;
  122|      0|	}
  123|       |
  124|      0|        return NULL;
  125|      0|}
query_change_nick:
  128|  2.22k|{
  129|  2.22k|	char *oldnick;
  130|       |
  131|  2.22k|	g_return_if_fail(IS_QUERY(query));
  ------------------
  |  Branch (131:2): [True: 2.22k, False: 0]
  |  Branch (131:2): [True: 2.22k, False: 0]
  |  Branch (131:2): [True: 2.22k, False: 0]
  |  Branch (131:2): [Folded, False: 2.22k]
  ------------------
  132|       |
  133|  2.22k|        oldnick = query->name;
  134|  2.22k|	query->name = g_strdup(nick);
  135|       |
  136|  2.22k|	g_free(query->visible_name);
  137|  2.22k|	query->visible_name = g_strdup(nick);
  138|       |
  139|  2.22k|	signal_emit("query nick changed", 2, query, oldnick);
  140|  2.22k|	signal_emit("window item name changed", 1, query);
  141|  2.22k|        g_free(oldnick);
  142|  2.22k|}
query_change_address:
  145|  1.99k|{
  146|  1.99k|	g_return_if_fail(IS_QUERY(query));
  ------------------
  |  Branch (146:2): [True: 1.99k, False: 0]
  |  Branch (146:2): [True: 1.99k, False: 0]
  |  Branch (146:2): [True: 1.99k, False: 0]
  |  Branch (146:2): [Folded, False: 1.99k]
  ------------------
  147|       |
  148|  1.99k|        g_free_not_null(query->address);
  ------------------
  |  |   64|  1.99k|#define g_free_not_null(a) g_free(a)
  ------------------
  149|  1.99k|	query->address = g_strdup(address);
  150|  1.99k|	signal_emit("query address changed", 1, query);
  151|  1.99k|}
query_change_server:
  154|  5.53M|{
  155|  5.53M|	g_return_if_fail(IS_QUERY(query));
  ------------------
  |  Branch (155:2): [True: 5.53M, False: 0]
  |  Branch (155:2): [True: 5.53M, False: 0]
  |  Branch (155:2): [True: 5.53M, False: 0]
  |  Branch (155:2): [Folded, False: 5.53M]
  ------------------
  156|       |
  157|  5.53M|	if (query->server != NULL) {
  ------------------
  |  Branch (157:6): [True: 5.53M, False: 0]
  ------------------
  158|  5.53M|		query->server->queries =
  159|  5.53M|                        g_slist_remove(query->server->queries, query);
  160|  5.53M|	}
  161|  5.53M|	if (server != NULL)
  ------------------
  |  Branch (161:6): [True: 0, False: 5.53M]
  ------------------
  162|      0|                server->queries = g_slist_append(server->queries, query);
  163|       |
  164|  5.53M|	query->server = server;
  165|  5.53M|	signal_emit("query server changed", 1, query);
  166|  5.53M|}
queries_init:
  169|      2|{
  170|      2|}
queries.c:query_find_server:
   87|  42.5k|{
   88|  42.5k|	GSList *tmp;
   89|       |
   90|  42.5k|	g_return_val_if_fail(IS_SERVER(server), NULL);
  ------------------
  |  Branch (90:2): [True: 42.5k, False: 0]
  |  Branch (90:2): [True: 42.5k, False: 0]
  |  Branch (90:2): [True: 42.5k, False: 0]
  |  Branch (90:2): [Folded, False: 42.5k]
  ------------------
   91|       |
   92|  42.5k|	if (server->query_find_func != NULL) {
  ------------------
  |  Branch (92:6): [True: 42.5k, False: 0]
  ------------------
   93|       |		/* use the server specific query find function */
   94|  42.5k|		return server->query_find_func(server, nick);
   95|  42.5k|	}
   96|       |
   97|      0|	for (tmp = server->queries; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (97:30): [True: 0, False: 0]
  ------------------
   98|      0|		QUERY_REC *rec = tmp->data;
   99|       |
  100|      0|		if (g_ascii_strcasecmp(rec->name, nick) == 0)
  ------------------
  |  Branch (100:7): [True: 0, False: 0]
  ------------------
  101|      0|			return rec;
  102|      0|	}
  103|       |
  104|      0|	return NULL;
  105|      0|}

rawlog_create:
   40|  29.4k|{
   41|  29.4k|	RAWLOG_REC *rec;
   42|       |
   43|       |	rec = g_new0(RAWLOG_REC, 1);
  ------------------
  |  Branch (43:8): [True: 29.4k, False: 0]
  |  Branch (43:8): [True: 0, False: 29.4k]
  ------------------
   44|  29.4k|	rec->lines = g_queue_new();
   45|  29.4k|	return rec;
   46|  29.4k|}
rawlog_destroy:
   49|  29.4k|{
   50|  29.4k|	g_return_if_fail(rawlog != NULL);
  ------------------
  |  Branch (50:2): [True: 29.4k, False: 0]
  |  Branch (50:2): [True: 29.4k, False: 0]
  |  Branch (50:2): [Folded, False: 29.4k]
  ------------------
   51|       |
   52|  29.4k|	g_queue_foreach(rawlog->lines, (GFunc) g_free, NULL);
   53|  29.4k|	g_queue_free(rawlog->lines);
   54|       |
   55|  29.4k|	if (rawlog->logging) {
  ------------------
  |  Branch (55:6): [True: 0, False: 29.4k]
  ------------------
   56|      0|		write_buffer_flush();
   57|      0|		close(rawlog->handle);
   58|      0|	}
   59|  29.4k|	g_free(rawlog);
   60|  29.4k|}
rawlog_output:
   88|  62.7k|{
   89|  62.7k|	g_return_if_fail(rawlog != NULL);
  ------------------
  |  Branch (89:2): [True: 62.7k, False: 0]
  |  Branch (89:2): [True: 62.7k, False: 0]
  |  Branch (89:2): [Folded, False: 62.7k]
  ------------------
   90|  62.7k|	g_return_if_fail(str != NULL);
  ------------------
  |  Branch (90:2): [True: 62.7k, False: 0]
  |  Branch (90:2): [True: 62.7k, False: 0]
  |  Branch (90:2): [Folded, False: 62.7k]
  ------------------
   91|       |
   92|  62.7k|	rawlog_add(rawlog, g_strdup_printf("<< %s", str));
   93|  62.7k|}
rawlog_redirect:
   96|  4.72k|{
   97|  4.72k|	g_return_if_fail(rawlog != NULL);
  ------------------
  |  Branch (97:2): [True: 4.72k, False: 0]
  |  Branch (97:2): [True: 4.72k, False: 0]
  |  Branch (97:2): [Folded, False: 4.72k]
  ------------------
   98|  4.72k|	g_return_if_fail(str != NULL);
  ------------------
  |  Branch (98:2): [True: 4.72k, False: 0]
  |  Branch (98:2): [True: 4.72k, False: 0]
  |  Branch (98:2): [Folded, False: 4.72k]
  ------------------
   99|       |
  100|  4.72k|	rawlog_add(rawlog, g_strdup_printf("--> %s", str));
  101|  4.72k|}
rawlog_set_size:
  191|      4|{
  192|      4|	rawlog_lines = lines;
  193|      4|}
rawlog_init:
  238|      2|{
  239|      2|	signal_rawlog = signal_get_uniq_id("rawlog");
  ------------------
  |  |   68|      2|        module_get_uniq_id_str("signals", signal)
  ------------------
  240|       |
  241|      2|	settings_add_int("history", "rawlog_lines", 200);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  242|      2|	read_settings();
  243|       |
  244|      2|	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  245|       |
  246|      2|	command_bind("rawlog", NULL, (SIGNAL_FUNC) cmd_rawlog);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  247|      2|	command_bind("rawlog save", NULL, (SIGNAL_FUNC) cmd_rawlog_save);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  248|      2|	command_bind("rawlog open", NULL, (SIGNAL_FUNC) cmd_rawlog_open);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  249|       |	command_bind("rawlog close", NULL, (SIGNAL_FUNC) cmd_rawlog_close);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  250|      2|}
rawlog.c:rawlog_add:
   64|  67.5k|{
   65|   128k|	while (rawlog->lines->length >= rawlog_lines && rawlog_lines > 0) {
  ------------------
  |  Branch (65:9): [True: 60.7k, False: 67.5k]
  |  Branch (65:50): [True: 60.7k, False: 0]
  ------------------
   66|  60.7k|		void *tmp = g_queue_pop_head(rawlog->lines);
   67|  60.7k|		g_free(tmp);
   68|  60.7k|	}
   69|       |
   70|  67.5k|	if (rawlog->logging) {
  ------------------
  |  Branch (70:6): [True: 0, False: 67.5k]
  ------------------
   71|      0|		write_buffer(rawlog->handle, str, strlen(str));
   72|      0|		write_buffer(rawlog->handle, "\n", 1);
   73|      0|	}
   74|       |
   75|  67.5k|	g_queue_push_tail(rawlog->lines, str);
   76|  67.5k|	signal_emit_id(signal_rawlog, 2, rawlog, str);
   77|  67.5k|}
rawlog.c:read_settings:
  196|      2|{
  197|      2|	rawlog_set_size(settings_get_int("rawlog_lines"));
  198|      2|}

is_utf8:
   32|  91.2k|{
   33|  91.2k|	return term_is_utf8;
   34|  91.2k|}
is_valid_charset:
   45|      6|{
   46|      6|	GIConv cd;
   47|      6|	char *to = NULL;
   48|       |
   49|      6|	if (!charset || *charset == '\0')
  ------------------
  |  Branch (49:6): [True: 0, False: 6]
  |  Branch (49:18): [True: 0, False: 6]
  ------------------
   50|      0|		return FALSE;
   51|       |
   52|      6|	if (settings_get_bool("recode_transliterate") && !is_translit(charset))
  ------------------
  |  Branch (52:6): [True: 6, False: 0]
  |  Branch (52:51): [True: 6, False: 0]
  ------------------
   53|      6|		charset = to = g_strconcat(charset, "//TRANSLIT", NULL);
   54|       |
   55|      6|	cd = g_iconv_open(charset, "UTF-8");
   56|      6|	g_free(to);
   57|      6|	if (cd != (GIConv)-1) {
  ------------------
  |  Branch (57:6): [True: 6, False: 0]
  ------------------
   58|      6|		g_iconv_close(cd);
   59|      6|		return TRUE;
   60|      6|	}
   61|      0|	return FALSE;
   62|      6|}
recode_in:
   91|   144k|{
   92|   144k|	const char *from = NULL;
   93|   144k|	const char *to = translit_charset;
   94|   144k|	char *recoded = NULL;
   95|   144k|	gboolean str_is_utf8, recode, autodetect;
   96|   144k|	int len;
   97|       |
   98|   144k|	if (!str)
  ------------------
  |  Branch (98:6): [True: 81, False: 144k]
  ------------------
   99|     81|		return NULL;
  100|       |
  101|   144k|	recode = settings_get_bool("recode");
  102|   144k|	if (!recode)
  ------------------
  |  Branch (102:6): [True: 0, False: 144k]
  ------------------
  103|      0|		return g_strdup(str);
  104|       |
  105|   144k|	len = strlen(str);
  106|       |
  107|       |	/* Only validate for UTF-8 if an 8-bit encoding. */
  108|   144k|	str_is_utf8 = 0;
  109|   144k|	if (!str_is_ascii(str))
  ------------------
  |  Branch (109:6): [True: 58.2k, False: 86.5k]
  ------------------
  110|  58.2k|		str_is_utf8 = g_utf8_validate(str, len, NULL);
  111|  86.5k|	else if (!strchr(str, '\e'))
  ------------------
  |  Branch (111:11): [True: 84.5k, False: 1.92k]
  ------------------
  112|  84.5k|		str_is_utf8 = 1;
  113|   144k|	autodetect = settings_get_bool("recode_autodetect_utf8");
  114|       |
  115|   144k|	if (autodetect && str_is_utf8)
  ------------------
  |  Branch (115:6): [True: 144k, False: 0]
  |  Branch (115:20): [True: 84.8k, False: 59.8k]
  ------------------
  116|  84.8k|		if (term_is_utf8)
  ------------------
  |  Branch (116:7): [True: 0, False: 84.8k]
  ------------------
  117|      0|			return g_strdup(str);
  118|  84.8k|		else
  119|  84.8k|			from = "UTF-8";
  120|  59.8k|	else
  121|  59.8k|		from = find_conversion(server, target);
  122|       |
  123|   144k|	if (from)
  ------------------
  |  Branch (123:6): [True: 84.8k, False: 59.8k]
  ------------------
  124|  84.8k|		recoded = g_convert_with_fallback(str, len, to, from, NULL, NULL, NULL, NULL);
  125|       |
  126|   144k|	if (!recoded) {
  ------------------
  |  Branch (126:6): [True: 59.8k, False: 84.8k]
  ------------------
  127|  59.8k|		if (str_is_utf8)
  ------------------
  |  Branch (127:7): [True: 0, False: 59.8k]
  ------------------
  128|      0|			if (term_is_utf8)
  ------------------
  |  Branch (128:8): [True: 0, False: 0]
  ------------------
  129|      0|				return g_strdup(str);
  130|      0|			else
  131|      0|				from = "UTF-8";
  132|  59.8k|		else
  133|  59.8k|			if (term_is_utf8)
  ------------------
  |  Branch (133:8): [True: 0, False: 59.8k]
  ------------------
  134|      0|				from = settings_get_str("recode_fallback");
  135|  59.8k|			else
  136|  59.8k|				from = NULL;
  137|       |
  138|  59.8k|		if (from)
  ------------------
  |  Branch (138:7): [True: 0, False: 59.8k]
  ------------------
  139|      0|			recoded = g_convert_with_fallback(str, len, to, from, NULL, NULL, NULL, NULL);
  140|       |
  141|  59.8k|		if (!recoded)
  ------------------
  |  Branch (141:7): [True: 59.8k, False: 0]
  ------------------
  142|  59.8k|			recoded = g_strdup(str);
  143|  59.8k|	}
  144|   144k|	return recoded;
  145|   144k|}
recode_update_charset:
  285|      2|{
  286|      2|	const char *charset = settings_get_str("term_charset");
  287|      2|	term_is_utf8 = !g_ascii_strcasecmp(charset, "UTF-8");
  288|      2|	g_free(translit_charset);
  289|      2|	if (settings_get_bool("recode_transliterate") && !is_translit(charset))
  ------------------
  |  Branch (289:6): [True: 2, False: 0]
  |  Branch (289:51): [True: 2, False: 0]
  ------------------
  290|      2|		translit_charset = g_strconcat(charset, "//TRANSLIT", NULL);
  291|      0|	else
  292|      0|		translit_charset = g_strdup(charset);
  293|      2|}
recode_init:
  296|      2|{
  297|      2|	settings_add_bool("misc", "recode", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  298|      2|	settings_add_str("misc", "recode_fallback", "CP1252");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  299|      2|	settings_add_str("misc", "recode_out_default_charset", "");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  300|      2|	settings_add_bool("misc", "recode_transliterate", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  301|      2|	settings_add_bool("misc", "recode_autodetect_utf8", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  302|      2|}
recode.c:is_translit:
   37|      8|{
   38|      8|	char *pos;
   39|       |
   40|      8|	pos = stristr(charset, "//translit");
   41|       |	return (pos != NULL);
   42|      8|}
recode.c:str_is_ascii:
   81|   144k|{
   82|   144k|	int i;
   83|       |
   84|   911k|	for (i = 0; str[i] != '\0'; i++)
  ------------------
  |  Branch (84:14): [True: 824k, False: 86.5k]
  ------------------
   85|   824k|		if (str[i] & 0x80)
  ------------------
  |  Branch (85:7): [True: 58.2k, False: 766k]
  ------------------
   86|  58.2k|			return 0;
   87|  86.5k|	return 1;
   88|   144k|}
recode.c:find_conversion:
   65|  59.8k|{
   66|  59.8k|	char *conv = NULL;
   67|       |
   68|  59.8k|	if (server != NULL && target != NULL) {
  ------------------
  |  Branch (68:6): [True: 59.8k, False: 0]
  |  Branch (68:24): [True: 8.65k, False: 51.2k]
  ------------------
   69|  8.65k|		char *tagtarget = g_strdup_printf("%s/%s", server->tag, target);
   70|  8.65k|		conv = iconfig_get_str("conversions", tagtarget, NULL);
  ------------------
  |  |   41|  8.65k|#define iconfig_get_str(a, b, c) config_get_str(mainconfig, a, b, c)
  ------------------
   71|  8.65k|		g_free(tagtarget);
   72|  8.65k|	}
   73|  59.8k|	if (conv == NULL && target != NULL)
  ------------------
  |  Branch (73:6): [True: 59.8k, False: 0]
  |  Branch (73:22): [True: 8.65k, False: 51.2k]
  ------------------
   74|  8.65k|		conv = iconfig_get_str("conversions", target, NULL);
  ------------------
  |  |   41|  8.65k|#define iconfig_get_str(a, b, c) config_get_str(mainconfig, a, b, c)
  ------------------
   75|  59.8k|	if (conv == NULL && server != NULL)
  ------------------
  |  Branch (75:6): [True: 59.8k, False: 0]
  |  Branch (75:22): [True: 59.8k, False: 0]
  ------------------
   76|  59.8k|		conv = iconfig_get_str("conversions", server->tag, NULL);
  ------------------
  |  |   41|  59.8k|#define iconfig_get_str(a, b, c) config_get_str(mainconfig, a, b, c)
  ------------------
   77|  59.8k|	return conv;
   78|  59.8k|}

i_refstr_init:
    9|      2|{
   10|       |	/* nothing */
   11|      2|}
i_refstr_intern:
   14|  3.24k|{
   15|  3.24k|	if (str == NULL) {
  ------------------
  |  Branch (15:6): [True: 0, False: 3.24k]
  ------------------
   16|      0|		return NULL;
   17|      0|	}
   18|       |
   19|  3.24k|	return g_ref_string_new_intern(str);
   20|  3.24k|}
i_refstr_release:
   23|  3.24k|{
   24|  3.24k|	if (str == NULL) {
  ------------------
  |  Branch (24:6): [True: 0, False: 3.24k]
  ------------------
   25|      0|		return;
   26|      0|	}
   27|       |
   28|  3.24k|	g_ref_string_release(str);
   29|  3.24k|}

reconnect_save_status:
   40|  3.66k|{
   41|  3.66k|        g_free_not_null(conn->tag);
  ------------------
  |  |   64|  3.66k|#define g_free_not_null(a) g_free(a)
  ------------------
   42|  3.66k|	conn->tag = g_strdup(server->tag);
   43|       |
   44|  3.66k|	g_free_not_null(conn->away_reason);
  ------------------
  |  |   64|  3.66k|#define g_free_not_null(a) g_free(a)
  ------------------
   45|  3.66k|	conn->away_reason = !server->usermode_away ? NULL :
  ------------------
  |  Branch (45:22): [True: 2.86k, False: 801]
  ------------------
   46|  3.66k|		g_strdup(server->away_reason);
   47|       |
   48|  3.66k|	if (!server->connected) {
  ------------------
  |  Branch (48:6): [True: 0, False: 3.66k]
  ------------------
   49|       |		/* default to channels/usermode from connect record
   50|       |		   since server isn't fully connected yet */
   51|       |		/* XXX when is reconnect_save_status() called with
   52|       |		 * server->connected==FALSE? */
   53|      0|		g_free_not_null(conn->channels);
  ------------------
  |  |   64|      0|#define g_free_not_null(a) g_free(a)
  ------------------
   54|      0|		conn->channels = server->connrec->no_autojoin_channels ? NULL :
  ------------------
  |  Branch (54:20): [True: 0, False: 0]
  ------------------
   55|      0|			g_strdup(server->connrec->channels);
   56|      0|	}
   57|       |
   58|  3.66k|	signal_emit("server reconnect save status", 2, conn, server);
   59|  3.66k|}
servers_reconnect_init:
  502|      2|{
  503|      2|	settings_add_time("server", "server_reconnect_time", "5min");
  ------------------
  |  |   99|      2|	settings_add_time_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  504|      2|	settings_add_time("server", "server_connect_timeout", "5min");
  ------------------
  |  |   99|      2|	settings_add_time_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  505|       |
  506|      2|	reconnects = NULL;
  507|      2|	last_reconnect_tag = 0;
  508|       |
  509|      2|	reconnect_timeout_tag = g_timeout_add(1000, (GSourceFunc) server_reconnect_timeout, NULL);
  510|      2|	read_settings();
  511|       |
  512|      2|	signal_add("server connect failed", (SIGNAL_FUNC) sig_reconnect);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  513|      2|	signal_add("server disconnected", (SIGNAL_FUNC) sig_reconnect);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  514|      2|	signal_add("event connected", (SIGNAL_FUNC) sig_connected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  515|      2|	signal_add("chat protocol deinit", (SIGNAL_FUNC) sig_chat_protocol_deinit);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  516|      2|	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  517|       |
  518|      2|	command_bind("rmreconns", NULL, (SIGNAL_FUNC) cmd_rmreconns);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  519|      2|	command_bind("reconnect", NULL, (SIGNAL_FUNC) cmd_reconnect);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  520|       |	command_bind_first("disconnect", NULL, (SIGNAL_FUNC) cmd_disconnect);
  ------------------
  |  |   74|      2|#define command_bind_first(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind_first(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  521|      2|}
servers-reconnect.c:read_settings:
  496|      2|{
  497|      2|	reconnect_time = settings_get_time("server_reconnect_time")/1000;
  498|      2|        connect_timeout = settings_get_time("server_connect_timeout")/1000;
  499|      2|}
servers-reconnect.c:sig_reconnect:
  239|  29.4k|{
  240|  29.4k|	SERVER_CONNECT_REC *conn;
  241|  29.4k|	SERVER_SETUP_REC *sserver;
  242|  29.4k|	GSList *tmp;
  243|  29.4k|	int use_next, through;
  244|  29.4k|	time_t now;
  245|       |
  246|  29.4k|	g_return_if_fail(IS_SERVER(server));
  ------------------
  |  Branch (246:2): [True: 29.4k, False: 0]
  |  Branch (246:2): [True: 29.4k, False: 0]
  |  Branch (246:2): [True: 29.4k, False: 0]
  |  Branch (246:2): [Folded, False: 29.4k]
  ------------------
  247|       |
  248|  29.4k|	if (reconnect_time == -1 || !server_should_reconnect(server))
  ------------------
  |  |  230|  29.4k|	((server)->connection_lost && !(server)->no_reconnect && \
  |  |  ------------------
  |  |  |  Branch (230:3): [True: 28.9k, False: 420]
  |  |  |  Branch (230:32): [True: 28.5k, False: 436]
  |  |  ------------------
  |  |  231|  29.4k|	((server)->connrec->chatnet != NULL || \
  |  |  ------------------
  |  |  |  Branch (231:3): [True: 0, False: 28.5k]
  |  |  ------------------
  |  |  232|  28.5k|		!(server)->banned))
  |  |  ------------------
  |  |  |  Branch (232:3): [True: 27.2k, False: 1.32k]
  |  |  ------------------
  ------------------
  |  Branch (248:6): [True: 0, False: 29.4k]
  ------------------
  249|  2.17k|		return;
  250|       |
  251|  27.2k|	sserver = server_setup_find(server->connrec->address, server->connrec->port,
  252|  27.2k|	                            server->connrec->chatnet);
  253|       |
  254|  27.2k|	conn = server_connect_copy_skeleton(server->connrec, sserver == NULL);
  255|  27.2k|	g_return_if_fail(conn != NULL);
  ------------------
  |  Branch (255:2): [True: 27.2k, False: 0]
  |  Branch (255:2): [True: 27.2k, False: 0]
  |  Branch (255:2): [Folded, False: 27.2k]
  ------------------
  256|       |
  257|       |	/* save the server status */
  258|  27.2k|	if (server->connected) {
  ------------------
  |  Branch (258:6): [True: 3.66k, False: 23.5k]
  ------------------
  259|  3.66k|		conn->reconnection = TRUE;
  260|       |
  261|  3.66k|                reconnect_save_status(conn, server);
  262|  3.66k|	}
  263|       |
  264|  27.2k|	if (sserver != NULL) {
  ------------------
  |  Branch (264:6): [True: 0, False: 27.2k]
  ------------------
  265|       |		/* save the last connection time/status */
  266|      0|		sserver->last_connect = server->connect_time == 0 ?
  ------------------
  |  Branch (266:27): [True: 0, False: 0]
  ------------------
  267|      0|			time(NULL) : server->connect_time;
  268|      0|		sserver->last_failed = !server->connected;
  269|      0|		sserver->banned = server->banned;
  270|      0|                sserver->dns_error = server->dns_error;
  271|      0|	}
  272|       |
  273|  27.2k|	if (sserver == NULL || conn->chatnet == NULL) {
  ------------------
  |  Branch (273:6): [True: 27.2k, False: 0]
  |  Branch (273:25): [True: 0, False: 0]
  ------------------
  274|       |		/* not in any chatnet, just reconnect back to same server */
  275|  27.2k|                conn->family = server->connrec->family;
  276|  27.2k|		conn->address = g_strdup(server->connrec->address);
  277|  27.2k|		conn->port = server->connrec->port;
  278|  27.2k|		conn->password = g_strdup(server->connrec->password);
  279|       |
  280|  27.2k|		if (strchr(conn->address, '/') != NULL)
  ------------------
  |  Branch (280:7): [True: 0, False: 27.2k]
  ------------------
  281|      0|			conn->unix_socket = TRUE;
  282|       |
  283|  27.2k|		server_reconnect_add(conn, (server->connect_time == 0 ? time(NULL) :
  ------------------
  |  Branch (283:31): [True: 0, False: 27.2k]
  ------------------
  284|  27.2k|					    server->connect_time) + reconnect_time);
  285|  27.2k|		server_connect_unref(conn);
  286|  27.2k|		return;
  287|  27.2k|	}
  288|       |
  289|       |	/* always try to first connect to the first on the list where we
  290|       |	   haven't got unsuccessful connection attempts for the past half
  291|       |	   an hour. */
  292|       |
  293|      0|	now = time(NULL);
  294|      0|	for (tmp = setupservers; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (294:27): [True: 0, False: 0]
  ------------------
  295|      0|		SERVER_SETUP_REC *rec = tmp->data;
  296|       |
  297|      0|		if (sserver_connect_ok(rec, conn->chatnet) &&
  ------------------
  |  |  235|      0|	(!(rec)->banned && (rec)->chatnet != NULL && \
  |  |  ------------------
  |  |  |  Branch (235:3): [True: 0, False: 0]
  |  |  |  Branch (235:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  236|      0|	g_ascii_strcasecmp((rec)->chatnet, (net)) == 0)
  |  |  ------------------
  |  |  |  Branch (236:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  298|      0|		    (!rec->last_connect || !rec->last_failed ||
  ------------------
  |  Branch (298:8): [True: 0, False: 0]
  |  Branch (298:30): [True: 0, False: 0]
  ------------------
  299|      0|		     rec->last_connect < now-FAILED_RECONNECT_WAIT)) {
  ------------------
  |  |    6|      0|#define FAILED_RECONNECT_WAIT (60*30)
  ------------------
  |  Branch (299:8): [True: 0, False: 0]
  ------------------
  300|      0|			if (rec == sserver)
  ------------------
  |  Branch (300:8): [True: 0, False: 0]
  ------------------
  301|      0|				conn->port = server->connrec->port;
  302|      0|			sserver_connect(rec, conn);
  303|      0|			return;
  304|      0|		}
  305|      0|	}
  306|       |
  307|       |	/* just try the next server in list */
  308|      0|	use_next = through = FALSE;
  309|      0|	for (tmp = setupservers; tmp != NULL; ) {
  ------------------
  |  Branch (309:27): [True: 0, False: 0]
  ------------------
  310|      0|		SERVER_SETUP_REC *rec = tmp->data;
  311|       |
  312|      0|		if (!use_next && server->connrec->port == rec->port &&
  ------------------
  |  Branch (312:7): [True: 0, False: 0]
  |  Branch (312:20): [True: 0, False: 0]
  ------------------
  313|      0|		    g_ascii_strcasecmp(rec->address, server->connrec->address) == 0)
  ------------------
  |  Branch (313:7): [True: 0, False: 0]
  ------------------
  314|      0|			use_next = TRUE;
  315|      0|		else if (use_next && sserver_connect_ok(rec, conn->chatnet)) {
  ------------------
  |  |  235|      0|	(!(rec)->banned && (rec)->chatnet != NULL && \
  |  |  ------------------
  |  |  |  Branch (235:3): [True: 0, False: 0]
  |  |  |  Branch (235:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  236|      0|	g_ascii_strcasecmp((rec)->chatnet, (net)) == 0)
  |  |  ------------------
  |  |  |  Branch (236:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (315:12): [True: 0, False: 0]
  ------------------
  316|      0|			if (rec == sserver)
  ------------------
  |  Branch (316:8): [True: 0, False: 0]
  ------------------
  317|      0|                                conn->port = server->connrec->port;
  318|      0|			sserver_connect(rec, conn);
  319|      0|			break;
  320|      0|		}
  321|       |
  322|      0|		if (tmp->next != NULL) {
  ------------------
  |  Branch (322:7): [True: 0, False: 0]
  ------------------
  323|      0|			tmp = tmp->next;
  324|      0|			continue;
  325|      0|		}
  326|       |
  327|      0|		if (through) {
  ------------------
  |  Branch (327:7): [True: 0, False: 0]
  ------------------
  328|       |			/* shouldn't happen unless there's no servers in
  329|       |			   this chatnet in setup.. */
  330|      0|			server_connect_unref(conn);
  331|      0|			break;
  332|      0|		}
  333|       |
  334|      0|		tmp = setupservers;
  335|       |		use_next = through = TRUE;
  336|      0|	}
  337|      0|}
servers-reconnect.c:server_connect_copy_skeleton:
  165|  27.2k|{
  166|  27.2k|	SERVER_CONNECT_REC *dest;
  167|       |
  168|  27.2k|        dest = NULL;
  169|  27.2k|	signal_emit("server connect copy", 2, &dest, src);
  170|  27.2k|	g_return_val_if_fail(dest != NULL, NULL);
  ------------------
  |  Branch (170:2): [True: 27.2k, False: 0]
  |  Branch (170:2): [True: 27.2k, False: 0]
  |  Branch (170:2): [Folded, False: 27.2k]
  ------------------
  171|       |
  172|  27.2k|        server_connect_ref(dest);
  173|  27.2k|	dest->type = module_get_uniq_id("SERVER CONNECT", 0);
  174|  27.2k|	dest->reconnection = src->reconnection;
  175|  27.2k|	dest->last_connected = src->last_connected;
  176|  27.2k|	dest->last_failed = src->last_failed;
  177|  27.2k|	dest->proxy = g_strdup(src->proxy);
  178|  27.2k|        dest->proxy_port = src->proxy_port;
  179|  27.2k|	dest->proxy_string = g_strdup(src->proxy_string);
  180|  27.2k|	dest->proxy_string_after = g_strdup(src->proxy_string_after);
  181|  27.2k|	dest->proxy_password = g_strdup(src->proxy_password);
  182|       |
  183|  27.2k|	dest->tag = g_strdup(src->tag);
  184|       |
  185|  27.2k|	if (connect_info) {
  ------------------
  |  Branch (185:6): [True: 27.2k, False: 0]
  ------------------
  186|  27.2k|		dest->family = src->family;
  187|  27.2k|		dest->address = g_strdup(src->address);
  188|  27.2k|		dest->port = src->port;
  189|  27.2k|		dest->password = g_strdup(src->password);
  190|       |
  191|  27.2k|		dest->use_tls = src->use_tls;
  192|  27.2k|		dest->tls_cert = g_strdup(src->tls_cert);
  193|  27.2k|		dest->tls_pkey = g_strdup(src->tls_pkey);
  194|  27.2k|		dest->tls_verify = src->tls_verify;
  195|  27.2k|		dest->tls_cafile = g_strdup(src->tls_cafile);
  196|  27.2k|		dest->tls_capath = g_strdup(src->tls_capath);
  197|  27.2k|		dest->tls_ciphers = g_strdup(src->tls_ciphers);
  198|  27.2k|		dest->tls_pinned_cert = g_strdup(src->tls_pinned_cert);
  199|  27.2k|		dest->tls_pinned_pubkey = g_strdup(src->tls_pinned_pubkey);
  200|  27.2k|	}
  201|       |
  202|  27.2k|	dest->chatnet = g_strdup(src->chatnet);
  203|  27.2k|	dest->nick = g_strdup(src->nick);
  204|  27.2k|	dest->username = g_strdup(src->username);
  205|  27.2k|	dest->realname = g_strdup(src->realname);
  206|       |
  207|  27.2k|	if (src->own_ip4 != NULL) {
  ------------------
  |  Branch (207:6): [True: 0, False: 27.2k]
  ------------------
  208|      0|		dest->own_ip4 = g_new(IPADDR, 1);
  ------------------
  |  Branch (208:19): [True: 0, False: 0]
  |  Branch (208:19): [True: 0, False: 0]
  ------------------
  209|      0|		memcpy(dest->own_ip4, src->own_ip4, sizeof(IPADDR));
  210|      0|	}
  211|  27.2k|	if (src->own_ip6 != NULL) {
  ------------------
  |  Branch (211:6): [True: 0, False: 27.2k]
  ------------------
  212|      0|		dest->own_ip6 = g_new(IPADDR, 1);
  ------------------
  |  Branch (212:19): [True: 0, False: 0]
  |  Branch (212:19): [True: 0, False: 0]
  ------------------
  213|      0|		memcpy(dest->own_ip6, src->own_ip6, sizeof(IPADDR));
  214|      0|	}
  215|  27.2k|	dest->resolved_host = src->resolved_host;
  216|  27.2k|	if (dest->resolved_host != NULL) {
  ------------------
  |  Branch (216:6): [True: 0, False: 27.2k]
  ------------------
  217|      0|		resolved_ip_ref(dest->resolved_host);
  218|      0|	}
  219|       |
  220|  27.2k|	dest->channels = g_strdup(src->channels);
  221|  27.2k|	dest->away_reason = g_strdup(src->away_reason);
  222|  27.2k|	dest->no_autojoin_channels = src->no_autojoin_channels;
  223|  27.2k|	dest->no_autosendcmd = src->no_autosendcmd;
  224|  27.2k|	dest->unix_socket = src->unix_socket;
  225|       |
  226|  27.2k|	return dest;
  227|  27.2k|}
servers-reconnect.c:server_reconnect_add:
   63|  27.2k|{
   64|  27.2k|	RECONNECT_REC *rec;
   65|       |
   66|  27.2k|	g_return_if_fail(IS_SERVER_CONNECT(conn));
  ------------------
  |  Branch (66:2): [True: 27.2k, False: 0]
  |  Branch (66:2): [True: 27.2k, False: 0]
  |  Branch (66:2): [True: 27.2k, False: 0]
  |  Branch (66:2): [Folded, False: 27.2k]
  ------------------
   67|       |
   68|  27.2k|	rec = g_new(RECONNECT_REC, 1);
  ------------------
  |  Branch (68:8): [True: 27.2k, False: 0]
  |  Branch (68:8): [True: 0, False: 27.2k]
  ------------------
   69|  27.2k|	rec->tag = ++last_reconnect_tag;
   70|  27.2k|	rec->next_connect = next_connect;
   71|       |
   72|  27.2k|	rec->conn = conn;
   73|  27.2k|	conn->reconnecting = TRUE;
   74|  27.2k|	server_connect_ref(conn);
   75|       |
   76|  27.2k|	reconnects = g_slist_append(reconnects, rec);
   77|  27.2k|}
servers-reconnect.c:sig_connected:
  340|  21.8k|{
  341|  21.8k|	g_return_if_fail(IS_SERVER(server));
  ------------------
  |  Branch (341:2): [True: 21.8k, False: 0]
  |  Branch (341:2): [True: 21.8k, False: 0]
  |  Branch (341:2): [True: 21.8k, False: 0]
  |  Branch (341:2): [Folded, False: 21.8k]
  ------------------
  342|  21.8k|	if (!server->connrec->reconnection)
  ------------------
  |  Branch (342:6): [True: 21.8k, False: 0]
  ------------------
  343|  21.8k|		return;
  344|       |
  345|      0|	if (server->connrec->channels != NULL)
  ------------------
  |  Branch (345:6): [True: 0, False: 0]
  ------------------
  346|      0|		server->channels_join(server, server->connrec->channels, TRUE);
  347|      0|}

server_create_conn_opt:
  397|  29.4k|{
  398|  29.4k|	SERVER_CONNECT_REC *rec;
  399|  29.4k|        CHATNET_REC *chatrec;
  400|       |
  401|  29.4k|	g_return_val_if_fail(dest != NULL, NULL);
  ------------------
  |  Branch (401:2): [True: 29.4k, False: 0]
  |  Branch (401:2): [True: 29.4k, False: 0]
  |  Branch (401:2): [Folded, False: 29.4k]
  ------------------
  402|       |
  403|  29.4k|        chatrec = chatnet_find(dest);
  404|  29.4k|	if (chatrec != NULL) {
  ------------------
  |  Branch (404:6): [True: 0, False: 29.4k]
  ------------------
  405|      0|		rec = create_chatnet_conn(chatrec->name, port, password, nick, optlist);
  406|       |		/* If rec is NULL the chatnet has no url to connect to */
  407|      0|		return rec;
  408|      0|	}
  409|       |
  410|  29.4k|	chatrec = chatnet == NULL ? NULL : chatnet_find(chatnet);
  ------------------
  |  Branch (410:12): [True: 0, False: 29.4k]
  ------------------
  411|  29.4k|	if (chatrec != NULL)
  ------------------
  |  Branch (411:6): [True: 0, False: 29.4k]
  ------------------
  412|      0|		chatnet = chatrec->name;
  413|       |
  414|  29.4k|	return create_addr_conn(chat_type, dest, port, chatnet, password, nick, optlist);
  415|  29.4k|}
server_create_conn:
  419|  29.4k|{
  420|  29.4k|	SERVER_CONNECT_REC *ret;
  421|  29.4k|	GHashTable *opt;
  422|       |
  423|  29.4k|	opt = g_hash_table_new(NULL, NULL);
  424|  29.4k|	ret = server_create_conn_opt(chat_type, dest, port, chatnet, password, nick, opt);
  425|  29.4k|	g_hash_table_destroy(opt);
  426|       |
  427|  29.4k|	return ret;
  428|  29.4k|}
server_setup_find:
  434|  56.6k|{
  435|  56.6k|	SERVER_SETUP_REC *server;
  436|  56.6k|	GSList *tmp;
  437|       |
  438|  56.6k|	g_return_val_if_fail(address != NULL, NULL);
  ------------------
  |  Branch (438:2): [True: 56.6k, False: 0]
  |  Branch (438:2): [True: 56.6k, False: 0]
  |  Branch (438:2): [Folded, False: 56.6k]
  ------------------
  439|       |
  440|  56.6k|	server = NULL;
  441|   793k|	for (tmp = setupservers; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (441:27): [True: 736k, False: 56.6k]
  ------------------
  442|   736k|		SERVER_SETUP_REC *rec = tmp->data;
  443|       |
  444|   736k|		if (g_ascii_strcasecmp(rec->address, address) == 0 &&
  ------------------
  |  Branch (444:7): [True: 0, False: 736k]
  ------------------
  445|      0|		    (chatnet == NULL || rec->chatnet == NULL ||
  ------------------
  |  Branch (445:8): [True: 0, False: 0]
  |  Branch (445:27): [True: 0, False: 0]
  ------------------
  446|      0|		     g_ascii_strcasecmp(rec->chatnet, chatnet) == 0)) {
  ------------------
  |  Branch (446:8): [True: 0, False: 0]
  ------------------
  447|      0|			server = rec;
  448|      0|			if (rec->port == port)
  ------------------
  |  Branch (448:8): [True: 0, False: 0]
  ------------------
  449|      0|				break;
  450|      0|		}
  451|   736k|	}
  452|       |
  453|  56.6k|	return server;
  454|  56.6k|}
servers_setup_init:
  771|      2|{
  772|      2|	settings_add_str("server", "hostname", "");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  773|       |
  774|      2|	settings_add_str("server", "nick", NULL);
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  775|      2|	settings_add_str("server", "user_name", NULL);
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  776|      2|	settings_add_str("server", "real_name", NULL);
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  777|       |
  778|      2|	settings_add_bool("proxy", "use_proxy", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  779|      2|	settings_add_str("proxy", "proxy_address", "");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  780|      2|	settings_add_int("proxy", "proxy_port", 6667);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  781|      2|	settings_add_str("proxy", "proxy_string", "CONNECT %s %d");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  782|      2|	settings_add_str("proxy", "proxy_string_after", "");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  783|      2|	settings_add_str("proxy", "proxy_password", "");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  784|       |
  785|      2|        setupservers = NULL;
  786|      2|	source_host_ip4 = source_host_ip6 = NULL;
  787|      2|        old_source_host = NULL;
  788|      2|	read_settings();
  789|       |
  790|      2|	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  791|       |	signal_add("setup reread servers", (SIGNAL_FUNC) read_servers);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  792|      2|}
servers-setup.c:create_addr_conn:
  293|  29.4k|{
  294|  29.4k|        CHAT_PROTOCOL_REC *proto;
  295|  29.4k|	SERVER_CONNECT_REC *conn;
  296|  29.4k|	SERVER_SETUP_REC *sserver;
  297|  29.4k|	CHATNET_REC *chatnetrec;
  298|       |
  299|  29.4k|	g_return_val_if_fail(address != NULL, NULL);
  ------------------
  |  Branch (299:2): [True: 29.4k, False: 0]
  |  Branch (299:2): [True: 29.4k, False: 0]
  |  Branch (299:2): [Folded, False: 29.4k]
  ------------------
  300|       |
  301|  29.4k|	sserver = server_setup_find(address, port, chatnet);
  302|  29.4k|	if (sserver != NULL) {
  ------------------
  |  Branch (302:6): [True: 0, False: 29.4k]
  ------------------
  303|      0|		if (chat_type < 0)
  ------------------
  |  Branch (303:7): [True: 0, False: 0]
  ------------------
  304|      0|			chat_type = sserver->chat_type;
  305|      0|		else if (chat_type != sserver->chat_type)
  ------------------
  |  Branch (305:12): [True: 0, False: 0]
  ------------------
  306|      0|                        sserver = NULL;
  307|      0|	}
  308|       |
  309|  29.4k|	proto = chat_type >= 0 ? chat_protocol_find_id(chat_type) :
  ------------------
  |  Branch (309:10): [True: 29.4k, False: 0]
  ------------------
  310|  29.4k|                chat_protocol_get_default();
  311|       |
  312|  29.4k|	if (proto == NULL) {
  ------------------
  |  Branch (312:6): [True: 0, False: 29.4k]
  ------------------
  313|      0|		signal_stop();
  314|      0|		return NULL;
  315|      0|	}
  316|       |
  317|  29.4k|	g_return_val_if_fail(proto != NULL, NULL);
  ------------------
  |  Branch (317:2): [True: 29.4k, False: 0]
  |  Branch (317:2): [True: 29.4k, False: 0]
  |  Branch (317:2): [Folded, False: 29.4k]
  ------------------
  318|       |
  319|  29.4k|	conn = proto->create_server_connect();
  320|  29.4k|	server_connect_ref(conn);
  321|       |
  322|  29.4k|	conn->chat_type = proto->id;
  323|  29.4k|        if (chatnet != NULL && *chatnet != '\0')
  ------------------
  |  Branch (323:13): [True: 29.4k, False: 0]
  |  Branch (323:32): [True: 0, False: 29.4k]
  ------------------
  324|      0|		conn->chatnet = g_strdup(chatnet);
  325|       |
  326|       |	/* fill in the defaults */
  327|  29.4k|	server_setup_fill(conn, address, port, optlist);
  328|       |
  329|       |	/* fill the rest from chat network settings */
  330|  29.4k|	chatnetrec = chatnet != NULL ? chatnet_find(chatnet) :
  ------------------
  |  Branch (330:15): [True: 29.4k, False: 0]
  ------------------
  331|  29.4k|		(sserver == NULL || sserver->chatnet == NULL ? NULL :
  ------------------
  |  Branch (331:4): [True: 0, False: 0]
  |  Branch (331:23): [True: 0, False: 0]
  ------------------
  332|      0|		 chatnet_find(sserver->chatnet));
  333|  29.4k|	if (chatnetrec != NULL)
  ------------------
  |  Branch (333:6): [True: 0, False: 29.4k]
  ------------------
  334|      0|		server_setup_fill_chatnet(conn, chatnetrec);
  335|       |
  336|       |	/* fill the information from setup */
  337|  29.4k|	if (sserver != NULL)
  ------------------
  |  Branch (337:6): [True: 0, False: 29.4k]
  ------------------
  338|      0|		server_setup_fill_server(conn, sserver);
  339|       |
  340|       |	/* fill the optlist overrides */
  341|  29.4k|	if (g_hash_table_size(optlist))
  ------------------
  |  Branch (341:6): [True: 0, False: 29.4k]
  ------------------
  342|      0|		server_setup_fill_optlist(conn, optlist);
  343|       |
  344|       |	/* nick / password given in command line overrides all settings */
  345|  29.4k|	if (password && *password) {
  ------------------
  |  Branch (345:6): [True: 29.4k, False: 0]
  |  Branch (345:18): [True: 0, False: 29.4k]
  ------------------
  346|      0|		g_free_not_null(conn->password);
  ------------------
  |  |   64|      0|#define g_free_not_null(a) g_free(a)
  ------------------
  347|      0|		conn->password = g_strdup(password);
  348|      0|	}
  349|  29.4k|	if (nick && *nick) {
  ------------------
  |  Branch (349:6): [True: 29.4k, False: 0]
  |  Branch (349:14): [True: 29.4k, False: 0]
  ------------------
  350|  29.4k|		g_free_not_null(conn->nick);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  351|  29.4k|		conn->nick = g_strdup(nick);
  352|  29.4k|	}
  353|       |
  354|  29.4k|	return conn;
  355|  29.4k|}
servers-setup.c:server_setup_fill:
  149|  29.4k|{
  150|  29.4k|	g_return_if_fail(conn != NULL);
  ------------------
  |  Branch (150:2): [True: 29.4k, False: 0]
  |  Branch (150:2): [True: 29.4k, False: 0]
  |  Branch (150:2): [Folded, False: 29.4k]
  ------------------
  151|  29.4k|	g_return_if_fail(address != NULL);
  ------------------
  |  Branch (151:2): [True: 29.4k, False: 0]
  |  Branch (151:2): [True: 29.4k, False: 0]
  |  Branch (151:2): [Folded, False: 29.4k]
  ------------------
  152|       |
  153|  29.4k|	conn->type = module_get_uniq_id("SERVER CONNECT", 0);
  154|       |
  155|  29.4k|	conn->address = g_strdup(address);
  156|  29.4k|	if (port > 0) conn->port = port;
  ------------------
  |  Branch (156:6): [True: 0, False: 29.4k]
  ------------------
  157|       |
  158|  29.4k|	if (strchr(address, '/') != NULL)
  ------------------
  |  Branch (158:6): [True: 0, False: 29.4k]
  ------------------
  159|      0|		conn->unix_socket = TRUE;
  160|       |
  161|  29.4k|	if (!conn->nick) conn->nick = g_strdup(settings_get_str("nick"));
  ------------------
  |  Branch (161:6): [True: 29.4k, False: 0]
  ------------------
  162|  29.4k|	conn->username = g_strdup(settings_get_str("user_name"));
  163|  29.4k|	conn->realname = g_strdup(settings_get_str("real_name"));
  164|       |
  165|       |	/* proxy settings */
  166|  29.4k|	if (settings_get_bool("use_proxy")) {
  ------------------
  |  Branch (166:6): [True: 0, False: 29.4k]
  ------------------
  167|      0|		conn->proxy = g_strdup(settings_get_str("proxy_address"));
  168|      0|		conn->proxy_port = settings_get_int("proxy_port");
  169|      0|		conn->proxy_string = g_strdup(settings_get_str("proxy_string"));
  170|      0|		conn->proxy_string_after = g_strdup(settings_get_str("proxy_string_after"));
  171|      0|		conn->proxy_password = g_strdup(settings_get_str("proxy_password"));
  172|      0|	}
  173|       |
  174|       |	/* source IP */
  175|  29.4k|	if (source_host_ip4 != NULL) {
  ------------------
  |  Branch (175:6): [True: 0, False: 29.4k]
  ------------------
  176|      0|		conn->own_ip4 = g_new(IPADDR, 1);
  ------------------
  |  Branch (176:19): [True: 0, False: 0]
  |  Branch (176:19): [True: 0, False: 0]
  ------------------
  177|      0|		memcpy(conn->own_ip4, source_host_ip4, sizeof(IPADDR));
  178|      0|	}
  179|  29.4k|	if (source_host_ip6 != NULL) {
  ------------------
  |  Branch (179:6): [True: 0, False: 29.4k]
  ------------------
  180|      0|		conn->own_ip6 = g_new(IPADDR, 1);
  ------------------
  |  Branch (180:19): [True: 0, False: 0]
  |  Branch (180:19): [True: 0, False: 0]
  ------------------
  181|      0|		memcpy(conn->own_ip6, source_host_ip6, sizeof(IPADDR));
  182|      0|	}
  183|       |
  184|  29.4k|	signal_emit("server setup fill connect", 2, conn, optlist);
  185|  29.4k|}
servers-setup.c:read_settings:
  759|      2|{
  760|      2|	if (old_source_host == NULL ||
  ------------------
  |  Branch (760:6): [True: 2, False: 0]
  ------------------
  761|      2|	    g_strcmp0(old_source_host, settings_get_str("hostname")) != 0) {
  ------------------
  |  Branch (761:6): [True: 0, False: 0]
  ------------------
  762|      2|                g_free_not_null(old_source_host);
  ------------------
  |  |   64|      2|#define g_free_not_null(a) g_free(a)
  ------------------
  763|      2|		old_source_host = g_strdup(settings_get_str("hostname"));
  764|       |
  765|       |		source_host_ok = FALSE;
  766|      2|		get_source_host_ip();
  767|      2|	}
  768|      2|}
servers-setup.c:get_source_host_ip:
   59|      2|{
   60|      2|        const char *hostname;
   61|      2|	IPADDR ip4 = { 0 };
   62|      2|	IPADDR ip6 = { 0 };
   63|       |
   64|      2|	if (source_host_ok)
  ------------------
  |  Branch (64:6): [True: 0, False: 2]
  ------------------
   65|      0|		return;
   66|       |
   67|       |	/* FIXME: This will block! */
   68|      2|        hostname = settings_get_str("hostname");
   69|      2|	source_host_ok = *hostname != '\0' &&
  ------------------
  |  Branch (69:19): [True: 0, False: 2]
  ------------------
   70|      0|	                 net_gethostbyname_first_ips(hostname, G_RESOLVER_NAME_LOOKUP_FLAGS_DEFAULT,
  ------------------
  |  Branch (70:19): [True: 0, False: 0]
  ------------------
   71|      0|	                                             &ip4, &ip6) == 0;
   72|       |
   73|      2|	if (source_host_ok) {
  ------------------
  |  Branch (73:6): [True: 0, False: 2]
  ------------------
   74|      0|		save_ips(&ip4, &ip6, &source_host_ip4, &source_host_ip6);
   75|      2|	} else {
   76|      2|		g_free_and_null(source_host_ip4);
  ------------------
  |  |   67|      2|	G_STMT_START { \
  |  |   68|      2|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 0, False: 2]
  |  |  ------------------
  |  |   69|      2|	} G_STMT_END
  ------------------
  |  Branch (76:3): [Folded, False: 2]
  ------------------
   77|       |		g_free_and_null(source_host_ip6);
  ------------------
  |  |   67|      2|	G_STMT_START { \
  |  |   68|      2|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 0, False: 2]
  |  |  ------------------
  |  |   69|      2|	} G_STMT_END
  ------------------
  |  Branch (77:3): [Folded, False: 2]
  ------------------
   78|      2|	}
   79|      2|}
servers-setup.c:read_servers:
  733|      2|{
  734|      2|	CONFIG_NODE *node;
  735|      2|	GSList *tmp;
  736|       |
  737|      2|	while (setupservers != NULL)
  ------------------
  |  Branch (737:9): [True: 0, False: 2]
  ------------------
  738|      0|		server_setup_destroy(setupservers->data);
  739|       |
  740|       |	/* Read servers */
  741|      2|	node = iconfig_node_traverse("servers", FALSE);
  ------------------
  |  |   51|      2|#define iconfig_node_traverse(a, b) config_node_traverse(mainconfig, a, b)
  ------------------
  742|      2|	if (node != NULL) {
  ------------------
  |  Branch (742:6): [True: 2, False: 0]
  ------------------
  743|      2|		int i = 0;
  744|      2|		tmp = config_node_first(node->value);
  745|     30|		for (; tmp != NULL; tmp = config_node_next(tmp), i++) {
  ------------------
  |  Branch (745:10): [True: 28, False: 2]
  ------------------
  746|     28|			node = tmp->data;
  747|     28|			if (node->type != NODE_TYPE_BLOCK) {
  ------------------
  |  Branch (747:8): [True: 0, False: 28]
  ------------------
  748|      0|				g_critical("Expected block node at `servers[%d]' was of %s type. "
  ------------------
  |  Branch (748:5): [True: 0, False: 0]
  ------------------
  749|      0|				           "Corrupt config?",
  750|      0|				           i, node->type == NODE_TYPE_LIST ? "list" : "scalar");
  751|     28|			} else {
  752|     28|				server_setup_read(node);
  753|     28|			}
  754|     28|		}
  755|      2|	}
  756|      2|}
servers-setup.c:server_setup_read:
  457|     28|{
  458|     28|	SERVER_SETUP_REC *rec;
  459|     28|	CHATNET_REC *chatnetrec;
  460|     28|	CHAT_PROTOCOL_REC *proto;
  461|     28|	char *server, *chatnet, *family;
  462|     28|	int port;
  463|     28|	char *value = NULL;
  464|       |
  465|     28|	g_return_val_if_fail(node != NULL, NULL);
  ------------------
  |  Branch (465:2): [True: 28, False: 0]
  |  Branch (465:2): [True: 28, False: 0]
  |  Branch (465:2): [Folded, False: 28]
  ------------------
  466|       |
  467|     28|	server = config_node_get_str(node, "address", NULL);
  468|     28|	if (server == NULL)
  ------------------
  |  Branch (468:6): [True: 0, False: 28]
  ------------------
  469|      0|		return NULL;
  470|       |
  471|     28|	port = config_node_get_int(node, "port", 0);
  472|     28|	chatnet = config_node_get_str(node, "chatnet", NULL);
  473|       |
  474|     28|	if ((rec = server_setup_find(server, port, chatnet)) != NULL && rec->port == port) {
  ------------------
  |  Branch (474:6): [True: 0, False: 28]
  |  Branch (474:66): [True: 0, False: 0]
  ------------------
  475|       |		/* duplicate server setup */
  476|      0|		server_setup_remove(rec);
  477|      0|	}
  478|       |
  479|     28|	rec = NULL;
  480|       |
  481|     28|	if (chatnet != NULL) {
  ------------------
  |  Branch (481:6): [True: 28, False: 0]
  ------------------
  482|     28|		chatnetrec = chatnet_find(chatnet);
  483|     28|		if (chatnetrec != NULL) {
  ------------------
  |  Branch (483:7): [True: 26, False: 2]
  ------------------
  484|     26|			proto = CHAT_PROTOCOL(chatnetrec);
  ------------------
  |  |   35|     26|	((object) == NULL ? chat_protocol_get_default() : \
  |  |  ------------------
  |  |  |  Branch (35:3): [True: 0, False: 26]
  |  |  ------------------
  |  |   36|     26|	chat_protocol_find_id((object)->chat_type))
  ------------------
  485|     26|		} else {
  486|       |			/* chat network not found, create it. */
  487|      2|			if (chatnet_find_unavailable(chatnet)) {
  ------------------
  |  Branch (487:8): [True: 2, False: 0]
  ------------------
  488|       |				/* no protocols loaded, skip loading servers */
  489|      2|				return NULL;
  490|      2|			}
  491|      0|			proto = chat_protocol_get_default();
  492|      0|			chatnetrec = proto->create_chatnet();
  493|      0|			chatnetrec->chat_type = chat_protocol_get_default()->id;
  494|      0|			chatnetrec->name = g_strdup(chatnet);
  495|      0|			chatnet_create(chatnetrec);
  496|      0|		}
  497|     28|	} else {
  498|      0|		chatnetrec = NULL;
  499|      0|		proto = chat_protocol_get_default();
  500|      0|		if (proto == NULL) {
  ------------------
  |  Branch (500:7): [True: 0, False: 0]
  ------------------
  501|       |			/* no protocols loaded, skip loading servers */
  502|      0|			return NULL;
  503|      0|		}
  504|      0|	}
  505|       |
  506|     26|	family = config_node_get_str(node, "family", "");
  507|       |
  508|     26|	rec = proto->create_server_setup();
  509|     26|	rec->type = module_get_uniq_id("SERVER SETUP", 0);
  510|     26|	rec->chat_type = proto->id;
  511|     26|	rec->chatnet = chatnetrec == NULL ? NULL : g_strdup(chatnetrec->name);
  ------------------
  |  Branch (511:17): [True: 0, False: 26]
  ------------------
  512|     26|	rec->family = g_ascii_strcasecmp(family, "inet6") == 0 ?
  ------------------
  |  Branch (512:16): [True: 0, False: 26]
  ------------------
  513|     26|	                  AF_INET6 :
  514|     26|	                  (g_ascii_strcasecmp(family, "inet") == 0 ? AF_INET : 0);
  ------------------
  |  Branch (514:21): [True: 0, False: 26]
  ------------------
  515|     26|	rec->address = g_strdup(server);
  516|     26|	rec->password = g_strdup(config_node_get_str(node, "password", NULL));
  517|       |
  518|     26|	rec->use_tls = config_node_get_bool(node, "use_tls", FALSE) || config_node_get_bool(node, "use_ssl", FALSE);
  ------------------
  |  Branch (518:17): [True: 12, False: 14]
  |  Branch (518:65): [True: 0, False: 14]
  ------------------
  519|     26|	rec->tls_verify = config_node_find(node, "tls_verify") != NULL ?
  ------------------
  |  Branch (519:20): [True: 12, False: 14]
  ------------------
  520|     12|                              config_node_get_bool(node, "tls_verify", TRUE) :
  521|     26|                              config_node_get_bool(node, "ssl_verify", TRUE);
  522|       |
  523|     26|	value = config_node_get_str(node, "tls_cert", NULL);
  524|     26|	if (value == NULL)
  ------------------
  |  Branch (524:6): [True: 26, False: 0]
  ------------------
  525|     26|		value = config_node_get_str(node, "ssl_cert", NULL);
  526|     26|	rec->tls_cert = g_strdup(value);
  527|       |
  528|     26|	value = config_node_get_str(node, "tls_pkey", NULL);
  529|     26|	if (value == NULL)
  ------------------
  |  Branch (529:6): [True: 26, False: 0]
  ------------------
  530|     26|		value = config_node_get_str(node, "ssl_pkey", NULL);
  531|     26|	rec->tls_pkey = g_strdup(value);
  532|       |
  533|     26|	value = config_node_get_str(node, "tls_pass", NULL);
  534|     26|	if (value == NULL)
  ------------------
  |  Branch (534:6): [True: 26, False: 0]
  ------------------
  535|     26|		value = config_node_get_str(node, "ssl_pass", NULL);
  536|     26|	rec->tls_pass = g_strdup(value);
  537|       |
  538|     26|	value = config_node_get_str(node, "tls_cafile", NULL);
  539|     26|	if (value == NULL)
  ------------------
  |  Branch (539:6): [True: 26, False: 0]
  ------------------
  540|     26|		value = config_node_get_str(node, "ssl_cafile", NULL);
  541|     26|	rec->tls_cafile = g_strdup(value);
  542|       |
  543|     26|	value = config_node_get_str(node, "tls_capath", NULL);
  544|     26|	if (value == NULL)
  ------------------
  |  Branch (544:6): [True: 26, False: 0]
  ------------------
  545|     26|		value = config_node_get_str(node, "ssl_capath", NULL);
  546|     26|	rec->tls_capath = g_strdup(value);
  547|       |
  548|     26|	value = config_node_get_str(node, "tls_ciphers", NULL);
  549|     26|	if (value == NULL)
  ------------------
  |  Branch (549:6): [True: 26, False: 0]
  ------------------
  550|     26|		value = config_node_get_str(node, "ssl_ciphers", NULL);
  551|     26|	rec->tls_ciphers = g_strdup(value);
  552|       |
  553|     26|	value = config_node_get_str(node, "tls_pinned_cert", NULL);
  554|     26|	if (value == NULL)
  ------------------
  |  Branch (554:6): [True: 26, False: 0]
  ------------------
  555|     26|		value = config_node_get_str(node, "ssl_pinned_cert", NULL);
  556|     26|	rec->tls_pinned_cert = g_strdup(value);
  557|       |
  558|     26|	value = config_node_get_str(node, "tls_pinned_pubkey", NULL);
  559|     26|	if (value == NULL)
  ------------------
  |  Branch (559:6): [True: 26, False: 0]
  ------------------
  560|     26|		value = config_node_get_str(node, "ssl_pinned_pubkey", NULL);
  561|     26|	rec->tls_pinned_pubkey = g_strdup(value);
  562|       |
  563|     26|	rec->port = port;
  564|     26|	rec->autoconnect = config_node_get_bool(node, "autoconnect", FALSE);
  565|     26|	rec->no_proxy = config_node_get_bool(node, "no_proxy", FALSE);
  566|     26|	rec->own_host = g_strdup(config_node_get_str(node, "own_host", NULL));
  567|       |
  568|     26|	signal_emit("server setup read", 2, rec, node);
  569|       |
  570|     26|	setupservers = g_slist_append(setupservers, rec);
  571|     26|	return rec;
  572|     28|}

server_connect_finished:
  139|  29.4k|{
  140|  29.4k|	server->connect_time = time(NULL);
  141|       |
  142|  29.4k|	servers = g_slist_append(servers, server);
  143|  29.4k|	signal_emit("server connected", 1, server);
  144|  29.4k|}
server_connect_init:
  403|  29.4k|{
  404|  29.4k|	const char *str;
  405|       |
  406|  29.4k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (406:2): [True: 29.4k, False: 0]
  |  Branch (406:2): [True: 29.4k, False: 0]
  |  Branch (406:2): [Folded, False: 29.4k]
  ------------------
  407|       |
  408|  29.4k|	MODULE_DATA_INIT(server);
  ------------------
  |  |    5|  29.4k|        (rec)->module_data = g_hash_table_new(g_str_hash, g_str_equal)
  ------------------
  409|  29.4k|	server->type = module_get_uniq_id("SERVER", 0);
  410|  29.4k|	server_ref(server);
  411|  29.4k|	server->current_incoming_meta =
  412|  29.4k|	    g_hash_table_new_full(g_str_hash, (GEqualFunc) g_str_equal,
  413|  29.4k|	                          (GDestroyNotify) i_refstr_release, (GDestroyNotify) g_free);
  414|       |
  415|  29.4k|	server->nick = g_strdup(server->connrec->nick);
  416|  29.4k|	if (server->connrec->username == NULL || *server->connrec->username == '\0') {
  ------------------
  |  Branch (416:6): [True: 0, False: 29.4k]
  |  Branch (416:43): [True: 0, False: 29.4k]
  ------------------
  417|      0|		g_free_not_null(server->connrec->username);
  ------------------
  |  |   64|      0|#define g_free_not_null(a) g_free(a)
  ------------------
  418|       |
  419|      0|		str = g_get_user_name();
  420|      0|		if (*str == '\0') str = "unknown";
  ------------------
  |  Branch (420:7): [True: 0, False: 0]
  ------------------
  421|      0|		server->connrec->username = g_strdup(str);
  422|      0|	}
  423|  29.4k|	if (server->connrec->realname == NULL || *server->connrec->realname == '\0') {
  ------------------
  |  Branch (423:6): [True: 0, False: 29.4k]
  |  Branch (423:43): [True: 0, False: 29.4k]
  ------------------
  424|      0|		g_free_not_null(server->connrec->realname);
  ------------------
  |  |   64|      0|#define g_free_not_null(a) g_free(a)
  ------------------
  425|       |
  426|      0|		str = g_get_real_name();
  427|      0|		if (*str == '\0') str = server->connrec->username;
  ------------------
  |  Branch (427:7): [True: 0, False: 0]
  ------------------
  428|      0|		server->connrec->realname = g_strdup(str);
  429|      0|	}
  430|       |
  431|  29.4k|	server->tag = server_create_tag(server->connrec);
  432|  29.4k|	server->connect_tag = -1;
  433|  29.4k|}
server_disconnect:
  496|  29.4k|{
  497|  29.4k|	g_return_if_fail(IS_SERVER(server));
  ------------------
  |  Branch (497:2): [True: 29.4k, False: 0]
  |  Branch (497:2): [True: 29.4k, False: 0]
  |  Branch (497:2): [True: 29.4k, False: 0]
  |  Branch (497:2): [Folded, False: 29.4k]
  ------------------
  498|       |
  499|  29.4k|	if (server->disconnected)
  ------------------
  |  Branch (499:6): [True: 0, False: 29.4k]
  ------------------
  500|      0|		return;
  501|       |
  502|  29.4k|	if (server->connect_tag != -1) {
  ------------------
  |  Branch (502:6): [True: 0, False: 29.4k]
  ------------------
  503|       |		/* still connecting to server.. */
  504|      0|		server_connect_failed(server, NULL);
  505|      0|		return;
  506|  29.4k|	} else if (server->connect_cancellable != NULL) {
  ------------------
  |  Branch (506:13): [True: 0, False: 29.4k]
  ------------------
  507|      0|		server_connect_failed(server, NULL);
  508|      0|		return;
  509|      0|	}
  510|       |
  511|  29.4k|	servers = g_slist_remove(servers, server);
  512|       |
  513|  29.4k|	server->disconnected = TRUE;
  514|  29.4k|	signal_emit("server disconnected", 1, server);
  515|       |
  516|       |	/* we used to destroy the handle here but it may be still in
  517|       |	   use during signal processing, so destroy it on unref
  518|       |	   instead */
  519|       |
  520|  29.4k|	if (server->readtag > 0) {
  ------------------
  |  Branch (520:6): [True: 0, False: 29.4k]
  ------------------
  521|      0|		g_source_remove(server->readtag);
  522|      0|		server->readtag = -1;
  523|      0|	}
  524|       |
  525|  29.4k|	server_unref(server);
  526|  29.4k|}
server_ref:
  529|   796k|{
  530|   796k|	g_return_if_fail(IS_SERVER(server));
  ------------------
  |  Branch (530:2): [True: 796k, False: 0]
  |  Branch (530:2): [True: 796k, False: 0]
  |  Branch (530:2): [True: 796k, False: 0]
  |  Branch (530:2): [Folded, False: 796k]
  ------------------
  531|       |
  532|   796k|	server->refcount++;
  533|   796k|}
server_unref:
  536|   796k|{
  537|   796k|	int chans;
  538|       |
  539|   796k|	g_return_val_if_fail(IS_SERVER(server), FALSE);
  ------------------
  |  Branch (539:2): [True: 796k, False: 0]
  |  Branch (539:2): [True: 796k, False: 0]
  |  Branch (539:2): [True: 796k, False: 0]
  |  Branch (539:2): [Folded, False: 796k]
  ------------------
  540|       |
  541|   796k|	if (--server->refcount > 0)
  ------------------
  |  Branch (541:6): [True: 767k, False: 29.4k]
  ------------------
  542|   767k|		return TRUE;
  543|       |
  544|  29.4k|	if (g_slist_find(servers, server) != NULL) {
  ------------------
  |  Branch (544:6): [True: 0, False: 29.4k]
  ------------------
  545|      0|		g_warning("Non-referenced server wasn't disconnected");
  546|      0|		server_disconnect(server);
  547|      0|		return TRUE;
  548|      0|	}
  549|       |
  550|       |	/* close all channels */
  551|  29.4k|	chans = server_remove_channels(server);
  552|       |
  553|       |	/* since module initialisation uses server connected, only let
  554|       |	   them know that the object got destroyed if the server was
  555|       |	   disconnected */
  556|  29.4k|	if (server->disconnected) {
  ------------------
  |  Branch (556:6): [True: 29.4k, False: 0]
  ------------------
  557|  29.4k|		signal_emit("server destroyed", 1, server);
  558|  29.4k|	}
  559|       |
  560|  29.4k|	if (server->handle != NULL) {
  ------------------
  |  Branch (560:6): [True: 29.4k, False: 0]
  ------------------
  561|  29.4k|		if (!chans || server->connection_lost)
  ------------------
  |  Branch (561:7): [True: 24.2k, False: 5.14k]
  |  Branch (561:17): [True: 4.89k, False: 251]
  ------------------
  562|  29.1k|			net_sendbuffer_destroy(server->handle, TRUE);
  563|    251|		else {
  564|       |			/* we were on some channels, try to let the server
  565|       |			   disconnect so that our quit message is guaranteed
  566|       |			   to get displayed */
  567|    251|			net_disconnect_later(net_sendbuffer_handle(server->handle));
  568|    251|			net_sendbuffer_destroy(server->handle, FALSE);
  569|    251|		}
  570|  29.4k|		server->handle = NULL;
  571|  29.4k|	}
  572|       |
  573|  29.4k|        MODULE_DATA_DEINIT(server);
  ------------------
  |  |    8|  29.4k|        g_hash_table_destroy((rec)->module_data)
  ------------------
  574|  29.4k|	server_connect_unref(server->connrec);
  575|  29.4k|	if (server->rawlog != NULL) rawlog_destroy(server->rawlog);
  ------------------
  |  Branch (575:6): [True: 29.4k, False: 0]
  ------------------
  576|  29.4k|	g_free(server->version);
  577|  29.4k|	g_free(server->away_reason);
  578|  29.4k|	g_free(server->nick);
  579|  29.4k|	g_free(server->tag);
  580|  29.4k|	g_hash_table_destroy(server->current_incoming_meta);
  581|       |
  582|  29.4k|	server->type = 0;
  583|  29.4k|	g_free(server);
  584|       |        return FALSE;
  585|  29.4k|}
server_find_tag:
  588|  29.7k|{
  589|  29.7k|	GSList *tmp;
  590|       |
  591|  29.7k|	g_return_val_if_fail(tag != NULL, NULL);
  ------------------
  |  Branch (591:2): [True: 29.7k, False: 0]
  |  Branch (591:2): [True: 29.7k, False: 0]
  |  Branch (591:2): [Folded, False: 29.7k]
  ------------------
  592|  29.7k|	if (*tag == '\0') return NULL;
  ------------------
  |  Branch (592:6): [True: 0, False: 29.7k]
  ------------------
  593|       |
  594|  29.7k|	for (tmp = servers; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (594:22): [True: 285, False: 29.4k]
  ------------------
  595|    285|		SERVER_REC *server = tmp->data;
  596|       |
  597|    285|		if (g_ascii_strcasecmp(server->tag, tag) == 0)
  ------------------
  |  Branch (597:7): [True: 285, False: 0]
  ------------------
  598|    285|			return server;
  599|    285|	}
  600|       |
  601|  29.4k|	return NULL;
  602|  29.7k|}
server_find_lookup_tag:
  605|  29.4k|{
  606|  29.4k|	GSList *tmp;
  607|       |
  608|  29.4k|	g_return_val_if_fail(tag != NULL, NULL);
  ------------------
  |  Branch (608:2): [True: 29.4k, False: 0]
  |  Branch (608:2): [True: 29.4k, False: 0]
  |  Branch (608:2): [Folded, False: 29.4k]
  ------------------
  609|  29.4k|	if (*tag == '\0') return NULL;
  ------------------
  |  Branch (609:6): [True: 0, False: 29.4k]
  ------------------
  610|       |
  611|  29.4k|	for (tmp = lookup_servers; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (611:29): [True: 0, False: 29.4k]
  ------------------
  612|      0|		SERVER_REC *server = tmp->data;
  613|       |
  614|      0|		if (g_ascii_strcasecmp(server->tag, tag) == 0)
  ------------------
  |  Branch (614:7): [True: 0, False: 0]
  ------------------
  615|      0|			return server;
  616|      0|	}
  617|       |
  618|  29.4k|	return NULL;
  619|  29.4k|}
server_connect_ref:
  640|   113k|{
  641|   113k|        conn->refcount++;
  642|   113k|}
server_connect_unref:
  645|  86.0k|{
  646|  86.0k|	g_return_if_fail(IS_SERVER_CONNECT(conn));
  ------------------
  |  Branch (646:2): [True: 86.0k, False: 0]
  |  Branch (646:2): [True: 86.0k, False: 0]
  |  Branch (646:2): [True: 86.0k, False: 0]
  |  Branch (646:2): [Folded, False: 86.0k]
  ------------------
  647|       |
  648|  86.0k|	if (--conn->refcount > 0)
  ------------------
  |  Branch (648:6): [True: 56.6k, False: 29.4k]
  ------------------
  649|  56.6k|		return;
  650|  29.4k|	if (conn->refcount < 0) {
  ------------------
  |  Branch (650:6): [True: 0, False: 29.4k]
  ------------------
  651|      0|		g_warning("Connection '%s' refcount = %d",
  652|      0|			  conn->tag, conn->refcount);
  653|      0|	}
  654|       |
  655|  29.4k|        CHAT_PROTOCOL(conn)->destroy_server_connect(conn);
  ------------------
  |  |   35|  29.4k|	((object) == NULL ? chat_protocol_get_default() : \
  |  |  ------------------
  |  |  |  Branch (35:3): [True: 0, False: 29.4k]
  |  |  ------------------
  |  |   36|  29.4k|	chat_protocol_find_id((object)->chat_type))
  ------------------
  656|       |
  657|  29.4k|	if (conn->connect_handle != NULL)
  ------------------
  |  Branch (657:6): [True: 0, False: 29.4k]
  ------------------
  658|      0|		net_disconnect(conn->connect_handle);
  659|       |
  660|  29.4k|	g_free_not_null(conn->proxy);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  661|  29.4k|	g_free_not_null(conn->proxy_string);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  662|  29.4k|	g_free_not_null(conn->proxy_string_after);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  663|  29.4k|	g_free_not_null(conn->proxy_password);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  664|       |
  665|  29.4k|	g_free_not_null(conn->ipaddr);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  666|  29.4k|	g_free_not_null(conn->tag);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  667|  29.4k|	g_free_not_null(conn->address);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  668|  29.4k|	g_free_not_null(conn->chatnet);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  669|       |
  670|  29.4k|	g_free_not_null(conn->own_ip4);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  671|  29.4k|	g_free_not_null(conn->own_ip6);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  672|       |
  673|  29.4k|	if (conn->resolved_host != NULL) {
  ------------------
  |  Branch (673:6): [True: 0, False: 29.4k]
  ------------------
  674|      0|		resolved_ip_unref(conn->resolved_host);
  675|      0|	}
  676|       |
  677|  29.4k|	g_free_not_null(conn->password);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  678|  29.4k|	g_free_not_null(conn->nick);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  679|  29.4k|	g_free_not_null(conn->username);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  680|  29.4k|	g_free_not_null(conn->realname);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  681|       |
  682|  29.4k|	g_free_not_null(conn->tls_cert);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  683|  29.4k|	g_free_not_null(conn->tls_pkey);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  684|  29.4k|	g_free_not_null(conn->tls_pass);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  685|  29.4k|	g_free_not_null(conn->tls_cafile);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  686|  29.4k|	g_free_not_null(conn->tls_capath);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  687|  29.4k|	g_free_not_null(conn->tls_ciphers);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  688|  29.4k|	g_free_not_null(conn->tls_pinned_cert);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  689|  29.4k|	g_free_not_null(conn->tls_pinned_pubkey);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  690|       |
  691|  29.4k|	g_free_not_null(conn->channels);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  692|  29.4k|	g_free_not_null(conn->away_reason);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
  693|       |
  694|  29.4k|	conn->type = 0;
  695|  29.4k|	g_free(conn);
  696|  29.4k|}
server_change_nick:
  699|  2.06k|{
  700|  2.06k|	g_free(server->nick);
  701|  2.06k|	server->nick = g_strdup(nick);
  702|       |
  703|  2.06k|	signal_emit("server nick changed", 1, server);
  704|  2.06k|}
server_meta_stash:
  707|    260|{
  708|    260|	g_hash_table_replace(server->current_incoming_meta, i_refstr_intern(meta_key),
  709|    260|	                     g_strdup(meta_value));
  710|    260|}
server_meta_clear_all:
  718|   767k|{
  719|   767k|	g_hash_table_remove_all(server->current_incoming_meta);
  720|   767k|}
servers_init:
  796|      2|{
  797|      2|	lookup_servers = servers = NULL;
  798|       |
  799|      2|	signal_add("chat protocol deinit", (SIGNAL_FUNC) sig_chat_protocol_deinit);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  800|       |
  801|      2|	servers_reconnect_init();
  802|      2|	servers_setup_init();
  803|      2|}
servers.c:server_create_tag:
   98|  29.4k|{
   99|  29.4k|	GString *str;
  100|  29.4k|	char *tag;
  101|  29.4k|	int num;
  102|       |
  103|  29.4k|	g_return_val_if_fail(IS_SERVER_CONNECT(conn), NULL);
  ------------------
  |  Branch (103:2): [True: 29.4k, False: 0]
  |  Branch (103:2): [True: 29.4k, False: 0]
  |  Branch (103:2): [True: 29.4k, False: 0]
  |  Branch (103:2): [Folded, False: 29.4k]
  ------------------
  104|       |
  105|  29.4k|	tag = conn->chatnet != NULL && *conn->chatnet != '\0' ?
  ------------------
  |  Branch (105:8): [True: 0, False: 29.4k]
  |  Branch (105:33): [True: 0, False: 0]
  ------------------
  106|      0|		g_strdup(conn->chatnet) :
  107|  29.4k|		server_create_address_tag(conn->address);
  108|       |
  109|  29.4k|	if (conn->tag != NULL && server_find_tag(conn->tag) == NULL &&
  ------------------
  |  Branch (109:6): [True: 0, False: 29.4k]
  |  Branch (109:27): [True: 0, False: 0]
  ------------------
  110|      0|            server_find_lookup_tag(conn->tag) == NULL &&
  ------------------
  |  Branch (110:13): [True: 0, False: 0]
  ------------------
  111|      0|	    strncmp(conn->tag, tag, strlen(tag)) == 0) {
  ------------------
  |  Branch (111:6): [True: 0, False: 0]
  ------------------
  112|       |		/* use the existing tag if it begins with the same ID -
  113|       |		   this is useful when you have several connections to
  114|       |		   same server and you want to keep the same tags with
  115|       |		   the servers (or it would cause problems when rejoining
  116|       |		   /LAYOUT SAVEd channels). */
  117|      0|		g_free(tag);
  118|      0|		return g_strdup(conn->tag);
  119|      0|	}
  120|       |
  121|       |
  122|       |	/* then just append numbers after tag until unused is found.. */
  123|  29.4k|	str = g_string_new(tag);
  124|       |
  125|  29.4k|	num = 2;
  126|  29.4k|	while (server_find_tag(str->str) != NULL ||
  ------------------
  |  Branch (126:9): [True: 0, False: 29.4k]
  ------------------
  127|  29.4k|	       server_find_lookup_tag(str->str) != NULL) {
  ------------------
  |  Branch (127:9): [True: 0, False: 29.4k]
  ------------------
  128|      0|		g_string_printf(str, "%s%d", tag, num);
  129|      0|		num++;
  130|      0|	}
  131|  29.4k|	g_free(tag);
  132|       |
  133|       |	tag = g_string_free(str, FALSE);
  134|  29.4k|	return tag;
  135|  29.4k|}
servers.c:server_create_address_tag:
   69|  29.4k|{
   70|  29.4k|	const char *start, *end;
   71|       |
   72|  29.4k|	g_return_val_if_fail(address != NULL, NULL);
  ------------------
  |  Branch (72:2): [True: 29.4k, False: 0]
  |  Branch (72:2): [True: 29.4k, False: 0]
  |  Branch (72:2): [Folded, False: 29.4k]
  ------------------
   73|       |
   74|       |	/* try to generate a reasonable server tag */
   75|  29.4k|	if (strchr(address, '.') == NULL) {
  ------------------
  |  Branch (75:6): [True: 29.4k, False: 0]
  ------------------
   76|  29.4k|		start = end = NULL;
   77|  29.4k|	} else if (g_ascii_strncasecmp(address, "irc", 3) == 0 ||
  ------------------
  |  Branch (77:13): [True: 0, False: 0]
  ------------------
   78|      0|	    g_ascii_strncasecmp(address, "chat", 4) == 0) {
  ------------------
  |  Branch (78:6): [True: 0, False: 0]
  ------------------
   79|       |		/* irc-2.cs.hut.fi -> hut, chat.bt.net -> bt */
   80|      0|		end = strrchr(address, '.');
   81|      0|		start = end-1;
   82|      0|		while (start > address && *start != '.') start--;
  ------------------
  |  Branch (82:10): [True: 0, False: 0]
  |  Branch (82:29): [True: 0, False: 0]
  ------------------
   83|      0|	} else {
   84|       |		/* efnet.cs.hut.fi -> efnet */
   85|      0|		end = strchr(address, '.');
   86|      0|		start = end;
   87|      0|	}
   88|       |
   89|  29.4k|	if (start == end) start = address; else start++;
  ------------------
  |  Branch (89:6): [True: 29.4k, False: 0]
  ------------------
   90|  29.4k|	if (end == NULL) end = address + strlen(address);
  ------------------
  |  Branch (90:6): [True: 29.4k, False: 0]
  ------------------
   91|       |
   92|  29.4k|	return g_strndup(start, (int) (end-start));
   93|  29.4k|}
servers.c:server_remove_channels:
  471|  29.4k|{
  472|  29.4k|	GSList *tmp, *next;
  473|  29.4k|	int found;
  474|       |
  475|  29.4k|	g_return_val_if_fail(server != NULL, FALSE);
  ------------------
  |  Branch (475:2): [True: 29.4k, False: 0]
  |  Branch (475:2): [True: 29.4k, False: 0]
  |  Branch (475:2): [Folded, False: 29.4k]
  ------------------
  476|       |
  477|  29.4k|	found = FALSE;
  478|  53.8k|	for (tmp = server->channels; tmp != NULL; tmp = next) {
  ------------------
  |  Branch (478:31): [True: 24.4k, False: 29.4k]
  ------------------
  479|  24.4k|		CHANNEL_REC *channel = tmp->data;
  480|       |
  481|  24.4k|		next = tmp->next;
  482|  24.4k|		channel_destroy(channel);
  483|  24.4k|		found = TRUE;
  484|  24.4k|	}
  485|       |
  486|  5.56M|	while (server->queries != NULL)
  ------------------
  |  Branch (486:9): [True: 5.53M, False: 29.4k]
  ------------------
  487|  5.53M|		query_change_server(server->queries->data, NULL);
  488|       |
  489|  29.4k|	g_slist_free(server->channels);
  490|  29.4k|	g_slist_free(server->queries);
  491|       |
  492|  29.4k|	return found;
  493|  29.4k|}

session_set_binary:
   43|      2|{
   44|      2|	g_free_and_null(irssi_binary);
  ------------------
  |  |   67|      2|	G_STMT_START { \
  |  |   68|      2|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 0, False: 2]
  |  |  ------------------
  |  |   69|      2|	} G_STMT_END
  ------------------
  |  Branch (44:2): [Folded, False: 2]
  ------------------
   45|       |
   46|      2|	irssi_binary = g_find_program_in_path(path);
   47|      2|}
session_register_options:
  354|      2|{
  355|      2|	static GOptionEntry options[] = {
  356|      2|		{ "session", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &session_file, "Used by /UPGRADE command", "PATH" },
  357|      2|		{ NULL }
  358|      2|	};
  359|       |
  360|       |	session_file = NULL;
  361|      2|	args_register(options);
  362|      2|}
session_init:
  365|      2|{
  366|      2|	command_bind("upgrade", NULL, (SIGNAL_FUNC) cmd_upgrade);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  367|       |
  368|      2|	signal_add("session save", (SIGNAL_FUNC) sig_session_save);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  369|      2|	signal_add("session restore", (SIGNAL_FUNC) sig_session_restore);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  370|      2|	signal_add("session save server", (SIGNAL_FUNC) session_save_server_channels);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  371|      2|	signal_add("session restore server", (SIGNAL_FUNC) session_restore_server_channels);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  372|      2|	signal_add("session save channel", (SIGNAL_FUNC) session_save_channel_nicks);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  373|      2|	signal_add("session restore channel", (SIGNAL_FUNC) session_restore_channel_nicks);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  374|       |	signal_add("irssi init finished", (SIGNAL_FUNC) sig_init_finished);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  375|      2|}

settings_get_str:
   88|   185k|{
   89|   185k|	return settings_get_str_type(key, SETTING_TYPE_ANY);
   90|   185k|}
settings_get_int:
   93|  50.5k|{
   94|  50.5k|	SETTINGS_REC *rec;
   95|  50.5k|	CONFIG_NODE *node;
   96|       |
   97|  50.5k|	rec = settings_get(key, SETTING_TYPE_INT);
   98|  50.5k|	if (rec == NULL) return 0;
  ------------------
  |  Branch (98:6): [True: 0, False: 50.5k]
  ------------------
   99|       |
  100|  50.5k|	node = iconfig_node_traverse("settings", FALSE);
  ------------------
  |  |   51|  50.5k|#define iconfig_node_traverse(a, b) config_node_traverse(mainconfig, a, b)
  ------------------
  101|  50.5k|	node = node == NULL ? NULL : iconfig_node_section(node, rec->module, -1);
  ------------------
  |  |   49|   101k|#define iconfig_node_section(a, b, c) config_node_section(mainconfig, a, b, c)
  ------------------
  |  Branch (101:9): [True: 4, False: 50.5k]
  ------------------
  102|       |
  103|  50.5k|	return node == NULL ? rec->default_value.v_int :
  ------------------
  |  Branch (103:9): [True: 50.5k, False: 0]
  ------------------
  104|  50.5k|		config_node_get_int(node, key, rec->default_value.v_int);
  105|  50.5k|}
settings_get_bool:
  108|  2.05M|{
  109|  2.05M|	SETTINGS_REC *rec;
  110|  2.05M|	CONFIG_NODE *node;
  111|       |
  112|  2.05M|	rec = settings_get(key, SETTING_TYPE_BOOLEAN);
  113|  2.05M|	if (rec == NULL) return FALSE;
  ------------------
  |  Branch (113:6): [True: 0, False: 2.05M]
  ------------------
  114|       |
  115|  2.05M|	node = iconfig_node_traverse("settings", FALSE);
  ------------------
  |  |   51|  2.05M|#define iconfig_node_traverse(a, b) config_node_traverse(mainconfig, a, b)
  ------------------
  116|  2.05M|	node = node == NULL ? NULL : iconfig_node_section(node, rec->module, -1);
  ------------------
  |  |   49|  4.10M|#define iconfig_node_section(a, b, c) config_node_section(mainconfig, a, b, c)
  ------------------
  |  Branch (116:9): [True: 2, False: 2.05M]
  ------------------
  117|       |
  118|  2.05M|	return node == NULL ? rec->default_value.v_bool :
  ------------------
  |  Branch (118:9): [True: 1.73M, False: 318k]
  ------------------
  119|  2.05M|		config_node_get_bool(node, key, rec->default_value.v_bool);
  120|  2.05M|}
settings_get_time:
  123|  37.1k|{
  124|  37.1k|	const char *str;
  125|  37.1k|	int msecs = 0;
  126|       |
  127|  37.1k|	str = settings_get_str_type(key, SETTING_TYPE_TIME);
  128|  37.1k|	if (str != NULL && !parse_time_interval(str, &msecs))
  ------------------
  |  Branch (128:6): [True: 37.1k, False: 0]
  |  Branch (128:21): [True: 0, False: 37.1k]
  ------------------
  129|  37.1k|		g_warning("settings_get_time(%s) : Invalid time '%s'", key, str);
  130|  37.1k|	return str == NULL ? 0 : msecs;
  ------------------
  |  Branch (130:9): [True: 0, False: 37.1k]
  ------------------
  131|  37.1k|}
settings_get_level:
  134|   108k|{
  135|   108k|	const char *str;
  136|       |
  137|   108k|	str = settings_get_str_type(key, SETTING_TYPE_LEVEL);
  138|   108k|	return str == NULL ? 0 : level2bits(str, NULL);
  ------------------
  |  Branch (138:9): [True: 0, False: 108k]
  ------------------
  139|   108k|}
settings_get_level_negative:
  142|      2|{
  143|      2|	const char *str, *tmp, *all_levels;
  144|      2|	int levels;
  145|       |
  146|      2|	str = settings_get_str_type(key, SETTING_TYPE_LEVEL);
  147|      2|	if (str == NULL)
  ------------------
  |  Branch (147:6): [True: 0, False: 2]
  ------------------
  148|      0|		return 0;
  149|       |
  150|      2|	all_levels = bits2level(~0);
  151|      2|	tmp = g_strdup_printf("%s %s", all_levels, str);
  152|      2|	levels = level2bits(tmp, NULL) ^ level2bits(all_levels, NULL);
  153|      2|	g_free((char *) tmp);
  154|      2|	g_free((char *) all_levels);
  155|      2|	return levels;
  156|      2|}
settings_get_size:
  159|      2|{
  160|      2|	const char *str;
  161|      2|	int bytes = 0;
  162|       |
  163|      2|	str = settings_get_str_type(key, SETTING_TYPE_SIZE);
  164|      2|	if (str != NULL && !parse_size(str, &bytes))
  ------------------
  |  Branch (164:6): [True: 2, False: 0]
  |  Branch (164:21): [True: 0, False: 2]
  ------------------
  165|      2|		g_warning("settings_get_size(%s) : Invalid size '%s'", key, str);
  166|      2|	return str == NULL ? 0 : bytes;
  ------------------
  |  Branch (166:9): [True: 0, False: 2]
  ------------------
  167|      2|}
settings_get_choice:
  170|  3.67k|{
  171|  3.67k|	SETTINGS_REC *rec;
  172|  3.67k|	CONFIG_NODE *node;
  173|  3.67k|	char *str;
  174|  3.67k|	int index;
  175|       |
  176|  3.67k|	rec = settings_get(key, SETTING_TYPE_CHOICE);
  177|  3.67k|	if (rec == NULL) return -1;
  ------------------
  |  Branch (177:6): [True: 0, False: 3.67k]
  ------------------
  178|       |
  179|  3.67k|	node = iconfig_node_traverse("settings", FALSE);
  ------------------
  |  |   51|  3.67k|#define iconfig_node_traverse(a, b) config_node_traverse(mainconfig, a, b)
  ------------------
  180|  3.67k|	node = node == NULL ? NULL : iconfig_node_section(node, rec->module, -1);
  ------------------
  |  |   49|  7.34k|#define iconfig_node_section(a, b, c) config_node_section(mainconfig, a, b, c)
  ------------------
  |  Branch (180:9): [True: 2, False: 3.67k]
  ------------------
  181|       |
  182|  3.67k|	str = node == NULL ? rec->default_value.v_string :
  ------------------
  |  Branch (182:8): [True: 3.67k, False: 0]
  ------------------
  183|  3.67k|		config_node_get_str(node, key, rec->default_value.v_string);
  184|       |
  185|  3.67k|	if (str == NULL || (index = strarray_find(rec->choices, str)) < 0)
  ------------------
  |  Branch (185:6): [True: 3.67k, False: 0]
  |  Branch (185:21): [True: 0, False: 0]
  ------------------
  186|  3.67k|		return rec->default_value.v_int;
  187|       |
  188|      0|	return index;
  189|  3.67k|}
settings_add_str_module:
  269|     86|{
  270|     86|	SettingValue default_value;
  271|       |
  272|     86|	memset(&default_value, 0, sizeof(default_value));
  273|     86|	default_value.v_string = g_strdup(def);
  274|       |	settings_add(module, section, key, SETTING_TYPE_STRING, &default_value, NULL);
  275|     86|}
settings_add_choice_module:
  279|      8|{
  280|      8|	SettingValue default_value;
  281|       |
  282|      8|	memset(&default_value, 0, sizeof(default_value));
  283|      8|	default_value.v_int = def;
  284|      8|	settings_add(module, section, key, SETTING_TYPE_CHOICE, &default_value, choices);
  285|      8|}
settings_add_int_module:
  289|     40|{
  290|     40|	SettingValue default_value;
  291|       |
  292|     40|	memset(&default_value, 0, sizeof(default_value));
  293|     40|        default_value.v_int = def;
  294|       |	settings_add(module, section, key, SETTING_TYPE_INT, &default_value, NULL);
  295|     40|}
settings_add_bool_module:
  299|    140|{
  300|    140|	SettingValue default_value;
  301|       |
  302|    140|	memset(&default_value, 0, sizeof(default_value));
  303|    140|        default_value.v_bool = def;
  304|       |	settings_add(module, section, key, SETTING_TYPE_BOOLEAN, &default_value, NULL);
  305|    140|}
settings_add_time_module:
  309|     18|{
  310|     18|	SettingValue default_value;
  311|       |
  312|     18|	memset(&default_value, 0, sizeof(default_value));
  313|     18|	default_value.v_string = g_strdup(def);
  314|       |	settings_add(module, section, key, SETTING_TYPE_TIME, &default_value, NULL);
  315|     18|}
settings_add_level_module:
  319|     20|{
  320|     20|	SettingValue default_value;
  321|       |
  322|     20|	memset(&default_value, 0, sizeof(default_value));
  323|     20|	default_value.v_string = g_strdup(def);
  324|       |	settings_add(module, section, key, SETTING_TYPE_LEVEL, &default_value, NULL);
  325|     20|}
settings_add_size_module:
  329|      2|{
  330|      2|	SettingValue default_value;
  331|       |
  332|      2|	memset(&default_value, 0, sizeof(default_value));
  333|      2|	default_value.v_string = g_strdup(def);
  334|       |	settings_add(module, section, key, SETTING_TYPE_SIZE, &default_value, NULL);
  335|      2|}
settings_set_str:
  420|      6|{
  421|      6|        iconfig_node_set_str(settings_get_node(key), key, value);
  ------------------
  |  |   52|      6|#define iconfig_node_set_str(a, b, c) config_node_set_str(mainconfig, a, b, c)
  ------------------
  422|      6|}
settings_get_record:
  480|      2|{
  481|      2|	g_return_val_if_fail(key != NULL, NULL);
  ------------------
  |  Branch (481:2): [True: 2, False: 0]
  |  Branch (481:2): [True: 2, False: 0]
  |  Branch (481:2): [Folded, False: 2]
  ------------------
  482|       |
  483|      2|	return g_hash_table_lookup(settings, key);
  484|      2|}
settings_check_module:
  598|      8|{
  599|      8|        SETTINGS_REC *set;
  600|      8|	CONFIG_NODE *node, *parent;
  601|      8|        GString *errors;
  602|      8|	GSList *tmp, *next;
  603|      8|        int count;
  604|       |
  605|      8|        g_return_if_fail(module != NULL);
  ------------------
  |  Branch (605:9): [True: 8, False: 0]
  |  Branch (605:9): [True: 8, False: 0]
  |  Branch (605:9): [Folded, False: 8]
  ------------------
  606|       |
  607|      8|	node = iconfig_node_traverse("settings", FALSE);
  ------------------
  |  |   51|      8|#define iconfig_node_traverse(a, b) config_node_traverse(mainconfig, a, b)
  ------------------
  608|      8|	node = node == NULL ? NULL : iconfig_node_section(node, module, -1);
  ------------------
  |  |   49|     14|#define iconfig_node_section(a, b, c) config_node_section(mainconfig, a, b, c)
  ------------------
  |  Branch (608:9): [True: 2, False: 6]
  ------------------
  609|      8|	if (node == NULL) return;
  ------------------
  |  Branch (609:6): [True: 8, False: 0]
  ------------------
  610|       |
  611|      0|        errors = g_string_new(NULL);
  612|      0|	g_string_printf(errors, "Unknown settings in configuration "
  613|      0|			 "file for module %s:", module);
  614|       |
  615|      0|        count = 0;
  616|      0|	parent = node;
  617|      0|	tmp = config_node_first(node->value);
  618|      0|	for (; tmp != NULL; tmp = next) {
  ------------------
  |  Branch (618:9): [True: 0, False: 0]
  ------------------
  619|      0|		node = tmp->data;
  620|      0|		next = config_node_next(tmp);
  621|      0|		if (node->key == NULL) continue;
  ------------------
  |  Branch (621:7): [True: 0, False: 0]
  ------------------
  622|       |
  623|      0|		set = g_hash_table_lookup(settings, node->key);
  624|      0|		if (backwards_compatibility(module, node, parent))
  ------------------
  |  Branch (624:7): [True: 0, False: 0]
  ------------------
  625|      0|			continue;
  626|       |
  627|      0|		if (set == NULL || g_strcmp0(set->module, module) != 0) {
  ------------------
  |  Branch (627:7): [True: 0, False: 0]
  |  Branch (627:22): [True: 0, False: 0]
  ------------------
  628|      0|			g_string_append_printf(errors, " %s", node->key);
  629|      0|                        count++;
  630|      0|		}
  631|      0|	}
  632|      0|	if (count > 0) {
  ------------------
  |  Branch (632:6): [True: 0, False: 0]
  ------------------
  633|      0|		if (i_slist_find_icase_string(last_invalid_modules, module) == NULL) {
  ------------------
  |  Branch (633:7): [True: 0, False: 0]
  ------------------
  634|       |			/* mark this module having invalid settings */
  635|      0|			last_invalid_modules =
  636|      0|				g_slist_append(last_invalid_modules,
  637|      0|					       g_strdup(module));
  638|      0|		}
  639|      0|		if (fe_initialized)
  ------------------
  |  Branch (639:7): [True: 0, False: 0]
  ------------------
  640|      0|                        signal_emit("settings errors", 1, errors->str);
  641|      0|		else {
  642|      0|			if (last_errors == NULL)
  ------------------
  |  Branch (642:8): [True: 0, False: 0]
  ------------------
  643|      0|				last_errors = g_string_new(NULL);
  644|      0|			else
  645|      0|				g_string_append_c(last_errors, '\n');
  646|      0|                        g_string_append(last_errors, errors->str);
  647|      0|		}
  648|      0|	}
  649|       |        g_string_free(errors, TRUE);
  650|      0|}
settings_init:
  880|      2|{
  881|      2|	settings = g_hash_table_new((GHashFunc) i_istr_hash, (GCompareFunc) i_istr_equal);
  882|       |
  883|      2|	last_errors = NULL;
  884|      2|        last_invalid_modules = NULL;
  885|      2|	fe_initialized = FALSE;
  886|      2|        config_changed = FALSE;
  887|       |
  888|      2|	config_last_mtime = 0;
  889|      2|	config_last_modifycounter = 0;
  890|      2|	init_configfile();
  891|       |
  892|      2|	settings_add_bool("misc", "settings_autosave", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  893|      2|	timeout_tag = g_timeout_add(SETTINGS_AUTOSAVE_TIMEOUT,
  ------------------
  |  |   34|      2|#define SETTINGS_AUTOSAVE_TIMEOUT (1000*60*60) /* 1 hour */
  ------------------
  894|      2|				    (GSourceFunc) sig_autosave, NULL);
  895|      2|	signal_add("irssi init finished", (SIGNAL_FUNC) sig_init_finished);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  896|      2|	signal_add("irssi init userinfo changed", (SIGNAL_FUNC) sig_init_userinfo_changed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  897|       |	signal_add("gui exit", (SIGNAL_FUNC) sig_autosave);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  898|      2|}
settings.c:settings_get_str_type:
   73|   331k|{
   74|   331k|	SETTINGS_REC *rec;
   75|   331k|	CONFIG_NODE *node;
   76|       |
   77|   331k|	rec = settings_get(key, type);
   78|   331k|	if (rec == NULL) return NULL;
  ------------------
  |  Branch (78:6): [True: 0, False: 331k]
  ------------------
   79|       |
   80|   331k|	node = iconfig_node_traverse("settings", FALSE);
  ------------------
  |  |   51|   331k|#define iconfig_node_traverse(a, b) config_node_traverse(mainconfig, a, b)
  ------------------
   81|   331k|	node = node == NULL ? NULL : iconfig_node_section(node, rec->module, -1);
  ------------------
  |  |   49|   663k|#define iconfig_node_section(a, b, c) config_node_section(mainconfig, a, b, c)
  ------------------
  |  Branch (81:9): [True: 22, False: 331k]
  ------------------
   82|       |
   83|   331k|	return node == NULL ? rec->default_value.v_string :
  ------------------
  |  Branch (83:9): [True: 187k, False: 143k]
  ------------------
   84|   331k|		config_node_get_str(node, key, rec->default_value.v_string);
   85|   331k|}
settings.c:settings_get:
   53|  2.43M|{
   54|  2.43M|	SETTINGS_REC *rec;
   55|       |
   56|  2.43M|	g_return_val_if_fail(key != NULL, NULL);
  ------------------
  |  Branch (56:2): [True: 2.43M, False: 0]
  |  Branch (56:2): [True: 2.43M, False: 0]
  |  Branch (56:2): [Folded, False: 2.43M]
  ------------------
   57|       |
   58|  2.43M|	rec = g_hash_table_lookup(settings, key);
   59|  2.43M|	if (rec == NULL) {
  ------------------
  |  Branch (59:6): [True: 0, False: 2.43M]
  ------------------
   60|      0|		g_warning("settings_get(%s) : not found", key);
   61|      0|		return NULL;
   62|      0|	}
   63|  2.43M|	if (type != SETTING_TYPE_ANY && rec->type != type) {
  ------------------
  |  Branch (63:6): [True: 2.25M, False: 185k]
  |  Branch (63:34): [True: 0, False: 2.25M]
  ------------------
   64|      0|		g_warning("settings_get(%s) : invalid type", key);
   65|      0|		return NULL;
   66|      0|	}
   67|       |
   68|  2.43M|	return rec;
   69|  2.43M|}
settings.c:settings_add:
  220|    314|{
  221|    314|	SETTINGS_REC *rec;
  222|    314|	char **choices_vec = NULL;
  223|       |
  224|    314|	g_return_if_fail(key != NULL);
  ------------------
  |  Branch (224:2): [True: 314, False: 0]
  |  Branch (224:2): [True: 314, False: 0]
  |  Branch (224:2): [Folded, False: 314]
  ------------------
  225|    314|	g_return_if_fail(section != NULL);
  ------------------
  |  Branch (225:2): [True: 314, False: 0]
  |  Branch (225:2): [True: 314, False: 0]
  |  Branch (225:2): [Folded, False: 314]
  ------------------
  226|       |
  227|    314|	if (type == SETTING_TYPE_CHOICE) {
  ------------------
  |  Branch (227:6): [True: 8, False: 306]
  ------------------
  228|      8|		if (choices == NULL) {
  ------------------
  |  Branch (228:7): [True: 0, False: 8]
  ------------------
  229|      0|			g_warning("Trying to add setting '%s' with no choices.", key);
  230|      0|			return;
  231|      0|		}
  232|       |
  233|      8|		choices_vec = g_strsplit(choices, ";", -1);
  234|       |
  235|       |		/* validate the default value */
  236|      8|		if (default_value->v_int < 0 || default_value->v_int >= g_strv_length(choices_vec)) {
  ------------------
  |  Branch (236:7): [True: 0, False: 8]
  |  Branch (236:35): [True: 0, False: 8]
  ------------------
  237|      0|			g_warning("Trying to add setting '%s' with an invalid default value.", key);
  238|      0|			g_strfreev(choices_vec);
  239|      0|			return;
  240|      0|		}
  241|      8|	}
  242|       |
  243|    314|	rec = g_hash_table_lookup(settings, key);
  244|    314|	if (rec != NULL) {
  ------------------
  |  Branch (244:6): [True: 0, False: 314]
  ------------------
  245|       |		/* Already exists, make sure it's correct type */
  246|      0|		if (rec->type != type) {
  ------------------
  |  Branch (246:7): [True: 0, False: 0]
  ------------------
  247|      0|			g_warning("Trying to add already existing "
  248|      0|				  "setting '%s' with different type.", key);
  249|      0|			g_strfreev(choices_vec);
  250|      0|			return;
  251|      0|		}
  252|      0|		rec->refcount++;
  253|    314|	} else {
  254|    314|		rec = g_new(SETTINGS_REC, 1);
  ------------------
  |  Branch (254:9): [True: 314, False: 0]
  |  Branch (254:9): [True: 0, False: 314]
  ------------------
  255|    314|		rec->refcount = 1;
  256|    314|		rec->module = g_strdup(module);
  257|    314|		rec->key = g_strdup(key);
  258|    314|		rec->section = g_strdup(section);
  259|    314|                rec->type = type;
  260|       |
  261|    314|		rec->default_value = *default_value;
  262|    314|		rec->choices = choices_vec;
  263|    314|		g_hash_table_insert(settings, rec->key, rec);
  264|    314|	}
  265|    314|}
settings.c:settings_get_node:
  389|      6|{
  390|      6|	SETTINGS_REC *rec;
  391|      6|        CONFIG_NODE *node;
  392|       |
  393|      6|	g_return_val_if_fail(key != NULL, NULL);
  ------------------
  |  Branch (393:2): [True: 6, False: 0]
  |  Branch (393:2): [True: 6, False: 0]
  |  Branch (393:2): [Folded, False: 6]
  ------------------
  394|       |
  395|      6|	rec = g_hash_table_lookup(settings, key);
  396|      6|	if (rec == NULL) {
  ------------------
  |  Branch (396:6): [True: 0, False: 6]
  ------------------
  397|      0|		g_warning("Changing unknown setting '%s'", key);
  398|      0|		return NULL;
  399|      0|	}
  400|       |
  401|      6|	node = iconfig_node_traverse("settings", TRUE);
  ------------------
  |  |   51|      6|#define iconfig_node_traverse(a, b) config_node_traverse(mainconfig, a, b)
  ------------------
  402|      6|	return iconfig_node_section(node, rec->module, NODE_TYPE_BLOCK);
  ------------------
  |  |   49|      6|#define iconfig_node_section(a, b, c) config_node_section(mainconfig, a, b, c)
  ------------------
  403|      6|}
settings.c:parse_configfile:
  727|      2|{
  728|      2|	CONFIG_REC *config;
  729|      2|	struct stat statbuf;
  730|      2|        const char *path;
  731|      2|	char *str;
  732|       |
  733|      2|	if (fname == NULL)
  ------------------
  |  Branch (733:6): [True: 2, False: 0]
  ------------------
  734|      2|		fname = get_irssi_config();
  735|       |
  736|      2|	if (stat(fname, &statbuf) == 0)
  ------------------
  |  Branch (736:6): [True: 0, False: 2]
  ------------------
  737|      0|		path = fname;
  738|      2|	else {
  739|       |		/* user configuration file not found, use the default one
  740|       |		   from sysconfdir */
  741|      2|                path = SYSCONFDIR"/"IRSSI_GLOBAL_CONFIG;
  ------------------
  |  |    6|      2|#define IRSSI_GLOBAL_CONFIG "irssi.conf" /* config file name in /etc/ */
  ------------------
  742|      2|		if (stat(path, &statbuf) != 0) {
  ------------------
  |  Branch (742:7): [True: 2, False: 0]
  ------------------
  743|       |			/* no configuration file in sysconfdir ..
  744|       |			   use the build-in configuration */
  745|      2|                        path = NULL;
  746|      2|		}
  747|      2|	}
  748|       |
  749|      2|	config = config_open(path, -1);
  750|      2|	if (config == NULL) {
  ------------------
  |  Branch (750:6): [True: 0, False: 2]
  ------------------
  751|      0|		str = g_strdup_printf("Error opening configuration file %s: %s",
  752|      0|				      path, g_strerror(errno));
  753|      0|		signal_emit("gui dialog", 2, "error", str);
  754|      0|                g_free(str);
  755|       |
  756|      0|		config = config_open(NULL, -1);
  757|      0|	}
  758|       |
  759|      2|        if (config->fname != NULL)
  ------------------
  |  Branch (759:13): [True: 0, False: 2]
  ------------------
  760|      0|		config_parse(config);
  761|      2|        else
  762|      2|		config_parse_data(config, default_config, "internal");
  763|       |
  764|      2|	config_change_file_name(config, fname, 0660);
  765|      2|        irssi_config_save_state(fname);
  766|      2|	return config;
  767|      2|}
settings.c:irssi_config_save_state:
  697|      2|{
  698|      2|	struct stat statbuf;
  699|       |
  700|      2|	g_return_if_fail(fname != NULL);
  ------------------
  |  Branch (700:2): [True: 2, False: 0]
  |  Branch (700:2): [True: 2, False: 0]
  |  Branch (700:2): [Folded, False: 2]
  ------------------
  701|       |
  702|      2|	if (stat(fname, &statbuf) != 0)
  ------------------
  |  Branch (702:6): [True: 2, False: 0]
  ------------------
  703|      2|		return;
  704|       |
  705|       |	/* save modify time, file size and checksum */
  706|      0|	config_last_mtime = statbuf.st_mtime;
  707|      0|	config_last_size = statbuf.st_size;
  708|      0|	config_last_checksum = file_checksum(fname);
  709|      0|}
settings.c:init_configfile:
  770|      2|{
  771|      2|	struct stat statbuf;
  772|      2|	char *str;
  773|       |
  774|      2|	if (stat(get_irssi_dir(), &statbuf) != 0) {
  ------------------
  |  Branch (774:6): [True: 1, False: 1]
  ------------------
  775|       |		/* ~/.irssi not found, create it. */
  776|      1|		if (g_mkdir_with_parents(get_irssi_dir(), 0700) != 0) {
  ------------------
  |  Branch (776:7): [True: 0, False: 1]
  ------------------
  777|      0|			g_error("Couldn't create %s directory: %s",
  ------------------
  |  Branch (777:4): [Folded, False: 0]
  ------------------
  778|      0|			        get_irssi_dir(), g_strerror(errno));
  779|      0|		}
  780|      1|	} else if (!S_ISDIR(statbuf.st_mode)) {
  ------------------
  |  Branch (780:13): [True: 0, False: 1]
  ------------------
  781|      0|		g_error("%s is not a directory.\n"
  ------------------
  |  Branch (781:3): [Folded, False: 0]
  ------------------
  782|      0|			"You should remove it with command: rm %s",
  783|      0|			get_irssi_dir(), get_irssi_dir());
  784|      0|	}
  785|       |
  786|      2|	mainconfig = parse_configfile(NULL);
  787|      2|	config_last_modifycounter = mainconfig->modifycounter;
  788|       |
  789|       |	/* any errors? */
  790|      2|	if (config_last_error(mainconfig) != NULL) {
  ------------------
  |  |   89|      2|    (rec)->last_error
  ------------------
  |  Branch (790:6): [True: 0, False: 2]
  ------------------
  791|      0|		str = g_strdup_printf("Ignored errors in configuration file:\n%s",
  792|      0|				      config_last_error(mainconfig));
  ------------------
  |  |   89|      0|    (rec)->last_error
  ------------------
  793|      0|		signal_emit("gui dialog", 2, "error", str);
  794|      0|                g_free(str);
  795|      0|	}
  796|      2|}
settings.c:sig_init_userinfo_changed:
  487|      2|{
  488|       |	user_settings_changed |= GPOINTER_TO_UINT(changedp);
  489|      2|}

signal_add_full:
   87|   266k|{
   88|   266k|	signal_add_full_id(module, priority, signal_get_uniq_id(signal),
  ------------------
  |  |   68|   266k|        module_get_uniq_id_str("signals", signal)
  ------------------
   89|   266k|			   func, user_data);
   90|   266k|}
signal_add_full_id:
   95|   266k|{
   96|   266k|	Signal *signal;
   97|   266k|        SignalHook *hook, **tmp;
   98|       |
   99|   266k|	g_return_if_fail(signal_id >= 0);
  ------------------
  |  Branch (99:2): [True: 266k, False: 0]
  |  Branch (99:2): [True: 266k, False: 0]
  |  Branch (99:2): [Folded, False: 266k]
  ------------------
  100|   266k|	g_return_if_fail(func != NULL);
  ------------------
  |  Branch (100:2): [True: 266k, False: 0]
  |  Branch (100:2): [True: 266k, False: 0]
  |  Branch (100:2): [Folded, False: 266k]
  ------------------
  101|       |
  102|   266k|	signal = g_hash_table_lookup(signals, GINT_TO_POINTER(signal_id));
  103|   266k|	if (signal == NULL) {
  ------------------
  |  Branch (103:6): [True: 118k, False: 147k]
  ------------------
  104|       |                /* new signal */
  105|   118k|		signal = g_new0(Signal, 1);
  ------------------
  |  Branch (105:12): [True: 118k, False: 0]
  |  Branch (105:12): [True: 0, False: 118k]
  ------------------
  106|   118k|		signal->id = signal_id;
  107|   118k|		g_hash_table_insert(signals, GINT_TO_POINTER(signal_id), signal);
  108|   118k|	}
  109|       |
  110|   266k|	hook = g_new0(SignalHook, 1);
  ------------------
  |  Branch (110:9): [True: 266k, False: 0]
  |  Branch (110:9): [True: 0, False: 266k]
  ------------------
  111|   266k|	hook->priority = priority;
  112|   266k|	hook->module = module;
  113|   266k|	hook->func = func;
  114|   266k|	hook->user_data = user_data;
  115|       |
  116|       |	/* insert signal to proper position in list */
  117|   443k|	for (tmp = &signal->hooks; ; tmp = &(*tmp)->next) {
  118|   443k|		if (*tmp == NULL) {
  ------------------
  |  Branch (118:7): [True: 118k, False: 324k]
  ------------------
  119|       |                        /* last in list */
  120|   118k|			*tmp = hook;
  121|   118k|                        break;
  122|   324k|		} else if (priority <= (*tmp)->priority) {
  ------------------
  |  Branch (122:14): [True: 147k, False: 176k]
  ------------------
  123|       |                        /* insert before others with same priority */
  124|   147k|			hook->next = *tmp;
  125|   147k|			*tmp = hook;
  126|   147k|                        break;
  127|   147k|		}
  128|   443k|	}
  129|       |
  130|   266k|        signal_ref(signal);
  ------------------
  |  |   52|   266k|#define signal_ref(signal) ++(signal)->refcount
  ------------------
  131|   266k|}
signal_remove_id:
  168|   264k|{
  169|   264k|	Signal *rec;
  170|       |
  171|   264k|	g_return_if_fail(signal_id >= 0);
  ------------------
  |  Branch (171:2): [True: 264k, False: 0]
  |  Branch (171:2): [True: 264k, False: 0]
  |  Branch (171:2): [Folded, False: 264k]
  ------------------
  172|   264k|	g_return_if_fail(func != NULL);
  ------------------
  |  Branch (172:2): [True: 264k, False: 0]
  |  Branch (172:2): [True: 264k, False: 0]
  |  Branch (172:2): [Folded, False: 264k]
  ------------------
  173|       |
  174|   264k|	rec = g_hash_table_lookup(signals, GINT_TO_POINTER(signal_id));
  175|   264k|        if (rec != NULL)
  ------------------
  |  Branch (175:13): [True: 264k, False: 0]
  ------------------
  176|   264k|                signal_remove_func(rec, func, user_data);
  177|   264k|}
signal_remove_full:
  181|   264k|{
  182|   264k|	g_return_if_fail(signal != NULL);
  ------------------
  |  Branch (182:2): [True: 264k, False: 0]
  |  Branch (182:2): [True: 264k, False: 0]
  |  Branch (182:2): [Folded, False: 264k]
  ------------------
  183|       |
  184|   264k|	signal_remove_id(signal_get_uniq_id(signal), func, user_data);
  ------------------
  |  |   68|   264k|        module_get_uniq_id_str("signals", signal)
  ------------------
  185|   264k|}
signal_emit:
  274|   382M|{
  275|   382M|	Signal *rec;
  276|   382M|	va_list va;
  277|   382M|	int signal_id;
  278|       |
  279|   382M|	g_return_val_if_fail(params >= 0 && params <= SIGNAL_MAX_ARGUMENTS, FALSE);
  ------------------
  |  Branch (279:2): [True: 382M, False: 0]
  |  Branch (279:2): [True: 382M, False: 0]
  |  Branch (279:2): [True: 382M, False: 0]
  |  Branch (279:2): [Folded, False: 382M]
  ------------------
  280|       |
  281|   382M|	signal_id = signal_get_uniq_id(signal);
  ------------------
  |  |   68|   382M|        module_get_uniq_id_str("signals", signal)
  ------------------
  282|       |
  283|   382M|	rec = g_hash_table_lookup(signals, GINT_TO_POINTER(signal_id));
  284|   382M|	if (rec != NULL) {
  ------------------
  |  Branch (284:6): [True: 15.4M, False: 367M]
  ------------------
  285|  15.4M|		va_start(va, params);
  286|  15.4M|		signal_emit_real(rec, params, va, rec->hooks);
  287|  15.4M|		va_end(va);
  288|  15.4M|	}
  289|       |
  290|       |	return rec != NULL;
  291|   382M|}
signal_emit_id:
  294|  32.1M|{
  295|  32.1M|	Signal *rec;
  296|  32.1M|	va_list va;
  297|       |
  298|  32.1M|	g_return_val_if_fail(signal_id >= 0, FALSE);
  ------------------
  |  Branch (298:2): [True: 32.1M, False: 0]
  |  Branch (298:2): [True: 32.1M, False: 0]
  |  Branch (298:2): [Folded, False: 32.1M]
  ------------------
  299|  32.1M|	g_return_val_if_fail(params >= 0 && params <= SIGNAL_MAX_ARGUMENTS, FALSE);
  ------------------
  |  Branch (299:2): [True: 32.1M, False: 0]
  |  Branch (299:2): [True: 32.1M, False: 0]
  |  Branch (299:2): [True: 32.1M, False: 0]
  |  Branch (299:2): [Folded, False: 32.1M]
  ------------------
  300|       |
  301|  32.1M|	rec = g_hash_table_lookup(signals, GINT_TO_POINTER(signal_id));
  302|  32.1M|	if (rec != NULL) {
  ------------------
  |  Branch (302:6): [True: 5.17M, False: 26.9M]
  ------------------
  303|  5.17M|		va_start(va, params);
  304|  5.17M|		signal_emit_real(rec, params, va, rec->hooks);
  305|  5.17M|		va_end(va);
  306|  5.17M|	}
  307|       |
  308|       |	return rec != NULL;
  309|  32.1M|}
signal_stop:
  335|  18.1k|{
  336|  18.1k|	Signal *rec;
  337|       |
  338|  18.1k|	rec = current_emitted_signal;
  339|  18.1k|	if (rec == NULL)
  ------------------
  |  Branch (339:6): [True: 0, False: 18.1k]
  ------------------
  340|  18.1k|		g_warning("signal_stop() : no signals are being emitted currently");
  341|  18.1k|	else if (rec->emitting > rec->stop_emit)
  ------------------
  |  Branch (341:11): [True: 18.1k, False: 0]
  ------------------
  342|  18.1k|		rec->stop_emit++;
  343|  18.1k|}
signals_init:
  413|      2|{
  414|      2|	signals = g_hash_table_new(NULL, NULL);
  415|      2|}
signals.c:signal_remove_func:
  147|   264k|{
  148|   264k|        SignalHook **hook;
  149|       |
  150|   441k|	for (hook = &rec->hooks; *hook != NULL; hook = &(*hook)->next) {
  ------------------
  |  Branch (150:27): [True: 441k, False: 0]
  ------------------
  151|   441k|		if ((*hook)->func == func && (*hook)->user_data == user_data) {
  ------------------
  |  Branch (151:7): [True: 264k, False: 176k]
  |  Branch (151:32): [True: 264k, False: 0]
  ------------------
  152|   264k|			if (rec->emitting) {
  ------------------
  |  Branch (152:8): [True: 5, False: 264k]
  ------------------
  153|       |				/* mark it removed after emitting is done */
  154|      5|				(*hook)->func = NULL;
  155|      5|                                rec->remove_count++;
  156|   264k|			} else {
  157|       |				/* remove the function from emit list */
  158|   264k|				signal_remove_hook(rec, hook);
  159|   264k|			}
  160|   264k|			return TRUE;
  161|   264k|		}
  162|   441k|	}
  163|       |
  164|      0|        return FALSE;
  165|   264k|}
signals.c:signal_remove_hook:
  134|   264k|{
  135|   264k|	SignalHook *hook;
  136|       |
  137|   264k|        hook = *hook_pos;
  138|   264k|        *hook_pos = hook->next;
  139|       |
  140|   264k|	g_free(hook);
  141|       |
  142|       |	signal_unref(rec);
  ------------------
  |  |   53|   264k|#define signal_unref(signal) (signal_unref_full(signal, TRUE))
  ------------------
  143|   264k|}
signals.c:signal_unref_full:
   56|  20.8M|{
   57|  20.8M|        g_assert(rec->refcount > 0);
  ------------------
  |  Branch (57:9): [True: 20.8M, False: 0]
  |  Branch (57:9): [True: 20.8M, False: 0]
  |  Branch (57:9): [Folded, False: 20.8M]
  ------------------
   58|       |
   59|  20.8M|	if (--rec->refcount != 0)
  ------------------
  |  Branch (59:6): [True: 20.7M, False: 117k]
  ------------------
   60|  20.7M|		return TRUE;
   61|       |
   62|       |	/* remove whole signal from memory */
   63|   117k|	if (rec->hooks != NULL) {
  ------------------
  |  Branch (63:6): [True: 0, False: 117k]
  ------------------
   64|      0|		g_error("signal_unref(%s) : BUG - hook list wasn't empty",
  ------------------
  |  Branch (64:3): [Folded, False: 0]
  ------------------
   65|      0|			signal_get_id_str(rec->id));
   66|      0|	}
   67|       |
   68|   117k|	if (remove)
  ------------------
  |  Branch (68:6): [True: 117k, False: 0]
  ------------------
   69|   117k|		g_hash_table_remove(signals, GINT_TO_POINTER(rec->id));
   70|   117k|        g_free(rec);
   71|       |
   72|       |	return FALSE;
   73|  20.8M|}
signals.c:signal_emit_real:
  210|  20.5M|{
  211|  20.5M|	const void *arglist[SIGNAL_MAX_ARGUMENTS];
  212|  20.5M|	Signal *prev_emitted_signal;
  213|  20.5M|        SignalHook *hook, *prev_emitted_hook;
  214|  20.5M|	int i, stopped, stop_emit_count, continue_emit_count;
  215|       |
  216|   144M|	for (i = 0; i < SIGNAL_MAX_ARGUMENTS; i++)
  ------------------
  |  |    8|   144M|#define SIGNAL_MAX_ARGUMENTS 6
  ------------------
  |  Branch (216:14): [True: 123M, False: 20.5M]
  ------------------
  217|   123M|		arglist[i] = i >= params ? NULL : va_arg(va, const void *);
  ------------------
  |  Branch (217:16): [True: 79.0M, False: 44.4M]
  ------------------
  218|       |
  219|       |	/* signal_stop_by_name("signal"); signal_emit("signal", ...);
  220|       |	   fails if we compare rec->stop_emit against 0. */
  221|  20.5M|	stop_emit_count = rec->stop_emit;
  222|  20.5M|	continue_emit_count = rec->continue_emit;
  223|       |
  224|  20.5M|        signal_ref(rec);
  ------------------
  |  |   52|  20.5M|#define signal_ref(signal) ++(signal)->refcount
  ------------------
  225|       |
  226|  20.5M|	stopped = FALSE;
  227|  20.5M|	rec->emitting++;
  228|       |
  229|  20.5M|	prev_emitted_signal = current_emitted_signal;
  230|  20.5M|	prev_emitted_hook = current_emitted_hook;
  231|  20.5M|	current_emitted_signal = rec;
  232|       |
  233|  49.9M|	for (hook = first_hook; hook != NULL; hook = hook->next) {
  ------------------
  |  Branch (233:26): [True: 29.3M, False: 20.5M]
  ------------------
  234|  29.3M|		if (hook->func == NULL)
  ------------------
  |  Branch (234:7): [True: 0, False: 29.3M]
  ------------------
  235|      0|			continue; /* removed */
  236|       |
  237|  29.3M|		current_emitted_hook = hook;
  238|       |#if SIGNAL_MAX_ARGUMENTS != 6
  239|       |#  error SIGNAL_MAX_ARGUMENTS changed - update code
  240|       |#endif
  241|  29.3M|                signal_user_data = hook->user_data;
  242|  29.3M|		hook->func(arglist[0], arglist[1], arglist[2], arglist[3],
  243|  29.3M|			   arglist[4], arglist[5]);
  244|       |
  245|  29.3M|		if (rec->continue_emit != continue_emit_count)
  ------------------
  |  Branch (245:7): [True: 0, False: 29.3M]
  ------------------
  246|      0|			rec->continue_emit--;
  247|       |
  248|  29.3M|		if (rec->stop_emit != stop_emit_count) {
  ------------------
  |  Branch (248:7): [True: 18.1k, False: 29.3M]
  ------------------
  249|  18.1k|			stopped = TRUE;
  250|  18.1k|			rec->stop_emit--;
  251|  18.1k|			break;
  252|  18.1k|		}
  253|  29.3M|	}
  254|       |
  255|  20.5M|	current_emitted_signal = prev_emitted_signal;
  256|  20.5M|	current_emitted_hook = prev_emitted_hook;
  257|       |
  258|  20.5M|	rec->emitting--;
  259|  20.5M|	signal_user_data = NULL;
  260|       |
  261|  20.5M|	if (!rec->emitting) {
  ------------------
  |  Branch (261:6): [True: 20.5M, False: 0]
  ------------------
  262|  20.5M|		g_assert(rec->stop_emit == 0);
  ------------------
  |  Branch (262:3): [True: 20.5M, False: 0]
  |  Branch (262:3): [True: 20.5M, False: 0]
  |  Branch (262:3): [Folded, False: 20.5M]
  ------------------
  263|  20.5M|		g_assert(rec->continue_emit == 0);
  ------------------
  |  Branch (263:3): [True: 20.5M, False: 0]
  |  Branch (263:3): [True: 20.5M, False: 0]
  |  Branch (263:3): [Folded, False: 20.5M]
  ------------------
  264|       |
  265|  20.5M|                if (rec->remove_count > 0)
  ------------------
  |  Branch (265:21): [True: 5, False: 20.5M]
  ------------------
  266|      5|			signal_hooks_clean(rec);
  267|  20.5M|	}
  268|       |
  269|  20.5M|        signal_unref(rec);
  ------------------
  |  |   53|  20.5M|#define signal_unref(signal) (signal_unref_full(signal, TRUE))
  ------------------
  270|  20.5M|	return stopped;
  271|  20.5M|}
signals.c:signal_hooks_clean:
  188|      5|{
  189|      5|	SignalHook **hook, **next;
  190|      5|        int count;
  191|       |
  192|      5|        count = rec->remove_count;
  193|      5|        rec->remove_count = 0;
  194|       |
  195|      5|	for (hook = &rec->hooks; *hook != NULL; hook = next) {
  ------------------
  |  Branch (195:27): [True: 5, False: 0]
  ------------------
  196|      5|		next = &(*hook)->next;
  197|       |
  198|      5|		if ((*hook)->func == NULL) {
  ------------------
  |  Branch (198:7): [True: 5, False: 0]
  ------------------
  199|      5|                        next = hook;
  200|      5|			signal_remove_hook(rec, hook);
  201|       |
  202|      5|			if (--count == 0)
  ------------------
  |  Branch (202:8): [True: 5, False: 0]
  ------------------
  203|      5|                                break;
  204|      5|		}
  205|      5|	}
  206|      5|}

get_alignment:
  383|  76.3k|{
  384|  76.3k|	GString *str;
  385|  76.3k|	char *ret;
  386|  76.3k|	int policy;
  387|  76.3k|	unsigned int cut_bytes;
  388|       |
  389|  76.3k|	g_return_val_if_fail(text != NULL, NULL);
  ------------------
  |  Branch (389:2): [True: 76.3k, False: 0]
  |  Branch (389:2): [True: 76.3k, False: 0]
  |  Branch (389:2): [Folded, False: 76.3k]
  ------------------
  390|       |
  391|  76.3k|	policy = string_policy(text);
  392|       |
  393|  76.3k|	str = g_string_new(text);
  394|       |
  395|       |	/* cut */
  396|  76.3k|	if ((flags & ALIGN_CUT) && align > 0 && string_width(text, policy) > align) {
  ------------------
  |  |   13|  76.3k|#define ALIGN_CUT   0x02
  ------------------
  |  Branch (396:6): [True: 15.4k, False: 60.9k]
  |  Branch (396:29): [True: 15.4k, False: 0]
  |  Branch (396:42): [True: 1.28k, False: 14.1k]
  ------------------
  397|  1.28k|		string_chars_for_width(text, policy, align, &cut_bytes);
  398|  1.28k|		g_string_truncate(str, cut_bytes);
  399|  1.28k|	}
  400|       |
  401|       |	/* add pad characters */
  402|  76.3k|	if (flags & ALIGN_PAD) {
  ------------------
  |  |   14|  76.3k|#define ALIGN_PAD   0x04
  ------------------
  |  Branch (402:6): [True: 76.3k, False: 0]
  ------------------
  403|  76.3k|		int pad_len = align - string_width(str->str, policy);
  404|  76.3k|		if (pad_len > 0) {
  ------------------
  |  Branch (404:7): [True: 61.6k, False: 14.7k]
  ------------------
  405|  61.6k|			char *pad_full = g_strnfill(pad_len, pad);
  406|  61.6k|			if (flags & ALIGN_RIGHT)
  ------------------
  |  |   12|  61.6k|#define ALIGN_RIGHT 0x01
  ------------------
  |  Branch (406:8): [True: 13.7k, False: 47.9k]
  ------------------
  407|  13.7k|				g_string_prepend(str, pad_full);
  408|  47.9k|			else
  409|  47.9k|				g_string_append(str, pad_full);
  410|  61.6k|			g_free(pad_full);
  411|  61.6k|		}
  412|  76.3k|	}
  413|       |
  414|  76.3k|	ret = g_string_free_and_steal(str);
  415|  76.3k|	return ret;
  416|  76.3k|}
parse_special:
  422|  2.21M|{
  423|  2.21M|	static char **nested_orig_cmd = NULL; /* FIXME: KLUDGE! */
  424|  2.21M|	char command, *value;
  425|       |
  426|  2.21M|	char align_pad = '\0';
  427|  2.21M|	int align = 0, align_flags = 0;
  428|       |
  429|  2.21M|	char *nest_value;
  430|  2.21M|	int brackets, nest_free;
  431|       |
  432|  2.21M|	*free_ret = FALSE;
  433|  2.21M|	if (**cmd == '\0')
  ------------------
  |  Branch (433:6): [True: 0, False: 2.21M]
  ------------------
  434|      0|		return NULL;
  435|       |
  436|  2.21M|	command = **cmd; (*cmd)++;
  437|  2.21M|	switch (command) {
  438|  61.5k|	case '[':
  ------------------
  |  Branch (438:2): [True: 61.5k, False: 2.14M]
  ------------------
  439|       |		/* alignment */
  440|  61.5k|		if (!get_alignment_args(cmd, &align, &align_flags,
  ------------------
  |  Branch (440:7): [True: 0, False: 61.5k]
  ------------------
  441|  61.5k|					&align_pad) || **cmd == '\0') {
  ------------------
  |  Branch (441:21): [True: 0, False: 61.5k]
  ------------------
  442|      0|			(*cmd)--;
  443|      0|			return NULL;
  444|      0|		}
  445|  61.5k|		break;
  446|  2.14M|	default:
  ------------------
  |  Branch (446:2): [True: 2.14M, False: 61.5k]
  ------------------
  447|  2.14M|		command = 0;
  448|  2.14M|		(*cmd)--;
  449|  2.21M|	}
  450|       |
  451|  2.21M|	nest_free = FALSE; nest_value = NULL;
  452|       |#if 0 /* this code is disabled due to security issues until it is fixed */
  453|       |	if (**cmd == '(' && (*cmd)[1] != '\0') {
  454|       |		/* subvariable */
  455|       |		int toplevel = nested_orig_cmd == NULL;
  456|       |
  457|       |		if (toplevel) nested_orig_cmd = cmd;
  458|       |		(*cmd)++;
  459|       |		if (**cmd != '$') {
  460|       |			/* ... */
  461|       |			nest_value = *cmd;
  462|       |		} else {
  463|       |			(*cmd)++;
  464|       |			nest_value = parse_special(cmd, server, item, arglist,
  465|       |						   &nest_free, arg_used,
  466|       |						   flags);
  467|       |		}
  468|       |
  469|       |		if (nest_value == NULL || *nest_value == '\0')
  470|       |			return NULL;
  471|       |
  472|       |		while ((*nested_orig_cmd)[1] != '\0') {
  473|       |			(*nested_orig_cmd)++;
  474|       |			if (**nested_orig_cmd == ')')
  475|       |				break;
  476|       |		}
  477|       |		cmd = &nest_value;
  478|       |
  479|       |                if (toplevel) nested_orig_cmd = NULL;
  480|       |	}
  481|       |#else
  482|  2.21M|	if (nested_orig_cmd) nested_orig_cmd = NULL;
  ------------------
  |  Branch (482:6): [True: 0, False: 2.21M]
  ------------------
  483|  2.21M|#endif
  484|       |
  485|  2.21M|	if (**cmd != '{')
  ------------------
  |  Branch (485:6): [True: 1.33M, False: 877k]
  ------------------
  486|  1.33M|		brackets = FALSE;
  487|   877k|	else {
  488|       |		/* special value is inside {...} (foo${test}bar -> fooXXXbar) */
  489|   877k|		if ((*cmd)[1] == '\0')
  ------------------
  |  Branch (489:7): [True: 0, False: 877k]
  ------------------
  490|      0|			return NULL;
  491|   877k|		(*cmd)++;
  492|   877k|		brackets = TRUE;
  493|   877k|	}
  494|       |
  495|  2.21M|	value = get_special_value(cmd, server, item, arglist, free_ret, arg_used, flags,
  496|  2.21M|	                          special_collector != NULL ? special_collector->data : NULL,
  ------------------
  |  Branch (496:28): [True: 0, False: 2.21M]
  ------------------
  497|  2.21M|	                          &special_cache);
  498|  2.21M|	if (**cmd == '\0')
  ------------------
  |  Branch (498:6): [True: 0, False: 2.21M]
  ------------------
  499|  2.21M|		g_error("parse_special() : buffer overflow!");
  ------------------
  |  Branch (499:3): [Folded, False: 0]
  ------------------
  500|       |
  501|  2.21M|	if (value != NULL && *value != '\0' && (flags & PARSE_FLAG_ISSET_ANY))
  ------------------
  |  |    7|  1.75M|#define PARSE_FLAG_ISSET_ANY	0x02 /* arg_used field specifies that at least one of the $variables was non-empty */
  ------------------
  |  Branch (501:6): [True: 2.21M, False: 0]
  |  Branch (501:23): [True: 1.75M, False: 451k]
  |  Branch (501:41): [True: 0, False: 1.75M]
  ------------------
  502|      0|		*arg_used = TRUE;
  503|       |
  504|  2.21M|	if (brackets) {
  ------------------
  |  Branch (504:6): [True: 877k, False: 1.33M]
  ------------------
  505|  1.75M|		while (**cmd != '}' && (*cmd)[1] != '\0')
  ------------------
  |  Branch (505:10): [True: 877k, False: 877k]
  |  Branch (505:26): [True: 877k, False: 0]
  ------------------
  506|   877k|			(*cmd)++;
  507|   877k|	}
  508|       |
  509|  2.21M|	if (nest_free) g_free(nest_value);
  ------------------
  |  Branch (509:6): [True: 0, False: 2.21M]
  ------------------
  510|       |
  511|  2.21M|	if (command == '[' && (flags & PARSE_FLAG_GETNAME) == 0) {
  ------------------
  |  |    6|  61.5k|#define PARSE_FLAG_GETNAME	0x01 /* return argument name instead of it's value */
  ------------------
  |  Branch (511:6): [True: 61.5k, False: 2.14M]
  |  Branch (511:24): [True: 61.5k, False: 0]
  ------------------
  512|       |		/* alignment */
  513|  61.5k|		char *p;
  514|       |
  515|  61.5k|		if (value == NULL) return "";
  ------------------
  |  Branch (515:7): [True: 0, False: 61.5k]
  ------------------
  516|       |
  517|  61.5k|		p = get_alignment(value, align, align_flags, align_pad);
  518|  61.5k|		if (*free_ret) g_free(value);
  ------------------
  |  Branch (518:7): [True: 61.5k, False: 0]
  ------------------
  519|       |
  520|  61.5k|		*free_ret = TRUE;
  521|  61.5k|		return p;
  522|  61.5k|	}
  523|       |
  524|  2.14M|	return value;
  525|  2.21M|}
parse_special_string:
  560|  1.06k|{
  561|  1.06k|	char code, **arglist, *ret;
  562|  1.06k|	GString *str;
  563|  1.06k|	int need_free, chr;
  564|       |
  565|  1.06k|	g_return_val_if_fail(cmd != NULL, NULL);
  ------------------
  |  Branch (565:2): [True: 1.06k, False: 0]
  |  Branch (565:2): [True: 1.06k, False: 0]
  |  Branch (565:2): [Folded, False: 1.06k]
  ------------------
  566|  1.06k|	g_return_val_if_fail(data != NULL, NULL);
  ------------------
  |  Branch (566:2): [True: 1.06k, False: 0]
  |  Branch (566:2): [True: 1.06k, False: 0]
  |  Branch (566:2): [Folded, False: 1.06k]
  ------------------
  567|       |
  568|       |	/* create the argument list */
  569|  1.06k|	arglist = g_strsplit(data, " ", -1);
  570|       |
  571|  1.06k|	if (arg_used != NULL) *arg_used = FALSE;
  ------------------
  |  Branch (571:6): [True: 0, False: 1.06k]
  ------------------
  572|  1.06k|	code = 0;
  573|  1.06k|	str = g_string_new(NULL);
  574|  8.90k|	while (*cmd != '\0') {
  ------------------
  |  Branch (574:9): [True: 7.84k, False: 1.06k]
  ------------------
  575|  7.84k|		if (code == '\\') {
  ------------------
  |  Branch (575:7): [True: 0, False: 7.84k]
  ------------------
  576|      0|			if (*cmd == ';')
  ------------------
  |  Branch (576:8): [True: 0, False: 0]
  ------------------
  577|      0|				g_string_append_c(str, ';');
  578|      0|			else {
  579|      0|				chr = expand_escape(&cmd);
  580|      0|				g_string_append_c(str, chr != -1 ? chr : *cmd);
  ------------------
  |  Branch (580:5): [True: 0, False: 0]
  ------------------
  581|      0|			}
  582|      0|			code = 0;
  583|  7.84k|		} else if (code == '$') {
  ------------------
  |  Branch (583:14): [True: 1.16k, False: 6.67k]
  ------------------
  584|  1.16k|			char *ret;
  585|       |
  586|  1.16k|			ret = parse_special((char **) &cmd, server, item,
  587|  1.16k|					    arglist, &need_free, arg_used,
  588|  1.16k|					    flags);
  589|  1.16k|			if (ret != NULL) {
  ------------------
  |  Branch (589:8): [True: 1.16k, False: 0]
  ------------------
  590|  1.16k|                                gstring_append_escaped(str, ret, flags);
  591|  1.16k|				if (need_free) g_free(ret);
  ------------------
  |  Branch (591:9): [True: 1.13k, False: 33]
  ------------------
  592|  1.16k|			}
  593|  1.16k|			code = 0;
  594|  6.67k|		} else {
  595|  6.67k|			if (*cmd == '\\' || *cmd == '$')
  ------------------
  |  Branch (595:8): [True: 0, False: 6.67k]
  |  Branch (595:24): [True: 1.16k, False: 5.51k]
  ------------------
  596|  1.16k|				code = *cmd;
  597|  5.51k|			else
  598|  6.67k|				g_string_append_c(str, *cmd);
  599|  6.67k|		}
  600|       |
  601|  7.84k|                cmd++;
  602|  7.84k|	}
  603|  1.06k|	g_strfreev(arglist);
  604|       |
  605|  1.06k|	ret = g_string_free_and_steal(str);
  606|  1.06k|	return ret;
  607|  1.06k|}
special_history_func_set:
  686|      2|{
  687|      2|	history_func = func;
  688|      2|}
special_vars_init:
  831|      2|{
  832|      2|	special_cache = NULL;
  833|       |	special_collector = NULL;
  834|      2|}
special-vars.c:get_alignment_args:
  335|  61.5k|{
  336|  61.5k|	char *str;
  337|  61.5k|	char *endptr;
  338|  61.5k|	guint align_;
  339|       |
  340|  61.5k|	*align = 0;
  341|  61.5k|	*flags = ALIGN_CUT|ALIGN_PAD;
  ------------------
  |  |   13|  61.5k|#define ALIGN_CUT   0x02
  ------------------
              	*flags = ALIGN_CUT|ALIGN_PAD;
  ------------------
  |  |   14|  61.5k|#define ALIGN_PAD   0x04
  ------------------
  342|  61.5k|        *pad = ' ';
  343|       |
  344|       |	/* '!' = don't cut, '-' = right padding */
  345|  61.5k|	str = *data;
  346|   123k|	while (*str != '\0' && *str != ']' && !i_isdigit(*str)) {
  ------------------
  |  |   79|   123k|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (346:9): [True: 123k, False: 0]
  |  Branch (346:25): [True: 123k, False: 0]
  |  Branch (346:40): [True: 61.4k, False: 61.5k]
  ------------------
  347|  61.4k|		if (*str == '!')
  ------------------
  |  Branch (347:7): [True: 46.0k, False: 15.3k]
  ------------------
  348|  46.0k|			*flags &= ~ALIGN_CUT;
  ------------------
  |  |   13|  46.0k|#define ALIGN_CUT   0x02
  ------------------
  349|  15.3k|		else if (*str == '-')
  ------------------
  |  Branch (349:12): [True: 15.3k, False: 0]
  ------------------
  350|  15.3k|			*flags |= ALIGN_RIGHT;
  ------------------
  |  |   12|  15.3k|#define ALIGN_RIGHT 0x01
  ------------------
  351|      0|		else if (*str == '.')
  ------------------
  |  Branch (351:12): [True: 0, False: 0]
  ------------------
  352|      0|                         *flags &= ~ALIGN_PAD;
  ------------------
  |  |   14|      0|#define ALIGN_PAD   0x04
  ------------------
  353|  61.4k|		str++;
  354|  61.4k|	}
  355|  61.5k|	if (!i_isdigit(*str))
  ------------------
  |  |   79|  61.5k|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (355:6): [True: 0, False: 61.5k]
  ------------------
  356|      0|		return FALSE; /* expecting number */
  357|       |
  358|       |	/* get the alignment size */
  359|  61.5k|	if (!parse_uint(str, &endptr, 10, &align_)) {
  ------------------
  |  Branch (359:6): [True: 0, False: 61.5k]
  ------------------
  360|      0|		return FALSE;
  361|      0|	}
  362|       |	/* alignment larger than supported */
  363|  61.5k|	if (align_ > ALIGN_MAX) {
  ------------------
  |  |   38|  61.5k|#define ALIGN_MAX 512
  ------------------
  |  Branch (363:6): [True: 0, False: 61.5k]
  ------------------
  364|      0|		return FALSE;
  365|      0|	}
  366|  61.5k|	str = endptr;
  367|  61.5k|	*align = align_;
  368|       |
  369|       |	/* get the pad character */
  370|  61.5k|	while (*str != '\0' && *str != ']') {
  ------------------
  |  Branch (370:9): [True: 61.5k, False: 0]
  |  Branch (370:25): [True: 48, False: 61.5k]
  ------------------
  371|     48|		*pad = *str;
  372|     48|		str++;
  373|     48|	}
  374|       |
  375|  61.5k|	if (*str++ != ']') return FALSE;
  ------------------
  |  Branch (375:6): [True: 0, False: 61.5k]
  ------------------
  376|       |
  377|  61.5k|	*data = str;
  378|       |	return TRUE;
  379|  61.5k|}
special-vars.c:get_special_value:
  258|  2.21M|{
  259|  2.21M|	char command, *value, *p;
  260|  2.21M|	int len;
  261|       |
  262|  2.21M|	if ((flags & PARSE_FLAG_ONLY_ARGS) && !isarg(**cmd)) {
  ------------------
  |  |   10|  2.21M|#define PARSE_FLAG_ONLY_ARGS	0x10 /* expand only arguments ($0 $1 etc.) but no other $variables */
  ------------------
              	if ((flags & PARSE_FLAG_ONLY_ARGS) && !isarg(**cmd)) {
  ------------------
  |  |   35|  4.44k|	(i_isdigit(c) || (c) == '*' || (c) == '~' || (c) == '-')
  |  |  ------------------
  |  |  |  |   79|  4.44k|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  |  |  ------------------
  |  |  |  Branch (35:19): [True: 1.22k, False: 10]
  |  |  |  Branch (35:33): [True: 0, False: 10]
  |  |  |  Branch (35:47): [True: 0, False: 10]
  |  |  ------------------
  ------------------
  |  Branch (262:6): [True: 4.44k, False: 2.20M]
  |  Branch (262:41): [True: 3.21k, False: 1.23k]
  ------------------
  263|     10|		*free_ret = TRUE;
  264|     10|		return g_strdup_printf("$%c", **cmd);
  265|     10|	}
  266|       |
  267|  2.21M|	if (**cmd == '!') {
  ------------------
  |  Branch (267:6): [True: 0, False: 2.21M]
  ------------------
  268|       |		/* find text from command history */
  269|      0|		if (flags & PARSE_FLAG_GETNAME)
  ------------------
  |  |    6|      0|#define PARSE_FLAG_GETNAME	0x01 /* return argument name instead of it's value */
  ------------------
  |  Branch (269:7): [True: 0, False: 0]
  ------------------
  270|      0|			return "!";
  271|       |
  272|      0|		return get_history(cmd, item, free_ret);
  273|      0|	}
  274|       |
  275|  2.21M|	command = 0;
  276|  2.21M|	if (**cmd == '#' || **cmd == '@') {
  ------------------
  |  Branch (276:6): [True: 0, False: 2.21M]
  |  Branch (276:22): [True: 0, False: 2.21M]
  ------------------
  277|      0|                command = **cmd;
  278|      0|		if ((*cmd)[1] != '\0')
  ------------------
  |  Branch (278:7): [True: 0, False: 0]
  ------------------
  279|      0|			(*cmd)++;
  280|      0|		else {
  281|       |			/* default to $* */
  282|      0|			char *temp_cmd = "*";
  283|       |
  284|      0|			if (flags & PARSE_FLAG_GETNAME)
  ------------------
  |  |    6|      0|#define PARSE_FLAG_GETNAME	0x01 /* return argument name instead of it's value */
  ------------------
  |  Branch (284:8): [True: 0, False: 0]
  ------------------
  285|      0|                                return "*";
  286|       |
  287|      0|			*free_ret = TRUE;
  288|      0|			return get_argument(&temp_cmd, arglist);
  289|      0|		}
  290|      0|	}
  291|       |
  292|  2.21M|	value = get_variable(cmd, server, item, arglist, free_ret, arg_used,
  293|  2.21M|	                     flags & PARSE_FLAG_GETNAME, collector, cache);
  ------------------
  |  |    6|  2.21M|#define PARSE_FLAG_GETNAME	0x01 /* return argument name instead of it's value */
  ------------------
  294|       |
  295|  2.21M|	if (flags & PARSE_FLAG_GETNAME)
  ------------------
  |  |    6|  2.21M|#define PARSE_FLAG_GETNAME	0x01 /* return argument name instead of it's value */
  ------------------
  |  Branch (295:6): [True: 0, False: 2.21M]
  ------------------
  296|      0|		return value;
  297|       |
  298|  2.21M|	if (command == '#') {
  ------------------
  |  Branch (298:6): [True: 0, False: 2.21M]
  ------------------
  299|       |		/* number of words */
  300|      0|		if (value == NULL || *value == '\0') {
  ------------------
  |  Branch (300:7): [True: 0, False: 0]
  |  Branch (300:24): [True: 0, False: 0]
  ------------------
  301|      0|			if (value != NULL && *free_ret) {
  ------------------
  |  Branch (301:8): [True: 0, False: 0]
  |  Branch (301:25): [True: 0, False: 0]
  ------------------
  302|      0|				g_free(value);
  303|      0|				*free_ret = FALSE;
  304|      0|			}
  305|      0|			return "0";
  306|      0|		}
  307|       |
  308|      0|		len = 1;
  309|      0|		for (p = value; *p != '\0'; p++) {
  ------------------
  |  Branch (309:19): [True: 0, False: 0]
  ------------------
  310|      0|			if (*p == ' ' && (p[1] != ' ' && p[1] != '\0'))
  ------------------
  |  Branch (310:8): [True: 0, False: 0]
  |  Branch (310:22): [True: 0, False: 0]
  |  Branch (310:37): [True: 0, False: 0]
  ------------------
  311|      0|				len++;
  312|      0|		}
  313|      0|                if (*free_ret) g_free(value);
  ------------------
  |  Branch (313:21): [True: 0, False: 0]
  ------------------
  314|       |
  315|      0|		*free_ret = TRUE;
  316|      0|		return g_strdup_printf("%d", len);
  317|      0|	}
  318|       |
  319|  2.21M|	if (command == '@') {
  ------------------
  |  Branch (319:6): [True: 0, False: 2.21M]
  ------------------
  320|       |		/* number of characters */
  321|      0|		if (value == NULL) return "0";
  ------------------
  |  Branch (321:7): [True: 0, False: 0]
  ------------------
  322|       |
  323|      0|		len = strlen(value);
  324|      0|                if (*free_ret) g_free(value);
  ------------------
  |  Branch (324:21): [True: 0, False: 0]
  ------------------
  325|       |
  326|      0|		*free_ret = TRUE;
  327|      0|		return g_strdup_printf("%d", len);
  328|      0|	}
  329|       |
  330|  2.21M|	return value;
  331|  2.21M|}
special-vars.c:get_argument:
   48|  1.14M|{
   49|  1.14M|	GString *str;
   50|  1.14M|	char *ret;
   51|  1.14M|	int max, arg, argcount;
   52|       |
   53|  1.14M|	arg = 0;
   54|  1.14M|	max = -1;
   55|       |
   56|  1.14M|	argcount = arglist == NULL ? 0 : g_strv_length(arglist);
  ------------------
  |  Branch (56:13): [True: 0, False: 1.14M]
  ------------------
   57|       |
   58|  1.14M|	if (**cmd == '*') {
  ------------------
  |  Branch (58:6): [True: 1.22k, False: 1.14M]
  ------------------
   59|       |		/* get all arguments */
   60|  1.14M|	} else if (**cmd == '~') {
  ------------------
  |  Branch (60:13): [True: 0, False: 1.14M]
  ------------------
   61|       |		/* get last argument */
   62|      0|		arg = max = argcount-1;
   63|  1.14M|	} else {
   64|  1.14M|		if (i_isdigit(**cmd)) {
  ------------------
  |  |   79|  1.14M|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (64:7): [True: 1.14M, False: 0]
  ------------------
   65|       |			/* first argument */
   66|  1.14M|			arg = max = (**cmd)-'0';
   67|  1.14M|			(*cmd)++;
   68|  1.14M|		}
   69|       |
   70|  1.14M|		if (**cmd == '-') {
  ------------------
  |  Branch (70:7): [True: 2.62k, False: 1.14M]
  ------------------
   71|       |			/* get more than one argument */
   72|  2.62k|			(*cmd)++;
   73|  2.62k|			if (!i_isdigit(**cmd))
  ------------------
  |  |   79|  2.62k|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (73:8): [True: 2.62k, False: 0]
  ------------------
   74|  2.62k|				max = -1; /* get all the rest */
   75|      0|			else {
   76|      0|				max = (**cmd)-'0';
   77|      0|				(*cmd)++;
   78|      0|			}
   79|  2.62k|		}
   80|  1.14M|		(*cmd)--;
   81|  1.14M|	}
   82|       |
   83|  1.14M|	str = g_string_new(NULL);
   84|  2.29M|	while (arg >= 0 && arg < argcount && (arg <= max || max == -1)) {
  ------------------
  |  Branch (84:9): [True: 2.29M, False: 0]
  |  Branch (84:21): [True: 2.10M, False: 193k]
  |  Branch (84:40): [True: 1.14M, False: 960k]
  |  Branch (84:54): [True: 6.36k, False: 954k]
  ------------------
   85|  1.14M|		g_string_append(str, arglist[arg]);
   86|  1.14M|		g_string_append_c(str, ' ');
   87|  1.14M|		arg++;
   88|  1.14M|	}
   89|  1.14M|	if (str->len > 0) g_string_truncate(str, str->len-1);
  ------------------
  |  Branch (89:6): [True: 1.14M, False: 3.30k]
  ------------------
   90|       |
   91|  1.14M|	ret = g_string_free_and_steal(str);
   92|  1.14M|	return ret;
   93|  1.14M|}
special-vars.c:get_variable:
  189|  2.21M|{
  190|  2.21M|	EXPANDO_FUNC func;
  191|       |
  192|  2.21M|	if (isarg(**cmd)) {
  ------------------
  |  |   35|  2.21M|	(i_isdigit(c) || (c) == '*' || (c) == '~' || (c) == '-')
  |  |  ------------------
  |  |  |  |   79|  2.21M|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  |  |  ------------------
  |  |  |  Branch (35:19): [True: 1.22k, False: 1.06M]
  |  |  |  Branch (35:33): [True: 0, False: 1.06M]
  |  |  |  Branch (35:47): [True: 0, False: 1.06M]
  |  |  ------------------
  ------------------
  |  Branch (192:6): [True: 1.14M, False: 1.06M]
  ------------------
  193|       |		/* argument */
  194|  1.14M|		*free_ret = TRUE;
  195|  1.14M|		if (arg_used != NULL) *arg_used = TRUE;
  ------------------
  |  Branch (195:7): [True: 0, False: 1.14M]
  ------------------
  196|  1.14M|		return getname ? g_strdup_printf("%c", **cmd) :
  ------------------
  |  Branch (196:10): [True: 0, False: 1.14M]
  ------------------
  197|  1.14M|			get_argument(cmd, arglist);
  198|  1.14M|	}
  199|       |
  200|  1.06M|	if (i_isalpha(**cmd) && isvarchar((*cmd)[1])) {
  ------------------
  |  |   75|  1.06M|#define i_isalpha(x) isalpha((int) (unsigned char) (x))
  ------------------
              	if (i_isalpha(**cmd) && isvarchar((*cmd)[1])) {
  ------------------
  |  |   32|  1.06M|        (i_isalnum(c) || (c) == '_')
  |  |  ------------------
  |  |  |  |   74|  1.06M|#define i_isalnum(x) isalnum((int) (unsigned char) (x))
  |  |  ------------------
  |  |  |  Branch (32:26): [True: 0, False: 1.06M]
  |  |  ------------------
  ------------------
  |  Branch (200:6): [True: 1.06M, False: 0]
  |  Branch (200:26): [True: 22, False: 1.06M]
  ------------------
  201|       |		/* long variable name.. */
  202|     22|		return get_long_variable(cmd, server, item, free_ret, getname, collector, cache);
  203|     22|	}
  204|       |
  205|       |	/* single character variable. */
  206|  1.06M|	if (getname) {
  ------------------
  |  Branch (206:6): [True: 0, False: 1.06M]
  ------------------
  207|      0|		*free_ret = TRUE;
  208|      0|                return g_strdup_printf("%c", **cmd);
  209|      0|	}
  210|  1.06M|	*free_ret = FALSE;
  211|  1.06M|	{
  212|  1.06M|		char *ret;
  213|  1.06M|		if (cache_find_char(cache, **cmd, &ret)) {
  ------------------
  |  Branch (213:7): [True: 0, False: 1.06M]
  ------------------
  214|      0|			return ret;
  215|      0|		}
  216|  1.06M|	}
  217|  1.06M|	func = expando_find_char(**cmd);
  218|  1.06M|	if (func == NULL)
  ------------------
  |  Branch (218:6): [True: 0, False: 1.06M]
  ------------------
  219|      0|		return NULL;
  220|  1.06M|	else {
  221|  1.06M|		char str[2];
  222|  1.06M|		char *ret;
  223|       |
  224|  1.06M|		str[0] = **cmd; str[1] = '\0';
  225|  1.06M|		current_expando = str;
  226|  1.06M|		ret = func(server, item, free_ret);
  227|  1.06M|		if (**cmd != 'Z' && collector != NULL) {
  ------------------
  |  Branch (227:7): [True: 11, False: 1.06M]
  |  Branch (227:23): [True: 0, False: 11]
  ------------------
  228|      0|			*collector = g_slist_prepend(*collector, g_strdup(ret));
  229|      0|			*collector = g_slist_prepend(*collector, i_refstr_intern(str));
  230|      0|		}
  231|  1.06M|		return ret;
  232|  1.06M|	}
  233|  1.06M|}
special-vars.c:get_long_variable:
  160|     22|{
  161|     22|	char *start, *var, *ret;
  162|       |
  163|       |	/* get variable name */
  164|     22|	start = *cmd;
  165|    154|	while (isvarchar((*cmd)[1])) (*cmd)++;
  ------------------
  |  |   32|    154|        (i_isalnum(c) || (c) == '_')
  |  |  ------------------
  |  |  |  |   74|    154|#define i_isalnum(x) isalnum((int) (unsigned char) (x))
  |  |  ------------------
  |  |  |  Branch (32:26): [True: 0, False: 22]
  |  |  ------------------
  ------------------
  |  Branch (165:9): [True: 132, False: 22]
  ------------------
  166|       |
  167|     22|	var = g_strndup(start, (int) (*cmd-start)+1);
  168|     22|	if (getname) {
  ------------------
  |  Branch (168:6): [True: 0, False: 22]
  ------------------
  169|      0|		*free_ret = TRUE;
  170|      0|                return var;
  171|      0|	}
  172|     22|	if (cache_find(cache, var, &ret)) {
  ------------------
  |  Branch (172:6): [True: 0, False: 22]
  ------------------
  173|      0|		g_free(var);
  174|      0|		return ret;
  175|      0|	}
  176|     22|	ret = get_long_variable_value(var, server, item, free_ret);
  177|     22|	if (collector != NULL) {
  ------------------
  |  Branch (177:6): [True: 0, False: 22]
  ------------------
  178|      0|		*collector = g_slist_prepend(*collector, g_strdup(ret));
  179|      0|		*collector = g_slist_prepend(*collector, i_refstr_intern(var));
  180|      0|	}
  181|     22|	g_free(var);
  182|     22|	return ret;
  183|     22|}
special-vars.c:cache_find:
  127|  1.06M|{
  128|  1.06M|	GSList *tmp;
  129|  1.06M|	GSList *prev = NULL;
  130|       |
  131|  1.06M|	if (cache == NULL)
  ------------------
  |  Branch (131:6): [True: 0, False: 1.06M]
  ------------------
  132|      0|		return FALSE;
  133|       |
  134|  1.06M|	for (tmp = *cache; tmp;) {
  ------------------
  |  Branch (134:21): [True: 0, False: 1.06M]
  ------------------
  135|      0|		if (g_strcmp0(var, tmp->data) == 0) {
  ------------------
  |  Branch (135:7): [True: 0, False: 0]
  ------------------
  136|      0|			*ret = tmp->next->data;
  137|      0|			if (prev != NULL)
  ------------------
  |  Branch (137:8): [True: 0, False: 0]
  ------------------
  138|      0|				prev->next->next = tmp->next->next;
  139|      0|			else
  140|      0|				*cache = tmp->next->next;
  141|       |
  142|      0|			g_slist_free_1(tmp->next);
  143|      0|			g_slist_free_1(tmp);
  144|      0|			return TRUE;
  145|      0|		}
  146|      0|		prev = tmp;
  147|      0|		tmp = tmp->next->next;
  148|      0|	}
  149|  1.06M|	return FALSE;
  150|  1.06M|}
special-vars.c:get_long_variable_value:
   97|     22|{
   98|     22|	EXPANDO_FUNC func;
   99|     22|	const char *ret;
  100|     22|	SETTINGS_REC *rec;
  101|       |
  102|     22|	*free_ret = FALSE;
  103|       |
  104|       |	/* expando? */
  105|     22|        func = expando_find_long(key);
  106|     22|	if (func != NULL) {
  ------------------
  |  Branch (106:6): [True: 22, False: 0]
  ------------------
  107|     22|		current_expando = key;
  108|     22|		return func(server, item, free_ret);
  109|     22|	}
  110|       |
  111|       |	/* internal setting? */
  112|      0|	rec = settings_get_record(key);
  113|      0|	if (rec != NULL) {
  ------------------
  |  Branch (113:6): [True: 0, False: 0]
  ------------------
  114|      0|		*free_ret = TRUE;
  115|      0|		return settings_get_print(rec);
  116|      0|	}
  117|       |
  118|       |	/* environment variable? */
  119|      0|	ret = g_getenv(key);
  120|      0|	if (ret != NULL)
  ------------------
  |  Branch (120:6): [True: 0, False: 0]
  ------------------
  121|      0|		return (char *) ret;
  122|       |
  123|      0|	return NULL;
  124|      0|}
special-vars.c:cache_find_char:
  153|  1.06M|{
  154|  1.06M|	char varn[] = { var, '\0' };
  155|  1.06M|	return cache_find(cache, varn, ret);
  156|  1.06M|}
special-vars.c:gstring_append_escaped:
  528|  1.16k|{
  529|  1.16k|	char esc[4], *escpos;
  530|       |
  531|  1.16k|	escpos = esc;
  532|  1.16k|	if (flags & PARSE_FLAG_ESCAPE_VARS)
  ------------------
  |  |    8|  1.16k|#define PARSE_FLAG_ESCAPE_VARS  0x04 /* if any arguments/variables contain % chars, escape them with another % */
  ------------------
  |  Branch (532:6): [True: 0, False: 1.16k]
  ------------------
  533|      0|		*escpos++ = '%';
  534|  1.16k|	if (flags & PARSE_FLAG_ESCAPE_THEME) {
  ------------------
  |  |    9|  1.16k|#define PARSE_FLAG_ESCAPE_THEME 0x08 /* if any arguments/variables contain { or } chars, escape them with % */
  ------------------
  |  Branch (534:6): [True: 0, False: 1.16k]
  ------------------
  535|      0|		*escpos++ = '{';
  536|      0|		*escpos++ = '}';
  537|      0|	}
  538|       |
  539|  1.16k|	if (escpos == esc) {
  ------------------
  |  Branch (539:6): [True: 1.16k, False: 0]
  ------------------
  540|  1.16k|		g_string_append(str, text);
  541|  1.16k|		return;
  542|  1.16k|	}
  543|       |
  544|      0|	*escpos = '\0';
  545|      0|	while (*text != '\0') {
  ------------------
  |  Branch (545:9): [True: 0, False: 0]
  ------------------
  546|      0|		for (escpos = esc; *escpos != '\0'; escpos++) {
  ------------------
  |  Branch (546:22): [True: 0, False: 0]
  ------------------
  547|      0|			if (*text == *escpos) {
  ------------------
  |  Branch (547:8): [True: 0, False: 0]
  ------------------
  548|      0|	                        g_string_append_c(str, '%');
  549|      0|	                        break;
  550|      0|	                }
  551|      0|		}
  552|       |		g_string_append_c(str, *text);
  553|      0|		text++;
  554|      0|	}
  555|      0|}

string_advance:
   32|  6.83M|{
   33|  6.83M|	if (policy == TREAT_STRING_AS_UTF8) {
  ------------------
  |  Branch (33:6): [True: 0, False: 6.83M]
  ------------------
   34|      0|		gunichar c;
   35|       |
   36|      0|		c = g_utf8_get_char(*str);
   37|      0|		*str = g_utf8_next_char(*str);
   38|       |
   39|      0|		return unichar_isprint(c) ? i_wcwidth(c) : 1;
  ------------------
  |  |   59|      0|#define unichar_isprint(c) (((c) & ~0x80) >= 32)
  |  |  ------------------
  |  |  |  Branch (59:28): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   40|  6.83M|	} else {
   41|       |		/* Assume TREAT_STRING_AS_BYTES: */
   42|  6.83M|		*str += 1;
   43|       |
   44|  6.83M|		return 1;
   45|  6.83M|	}
   46|  6.83M|}
string_policy:
   49|  91.2k|{
   50|  91.2k|	if (is_utf8()) {
  ------------------
  |  Branch (50:6): [True: 0, False: 91.2k]
  ------------------
   51|      0|		if (str == NULL || g_utf8_validate(str, -1, NULL)) {
  ------------------
  |  Branch (51:7): [True: 0, False: 0]
  |  Branch (51:22): [True: 0, False: 0]
  ------------------
   52|       |			/* No string provided or valid UTF-8 string: treat as UTF-8: */
   53|      0|			return TREAT_STRING_AS_UTF8;
   54|      0|		}
   55|      0|	}
   56|  91.2k|	return TREAT_STRING_AS_BYTES;
   57|  91.2k|}
string_width:
   77|   106k|{
   78|   106k|	int len;
   79|       |
   80|   106k|	g_return_val_if_fail(str != NULL, 0);
  ------------------
  |  Branch (80:2): [True: 106k, False: 0]
  |  Branch (80:2): [True: 106k, False: 0]
  |  Branch (80:2): [Folded, False: 106k]
  ------------------
   81|       |
   82|   106k|	if (policy == -1) {
  ------------------
  |  Branch (82:6): [True: 14.8k, False: 91.8k]
  ------------------
   83|  14.8k|		policy = string_policy(str);
   84|  14.8k|	}
   85|       |
   86|   106k|	len = 0;
   87|  6.93M|	while (*str != '\0') {
  ------------------
  |  Branch (87:9): [True: 6.82M, False: 106k]
  ------------------
   88|  6.82M|		len += string_advance(&str, policy);
   89|  6.82M|	}
   90|   106k|	return len;
   91|   106k|}
string_chars_for_width:
   94|  1.28k|{
   95|  1.28k|	const char *c, *previous_c;
   96|  1.28k|	int str_width, char_width, char_count;
   97|       |
   98|  1.28k|	g_return_val_if_fail(str != NULL, -1);
  ------------------
  |  Branch (98:2): [True: 1.28k, False: 0]
  |  Branch (98:2): [True: 1.28k, False: 0]
  |  Branch (98:2): [Folded, False: 1.28k]
  ------------------
   99|       |
  100|       |	/* Handle the dummy case where n is 0: */
  101|  1.28k|	if (n == 0) {
  ------------------
  |  Branch (101:6): [True: 0, False: 1.28k]
  ------------------
  102|      0|		if (bytes != NULL) {
  ------------------
  |  Branch (102:7): [True: 0, False: 0]
  ------------------
  103|      0|			*bytes = 0;
  104|      0|		}
  105|      0|		return 0;
  106|      0|	}
  107|       |
  108|  1.28k|	if (policy == -1) {
  ------------------
  |  Branch (108:6): [True: 0, False: 1.28k]
  ------------------
  109|      0|		policy = string_policy(str);
  110|      0|	}
  111|       |
  112|       |	/* Iterate over characters until we reach n: */
  113|  1.28k|	char_count = 0;
  114|  1.28k|	str_width = 0;
  115|  1.28k|	c = str;
  116|  13.9k|	while (*c != '\0') {
  ------------------
  |  Branch (116:9): [True: 13.9k, False: 0]
  ------------------
  117|  13.9k|		previous_c = c;
  118|  13.9k|		char_width = string_advance(&c, policy);
  119|  13.9k|		if (str_width + char_width > n) {
  ------------------
  |  Branch (119:7): [True: 1.28k, False: 12.6k]
  ------------------
  120|       |			/* We stepped beyond n, get one step back and stop there: */
  121|  1.28k|			c = previous_c;
  122|  1.28k|			break;
  123|  1.28k|		}
  124|  12.6k|		++ char_count;
  125|  12.6k|		str_width += char_width;
  126|  12.6k|	}
  127|       |	/* At this point, we know that char_count characters reach str_width
  128|       |	 * columns, which is less than or equal to n. */
  129|       |
  130|       |	/* Optionally provide the equivalent amount of bytes: */
  131|  1.28k|	if (bytes != NULL) {
  ------------------
  |  Branch (131:6): [True: 1.28k, False: 0]
  ------------------
  132|  1.28k|		*bytes = c - str;
  133|  1.28k|	}
  134|  1.28k|	return char_count;
  135|  1.28k|}

wcwidth_wrapper_init:
  115|      2|{
  116|      2|	int wcwidth_impl_default = 0;
  117|       |	/* Test against characters that have wcwidth=2
  118|       |	 * since unicode 5.2 and 9.0 respectively */
  119|       |
  120|      2|	if (system_wcwidth(UNICODE_SQUARE_HIRAGANA_HOKA) == 2 ||
  ------------------
  |  |   34|      2|#define UNICODE_SQUARE_HIRAGANA_HOKA 0x1F200
  ------------------
  |  Branch (120:6): [True: 0, False: 2]
  ------------------
  121|      2|	    system_wcwidth(UNICODE_IRSSI_LOGO) == 2) {
  ------------------
  |  |   37|      2|#define UNICODE_IRSSI_LOGO 0x1F525
  ------------------
  |  Branch (121:6): [True: 0, False: 2]
  ------------------
  122|      0|		wcwidth_impl_default = WCWIDTH_IMPL_SYSTEM;
  123|      2|	} else {
  124|       |		/* Fall back to our own (which implements 5.0) */
  125|      2|		wcwidth_impl_default = WCWIDTH_IMPL_OLD;
  126|      2|	}
  127|       |
  128|       |#ifdef HAVE_LIBUTF8PROC
  129|       |	settings_add_choice("misc", "wcwidth_implementation", wcwidth_impl_default, "old;system;julia");
  130|       |#else
  131|      2|	settings_add_choice("misc", "wcwidth_implementation", wcwidth_impl_default, "old;system");
  ------------------
  |  |  105|      2|	settings_add_choice_module(MODULE_NAME, section, key, def, choices)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  132|      2|#endif
  133|       |
  134|      2|	read_settings();
  135|       |	signal_add_first("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  136|      2|}
wcwidth-wrapper.c:system_wcwidth:
   55|      4|{
   56|      4|	int retval = wcwidth((wchar_t) ucs);
   57|       |
   58|      4|	if (retval < 0) {
  ------------------
  |  Branch (58:6): [True: 4, False: 0]
  ------------------
   59|       |		/* Treat all unknown characters as taking one cell. This is
   60|       |		 * the reason mk_wcwidth and other outdated implementations
   61|       |		 * mostly worked with newer unicode, while glibc's wcwidth
   62|       |		 * needs updating to recognize new characters.
   63|       |		 *
   64|       |		 * Instead of relying on that, we keep the behavior of assuming
   65|       |		 * one cell even for glibc's implementation, which is still
   66|       |		 * highly accurate and less of a headache overall.
   67|       |		 */
   68|      4|		return 1;
   69|      4|	}
   70|       |
   71|      0|	return retval;
   72|      4|}
wcwidth-wrapper.c:read_settings:
   84|      2|{
   85|      2|	static int choice = -1;
   86|      2|	int newchoice;
   87|       |
   88|      2|	newchoice = settings_get_choice("wcwidth_implementation");
   89|       |
   90|      2|	if (choice == newchoice) {
  ------------------
  |  Branch (90:6): [True: 0, False: 2]
  ------------------
   91|      0|		return;
   92|      0|	}
   93|       |
   94|      2|	choice = newchoice;
   95|       |
   96|      2|	switch (choice) {
  ------------------
  |  Branch (96:10): [True: 2, False: 0]
  ------------------
   97|      2|	case WCWIDTH_IMPL_OLD:
  ------------------
  |  Branch (97:2): [True: 2, False: 0]
  ------------------
   98|      2|		wcwidth_impl_func = &mk_wcwidth;
   99|      2|		break;
  100|       |
  101|      0|	case WCWIDTH_IMPL_SYSTEM:
  ------------------
  |  Branch (101:2): [True: 0, False: 2]
  ------------------
  102|      0|		wcwidth_impl_func = &system_wcwidth;
  103|      0|		break;
  104|       |
  105|       |#ifdef HAVE_LIBUTF8PROC
  106|       |	case WCWIDTH_IMPL_JULIA:
  107|       |		wcwidth_impl_func = &julia_wcwidth;
  108|       |		break;
  109|       |#endif
  110|      2|	}
  111|       |
  112|      2|}

write_buffer:
   61|   178k|{
   62|   178k|	BUFFER_REC *rec;
   63|   178k|        const char *cdata = data;
   64|   178k|	int next_size;
   65|       |
   66|   178k|	if (size <= 0)
  ------------------
  |  Branch (66:6): [True: 31.7k, False: 146k]
  ------------------
   67|  31.7k|		return size;
   68|       |
   69|   146k|	if (write_buffer_max_blocks <= 0) {
  ------------------
  |  Branch (69:6): [True: 146k, False: 0]
  ------------------
   70|       |		/* no write buffer */
   71|   146k|                return write(handle, data, size);
   72|   146k|	}
   73|       |
   74|      0|	rec = g_hash_table_lookup(buffers, GINT_TO_POINTER(handle));
   75|      0|	if (rec == NULL) {
  ------------------
  |  Branch (75:6): [True: 0, False: 0]
  ------------------
   76|      0|		rec = g_new0(BUFFER_REC, 1);
  ------------------
  |  Branch (76:9): [True: 0, False: 0]
  |  Branch (76:9): [True: 0, False: 0]
  ------------------
   77|      0|                write_buffer_new_block(rec);
   78|      0|		g_hash_table_insert(buffers, GINT_TO_POINTER(handle), rec);
   79|      0|	}
   80|       |
   81|      0|	while (size > 0) {
  ------------------
  |  Branch (81:9): [True: 0, False: 0]
  ------------------
   82|      0|                if (rec->active_block_pos == BUFFER_BLOCK_SIZE)
  ------------------
  |  |   27|      0|#define BUFFER_BLOCK_SIZE 2048
  ------------------
  |  Branch (82:21): [True: 0, False: 0]
  ------------------
   83|      0|			write_buffer_new_block(rec);
   84|       |
   85|      0|		next_size = size < BUFFER_BLOCK_SIZE-rec->active_block_pos ?
  ------------------
  |  |   27|      0|#define BUFFER_BLOCK_SIZE 2048
  ------------------
  |  Branch (85:15): [True: 0, False: 0]
  ------------------
   86|      0|			size : BUFFER_BLOCK_SIZE-rec->active_block_pos;
  ------------------
  |  |   27|      0|#define BUFFER_BLOCK_SIZE 2048
  ------------------
   87|      0|		memcpy(rec->active_block+rec->active_block_pos,
   88|      0|		       cdata, next_size);
   89|       |
   90|      0|		rec->active_block_pos += next_size;
   91|      0|		cdata += next_size;
   92|      0|                size -= next_size;
   93|      0|	}
   94|       |
   95|      0|	if (block_count > write_buffer_max_blocks)
  ------------------
  |  Branch (95:6): [True: 0, False: 0]
  ------------------
   96|      0|                write_buffer_flush();
   97|       |
   98|      0|        return size;
   99|   146k|}
write_buffer_flush:
  121|  22.7k|{
  122|  22.7k|	g_slist_foreach(empty_blocks, (GFunc) g_free, NULL);
  123|  22.7k|	g_slist_free(empty_blocks);
  124|  22.7k|        empty_blocks = NULL;
  125|       |
  126|  22.7k|	g_hash_table_foreach_remove(buffers,
  127|       |				    (GHRFunc) write_buffer_flush_rec, NULL);
  128|  22.7k|        block_count = 0;
  129|  22.7k|}
write_buffer_init:
  162|      2|{
  163|      2|	settings_add_time("misc", "write_buffer_timeout", "0");
  ------------------
  |  |   99|      2|	settings_add_time_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  164|      2|	settings_add_size("misc", "write_buffer_size", "0");
  ------------------
  |  |  103|      2|	settings_add_size_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  ------------------
  165|       |
  166|      2|	buffers = g_hash_table_new((GHashFunc) g_direct_hash,
  167|      2|				   (GCompareFunc) g_direct_equal);
  168|       |
  169|      2|        empty_blocks = NULL;
  170|      2|        block_count = 0;
  171|       |
  172|      2|	timeout_tag = -1;
  173|      2|	read_settings();
  174|      2|	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  175|       |        command_bind("flushbuffer", NULL, (SIGNAL_FUNC) cmd_flushbuffer);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  176|      2|}
write-buffer.c:read_settings:
  138|      2|{
  139|      2|	write_buffer_flush();
  140|       |
  141|      2|	write_buffer_max_blocks =
  142|      2|		settings_get_size("write_buffer_size") / BUFFER_BLOCK_SIZE;
  ------------------
  |  |   27|      2|#define BUFFER_BLOCK_SIZE 2048
  ------------------
  143|       |
  144|      2|	if (settings_get_time("write_buffer_timeout") > 0) {
  ------------------
  |  Branch (144:6): [True: 0, False: 2]
  ------------------
  145|      0|		if (timeout_tag == -1) {
  ------------------
  |  Branch (145:7): [True: 0, False: 0]
  ------------------
  146|      0|			timeout_tag = g_timeout_add(settings_get_time("write_buffer_timeout"),
  147|      0|						    (GSourceFunc) flush_timeout,
  148|      0|						    NULL);
  149|      0|		}
  150|      2|	} else if (timeout_tag != -1) {
  ------------------
  |  Branch (150:13): [True: 0, False: 2]
  ------------------
  151|      0|		g_source_remove(timeout_tag);
  152|      0|                timeout_tag = -1;
  153|      0|	}
  154|      2|}

chat_completion_init:
 1243|      2|{
 1244|      2|	settings_add_str("completion", "completion_char", ":");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1245|      2|	settings_add_bool("completion", "completion_auto", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1246|      2|	settings_add_int("completion", "completion_keep_publics", 50);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1247|      2|	settings_add_int("completion", "completion_keep_privates", 10);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1248|      2|	settings_add_bool("completion", "completion_nicks_lowercase", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1249|      2|	settings_add_bool("completion", "completion_strict", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1250|      2|	settings_add_bool("completion", "completion_empty_line", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1251|      2|	settings_add_choice("completion", "completion_nicks_match_case", COMPLETE_MCASE_AUTO, "never;always;auto");
  ------------------
  |  |  105|      2|	settings_add_choice_module(MODULE_NAME, section, key, def, choices)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1252|       |
 1253|      2|	settings_add_bool("lookandfeel", "expand_escapes", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1254|       |
 1255|      2|	read_settings();
 1256|      2|	signal_add("complete word", (SIGNAL_FUNC) sig_complete_word);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1257|      2|	signal_add("complete command msg", (SIGNAL_FUNC) sig_complete_msg);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1258|      2|	signal_add("complete command query", (SIGNAL_FUNC) sig_complete_msg);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1259|      2|	signal_add("complete command action", (SIGNAL_FUNC) sig_complete_msg);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1260|      2|	signal_add("complete erase command msg", (SIGNAL_FUNC) sig_erase_complete_msg);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1261|      2|	signal_add("complete erase command query", (SIGNAL_FUNC) sig_erase_complete_msg);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1262|      2|	signal_add("complete erase command action", (SIGNAL_FUNC) sig_erase_complete_msg);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1263|      2|	signal_add("complete command connect", (SIGNAL_FUNC) sig_complete_connect);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1264|      2|	signal_add("complete command server", (SIGNAL_FUNC) sig_complete_connect);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1265|      2|	signal_add("complete command disconnect", (SIGNAL_FUNC) sig_complete_tag);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1266|      2|	signal_add("complete command reconnect", (SIGNAL_FUNC) sig_complete_tag);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1267|      2|	signal_add("complete command window server", (SIGNAL_FUNC) sig_complete_tag);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1268|      2|	signal_add("complete command topic", (SIGNAL_FUNC) sig_complete_topic);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1269|      2|	signal_add("complete command away", (SIGNAL_FUNC) sig_complete_away);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1270|      2|	signal_add("complete command unalias", (SIGNAL_FUNC) sig_complete_unalias);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1271|      2|	signal_add("complete command alias", (SIGNAL_FUNC) sig_complete_alias);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1272|      2|	signal_add("complete command window goto", (SIGNAL_FUNC) sig_complete_window);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1273|      2|	signal_add("complete command window item move", (SIGNAL_FUNC) sig_complete_channel);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1274|      2|	signal_add("complete command server add", (SIGNAL_FUNC) sig_complete_server);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1275|      2|	signal_add("complete command server remove", (SIGNAL_FUNC) sig_complete_server);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1276|      2|	signal_add("complete command recode remove", (SIGNAL_FUNC) sig_complete_target);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1277|      2|	signal_add("message public", (SIGNAL_FUNC) sig_message_public);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1278|      2|	signal_add("message join", (SIGNAL_FUNC) sig_message_join);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1279|      2|	signal_add("message private", (SIGNAL_FUNC) sig_message_private);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1280|      2|	signal_add("message own_public", (SIGNAL_FUNC) sig_message_own_public);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1281|      2|	signal_add("message own_private", (SIGNAL_FUNC) sig_message_own_private);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1282|      2|	signal_add("nicklist remove", (SIGNAL_FUNC) sig_nick_removed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1283|      2|	signal_add("nicklist changed", (SIGNAL_FUNC) sig_nick_changed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1284|      2|	signal_add("send text", (SIGNAL_FUNC) event_text);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1285|      2|	signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1286|      2|	signal_add("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1287|       |	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1288|      2|}
chat-completion.c:last_msg_add:
  108|  26.5k|{
  109|  26.5k|	LAST_MSG_REC *rec;
  110|       |
  111|  26.5k|	if (max <= 0)
  ------------------
  |  Branch (111:6): [True: 0, False: 26.5k]
  ------------------
  112|      0|		return;
  113|       |
  114|  26.5k|	rec = last_msg_find(*list, nick);
  115|  26.5k|	if (rec != NULL) {
  ------------------
  |  Branch (115:6): [True: 5.76k, False: 20.8k]
  ------------------
  116|       |		/* msg already exists, update it */
  117|  5.76k|		*list = g_slist_remove(*list, rec);
  118|  5.76k|		if (own)
  ------------------
  |  Branch (118:7): [True: 4.16k, False: 1.59k]
  ------------------
  119|  4.16k|			rec->own = max;
  120|  1.59k|		else if (rec->own)
  ------------------
  |  Branch (120:12): [True: 0, False: 1.59k]
  ------------------
  121|      0|                        rec->own--;
  122|  20.8k|	} else {
  123|  20.8k|		rec = g_new(LAST_MSG_REC, 1);
  ------------------
  |  Branch (123:9): [True: 20.8k, False: 0]
  |  Branch (123:9): [True: 0, False: 20.8k]
  ------------------
  124|  20.8k|		rec->nick = g_strdup(nick);
  125|       |
  126|  21.6k|		while ((int)g_slist_length(*list) >= max) {
  ------------------
  |  Branch (126:10): [True: 778, False: 20.8k]
  ------------------
  127|    778|			last_msg_destroy(list, g_slist_last(*list)->data);
  128|    778|		}
  129|       |
  130|  20.8k|		rec->own = own ? max : 0;
  ------------------
  |  Branch (130:14): [True: 3.83k, False: 16.9k]
  ------------------
  131|  20.8k|	}
  132|  26.5k|	rec->time = time(NULL);
  133|       |
  134|  26.5k|        last_msg_dec_owns(*list);
  135|       |
  136|  26.5k|	*list = g_slist_prepend(*list, rec);
  137|  26.5k|}
chat-completion.c:last_msg_dec_owns:
   88|  26.5k|{
   89|  26.5k|	LAST_MSG_REC *rec;
   90|       |
   91|   138k|	while (list != NULL) {
  ------------------
  |  Branch (91:9): [True: 111k, False: 26.5k]
  ------------------
   92|   111k|		rec = list->data;
   93|   111k|		if (rec->own) rec->own--;
  ------------------
  |  Branch (93:7): [True: 19.0k, False: 92.3k]
  ------------------
   94|       |
   95|   111k|		list = list->next;
   96|   111k|	}
   97|  26.5k|}
chat-completion.c:last_msg_find:
   75|   124k|{
   76|   224k|	while (list != NULL) {
  ------------------
  |  Branch (76:9): [True: 119k, False: 104k]
  ------------------
   77|   119k|		LAST_MSG_REC *rec = list->data;
   78|       |
   79|   119k|		if (g_ascii_strcasecmp(rec->nick, nick) == 0)
  ------------------
  |  Branch (79:7): [True: 19.9k, False: 99.6k]
  ------------------
   80|  19.9k|			return rec;
   81|  99.6k|		list = list->next;
   82|  99.6k|	}
   83|       |
   84|   104k|	return NULL;
   85|   124k|}
chat-completion.c:last_msg_destroy:
  100|  20.8k|{
  101|  20.8k|	*list = g_slist_remove(*list, rec);
  102|       |
  103|  20.8k|	g_free(rec->nick);
  104|  20.8k|	g_free(rec);
  105|  20.8k|}
chat-completion.c:read_settings:
 1219|      2|{
 1220|      2|	keep_privates_count = settings_get_int("completion_keep_privates");
 1221|      2|	keep_publics_count = settings_get_int("completion_keep_publics");
 1222|      2|	completion_lowercase = settings_get_bool("completion_nicks_lowercase");
 1223|       |
 1224|      2|	completion_auto = settings_get_bool("completion_auto");
 1225|      2|	completion_strict = settings_get_bool("completion_strict");
 1226|      2|	completion_empty_line = settings_get_bool("completion_empty_line");
 1227|       |
 1228|      2|	completion_match_case = settings_get_choice("completion_nicks_match_case");
 1229|       |
 1230|      2|	g_free_not_null(completion_char);
  ------------------
  |  |   64|      2|#define g_free_not_null(a) g_free(a)
  ------------------
 1231|      2|	completion_char = g_strdup(settings_get_str("completion_char"));
 1232|       |
 1233|      2|	g_free_not_null(cmdchars);
  ------------------
  |  |   64|      2|#define g_free_not_null(a) g_free(a)
  ------------------
 1234|      2|	cmdchars = g_strdup(settings_get_str("cmdchars"));
 1235|       |
 1236|      2|	if (*completion_char == '\0') {
  ------------------
  |  Branch (1236:6): [True: 0, False: 2]
  ------------------
 1237|       |                /* this would break.. */
 1238|       |		completion_auto = FALSE;
 1239|      0|	}
 1240|      2|}
chat-completion.c:sig_message_public:
  173|  4.87k|{
  174|  4.87k|	CHANNEL_REC *channel;
  175|  4.87k|        int own;
  176|  4.87k|	g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (176:2): [True: 2.39k, False: 2.47k]
  |  Branch (176:2): [True: 2.39k, False: 2.47k]
  |  Branch (176:2): [Folded, False: 2.39k]
  ------------------
  177|       |
  178|  2.39k|	channel = channel_find(server, target);
  179|  2.39k|	if (channel != NULL) {
  ------------------
  |  Branch (179:6): [True: 655, False: 1.74k]
  ------------------
  180|    655|                own = nick_match_msg(channel, msg, server->nick);
  181|    655|		CHANNEL_LAST_MSG_ADD(channel, nick, own);
  ------------------
  |  |   59|    655|	last_msg_add(&((MODULE_CHANNEL_REC *) MODULE_DATA(channel))->lastmsgs, \
  |  |  ------------------
  |  |  |  |   17|    655|	g_hash_table_lookup((rec)->module_data, MODULE_NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |    3|    655|#define MODULE_NAME "fe-common/core"
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|    655|		     nick, own, keep_publics_count)
  ------------------
  182|    655|	}
  183|  2.39k|}
chat-completion.c:sig_message_join:
  187|   153k|{
  188|   153k|	CHANNEL_REC *chanrec;
  189|   153k|	g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (189:2): [True: 47.2k, False: 105k]
  |  Branch (189:2): [True: 47.2k, False: 105k]
  |  Branch (189:2): [Folded, False: 47.2k]
  ------------------
  190|       |
  191|  47.2k|	chanrec = channel_find(server, channel);
  192|  47.2k|	if (chanrec != NULL)
  ------------------
  |  Branch (192:6): [True: 17.9k, False: 29.2k]
  ------------------
  193|  17.9k|		CHANNEL_LAST_MSG_ADD(chanrec, nick, FALSE);
  ------------------
  |  |   59|  17.9k|	last_msg_add(&((MODULE_CHANNEL_REC *) MODULE_DATA(channel))->lastmsgs, \
  |  |  ------------------
  |  |  |  |   17|  17.9k|	g_hash_table_lookup((rec)->module_data, MODULE_NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |    3|  17.9k|#define MODULE_NAME "fe-common/core"
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  17.9k|		     nick, own, keep_publics_count)
  ------------------
  194|  47.2k|}
chat-completion.c:sig_message_private:
  198|  9.80k|{
  199|  9.80k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (199:2): [True: 9.80k, False: 0]
  |  Branch (199:2): [True: 9.80k, False: 0]
  |  Branch (199:2): [Folded, False: 9.80k]
  ------------------
  200|  9.80k|	g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (200:2): [True: 7.99k, False: 1.81k]
  |  Branch (200:2): [True: 7.99k, False: 1.81k]
  |  Branch (200:2): [Folded, False: 7.99k]
  ------------------
  201|       |
  202|  7.99k|	SERVER_LAST_MSG_ADD(server, nick);
  ------------------
  |  |   55|  7.99k|	last_msg_add(&((MODULE_SERVER_REC *) MODULE_DATA(server))->lastmsgs, \
  |  |  ------------------
  |  |  |  |   17|  7.99k|	g_hash_table_lookup((rec)->module_data, MODULE_NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |    3|  7.99k|#define MODULE_NAME "fe-common/core"
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|  7.99k|		     nick, TRUE, keep_privates_count)
  ------------------
  203|  7.99k|}
chat-completion.c:sig_nick_removed:
  248|  88.1k|{
  249|  88.1k|        MODULE_CHANNEL_REC *mchannel;
  250|  88.1k|	LAST_MSG_REC *rec;
  251|       |
  252|  88.1k|        mchannel = MODULE_DATA(channel);
  ------------------
  |  |   17|  88.1k|	g_hash_table_lookup((rec)->module_data, MODULE_NAME)
  |  |  ------------------
  |  |  |  |    3|  88.1k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  253|  88.1k|	rec = last_msg_find(mchannel->lastmsgs, nick->nick);
  254|  88.1k|	if (rec != NULL) last_msg_destroy(&mchannel->lastmsgs, rec);
  ------------------
  |  Branch (254:6): [True: 4.85k, False: 83.2k]
  ------------------
  255|  88.1k|}
chat-completion.c:sig_nick_changed:
  259|  9.83k|{
  260|  9.83k|        MODULE_CHANNEL_REC *mchannel;
  261|  9.83k|	LAST_MSG_REC *rec;
  262|       |
  263|  9.83k|        mchannel = MODULE_DATA(channel);
  ------------------
  |  |   17|  9.83k|	g_hash_table_lookup((rec)->module_data, MODULE_NAME)
  |  |  ------------------
  |  |  |  |    3|  9.83k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  264|  9.83k|	rec = last_msg_find(mchannel->lastmsgs, oldnick);
  265|  9.83k|	if (rec != NULL) {
  ------------------
  |  Branch (265:6): [True: 9.32k, False: 507]
  ------------------
  266|  9.32k|		g_free(rec->nick);
  267|  9.32k|		rec->nick = g_strdup(nick->nick);
  268|  9.32k|	}
  269|  9.83k|}
chat-completion.c:sig_server_disconnected:
 1192|  29.4k|{
 1193|  29.4k|	MODULE_SERVER_REC *mserver;
 1194|       |
 1195|  29.4k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (1195:2): [True: 29.4k, False: 0]
  |  Branch (1195:2): [True: 29.4k, False: 0]
  |  Branch (1195:2): [Folded, False: 29.4k]
  ------------------
 1196|       |
 1197|  29.4k|        mserver = MODULE_DATA(server);
  ------------------
  |  |   17|  29.4k|	g_hash_table_lookup((rec)->module_data, MODULE_NAME)
  |  |  ------------------
  |  |  |  |    3|  29.4k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1198|  29.4k|	if (mserver == NULL)
  ------------------
  |  Branch (1198:6): [True: 0, False: 29.4k]
  ------------------
 1199|      0|		return;
 1200|       |
 1201|  32.6k|	while (mserver->lastmsgs)
  ------------------
  |  Branch (1201:9): [True: 3.24k, False: 29.4k]
  ------------------
 1202|  3.24k|                last_msg_destroy(&mserver->lastmsgs, mserver->lastmsgs->data);
 1203|  29.4k|}
chat-completion.c:sig_channel_destroyed:
 1206|   117k|{
 1207|   117k|	MODULE_CHANNEL_REC *mchannel;
 1208|       |
 1209|   117k|	g_return_if_fail(channel != NULL);
  ------------------
  |  Branch (1209:2): [True: 117k, False: 0]
  |  Branch (1209:2): [True: 117k, False: 0]
  |  Branch (1209:2): [Folded, False: 117k]
  ------------------
 1210|       |
 1211|   117k|        mchannel = MODULE_DATA(channel);
  ------------------
  |  |   17|   117k|	g_hash_table_lookup((rec)->module_data, MODULE_NAME)
  |  |  ------------------
  |  |  |  |    3|   117k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1212|   129k|	while (mchannel->lastmsgs != NULL) {
  ------------------
  |  Branch (1212:9): [True: 11.9k, False: 117k]
  ------------------
 1213|  11.9k|		last_msg_destroy(&mchannel->lastmsgs,
 1214|  11.9k|				 mchannel->lastmsgs->data);
 1215|  11.9k|	}
 1216|   117k|}

command_history_list_first:
   69|  90.9k|{
   70|  90.9k|	GList *link;
   71|       |
   72|  90.9k|	link = history_entries;
   73|  90.9k|	while (link != NULL && history != NULL && ((HISTORY_ENTRY_REC *)link->data)->history != history) {
  ------------------
  |  Branch (73:9): [True: 0, False: 90.9k]
  |  Branch (73:25): [True: 0, False: 0]
  |  Branch (73:44): [True: 0, False: 0]
  ------------------
   74|      0|		link = link->next;
   75|      0|	}
   76|       |
   77|  90.9k|	return link;
   78|  90.9k|}
command_history_find_name:
  154|  90.9k|{
  155|  90.9k|	GSList *tmp;
  156|       |
  157|  90.9k|	if (name == NULL)
  ------------------
  |  Branch (157:6): [True: 90.9k, False: 0]
  ------------------
  158|  90.9k|		return NULL;
  159|       |
  160|      0|	for (tmp = histories; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (160:24): [True: 0, False: 0]
  ------------------
  161|      0|		HISTORY_REC *rec = tmp->data;
  162|       |
  163|      0|		if (rec->name != NULL &&
  ------------------
  |  Branch (163:7): [True: 0, False: 0]
  ------------------
  164|      0|		    g_ascii_strcasecmp(rec->name, name) == 0)
  ------------------
  |  Branch (164:7): [True: 0, False: 0]
  ------------------
  165|      0|			return rec;
  166|      0|	}
  167|       |
  168|      0|	return NULL;
  169|      0|}
command_history_clear_pos_func:
  338|  90.9k|{
  339|       |	history->pos = NULL;
  340|  90.9k|}
command_history_create:
  349|  98.3k|{
  350|  98.3k|	HISTORY_REC *rec;
  351|       |
  352|  98.3k|	rec = g_new0(HISTORY_REC, 1);
  ------------------
  |  Branch (352:8): [True: 98.3k, False: 0]
  |  Branch (352:8): [True: 0, False: 98.3k]
  ------------------
  353|       |
  354|  98.3k|	if (name != NULL)
  ------------------
  |  Branch (354:6): [True: 0, False: 98.3k]
  ------------------
  355|      0|		rec->name = g_strdup(name);
  356|       |
  357|  98.3k|	histories = g_slist_append(histories, rec);
  358|       |
  359|  98.3k|	return rec;
  360|  98.3k|}
command_history_clear:
  363|  90.9k|{
  364|  90.9k|	GList *link, *next;
  365|       |
  366|  90.9k|	g_return_if_fail(history != NULL);
  ------------------
  |  Branch (366:2): [True: 90.9k, False: 0]
  |  Branch (366:2): [True: 90.9k, False: 0]
  |  Branch (366:2): [Folded, False: 90.9k]
  ------------------
  367|       |
  368|  90.9k|	command_history_clear_pos_func(history, NULL);
  369|  90.9k|	link = command_history_list_first(history);
  370|  90.9k|	while (link != NULL) {
  ------------------
  |  Branch (370:9): [True: 0, False: 90.9k]
  ------------------
  371|      0|		next = command_history_list_next(history, link);
  372|      0|		history_list_delete_link_and_destroy(link);
  373|      0|		link = next;
  374|      0|	}
  375|  90.9k|	history->lines = 0;
  376|  90.9k|}
command_history_destroy:
  379|  90.9k|{
  380|  90.9k|	g_return_if_fail(history != NULL);
  ------------------
  |  Branch (380:2): [True: 90.9k, False: 0]
  |  Branch (380:2): [True: 90.9k, False: 0]
  |  Branch (380:2): [Folded, False: 90.9k]
  ------------------
  381|       |
  382|       |	/* history->refcount should be 0 here, or somthing is wrong... */
  383|  90.9k|	g_return_if_fail(history->refcount == 0);
  ------------------
  |  Branch (383:2): [True: 90.9k, False: 0]
  |  Branch (383:2): [True: 90.9k, False: 0]
  |  Branch (383:2): [Folded, False: 90.9k]
  ------------------
  384|       |
  385|  90.9k|	histories = g_slist_remove(histories, history);
  386|  90.9k|	command_history_clear(history);
  387|       |
  388|  90.9k|	g_free_not_null(history->name);
  ------------------
  |  |   64|  90.9k|#define g_free_not_null(a) g_free(a)
  ------------------
  389|  90.9k|	g_free(history);
  390|  90.9k|}
command_history_unlink:
  404|  90.9k|{
  405|  90.9k|	HISTORY_REC *rec;
  406|  90.9k|	rec = command_history_find_name(name);
  407|       |
  408|  90.9k|	if (rec == NULL)
  ------------------
  |  Branch (408:6): [True: 90.9k, False: 0]
  ------------------
  409|  90.9k|		return;
  410|       |
  411|      0|	if (--(rec->refcount) <= 0)
  ------------------
  |  Branch (411:6): [True: 0, False: 0]
  ------------------
  412|      0|		command_history_destroy(rec);
  413|      0|}
command_history_init:
  477|      2|{
  478|      2|	settings_add_int("history", "max_command_history", 100);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  479|      2|	settings_add_bool("history", "window_history", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  480|      2|	settings_add_bool("history", "command_history_editable", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  481|       |
  482|      2|	special_history_func_set(special_history_func);
  483|       |
  484|      2|	history_entries = NULL;
  485|       |
  486|      2|	global_history = command_history_create(NULL);
  487|       |
  488|      2|	read_settings();
  489|      2|	signal_add("window created", (SIGNAL_FUNC) sig_window_created);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  490|      2|	signal_add("window destroyed", (SIGNAL_FUNC) sig_window_destroyed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  491|      2|	signal_add("window history changed", (SIGNAL_FUNC) sig_window_history_changed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  492|      2|	signal_add_last("window history cleared", (SIGNAL_FUNC) sig_window_history_cleared);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  493|       |	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  494|      2|}
command-history.c:read_settings:
  472|      2|{
  473|      2|	window_history = settings_get_bool("window_history");
  474|      2|}
command-history.c:sig_window_created:
  416|  98.3k|{
  417|       |	window->history = command_history_create(NULL);
  418|  98.3k|}
command-history.c:sig_window_destroyed:
  421|  90.9k|{
  422|  90.9k|	command_history_unlink(window->history_name);
  423|  90.9k|	command_history_destroy(window->history);
  424|  90.9k|	g_free_not_null(window->history_name);
  ------------------
  |  |   64|  90.9k|#define g_free_not_null(a) g_free(a)
  ------------------
  425|  90.9k|}

completion_init:
  912|      2|{
  913|      2|	complist = NULL;
  914|      2|	last_line = NULL; last_line_pos = -1;
  915|       |
  916|      2|	chat_completion_init();
  917|       |
  918|      2|	settings_add_bool("completion", "completion_keep_word", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  919|      2|	command_bind("completion", NULL, (SIGNAL_FUNC) cmd_completion);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  920|       |
  921|      2|	signal_add_first("complete word", (SIGNAL_FUNC) sig_complete_word);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  922|      2|	signal_add_first("complete erase", (SIGNAL_FUNC) sig_complete_erase);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  923|      2|	signal_add("complete command set", (SIGNAL_FUNC) sig_complete_set);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  924|      2|	signal_add("complete command toggle", (SIGNAL_FUNC) sig_complete_toggle);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  925|      2|	signal_add("complete command load", (SIGNAL_FUNC) sig_complete_filename);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  926|      2|	signal_add("complete command cat", (SIGNAL_FUNC) sig_complete_filename);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  927|      2|	signal_add("complete command save", (SIGNAL_FUNC) sig_complete_filename);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  928|      2|	signal_add("complete command reload", (SIGNAL_FUNC) sig_complete_filename);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  929|      2|	signal_add("complete command rawlog open", (SIGNAL_FUNC) sig_complete_filename);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  930|      2|	signal_add("complete command rawlog save", (SIGNAL_FUNC) sig_complete_filename);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  931|      2|	signal_add("complete command help", (SIGNAL_FUNC) sig_complete_command);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  932|       |
  933|      2|	command_set_options("completion", "auto delete");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  934|      2|}

fe_channels_nicklist:
  473|  5.26k|{
  474|  5.26k|	NICK_REC *nick;
  475|  5.26k|	GSList *tmp, *nicklist, *sorted;
  476|  5.26k|	int nicks, normal, voices, halfops, ops;
  477|  5.26k|	const char *nick_flags;
  478|       |
  479|  5.26k|	nicks = normal = voices = halfops = ops = 0;
  480|  5.26k|	nicklist = nicklist_getnicks(channel);
  481|  5.26k|	sorted = NULL;
  482|  5.26k|	nick_flags = channel->server->get_nick_flags(channel->server);
  483|       |
  484|       |	/* filter (for flags) and count ops, halfops, voices */
  485|  61.2k|	for (tmp = nicklist; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (485:23): [True: 55.9k, False: 5.26k]
  ------------------
  486|  55.9k|		nick = tmp->data;
  487|       |
  488|  55.9k|		nicks++;
  489|  55.9k|		if (nick->op) {
  ------------------
  |  Branch (489:7): [True: 4.92k, False: 51.0k]
  ------------------
  490|  4.92k|			ops++;
  491|  4.92k|			if ((flags & CHANNEL_NICKLIST_FLAG_OPS) == 0)
  ------------------
  |  |    4|  4.92k|#define CHANNEL_NICKLIST_FLAG_OPS       0x01
  ------------------
  |  Branch (491:8): [True: 0, False: 4.92k]
  ------------------
  492|      0|                                continue;
  493|  51.0k|		} else if (nick->halfop) {
  ------------------
  |  Branch (493:14): [True: 1.79k, False: 49.2k]
  ------------------
  494|  1.79k|			halfops++;
  495|  1.79k|			if ((flags & CHANNEL_NICKLIST_FLAG_HALFOPS) == 0)
  ------------------
  |  |    5|  1.79k|#define CHANNEL_NICKLIST_FLAG_HALFOPS   0x02
  ------------------
  |  Branch (495:8): [True: 0, False: 1.79k]
  ------------------
  496|      0|				continue;
  497|  49.2k|		} else if (nick->voice) {
  ------------------
  |  Branch (497:14): [True: 1.66k, False: 47.6k]
  ------------------
  498|  1.66k|			voices++;
  499|  1.66k|			if ((flags & CHANNEL_NICKLIST_FLAG_VOICES) == 0)
  ------------------
  |  |    6|  1.66k|#define CHANNEL_NICKLIST_FLAG_VOICES    0x04
  ------------------
  |  Branch (499:8): [True: 0, False: 1.66k]
  ------------------
  500|      0|				continue;
  501|  47.6k|		} else {
  502|  47.6k|			normal++;
  503|  47.6k|			if ((flags & CHANNEL_NICKLIST_FLAG_NORMAL) == 0)
  ------------------
  |  |    7|  47.6k|#define CHANNEL_NICKLIST_FLAG_NORMAL    0x08
  ------------------
  |  Branch (503:8): [True: 0, False: 47.6k]
  ------------------
  504|      0|				continue;
  505|  47.6k|		}
  506|       |
  507|  55.9k|		sorted = g_slist_prepend(sorted, nick);
  508|  55.9k|	}
  509|  5.26k|	g_slist_free(nicklist);
  510|       |
  511|       |	/* sort the nicklist */
  512|  5.26k|	sorted = g_slist_sort_with_data(sorted, (GCompareDataFunc) nicklist_compare, (void *)nick_flags);
  513|       |
  514|       |	/* display the nicks */
  515|  5.26k|        if ((flags & CHANNEL_NICKLIST_FLAG_COUNT) == 0) {
  ------------------
  |  |    9|  5.26k|#define CHANNEL_NICKLIST_FLAG_COUNT     0x10
  ------------------
  |  Branch (515:13): [True: 4.63k, False: 634]
  ------------------
  516|  4.63k|		printformat(channel->server, channel->visible_name,
  ------------------
  |  |   37|  4.63k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  4.63k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  517|  4.63k|			    MSGLEVEL_CLIENTCRAP, TXT_NAMES,
  518|  4.63k|			    channel->visible_name,
  519|  4.63k|			    nicks, ops, halfops, voices, normal);
  520|  4.63k|		display_sorted_nicks(channel, sorted);
  521|  4.63k|	}
  522|  5.26k|	g_slist_free(sorted);
  523|       |
  524|  5.26k|	printformat(channel->server, channel->visible_name,
  ------------------
  |  |   37|  5.26k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  5.26k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  525|  5.26k|		    MSGLEVEL_CLIENTNOTICE, TXT_ENDOFNAMES,
  526|  5.26k|		    channel->visible_name, nicks, ops, halfops, voices, normal);
  527|  5.26k|}
fe_channels_init:
  630|      2|{
  631|      2|	settings_add_bool("lookandfeel", "autoclose_windows", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  632|      2|	settings_add_bool("lookandfeel", "show_names_on_join", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  633|      2|	settings_add_int("lookandfeel", "show_names_on_join_limit", 18);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  634|      2|	settings_add_int("lookandfeel", "names_max_columns", 6);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  635|      2|	settings_add_int("lookandfeel", "names_max_width", 0);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  636|       |
  637|      2|	signal_add("channel created", (SIGNAL_FUNC) signal_channel_created);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  638|      2|	signal_add("channel destroyed", (SIGNAL_FUNC) signal_channel_destroyed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  639|      2|	signal_add_last("window item changed", (SIGNAL_FUNC) signal_window_item_changed);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  640|      2|	signal_add_last("server disconnected", (SIGNAL_FUNC) sig_disconnected);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  641|      2|	signal_add_last("channel joined", (SIGNAL_FUNC) sig_channel_joined);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  642|       |
  643|      2|	command_bind("join", NULL, (SIGNAL_FUNC) cmd_join);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  644|      2|	command_bind("channel", NULL, (SIGNAL_FUNC) cmd_channel);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  645|      2|	command_bind("channel add", NULL, (SIGNAL_FUNC) cmd_channel_add);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  646|      2|	command_bind("channel modify", NULL, (SIGNAL_FUNC) cmd_channel_modify);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  647|      2|	command_bind("channel remove", NULL, (SIGNAL_FUNC) cmd_channel_remove);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  648|      2|	command_bind("channel list", NULL, (SIGNAL_FUNC) cmd_channel_list);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  649|      2|	command_bind_first("names", NULL, (SIGNAL_FUNC) cmd_names);
  ------------------
  |  |   74|      2|#define command_bind_first(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind_first(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  650|      2|	command_bind("cycle", NULL, (SIGNAL_FUNC) cmd_cycle);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  651|       |
  652|      2|	command_set_options("channel add", "auto noauto -bots -botcmd");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  653|      2|	command_set_options("channel modify", "auto noauto -bots -botcmd");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  654|      2|	command_set_options("names", "count ops halfops voices normal");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  655|      2|	command_set_options("join", "invite window");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  656|      2|}
fe-channels.c:display_sorted_nicks:
  355|  4.63k|{
  356|  4.63k|	WINDOW_REC *window;
  357|  4.63k|	TEXT_DEST_REC dest;
  358|  4.63k|	GString *str;
  359|  4.63k|	GSList *tmp;
  360|  4.63k|	char *format, *stripped, *prefix_format;
  361|  4.63k|	char *aligned_nick, nickmode[2] = { 0, 0 };
  362|  4.63k|	int *columns, cols, rows, last_col_rows, col, row, max_width;
  363|  4.63k|	int item_extra, formatnum;
  364|       |
  365|  4.63k|	window = window_find_closest(channel->server, channel->visible_name,
  366|  4.63k|	                             MSGLEVEL_CLIENTCRAP);
  367|  4.63k|	max_width = window->width;
  368|       |
  369|       |	/* get the length of item extra stuff ("[ ] ") */
  370|  4.63k|	format = format_get_text(MODULE_NAME, NULL,
  ------------------
  |  |    3|  4.63k|#define MODULE_NAME "fe-common/core"
  ------------------
  371|  4.63k|	                         channel->server, channel->visible_name,
  372|  4.63k|	                         TXT_NAMES_NICK, " ", "");
  373|  4.63k|	stripped = strip_codes(format);
  374|  4.63k|	item_extra = strlen(stripped);
  375|  4.63k|	g_free(stripped);
  376|  4.63k|	g_free(format);
  377|       |
  378|  4.63k|	if (settings_get_int("names_max_width") > 0 &&
  ------------------
  |  Branch (378:6): [True: 0, False: 4.63k]
  ------------------
  379|      0|	    settings_get_int("names_max_width") < max_width)
  ------------------
  |  Branch (379:6): [True: 0, False: 0]
  ------------------
  380|      0|		max_width = settings_get_int("names_max_width");
  381|       |
  382|       |	/* remove width of the timestamp from max_width */
  383|  4.63k|	format_create_dest(&dest, channel->server, channel->visible_name,
  384|  4.63k|	                   MSGLEVEL_CLIENTCRAP, NULL);
  385|  4.63k|	format = format_get_line_start(current_theme, &dest, time(NULL));
  386|  4.63k|	if (format != NULL) {
  ------------------
  |  Branch (386:6): [True: 4.63k, False: 0]
  ------------------
  387|  4.63k|		stripped = strip_codes(format);
  388|  4.63k|		max_width -= strlen(stripped);
  389|  4.63k|		g_free(stripped);
  390|  4.63k|		g_free(format);
  391|  4.63k|	}
  392|       |
  393|       |	/* remove width of the prefix from max_width */
  394|  4.63k|	prefix_format = format_get_text(MODULE_NAME, NULL,
  ------------------
  |  |    3|  4.63k|#define MODULE_NAME "fe-common/core"
  ------------------
  395|  4.63k|	                                channel->server, channel->visible_name,
  396|  4.63k|	                                TXT_NAMES_PREFIX,
  397|  4.63k|	                                channel->visible_name);
  398|  4.63k|	if (prefix_format != NULL) {
  ------------------
  |  Branch (398:6): [True: 4.63k, False: 0]
  ------------------
  399|  4.63k|		stripped = strip_codes(prefix_format);
  400|  4.63k|		max_width -= strlen(stripped);
  401|  4.63k|		g_free(stripped);
  402|  4.63k|	}
  403|       |
  404|  4.63k|	if (max_width <= 0) {
  ------------------
  |  Branch (404:6): [True: 4.63k, False: 0]
  ------------------
  405|       |		/* we should always have at least some space .. if we
  406|       |		   really don't, it won't show properly anyway. */
  407|  4.63k|		max_width = 10;
  408|  4.63k|	}
  409|       |
  410|       |	/* calculate columns */
  411|  4.63k|	cols = get_max_column_count(nicklist, get_nick_length, max_width,
  412|  4.63k|	                            settings_get_int("names_max_columns"),
  413|  4.63k|	                            item_extra, 3, &columns, &rows);
  414|  4.63k|	nicklist = columns_sort_list(nicklist, rows);
  415|       |
  416|       |	/* rows in last column */
  417|  4.63k|	last_col_rows = rows-(cols*rows-g_slist_length(nicklist));
  418|  4.63k|	if (last_col_rows == 0)
  ------------------
  |  Branch (418:6): [True: 0, False: 4.63k]
  ------------------
  419|      0|		last_col_rows = rows;
  420|       |
  421|  4.63k|	str = g_string_new(prefix_format);
  422|       |
  423|  4.63k|	col = 0; row = 0;
  424|  19.4k|	for (tmp = nicklist; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (424:23): [True: 14.8k, False: 4.63k]
  ------------------
  425|  14.8k|		NICK_REC *rec = tmp->data;
  426|       |
  427|  14.8k|		if (rec->prefixes[0])
  ------------------
  |  Branch (427:7): [True: 2.84k, False: 11.9k]
  ------------------
  428|  2.84k|			nickmode[0] = rec->prefixes[0];
  429|  11.9k|		else
  430|  11.9k|			nickmode[0] = ' ';
  431|       |
  432|  14.8k|		aligned_nick = get_alignment(rec->nick,
  433|  14.8k|		                             columns[col]-item_extra,
  434|  14.8k|		                             ALIGN_PAD, ' ');
  ------------------
  |  |   14|  14.8k|#define ALIGN_PAD   0x04
  ------------------
  435|       |
  436|  14.8k|		formatnum = rec->op     ? TXT_NAMES_NICK_OP :
  ------------------
  |  Branch (436:15): [True: 4.50k, False: 10.3k]
  ------------------
  437|  14.8k|		            rec->halfop ? TXT_NAMES_NICK_HALFOP :
  ------------------
  |  Branch (437:15): [True: 1.08k, False: 9.24k]
  ------------------
  438|  10.3k|		            rec->voice  ? TXT_NAMES_NICK_VOICE :
  ------------------
  |  Branch (438:15): [True: 996, False: 8.25k]
  ------------------
  439|  9.24k|		                          TXT_NAMES_NICK;
  440|  14.8k|		format = format_get_text(MODULE_NAME, NULL,
  ------------------
  |  |    3|  14.8k|#define MODULE_NAME "fe-common/core"
  ------------------
  441|  14.8k|		                         channel->server,
  442|  14.8k|		                         channel->visible_name,
  443|  14.8k|		                         formatnum, nickmode, aligned_nick);
  444|  14.8k|		g_string_append(str, format);
  445|  14.8k|		g_free(aligned_nick);
  446|  14.8k|		g_free(format);
  447|       |
  448|  14.8k|		if (++col == cols) {
  ------------------
  |  Branch (448:7): [True: 14.8k, False: 0]
  ------------------
  449|  14.8k|			printtext(channel->server, channel->visible_name,
  450|  14.8k|			          MSGLEVEL_CLIENTCRAP, "%s", str->str);
  451|  14.8k|			g_string_truncate(str, 0);
  452|  14.8k|			if (prefix_format != NULL)
  ------------------
  |  Branch (452:8): [True: 14.8k, False: 0]
  ------------------
  453|  14.8k|				g_string_assign(str, prefix_format);
  454|  14.8k|			col = 0; row++;
  455|       |
  456|  14.8k|			if (row == last_col_rows)
  ------------------
  |  Branch (456:8): [True: 4.63k, False: 10.1k]
  ------------------
  457|  4.63k|				cols--;
  458|  14.8k|		}
  459|  14.8k|	}
  460|       |
  461|  4.63k|	if (prefix_format != NULL && str->len > strlen(prefix_format)) {
  ------------------
  |  Branch (461:6): [True: 4.63k, False: 0]
  |  Branch (461:31): [True: 0, False: 4.63k]
  ------------------
  462|      0|		printtext(channel->server, channel->visible_name,
  463|      0|		          MSGLEVEL_CLIENTCRAP, "%s", str->str);
  464|      0|	}
  465|       |
  466|  4.63k|	g_slist_free(nicklist);
  467|  4.63k|	g_string_free(str, TRUE);
  468|  4.63k|	g_free_not_null(columns);
  ------------------
  |  |   64|  4.63k|#define g_free_not_null(a) g_free(a)
  ------------------
  469|  4.63k|	g_free_not_null(prefix_format);
  ------------------
  |  |   64|  4.63k|#define g_free_not_null(a) g_free(a)
  ------------------
  470|  4.63k|}
fe-channels.c:get_nick_length:
  350|  14.8k|{
  351|  14.8k|        return string_width(((NICK_REC *) data)->nick, -1);
  352|  14.8k|}
fe-channels.c:signal_channel_created:
   45|   117k|{
   46|   117k|	if (window_item_window(channel) == NULL) {
  ------------------
  |  |   15|   117k|	((WINDOW_REC *) ((WI_ITEM_REC *) (item))->window)
  ------------------
  |  Branch (46:6): [True: 117k, False: 0]
  ------------------
   47|   117k|		window_item_create((WI_ITEM_REC *) channel,
   48|       |				   GPOINTER_TO_INT(automatic));
   49|   117k|	}
   50|   117k|}
fe-channels.c:signal_channel_destroyed:
   60|   117k|{
   61|   117k|	WINDOW_REC *window;
   62|       |
   63|   117k|	g_return_if_fail(channel != NULL);
  ------------------
  |  Branch (63:2): [True: 117k, False: 0]
  |  Branch (63:2): [True: 117k, False: 0]
  |  Branch (63:2): [Folded, False: 117k]
  ------------------
   64|       |
   65|   117k|	window = window_item_window((WI_ITEM_REC *) channel);
  ------------------
  |  |   15|   117k|	((WINDOW_REC *) ((WI_ITEM_REC *) (item))->window)
  ------------------
   66|   117k|	if (window == NULL)
  ------------------
  |  Branch (66:6): [True: 0, False: 117k]
  ------------------
   67|      0|		return;
   68|       |
   69|   117k|	window_item_destroy((WI_ITEM_REC *) channel);
   70|       |
   71|   117k|	if (channel->joined && !channel->left &&
  ------------------
  |  Branch (71:6): [True: 117k, False: 0]
  |  Branch (71:25): [True: 24.6k, False: 92.6k]
  ------------------
   72|  24.6k|	    !channel->server->disconnected) {
  ------------------
  |  Branch (72:6): [True: 160, False: 24.4k]
  ------------------
   73|       |		/* kicked out from channel */
   74|    160|		window_bind_add(window, channel->server->tag,
   75|    160|				channel->visible_name);
   76|   117k|	} else if (!channel->joined || channel->left)
  ------------------
  |  Branch (76:13): [True: 0, False: 117k]
  |  Branch (76:33): [True: 92.6k, False: 24.4k]
  ------------------
   77|  92.6k|		window_auto_destroy(window);
   78|   117k|}
fe-channels.c:signal_window_item_changed:
   96|   235k|{
   97|   235k|	g_return_if_fail(window != NULL);
  ------------------
  |  Branch (97:2): [True: 235k, False: 0]
  |  Branch (97:2): [True: 235k, False: 0]
  |  Branch (97:2): [Folded, False: 235k]
  ------------------
   98|   235k|	if (item == NULL) return;
  ------------------
  |  Branch (98:6): [True: 115k, False: 119k]
  ------------------
   99|       |
  100|   119k|	if (g_slist_length(window->items) > 1 && IS_CHANNEL(item)) {
  ------------------
  |  |   12|      0|	(CHANNEL(channel) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |    8|      0|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   67|      0|	((cast *) module_check_cast_module(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (67:2): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|				offsetof(cast, type_field), module, id))
  |  |  |  |  ------------------
  |  |  |  |    9|      0|			      "WINDOW ITEM TYPE", "CHANNEL")
  |  |  ------------------
  |  |  |  Branch (12:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (100:6): [True: 0, False: 119k]
  ------------------
  101|      0|		printformat(item->server, item->visible_name,
  ------------------
  |  |   37|      0|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|      0|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  102|      0|			    MSGLEVEL_CLIENTNOTICE,
  103|      0|			    TXT_TALKING_IN, item->visible_name);
  104|      0|                signal_stop();
  105|      0|	}
  106|   119k|}
fe-channels.c:sig_disconnected:
   81|  29.4k|{
   82|  29.4k|	WINDOW_REC *window;
   83|  29.4k|	GSList *tmp;
   84|       |
   85|  29.4k|	g_return_if_fail(IS_SERVER(server));
  ------------------
  |  Branch (85:2): [True: 29.4k, False: 0]
  |  Branch (85:2): [True: 29.4k, False: 0]
  |  Branch (85:2): [True: 29.4k, False: 0]
  |  Branch (85:2): [Folded, False: 29.4k]
  ------------------
   86|       |
   87|  53.8k|	for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (87:31): [True: 24.4k, False: 29.4k]
  ------------------
   88|  24.4k|		CHANNEL_REC *channel = tmp->data;
   89|       |
   90|  24.4k|		window = window_item_window((WI_ITEM_REC *) channel);
  ------------------
  |  |   15|  24.4k|	((WINDOW_REC *) ((WI_ITEM_REC *) (item))->window)
  ------------------
   91|  24.4k|		window_bind_add(window, server->tag, channel->name);
   92|  24.4k|	}
   93|  29.4k|}
fe-channels.c:sig_channel_joined:
  109|  5.26k|{
  110|  5.26k|	if (settings_get_bool("show_names_on_join") && !channel->session_rejoin) {
  ------------------
  |  Branch (110:6): [True: 5.26k, False: 0]
  |  Branch (110:49): [True: 5.26k, False: 0]
  ------------------
  111|  5.26k|		int limit = settings_get_int("show_names_on_join_limit");
  112|  5.26k|		int flags = CHANNEL_NICKLIST_FLAG_ALL;
  ------------------
  |  |    8|  5.26k|#define CHANNEL_NICKLIST_FLAG_ALL       0x0f
  ------------------
  113|  5.26k|		if (limit > 0 && g_hash_table_size(channel->nicks) > limit) {
  ------------------
  |  Branch (113:7): [True: 5.26k, False: 0]
  |  Branch (113:20): [True: 634, False: 4.63k]
  ------------------
  114|    634|			flags |= CHANNEL_NICKLIST_FLAG_COUNT;
  ------------------
  |  |    9|    634|#define CHANNEL_NICKLIST_FLAG_COUNT     0x10
  ------------------
  115|    634|		}
  116|  5.26k|		fe_channels_nicklist(channel, flags);
  117|  5.26k|	}
  118|  5.26k|}

fe_common_core_register_options:
  129|      2|{
  130|      2|	static GOptionEntry options[] = {
  131|      2|		{ "connect", 'c', 0, G_OPTION_ARG_STRING, &autocon_server, "Automatically connect to server/network", "SERVER" },
  132|      2|		{ "password", 'w', 0, G_OPTION_ARG_STRING, &autocon_password, "Autoconnect password", "PASSWORD" },
  133|      2|		{ "port", 'p', 0, G_OPTION_ARG_INT, &autocon_port, "Autoconnect port", "PORT" },
  134|      2|		{ "noconnect", '!', 0, G_OPTION_ARG_NONE, &no_autoconnect, "Disable autoconnecting", NULL },
  135|      2|		{ "nick", 'n', 0, G_OPTION_ARG_STRING, &cmdline_nick, "Specify nick to use", NULL },
  136|      2|		{ "hostname", 'h', 0, G_OPTION_ARG_STRING, &cmdline_hostname, "Specify host name to use", NULL },
  137|      2|		{ NULL }
  138|      2|	};
  139|       |
  140|      2|	autocon_server = NULL;
  141|      2|	autocon_password = NULL;
  142|      2|	autocon_port = 0;
  143|      2|	no_autoconnect = FALSE;
  144|      2|	cmdline_nick = NULL;
  145|       |	cmdline_hostname = NULL;
  146|      2|	args_register(options);
  147|      2|}
fe_common_core_init:
  150|      2|{
  151|      2|	const char *str;
  152|       |
  153|      2|	settings_add_bool("lookandfeel", "timestamps", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  154|      2|	settings_add_level("lookandfeel", "timestamp_level", "ALL");
  ------------------
  |  |  101|      2|	settings_add_level_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  155|      2|	settings_add_time("lookandfeel", "timestamp_timeout", "0");
  ------------------
  |  |   99|      2|	settings_add_time_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  156|       |
  157|      2|	settings_add_level("lookandfeel", "beep_msg_level", "");
  ------------------
  |  |  101|      2|	settings_add_level_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  158|      2|	settings_add_bool("lookandfeel", "beep_when_window_active", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  159|      2|	settings_add_bool("lookandfeel", "beep_when_away", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  160|       |
  161|      2|	settings_add_bool("lookandfeel", "hide_text_style", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  162|      2|	settings_add_bool("lookandfeel", "hide_colors", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  163|      2|	settings_add_bool("lookandfeel", "hide_server_tags", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  164|       |
  165|      2|	settings_add_bool("lookandfeel", "use_status_window", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  166|      2|	settings_add_bool("lookandfeel", "use_msgs_window", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  167|      2|	g_get_charset(&str);
  168|      2|	settings_add_str("lookandfeel", "term_charset", str);
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  169|      2|	settings_add_str("lookandfeel", "glib_log_domains", "all -glib-gio:debug");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  170|      2|	themes_init();
  171|      2|        theme_register(fecommon_core_formats);
  ------------------
  |  |   46|      2|#define theme_register(formats) theme_register_module(MODULE_NAME, formats)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  172|       |
  173|      2|	command_history_init();
  174|      2|	completion_init();
  175|      2|	keyboard_init();
  176|      2|	printtext_init();
  177|      2|	formats_init();
  178|      2|        fe_exec_init();
  179|      2|        fe_expandos_init();
  180|      2|	fe_help_init();
  181|      2|	fe_ignore_init();
  182|      2|	fe_log_init();
  183|      2|	fe_modules_init();
  184|      2|	fe_server_init();
  185|      2|	fe_settings_init();
  186|      2|	fe_tls_init();
  187|       |#ifdef HAVE_CAPSICUM
  188|       |	fe_capsicum_init();
  189|       |#endif
  190|      2|	windows_init();
  191|      2|	window_activity_init();
  192|      2|	window_commands_init();
  193|      2|	window_items_init();
  194|      2|	windows_layout_init();
  195|      2|	fe_core_commands_init();
  196|       |
  197|      2|        fe_channels_init();
  198|      2|        fe_queries_init();
  199|       |
  200|      2|	fe_messages_init();
  201|      2|	hilight_text_init();
  202|      2|	fe_ignore_messages_init();
  203|      2|	fe_recode_init();
  204|       |
  205|      2|	settings_check();
  ------------------
  |  |  125|      2|#define settings_check() settings_check_module(MODULE_NAME)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  206|       |
  207|      2|        signal_add_first("server connected", (SIGNAL_FUNC) sig_connected);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  208|      2|        signal_add_last("server destroyed", (SIGNAL_FUNC) sig_destroyed);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  209|      2|        signal_add_first("channel created", (SIGNAL_FUNC) sig_channel_created);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  210|      2|        signal_add_last("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  211|       |
  212|      2|	module_register("core", "fe");
  ------------------
  |  |   59|      2|        module_register_full(name, submodule, MODULE_NAME)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  213|      2|}
fe-common-core.c:sig_connected:
  104|  29.4k|{
  105|  29.4k|	MODULE_DATA_SET(server, g_new0(MODULE_SERVER_REC, 1));
  ------------------
  |  |   11|   117k|	g_hash_table_insert((rec)->module_data, MODULE_NAME, data)
  |  |  ------------------
  |  |  |  |    3|  29.4k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |  |  Branch (11:55): [True: 29.4k, False: 0]
  |  |  |  Branch (11:55): [True: 0, False: 29.4k]
  |  |  ------------------
  ------------------
  106|  29.4k|}
fe-common-core.c:sig_destroyed:
  109|  29.4k|{
  110|  29.4k|	void *data = MODULE_DATA(server);
  ------------------
  |  |   17|  29.4k|	g_hash_table_lookup((rec)->module_data, MODULE_NAME)
  |  |  ------------------
  |  |  |  |    3|  29.4k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  111|  29.4k|	g_free(data);
  112|  29.4k|	MODULE_DATA_UNSET(server);
  ------------------
  |  |   14|  29.4k|	g_hash_table_remove((rec)->module_data, MODULE_NAME)
  |  |  ------------------
  |  |  |  |    3|  29.4k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  113|  29.4k|}
fe-common-core.c:sig_channel_created:
  116|   117k|{
  117|   117k|	MODULE_DATA_SET(channel, g_new0(MODULE_CHANNEL_REC, 1));
  ------------------
  |  |   11|   469k|	g_hash_table_insert((rec)->module_data, MODULE_NAME, data)
  |  |  ------------------
  |  |  |  |    3|   117k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |  |  Branch (11:55): [True: 117k, False: 0]
  |  |  |  Branch (11:55): [True: 0, False: 117k]
  |  |  ------------------
  ------------------
  118|   117k|}
fe-common-core.c:sig_channel_destroyed:
  121|   117k|{
  122|   117k|	void *data = MODULE_DATA(channel);
  ------------------
  |  |   17|   117k|	g_hash_table_lookup((rec)->module_data, MODULE_NAME)
  |  |  ------------------
  |  |  |  |    3|   117k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  123|       |
  124|   117k|	g_free(data);
  125|   117k|	MODULE_DATA_UNSET(channel);
  ------------------
  |  |   14|   117k|	g_hash_table_remove((rec)->module_data, MODULE_NAME)
  |  |  ------------------
  |  |  |  |    3|   117k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  126|   117k|}

fe_core_commands_init:
  339|      2|{
  340|      2|	command_hide_output = 0;
  341|       |
  342|      2|	command_cmd = FALSE;
  343|      2|	time_command_now = 0;
  344|       |
  345|      2|	command_bind("echo", NULL, (SIGNAL_FUNC) cmd_echo);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  346|      2|	command_bind("version", NULL, (SIGNAL_FUNC) cmd_version);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  347|      2|	command_bind("cat", NULL, (SIGNAL_FUNC) cmd_cat);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  348|      2|	command_bind("beep", NULL, (SIGNAL_FUNC) cmd_beep);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  349|      2|	command_bind("uptime", NULL, (SIGNAL_FUNC) cmd_uptime);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  350|      2|	command_bind_first("nick", NULL, (SIGNAL_FUNC) cmd_nick);
  ------------------
  |  |   74|      2|#define command_bind_first(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind_first(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  351|       |
  352|      2|	signal_add("send command", (SIGNAL_FUNC) event_command);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  353|      2|	signal_add_last("send command", (SIGNAL_FUNC) event_command_last);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  354|      2|	signal_add_last("default command", (SIGNAL_FUNC) event_default_command);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  355|      2|	signal_add("error command", (SIGNAL_FUNC) event_cmderror);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  356|      2|	signal_add("list subcommands", (SIGNAL_FUNC) event_list_subcommands);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  357|       |
  358|      2|	command_set_options("echo", "+level +window");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  359|      2|	command_set_options("cat", "window");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  360|      2|}
fe-core-commands.c:cmd_cat:
  119|  1.79k|{
  120|  1.79k|	char *fname, *fposstr;
  121|  1.79k|	gboolean target;
  122|  1.79k|	GHashTable *optlist;
  123|  1.79k|	void *free_arg;
  124|  1.79k|	int fpos;
  125|  1.79k|	GIOChannel *handle;
  126|  1.79k|	GString *buf;
  127|  1.79k|	gsize tpos;
  128|       |#ifdef HAVE_CAPSICUM
  129|       |	int fd;
  130|       |#endif
  131|       |
  132|  1.79k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (132:2): [True: 1.79k, False: 0]
  |  Branch (132:2): [True: 1.79k, False: 0]
  |  Branch (132:2): [Folded, False: 1.79k]
  ------------------
  133|       |
  134|  1.79k|	if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_OPTIONS,
  ------------------
  |  |  149|  1.79k|#define PARAM_FLAG_OPTIONS 0x00004000
  ------------------
  |  Branch (134:6): [True: 0, False: 1.79k]
  ------------------
  135|  1.79k|				"cat", &optlist, &fname, &fposstr))
  136|      0|		return;
  137|       |
  138|  1.79k|	fname = convert_home(fname);
  139|  1.79k|	fpos = atoi(fposstr);
  140|       |
  141|       |#ifdef HAVE_CAPSICUM
  142|       |	fd = capsicum_open_wrapper(fname, O_RDONLY, 0);
  143|       |	if (fd > 0)
  144|       |		handle = g_io_channel_unix_new(fd);
  145|       |	else
  146|       |		handle = NULL;
  147|       |#else
  148|  1.79k|	handle = g_io_channel_new_file(fname, "r", NULL);
  149|  1.79k|#endif
  150|  1.79k|	g_free(fname);
  151|       |
  152|  1.79k|	if (handle == NULL) {
  ------------------
  |  Branch (152:6): [True: 0, False: 1.79k]
  ------------------
  153|       |		/* file not found */
  154|      0|		printtext(NULL, NULL, MSGLEVEL_CLIENTERROR,
  155|      0|			  "%s", g_strerror(errno));
  156|      0|		return;
  157|      0|	}
  158|       |
  159|  1.79k|	target = g_hash_table_lookup(optlist, "window") != NULL;
  160|       |
  161|  1.79k|	g_io_channel_set_encoding(handle, NULL, NULL);
  162|  1.79k|	g_io_channel_seek_position(handle, fpos, G_SEEK_SET, NULL);
  163|  1.79k|	buf = g_string_sized_new(512);
  164|  74.1k|	while (g_io_channel_read_line_string(handle, buf, &tpos, NULL) == G_IO_STATUS_NORMAL) {
  ------------------
  |  Branch (164:9): [True: 72.3k, False: 1.79k]
  ------------------
  165|  72.3k|		buf->str[tpos] = '\0';
  166|  72.3k|		if (target)
  ------------------
  |  Branch (166:7): [True: 0, False: 72.3k]
  ------------------
  167|      0|			printtext_window(active_win, MSGLEVEL_CLIENTCRAP | MSGLEVEL_NEVER, "%s",
  168|      0|			                 buf->str);
  169|  72.3k|		else
  170|  72.3k|			printtext(NULL, NULL, MSGLEVEL_CLIENTCRAP | MSGLEVEL_NEVER, "%s", buf->str);
  171|  72.3k|	}
  172|  1.79k|	g_string_free(buf, TRUE);
  173|  1.79k|	cmd_params_free(free_arg);
  174|       |
  175|  1.79k|	g_io_channel_unref(handle);
  176|  1.79k|}

fe_exec_init:
  654|      2|{
  655|      2|	command_bind("exec", NULL, (SIGNAL_FUNC) cmd_exec);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  656|      2|	command_set_options("exec", "!- interactive nosh +name out +msg +notice +in window close +level quiet");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  657|       |
  658|      2|        signal_exec_input = signal_get_uniq_id("exec input");
  ------------------
  |  |   68|      2|        module_get_uniq_id_str("signals", signal)
  ------------------
  659|      2|        signal_add("pidwait", (SIGNAL_FUNC) sig_pidwait);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  660|      2|        signal_add("exec input", (SIGNAL_FUNC) sig_exec_input);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  661|      2|        signal_add("window destroyed", (SIGNAL_FUNC) sig_window_destroyed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  662|       |	signal_add_first("send text", (SIGNAL_FUNC) event_text);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  663|      2|}
fe-exec.c:sig_window_destroyed:
  630|  90.9k|{
  631|  90.9k|	GSList *tmp;
  632|       |
  633|       |	/* window is being closed, if there's any /exec targets for it,
  634|       |	   change them to active window. */
  635|  90.9k|	for (tmp = processes; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (635:24): [True: 0, False: 90.9k]
  ------------------
  636|      0|		PROCESS_REC *rec = tmp->data;
  637|       |
  638|      0|		if (rec->target_win == window)
  ------------------
  |  Branch (638:7): [True: 0, False: 0]
  ------------------
  639|      0|			rec->target_win = active_win;
  640|      0|	}
  641|  90.9k|}

fe_expandos_init:
   45|      2|{
   46|      2|	expando_create("winref", expando_winref,
   47|      2|		       "window changed", EXPANDO_ARG_NONE,
   48|      2|		       "window refnum changed", EXPANDO_ARG_WINDOW, NULL);
   49|      2|	expando_create("winname", expando_winname,
   50|      2|		       "window changed", EXPANDO_ARG_NONE,
   51|       |		       "window name changed", EXPANDO_ARG_WINDOW, NULL);
   52|      2|}

fe_help_init:
  265|      2|{
  266|      2|        settings_add_str("misc", "help_path", HELPDIR);
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  267|       |	command_bind("help", NULL, (SIGNAL_FUNC) cmd_help);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  268|      2|}

fe_ignore_messages_init:
  126|      2|{
  127|      2|	signal_add_first("message public", (SIGNAL_FUNC) sig_message_public);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  128|      2|	signal_add_first("message private", (SIGNAL_FUNC) sig_message_private);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  129|      2|	signal_add_first("message join", (SIGNAL_FUNC) sig_message_join);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  130|      2|	signal_add_first("message host_changed", (SIGNAL_FUNC) sig_message_host_changed);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  131|      2|	signal_add_first("message part", (SIGNAL_FUNC) sig_message_part);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  132|      2|	signal_add_first("message quit", (SIGNAL_FUNC) sig_message_quit);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  133|      2|	signal_add_first("message kick", (SIGNAL_FUNC) sig_message_kick);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  134|      2|	signal_add_first("message nick", (SIGNAL_FUNC) sig_message_nick);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  135|      2|	signal_add_first("message own_nick", (SIGNAL_FUNC) sig_message_own_nick);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  136|      2|	signal_add_first("message invite", (SIGNAL_FUNC) sig_message_invite);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  137|      2|	signal_add_first("message invite_other", (SIGNAL_FUNC) sig_message_invite_other);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  138|       |	signal_add_first("message topic", (SIGNAL_FUNC) sig_message_topic);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  139|      2|}
fe-ignore-messages.c:sig_message_public:
   30|  4.87k|{
   31|  4.87k|	if (ignore_check(server, nick, address, target, msg, MSGLEVEL_PUBLIC))
  ------------------
  |  Branch (31:6): [True: 0, False: 4.87k]
  ------------------
   32|      0|		signal_stop();
   33|  4.87k|}
fe-ignore-messages.c:sig_message_private:
   37|  9.80k|{
   38|  9.80k|	if (ignore_check(server, nick, address, NULL, msg, MSGLEVEL_MSGS))
  ------------------
  |  Branch (38:6): [True: 0, False: 9.80k]
  ------------------
   39|      0|		signal_stop();
   40|  9.80k|}
fe-ignore-messages.c:sig_message_join:
   44|   153k|{
   45|   153k|	if (ignore_check(server, nick, address, channel, NULL, MSGLEVEL_JOINS))
  ------------------
  |  Branch (45:6): [True: 0, False: 153k]
  ------------------
   46|      0|		signal_stop();
   47|   153k|}
fe-ignore-messages.c:sig_message_host_changed:
   51|  4.12k|{
   52|  4.12k|	if (ignore_check(server, nick, address, NULL, NULL, MSGLEVEL_JOINS))
  ------------------
  |  Branch (52:6): [True: 0, False: 4.12k]
  ------------------
   53|      0|		signal_stop();
   54|  4.12k|}
fe-ignore-messages.c:sig_message_part:
   59|  4.13k|{
   60|  4.13k|	if (ignore_check(server, nick, address, channel, NULL, MSGLEVEL_PARTS))
  ------------------
  |  Branch (60:6): [True: 0, False: 4.13k]
  ------------------
   61|      0|		signal_stop();
   62|  4.13k|}
fe-ignore-messages.c:sig_message_quit:
   66|  2.99k|{
   67|  2.99k|	if (ignore_check(server, nick, address, NULL, reason, MSGLEVEL_QUITS))
  ------------------
  |  Branch (67:6): [True: 0, False: 2.99k]
  ------------------
   68|      0|		signal_stop();
   69|  2.99k|}
fe-ignore-messages.c:sig_message_kick:
   74|    543|{
   75|       |        /* never ignore if you were kicked */
   76|    543|	if (g_ascii_strcasecmp(nick, server->nick) != 0 &&
  ------------------
  |  Branch (76:6): [True: 350, False: 193]
  ------------------
   77|    350|	    ignore_check(server, kicker, address,
  ------------------
  |  Branch (77:6): [True: 0, False: 350]
  ------------------
   78|    350|			 channel, reason, MSGLEVEL_KICKS))
   79|      0|		signal_stop();
   80|    543|}
fe-ignore-messages.c:sig_message_nick:
   84|  10.0k|{
   85|  10.0k|	if (ignore_check(server, oldnick, address,
  ------------------
  |  Branch (85:6): [True: 0, False: 10.0k]
  ------------------
   86|  10.0k|			 NULL, NULL, MSGLEVEL_NICKS) ||
   87|  10.0k|	    ignore_check(server, newnick, address,
  ------------------
  |  Branch (87:6): [True: 0, False: 10.0k]
  ------------------
   88|  10.0k|			 NULL, NULL, MSGLEVEL_NICKS))
   89|      0|		signal_stop();
   90|  10.0k|}
fe-ignore-messages.c:sig_message_own_nick:
   94|  8.13k|{
   95|  8.13k|	if (ignore_check(server, oldnick, address, NULL, NULL, MSGLEVEL_NICKS))
  ------------------
  |  Branch (95:6): [True: 0, False: 8.13k]
  ------------------
   96|      0|		signal_stop();
   97|  8.13k|}
fe-ignore-messages.c:sig_message_invite:
  101|  5.30k|{
  102|  5.30k|	if (*channel == '\0' ||
  ------------------
  |  Branch (102:6): [True: 2.25k, False: 3.05k]
  ------------------
  103|  3.05k|	    ignore_check(server, nick, address,
  ------------------
  |  Branch (103:6): [True: 0, False: 3.05k]
  ------------------
  104|  3.05k|			 channel, NULL, MSGLEVEL_INVITES))
  105|  2.25k|		signal_stop();
  106|  5.30k|}
fe-ignore-messages.c:sig_message_invite_other:
  110|  2.54k|{
  111|  2.54k|	if (ignore_check(server, nick, address,
  ------------------
  |  Branch (111:6): [True: 0, False: 2.54k]
  ------------------
  112|  2.54k|			 channel, invited, MSGLEVEL_INVITES))
  113|      0|		signal_stop();
  114|  2.54k|}

fe_ignore_init:
  300|      2|{
  301|      2|	command_bind("ignore", NULL, (SIGNAL_FUNC) cmd_ignore);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  302|      2|	command_bind("unignore", NULL, (SIGNAL_FUNC) cmd_unignore);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  303|       |
  304|      2|	signal_add("ignore destroyed", (SIGNAL_FUNC) sig_ignore_destroyed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  305|      2|	signal_add("ignore created", (SIGNAL_FUNC) sig_ignore_created);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  306|      2|	signal_add("ignore changed", (SIGNAL_FUNC) sig_ignore_created);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  307|       |
  308|      2|	command_set_options("ignore", "regexp full except replies -network -ircnet -time -pattern -channels");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  309|      2|}

fe_log_init:
  745|      2|{
  746|      2|	autoremove_tag = g_timeout_add(60000, (GSourceFunc) sig_autoremove, NULL);
  747|      2|	skip_next_printtext = FALSE;
  748|      2|	utc = g_time_zone_new_utc();
  749|       |
  750|      2|	settings_add_bool("log", "awaylog_colors", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  751|      2|	settings_add_bool("log", "autolog", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  752|      2|	settings_add_bool("log", "autolog_colors", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  753|      2|	settings_add_bool("log", "autolog_only_saved_channels", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  754|      2|	settings_add_choice("log", "log_server_time", 2, "off;on;auto");
  ------------------
  |  |  105|      2|	settings_add_choice_module(MODULE_NAME, section, key, def, choices)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  755|      2|	settings_add_str("log", "autolog_path", "~/irclogs/$tag/$0.log");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  756|      2|	settings_add_level("log", "autolog_level", "all -crap -clientcrap -ctcps");
  ------------------
  |  |  101|      2|	settings_add_level_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  757|      2|	settings_add_str("log", "log_theme", "");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  758|      2|	settings_add_str("log", "autolog_ignore_targets", "");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  759|       |
  760|      2|	autolog_level = 0;
  761|      2|	log_theme_name = NULL;
  762|      2|	read_settings();
  763|       |
  764|      2|	command_bind("log", NULL, (SIGNAL_FUNC) cmd_log);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  765|      2|	command_bind("log open", NULL, (SIGNAL_FUNC) cmd_log_open);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  766|      2|	command_bind("log close", NULL, (SIGNAL_FUNC) cmd_log_close);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  767|      2|	command_bind("log start", NULL, (SIGNAL_FUNC) cmd_log_start);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  768|      2|	command_bind("log stop", NULL, (SIGNAL_FUNC) cmd_log_stop);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  769|      2|	command_bind("window log", NULL, (SIGNAL_FUNC) cmd_window_log);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  770|      2|	command_bind("window logfile", NULL, (SIGNAL_FUNC) cmd_window_logfile);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  771|      2|	signal_add_first("print text", (SIGNAL_FUNC) sig_printtext);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  772|      2|	signal_add("window item remove", (SIGNAL_FUNC) sig_window_item_remove);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  773|      2|	signal_add("window refnum changed", (SIGNAL_FUNC) sig_window_refnum_changed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  774|      2|	signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  775|      2|	signal_add("log locked", (SIGNAL_FUNC) sig_log_locked);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  776|      2|	signal_add("log create failed", (SIGNAL_FUNC) sig_log_create_failed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  777|      2|	signal_add("log new", (SIGNAL_FUNC) sig_log_new);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  778|      2|	signal_add("log config read", (SIGNAL_FUNC) sig_log_config_read);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  779|      2|	signal_add("log config save", (SIGNAL_FUNC) sig_log_config_save);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  780|      2|	signal_add("awaylog show", (SIGNAL_FUNC) sig_awaylog_show);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  781|      2|	signal_add("theme destroyed", (SIGNAL_FUNC) sig_theme_destroyed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  782|      2|	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  783|       |
  784|      2|	command_set_options("log open", "noopen autoopen -targets window colors");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  785|      2|}
fe-log.c:read_settings:
  702|      2|{
  703|      2|	int old_autolog = autolog_level;
  704|       |
  705|      2|	g_free_not_null(autolog_path);
  ------------------
  |  |   64|      2|#define g_free_not_null(a) g_free(a)
  ------------------
  706|      2|	autolog_path = g_strdup(settings_get_str("autolog_path"));
  707|       |
  708|      2|	autolog_level = !settings_get_bool("autolog") ? 0 :
  ------------------
  |  Branch (708:18): [True: 2, False: 0]
  ------------------
  709|      2|		settings_get_level("autolog_level");
  710|       |
  711|      2|	if (old_autolog && !autolog_level)
  ------------------
  |  Branch (711:6): [True: 0, False: 2]
  |  Branch (711:21): [True: 0, False: 0]
  ------------------
  712|      0|		autologs_close_all();
  713|       |
  714|       |	/* write to log files with different theme? */
  715|      2|	if (log_theme_name != NULL)
  ------------------
  |  Branch (715:6): [True: 0, False: 2]
  ------------------
  716|      0|		signal_remove("print format", (SIGNAL_FUNC) sig_print_format);
  ------------------
  |  |   37|      0|        signal_remove_full((signal), (SIGNAL_FUNC) (func), NULL)
  ------------------
  717|       |
  718|      2|	g_free_not_null(log_theme_name);
  ------------------
  |  |   64|      2|#define g_free_not_null(a) g_free(a)
  ------------------
  719|      2|	log_theme_name = g_strdup(settings_get_str("log_theme"));
  720|       |
  721|      2|	if (*log_theme_name == '\0') {
  ------------------
  |  Branch (721:6): [True: 2, False: 0]
  ------------------
  722|      2|		g_free(log_theme_name);
  723|      2|		log_theme_name = NULL;
  724|      2|	}
  725|      0|	else
  726|      0|		signal_add("print format", (SIGNAL_FUNC) sig_print_format);
  ------------------
  |  |   21|      0|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      0|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      0|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  727|       |
  728|      2|	log_theme = log_theme_name == NULL ? NULL :
  ------------------
  |  Branch (728:14): [True: 2, False: 0]
  ------------------
  729|      2|		theme_load(log_theme_name);
  730|       |
  731|      2|	if (autolog_ignore_targets != NULL)
  ------------------
  |  Branch (731:6): [True: 0, False: 2]
  ------------------
  732|      0|		g_strfreev(autolog_ignore_targets);
  733|       |
  734|      2|	autolog_ignore_targets = g_strsplit(settings_get_str("autolog_ignore_targets"), " ", -1);
  735|       |
  736|      2|	log_server_time = settings_get_choice("log_server_time");
  737|      2|	if (log_server_time == 2) {
  ------------------
  |  Branch (737:6): [True: 2, False: 0]
  ------------------
  738|      2|		SETTINGS_REC *rec = settings_get_record("show_server_time");
  739|      2|		if (rec != NULL)
  ------------------
  |  Branch (739:7): [True: 0, False: 2]
  ------------------
  740|      0|			log_server_time = settings_get_bool("show_server_time");
  741|      2|	}
  742|      2|}
fe-log.c:logs_find_item:
  254|  5.00M|{
  255|  5.00M|	LOG_ITEM_REC *logitem;
  256|  5.00M|	GSList *tmp;
  257|       |
  258|  9.50M|	for (tmp = logs; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (258:19): [True: 4.50M, False: 5.00M]
  ------------------
  259|  4.50M|		LOG_REC *log = tmp->data;
  260|       |
  261|  4.50M|		if (type == LOG_ITEM_TARGET && log->temp == 0) continue;
  ------------------
  |  Branch (261:7): [True: 76.9k, False: 4.42M]
  |  Branch (261:34): [True: 0, False: 76.9k]
  ------------------
  262|  4.50M|		logitem = log_item_find(log, type, item, servertag);
  263|  4.50M|		if (logitem != NULL) {
  ------------------
  |  Branch (263:7): [True: 0, False: 4.50M]
  ------------------
  264|      0|			if (ret_item != NULL) *ret_item = logitem;
  ------------------
  |  Branch (264:8): [True: 0, False: 0]
  ------------------
  265|      0|			return log;
  266|      0|		}
  267|  4.50M|	}
  268|       |
  269|  5.00M|	return NULL;
  270|  5.00M|}
fe-log.c:sig_printtext:
  562|  1.13M|{
  563|  1.13M|	if (skip_next_printtext) {
  ------------------
  |  Branch (563:6): [True: 0, False: 1.13M]
  ------------------
  564|      0|		skip_next_printtext = FALSE;
  565|      0|		return;
  566|      0|	}
  567|       |
  568|  1.13M|	log_line(dest, text);
  569|  1.13M|}
fe-log.c:log_line:
  530|  1.13M|{
  531|  1.13M|	char **lines, **tmp;
  532|  1.13M|	time_t t = (time_t) -1;
  533|       |
  534|  1.13M|	if (dest->level == MSGLEVEL_NEVER)
  ------------------
  |  Branch (534:6): [True: 0, False: 1.13M]
  ------------------
  535|      0|		return;
  536|       |
  537|       |	/* let autolog open the log records */
  538|  1.13M|	autolog_open_check(dest);
  539|       |
  540|  1.13M|	if (logs == NULL)
  ------------------
  |  Branch (540:6): [True: 478k, False: 652k]
  ------------------
  541|   478k|		return;
  542|       |
  543|       |	/* text may contain one or more lines, log wants to eat them one
  544|       |	   line at a time */
  545|   652k|	lines = g_strsplit(text, "\n", -1);
  546|   652k|	if (log_server_time && dest->meta != NULL) {
  ------------------
  |  Branch (546:6): [True: 652k, False: 0]
  |  Branch (546:25): [True: 652k, False: 0]
  ------------------
  547|   652k|		char *val;
  548|   652k|		if ((val = g_hash_table_lookup(dest->meta, "time")) != NULL) {
  ------------------
  |  Branch (548:7): [True: 1.75k, False: 651k]
  ------------------
  549|  1.75k|			GDateTime *time;
  550|  1.75k|			if ((time = g_date_time_new_from_iso8601(val, utc)) != NULL) {
  ------------------
  |  Branch (550:8): [True: 0, False: 1.75k]
  ------------------
  551|      0|				t = g_date_time_to_unix(time);
  552|      0|				g_date_time_unref(time);
  553|      0|			}
  554|  1.75k|		}
  555|   652k|	}
  556|  4.07M|	for (tmp = lines; *tmp != NULL; tmp++)
  ------------------
  |  Branch (556:20): [True: 3.42M, False: 652k]
  ------------------
  557|  3.42M|		log_single_line(dest->window, dest->server_tag, dest->target, dest->level, t, *tmp);
  558|   652k|	g_strfreev(lines);
  559|   652k|}
fe-log.c:autolog_open_check:
  483|  1.13M|{
  484|  1.13M|	const char *deftarget;
  485|  1.13M|	SERVER_REC *server = dest->server;
  486|  1.13M|	const char *server_tag = dest->server_tag;
  487|  1.13M|	const char *target = dest->target;
  488|  1.13M|	int level = dest->level;
  489|       |
  490|       |	/* FIXME: kind of a kludge, but we don't want to reopen logs when
  491|       |	   we're parting the channel with /WINDOW CLOSE.. Maybe a small
  492|       |	   timeout would be nice instead of immediately closing the log file
  493|       |	   after "window item destroyed" */
  494|  1.13M|	if (level == MSGLEVEL_PARTS || (autolog_level & level) == 0 || target == NULL ||
  ------------------
  |  Branch (494:6): [True: 4.13k, False: 1.12M]
  |  Branch (494:33): [True: 1.12M, False: 0]
  |  Branch (494:65): [True: 0, False: 0]
  ------------------
  495|      0|	    *target == '\0')
  ------------------
  |  Branch (495:6): [True: 0, False: 0]
  ------------------
  496|  1.13M|		return;
  497|       |
  498|      0|	deftarget = server ? server->nick : "unknown";
  ------------------
  |  Branch (498:14): [True: 0, False: 0]
  ------------------
  499|       |
  500|       |	/* log only channels that have been saved to the config */
  501|      0|	if (settings_get_bool("autolog_only_saved_channels") && IS_CHANNEL(window_item_find(server, target))
  ------------------
  |  |   12|      0|	(CHANNEL(channel) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |    8|      0|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   67|      0|	((cast *) module_check_cast_module(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (67:2): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|				offsetof(cast, type_field), module, id))
  |  |  |  |  ------------------
  |  |  |  |    9|      0|			      "WINDOW ITEM TYPE", "CHANNEL")
  |  |  ------------------
  |  |  |  Branch (12:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (501:6): [True: 0, False: 0]
  ------------------
  502|      0|		&& channel_setup_find(target, server_tag) == NULL)
  ------------------
  |  Branch (502:6): [True: 0, False: 0]
  ------------------
  503|      0|		return;
  504|       |
  505|      0|	if (autolog_ignore_targets != NULL && strarray_find_dest(autolog_ignore_targets, dest))
  ------------------
  |  Branch (505:6): [True: 0, False: 0]
  |  Branch (505:40): [True: 0, False: 0]
  ------------------
  506|      0|		return;
  507|       |
  508|      0|	if (target != NULL)
  ------------------
  |  Branch (508:6): [True: 0, False: 0]
  ------------------
  509|      0|		autolog_open(server, server_tag, g_strcmp0(target, "*") ? target : deftarget);
  ------------------
  |  Branch (509:36): [True: 0, False: 0]
  ------------------
  510|      0|}
fe-log.c:log_single_line:
  514|  3.42M|{
  515|  3.42M|	char windownum[MAX_INT_STRLEN];
  516|  3.42M|	LOG_REC *log;
  517|       |
  518|  3.42M|	if (window != NULL) {
  ------------------
  |  Branch (518:6): [True: 3.42M, False: 0]
  ------------------
  519|       |		/* save to log created with /WINDOW LOG */
  520|  3.42M|		ltoa(windownum, window->refnum);
  ------------------
  |  |    8|  3.42M|	g_snprintf(str, sizeof(str), "%d", num)
  ------------------
  521|  3.42M|		log = logs_find_item(LOG_ITEM_WINDOW_REFNUM, windownum, NULL, NULL);
  522|  3.42M|		if (log != NULL)
  ------------------
  |  Branch (522:7): [True: 0, False: 3.42M]
  ------------------
  523|      0|			log_write_rec(log, text, level, t);
  524|  3.42M|	}
  525|       |
  526|       |	log_file_write(server_tag, target, level, t, text, FALSE);
  527|  3.42M|}
fe-log.c:sig_window_item_remove:
  635|   117k|{
  636|   117k|	LOG_REC *log;
  637|       |
  638|   117k|	log = logs_find_item(LOG_ITEM_TARGET, item->visible_name,
  639|   117k|	                     item->server == NULL ? NULL : item->server->tag, NULL);
  ------------------
  |  Branch (639:23): [True: 0, False: 117k]
  ------------------
  640|   117k|	if (log != NULL && log->temp)
  ------------------
  |  Branch (640:6): [True: 0, False: 117k]
  |  Branch (640:21): [True: 0, False: 0]
  ------------------
  641|      0|		log_close(log);
  642|   117k|}
fe-log.c:sig_window_refnum_changed:
  362|  1.45M|{
  363|  1.45M|	char winnum[MAX_INT_STRLEN];
  364|  1.45M|	LOG_REC *log;
  365|  1.45M|	LOG_ITEM_REC *item;
  366|       |
  367|  1.45M|	ltoa(winnum, GPOINTER_TO_INT(old_refnum));
  ------------------
  |  |    8|  1.45M|	g_snprintf(str, sizeof(str), "%d", num)
  ------------------
  368|  1.45M|	log = logs_find_item(LOG_ITEM_WINDOW_REFNUM, winnum, NULL, &item);
  369|       |
  370|  1.45M|	if (log != NULL) {
  ------------------
  |  Branch (370:6): [True: 0, False: 1.45M]
  ------------------
  371|      0|		ltoa(winnum, window->refnum);
  ------------------
  |  |    8|      0|	g_snprintf(str, sizeof(str), "%d", num)
  ------------------
  372|       |
  373|      0|		g_free(item->name);
  374|      0|		item->name = g_strdup(winnum);
  375|      0|	}
  376|  1.45M|}
fe-log.c:sig_server_disconnected:
  379|  29.4k|{
  380|  29.4k|	LOG_ITEM_REC *logitem;
  381|  29.4k|	GSList *tmp, *next;
  382|       |
  383|  47.9k|	for (tmp = logs; tmp != NULL; tmp = next) {
  ------------------
  |  Branch (383:19): [True: 18.5k, False: 29.4k]
  ------------------
  384|  18.5k|		LOG_REC *log = tmp->data;
  385|  18.5k|		next = tmp->next;
  386|       |
  387|  18.5k|		if (!log->temp || log->items == NULL)
  ------------------
  |  Branch (387:7): [True: 0, False: 18.5k]
  |  Branch (387:21): [True: 18.5k, False: 0]
  ------------------
  388|  18.5k|			continue;
  389|       |
  390|      0|		logitem = log->items->data;
  391|      0|		if (logitem->type == LOG_ITEM_TARGET && logitem->servertag != NULL &&
  ------------------
  |  Branch (391:7): [True: 0, False: 0]
  |  Branch (391:43): [True: 0, False: 0]
  ------------------
  392|      0|		    g_ascii_strcasecmp(logitem->servertag, server->tag) == 0 &&
  ------------------
  |  Branch (392:7): [True: 0, False: 0]
  ------------------
  393|      0|		    server_ischannel(
  ------------------
  |  |   22|      0|	((server)->ischannel(server, channel))
  |  |  ------------------
  |  |  |  Branch (22:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  394|      0|		        server, logitem->name)) /* kludge again.. so we won't close dcc chats */
  395|      0|			log_close(log);
  396|      0|	}
  397|  29.4k|}
fe-log.c:sig_log_new:
  656|  7.59k|{
  657|  7.59k|	if (!settings_get_bool("awaylog_colors") &&
  ------------------
  |  Branch (657:6): [True: 0, False: 7.59k]
  ------------------
  658|      0|	    g_strcmp0(log->fname, settings_get_str("awaylog_file")) == 0)
  ------------------
  |  Branch (658:6): [True: 0, False: 0]
  ------------------
  659|      0|		log->colorizer = log_colorizer_strip;
  660|  7.59k|}
fe-log.c:sig_awaylog_show:
  677|  7.59k|{
  678|  7.59k|	char *str;
  679|  7.59k|	int msgs, filepos;
  680|       |
  681|  7.59k|	msgs = GPOINTER_TO_INT(pmsgs);
  682|  7.59k|	filepos = GPOINTER_TO_INT(pfilepos);
  683|       |
  684|  7.59k|	if (msgs == 0)
  ------------------
  |  Branch (684:6): [True: 5.79k, False: 1.79k]
  ------------------
  685|  5.79k|		printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_LOG_NO_AWAY_MSGS, log->real_fname);
  ------------------
  |  |   37|  5.79k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  5.79k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  686|  1.79k|	else {
  687|  1.79k|		printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_LOG_AWAY_MSGS, log->real_fname, msgs);
  ------------------
  |  |   37|  1.79k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  1.79k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  688|       |
  689|  1.79k|		str = g_strdup_printf("\"%s\" %d", log->real_fname, filepos);
  690|  1.79k|		signal_emit("command cat", 1, str);
  691|  1.79k|		g_free(str);
  692|  1.79k|	}
  693|  7.59k|}

expand_emphasis:
   51|  21.0k|{
   52|  21.0k|	GString *str;
   53|  21.0k|	char *ret;
   54|  21.0k|	int pos;
   55|  21.0k|	int emphasis_italics;
   56|       |
   57|  21.0k|        g_return_val_if_fail(text != NULL, NULL);
  ------------------
  |  Branch (57:9): [True: 21.0k, False: 0]
  |  Branch (57:9): [True: 21.0k, False: 0]
  |  Branch (57:9): [Folded, False: 21.0k]
  ------------------
   58|       |
   59|  21.0k|	emphasis_italics = settings_get_bool("emphasis_italics");
   60|       |
   61|  21.0k|	str = g_string_new(text);
   62|       |
   63|  7.78M|	for (pos = 0; pos < str->len; pos++) {
  ------------------
  |  Branch (63:16): [True: 7.75M, False: 21.0k]
  ------------------
   64|  7.75M|		char type, *bgn, *end;
   65|       |
   66|  7.75M|		bgn = str->str + pos;
   67|       |
   68|  7.75M|		if (*bgn == '*')
  ------------------
  |  Branch (68:7): [True: 762k, False: 6.99M]
  ------------------
   69|   762k|			type = 2; /* bold */
   70|  6.99M|		else if (*bgn == '/' && emphasis_italics)
  ------------------
  |  Branch (70:12): [True: 2.09k, False: 6.99M]
  |  Branch (70:27): [True: 0, False: 2.09k]
  ------------------
   71|      0|			type = 29; /* italics */
   72|  6.99M|		else if (*bgn == '_')
  ------------------
  |  Branch (72:12): [True: 3.00k, False: 6.99M]
  ------------------
   73|  3.00k|			type = 31; /* underlined */
   74|  6.99M|		else
   75|  6.99M|			continue;
   76|       |
   77|       |		/* check that the beginning marker starts a word, and
   78|       |		   that the matching end marker ends a word */
   79|   765k|		if ((pos > 0 && bgn[-1] != ' ') || !ishighalnum(bgn[1]))
  ------------------
  |  |   40|   341k|#define ishighalnum(c) ((unsigned char) (c) >= 128 || i_isalnum(c))
  |  |  ------------------
  |  |  |  |   74|   341k|#define i_isalnum(x) isalnum((int) (unsigned char) (x))
  |  |  ------------------
  |  |  |  Branch (40:25): [True: 218k, False: 123k]
  |  |  ------------------
  ------------------
  |  Branch (79:8): [True: 765k, False: 37]
  |  Branch (79:19): [True: 424k, False: 341k]
  |  Branch (79:39): [True: 118k, False: 5.00k]
  ------------------
   80|   429k|			continue;
   81|   336k|		if ((end = strchr(bgn+1, *bgn)) == NULL)
  ------------------
  |  Branch (81:7): [True: 1.38k, False: 334k]
  ------------------
   82|  1.38k|			continue;
   83|   334k|		if (!ishighalnum(end[-1]) || ishighalnum(end[1]) ||
  ------------------
  |  |   40|   669k|#define ishighalnum(c) ((unsigned char) (c) >= 128 || i_isalnum(c))
  |  |  ------------------
  |  |  |  |   74|   334k|#define i_isalnum(x) isalnum((int) (unsigned char) (x))
  |  |  ------------------
  |  |  |  Branch (40:25): [True: 32.8k, False: 302k]
  |  |  ------------------
  ------------------
              		if (!ishighalnum(end[-1]) || ishighalnum(end[1]) ||
  ------------------
  |  |   40|   666k|#define ishighalnum(c) ((unsigned char) (c) >= 128 || i_isalnum(c))
  |  |  ------------------
  |  |  |  |   74|   331k|#define i_isalnum(x) isalnum((int) (unsigned char) (x))
  |  |  ------------------
  |  |  |  Branch (40:25): [True: 2.90k, False: 328k]
  |  |  ------------------
  ------------------
  |  Branch (83:8): [True: 298k, False: 3.73k]
  |  Branch (83:32): [True: 1.08k, False: 327k]
  ------------------
   84|   327k|		    end[1] == type || end[1] == '*' || end[1] == '_' ||
  ------------------
  |  Branch (84:7): [True: 0, False: 327k]
  |  Branch (84:25): [True: 96.1k, False: 231k]
  |  Branch (84:42): [True: 430, False: 230k]
  ------------------
   85|       |		    /* special case for italics to not emphasise
   86|       |		       common paths by skipping /.../.X */
   87|   230k|		    (type == 29 && i_ispunct(end[1]) && ishighalnum(end[2])))
  ------------------
  |  |   83|   230k|#define i_ispunct(x) ispunct((int) (unsigned char) (x))
  ------------------
              		    (type == 29 && i_ispunct(end[1]) && ishighalnum(end[2])))
  ------------------
  |  |   40|      0|#define ishighalnum(c) ((unsigned char) (c) >= 128 || i_isalnum(c))
  |  |  ------------------
  |  |  |  |   74|      0|#define i_isalnum(x) isalnum((int) (unsigned char) (x))
  |  |  ------------------
  |  |  |  Branch (40:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (87:8): [True: 0, False: 230k]
  |  Branch (87:22): [True: 0, False: 0]
  |  Branch (87:43): [True: 0, False: 0]
  ------------------
   88|   104k|			continue;
   89|       |
   90|   230k|		if (IS_CHANNEL(item)) {
  ------------------
  |  |   12|   230k|	(CHANNEL(channel) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |    8|   230k|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   67|   230k|	((cast *) module_check_cast_module(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (67:2): [True: 14, False: 230k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   68|   230k|				offsetof(cast, type_field), module, id))
  |  |  |  |  ------------------
  |  |  |  |    9|   230k|			      "WINDOW ITEM TYPE", "CHANNEL")
  |  |  ------------------
  |  |  |  Branch (12:2): [True: 14, False: 230k]
  |  |  ------------------
  ------------------
   91|       |			/* check that this isn't a _nick_, we don't want to
   92|       |			   use emphasis on them. */
   93|     14|			int found;
   94|     14|                        char c;
   95|     14|			char *end2;
   96|       |
   97|       |			/* check if _foo_ is a nick */
   98|     14|			c = end[1];
   99|     14|                        end[1] = '\0';
  100|     14|                        found = nicklist_find(CHANNEL(item), bgn) != NULL;
  ------------------
  |  |    8|     14|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|     14|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|     14|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|     14|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  101|     14|			end[1] = c;
  102|     14|			if (found) continue;
  ------------------
  |  Branch (102:8): [True: 0, False: 14]
  ------------------
  103|       |
  104|       |			/* check if the whole 'word' (e.g. "_foo_^") is a nick
  105|       |			   in "_foo_^ ", end will be the second _, end2 the ^ */
  106|     14|			end2 = end;
  107|     34|			while (isnickchar(end2[1]))
  ------------------
  |  |   42|     34|	(i_isalnum(a) || (a) == '`' || (a) == '-' || (a) == '_' || \
  |  |  ------------------
  |  |  |  |   74|     34|#define i_isalnum(x) isalnum((int) (unsigned char) (x))
  |  |  ------------------
  |  |  |  Branch (42:19): [True: 0, False: 34]
  |  |  |  Branch (42:33): [True: 4, False: 30]
  |  |  |  Branch (42:47): [True: 4, False: 26]
  |  |  ------------------
  |  |   43|     34|	(a) == '[' || (a) == ']' || (a) == '{' || (a) == '}' || \
  |  |  ------------------
  |  |  |  Branch (43:2): [True: 0, False: 26]
  |  |  |  Branch (43:16): [True: 0, False: 26]
  |  |  |  Branch (43:30): [True: 0, False: 26]
  |  |  |  Branch (43:44): [True: 0, False: 26]
  |  |  ------------------
  |  |   44|     34|	(a) == '|' || (a) == '\\' || (a) == '^')
  |  |  ------------------
  |  |  |  Branch (44:2): [True: 0, False: 26]
  |  |  |  Branch (44:16): [True: 12, False: 14]
  |  |  |  Branch (44:31): [True: 0, False: 14]
  |  |  ------------------
  ------------------
  |  Branch (107:11): [True: 0, False: 34]
  ------------------
  108|     20|				end2++;
  109|     14|			c = end2[1];
  110|     14|			end2[1] = '\0';
  111|     14|			found = nicklist_find(CHANNEL(item), bgn) != NULL;
  ------------------
  |  |    8|     14|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|     14|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|     14|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|     14|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  112|     14|			end2[1] = c;
  113|     14|			if (found) continue;
  ------------------
  |  Branch (113:8): [True: 0, False: 14]
  ------------------
  114|     14|		}
  115|       |
  116|       |		/* allow only *word* emphasis, not *multiple words* */
  117|   230k|		if (!settings_get_bool("emphasis_multiword")) {
  ------------------
  |  Branch (117:7): [True: 230k, False: 0]
  ------------------
  118|   230k|			char *c;
  119|   903k|			for (c = bgn+1; c != end; c++) {
  ------------------
  |  Branch (119:20): [True: 673k, False: 230k]
  ------------------
  120|   673k|				if (!ishighalnum(*c))
  ------------------
  |  |   40|   673k|#define ishighalnum(c) ((unsigned char) (c) >= 128 || i_isalnum(c))
  |  |  ------------------
  |  |  |  |   74|   673k|#define i_isalnum(x) isalnum((int) (unsigned char) (x))
  |  |  ------------------
  |  |  |  Branch (40:25): [True: 451k, False: 221k]
  |  |  ------------------
  ------------------
  |  Branch (120:10): [True: 221k, False: 598]
  ------------------
  121|    598|					break;
  122|   673k|			}
  123|   230k|			if (c != end) continue;
  ------------------
  |  Branch (123:8): [True: 598, False: 230k]
  ------------------
  124|   230k|		}
  125|       |
  126|   230k|		if (settings_get_bool("emphasis_replace")) {
  ------------------
  |  Branch (126:7): [True: 0, False: 230k]
  ------------------
  127|      0|			*bgn = *end = type;
  128|      0|                        pos += (end-bgn);
  129|   230k|		} else {
  130|   230k|			g_string_insert_c(str, pos, type);
  131|   230k|                        pos += (end - bgn) + 2;
  132|   230k|			g_string_insert_c(str, pos++, type);
  133|   230k|		}
  134|   230k|	}
  135|       |
  136|  21.0k|	ret = g_string_free_and_steal(str);
  137|  21.0k|	return ret;
  138|  21.0k|}
channel_get_nickmode:
  161|  2.60k|{
  162|  2.60k|	g_return_val_if_fail(nick != NULL, NULL);
  ------------------
  |  Branch (162:2): [True: 2.28k, False: 317]
  |  Branch (162:2): [True: 2.28k, False: 317]
  |  Branch (162:2): [Folded, False: 2.28k]
  ------------------
  163|       |
  164|  2.28k|        return channel_get_nickmode_rec(channel == NULL ? NULL :
  ------------------
  |  Branch (164:41): [True: 2.28k, False: 0]
  ------------------
  165|  2.28k|					nicklist_find(channel, nick));
  166|  2.60k|}
fe_messages_init:
  786|      2|{
  787|      2|	printnicks = g_hash_table_new((GHashFunc) g_direct_hash,
  788|      2|				      (GCompareFunc) g_direct_equal);
  789|       |
  790|      2|	settings_add_bool("lookandfeel", "hilight_nick_matches", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  791|      2|	settings_add_bool("lookandfeel", "hilight_nick_matches_everywhere", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  792|      2|	settings_add_bool("lookandfeel", "emphasis", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  793|      2|	settings_add_bool("lookandfeel", "emphasis_replace", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  794|      2|	settings_add_bool("lookandfeel", "emphasis_multiword", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  795|      2|	settings_add_bool("lookandfeel", "emphasis_italics", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  796|      2|	settings_add_bool("lookandfeel", "show_nickmode", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  797|      2|	settings_add_bool("lookandfeel", "show_nickmode_empty", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  798|      2|	settings_add_bool("lookandfeel", "print_active_channel", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  799|      2|	settings_add_bool("lookandfeel", "show_quit_once", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  800|      2|	settings_add_bool("lookandfeel", "show_own_nickchange_once", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  801|      2|	settings_add_bool("lookandfeel", "away_notify_public", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  802|      2|	settings_add_bool("lookandfeel", "show_extended_join", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  803|      2|	settings_add_bool("lookandfeel", "show_account_notify", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  804|       |
  805|      2|	signal_add_last("message public", (SIGNAL_FUNC) sig_message_public);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  806|      2|	signal_add_last("message private", (SIGNAL_FUNC) sig_message_private);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  807|      2|	signal_add_last("message own_public", (SIGNAL_FUNC) sig_message_own_public);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  808|      2|	signal_add_last("message own_private", (SIGNAL_FUNC) sig_message_own_private);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  809|      2|	signal_add_last("message join", (SIGNAL_FUNC) sig_message_join);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  810|      2|	signal_add_last("message host_changed", (SIGNAL_FUNC) sig_message_host_changed);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  811|      2|	signal_add_last("message account_changed", (SIGNAL_FUNC) sig_message_account_changed);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  812|      2|	signal_add_last("message part", (SIGNAL_FUNC) sig_message_part);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  813|      2|	signal_add_last("message quit", (SIGNAL_FUNC) sig_message_quit);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  814|      2|	signal_add_last("message kick", (SIGNAL_FUNC) sig_message_kick);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  815|      2|	signal_add_last("message nick", (SIGNAL_FUNC) sig_message_nick);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  816|      2|	signal_add_last("message own_nick", (SIGNAL_FUNC) sig_message_own_nick);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  817|      2|	signal_add_last("message invite", (SIGNAL_FUNC) sig_message_invite);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  818|      2|	signal_add_last("message invite_other", (SIGNAL_FUNC) sig_message_invite_other);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  819|      2|	signal_add_last("message topic", (SIGNAL_FUNC) sig_message_topic);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  820|      2|	signal_add_last("message away_notify", (SIGNAL_FUNC) sig_message_away_notify);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  821|       |
  822|      2|	signal_add("nicklist new", (SIGNAL_FUNC) sig_nicklist_new);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  823|      2|	signal_add("nicklist remove", (SIGNAL_FUNC) sig_nicklist_remove);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  824|      2|	signal_add("nicklist changed", (SIGNAL_FUNC) sig_nicklist_changed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  825|      2|	signal_add("nicklist host changed", (SIGNAL_FUNC) sig_nicklist_new);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  826|       |	signal_add("channel joined", (SIGNAL_FUNC) sig_channel_joined);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  827|      2|}
fe-messages.c:channel_get_nickmode_rec:
  141|  7.16k|{
  142|  7.16k|        char *emptystr;
  143|  7.16k|	char *nickmode;
  144|       |
  145|  7.16k|	if (!settings_get_bool("show_nickmode"))
  ------------------
  |  Branch (145:6): [True: 0, False: 7.16k]
  ------------------
  146|      0|                return g_strdup("");
  147|       |
  148|  7.16k|        emptystr = settings_get_bool("show_nickmode_empty") ? " " : "";
  ------------------
  |  Branch (148:20): [True: 7.16k, False: 0]
  ------------------
  149|       |
  150|  7.16k|	if (nickrec == NULL || nickrec->prefixes[0] == '\0')
  ------------------
  |  Branch (150:6): [True: 6.88k, False: 273]
  |  Branch (150:25): [True: 258, False: 15]
  ------------------
  151|  7.14k|		nickmode = g_strdup(emptystr);
  152|     15|	else {
  153|     15|		nickmode = g_malloc(2);
  154|     15|		nickmode[0] = nickrec->prefixes[0];
  155|     15|		nickmode[1] = '\0';
  156|     15|	}
  157|  7.16k|	return nickmode;
  158|  7.16k|}
fe-messages.c:sig_message_public:
  171|  4.87k|{
  172|  4.87k|	CHANNEL_REC *chanrec;
  173|  4.87k|	const char *printnick;
  174|  4.87k|	int for_me, print_channel, level;
  175|  4.87k|	char *nickmode, *color, *freemsg = NULL;
  176|  4.87k|	HILIGHT_REC *hilight;
  177|  4.87k|	TEXT_DEST_REC dest;
  178|       |
  179|       |	/* NOTE: this may return NULL if some channel is just closed with
  180|       |	   /WINDOW CLOSE and server still sends the few last messages */
  181|  4.87k|	chanrec = channel_find(server, target);
  182|  4.87k|	if (nickrec == NULL && chanrec != NULL)
  ------------------
  |  Branch (182:6): [True: 4.87k, False: 0]
  |  Branch (182:25): [True: 1.17k, False: 3.69k]
  ------------------
  183|  1.17k|                nickrec = nicklist_find(chanrec, nick);
  184|       |
  185|  4.87k|	for_me = !settings_get_bool("hilight_nick_matches") ? FALSE :
  ------------------
  |  Branch (185:11): [True: 0, False: 4.87k]
  ------------------
  186|  4.87k|		!settings_get_bool("hilight_nick_matches_everywhere") ?
  ------------------
  |  Branch (186:3): [True: 4.87k, False: 0]
  ------------------
  187|  4.87k|		nick_match_msg(chanrec, msg, server->nick) :
  188|  4.87k|		nick_match_msg_everywhere(chanrec, msg, server->nick);
  189|  4.87k|	hilight = for_me ? NULL :
  ------------------
  |  Branch (189:12): [True: 19, False: 4.85k]
  ------------------
  190|  4.87k|		hilight_match_nick(server, target, nick, address, MSGLEVEL_PUBLIC, msg);
  191|  4.87k|	color = (hilight == NULL) ? NULL : hilight_get_color(hilight);
  ------------------
  |  Branch (191:10): [True: 4.87k, False: 0]
  ------------------
  192|       |
  193|  4.87k|	print_channel = chanrec == NULL ||
  ------------------
  |  Branch (193:18): [True: 3.69k, False: 1.17k]
  ------------------
  194|  1.17k|		!window_item_is_active((WI_ITEM_REC *) chanrec);
  ------------------
  |  Branch (194:3): [True: 0, False: 1.17k]
  ------------------
  195|  4.87k|	if (!print_channel && settings_get_bool("print_active_channel") &&
  ------------------
  |  Branch (195:6): [True: 1.17k, False: 3.69k]
  |  Branch (195:24): [True: 0, False: 1.17k]
  ------------------
  196|      0|	    window_item_window((WI_ITEM_REC *) chanrec)->items->next != NULL)
  ------------------
  |  |   15|      0|	((WINDOW_REC *) ((WI_ITEM_REC *) (item))->window)
  ------------------
  |  Branch (196:6): [True: 0, False: 0]
  ------------------
  197|      0|		print_channel = TRUE;
  198|       |
  199|  4.87k|	level = MSGLEVEL_PUBLIC;
  200|  4.87k|	if (for_me)
  ------------------
  |  Branch (200:6): [True: 19, False: 4.85k]
  ------------------
  201|     19|		level |= MSGLEVEL_HILIGHT;
  202|       |
  203|  4.87k|	ignore_check_plus(server, nick, address, target, msg, &level, FALSE);
  204|  4.87k|	if (level & MSGLEVEL_NOHILIGHT) {
  ------------------
  |  Branch (204:6): [True: 0, False: 4.87k]
  ------------------
  205|      0|		for_me = FALSE;
  206|      0|		g_free_and_null(color);
  ------------------
  |  |   67|      0|	G_STMT_START { \
  |  |   68|      0|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   69|      0|	} G_STMT_END
  ------------------
  |  Branch (206:3): [Folded, False: 0]
  ------------------
  207|      0|		level &= ~MSGLEVEL_HILIGHT;
  208|      0|	}
  209|       |
  210|  4.87k|	if (settings_get_bool("emphasis"))
  ------------------
  |  Branch (210:6): [True: 4.87k, False: 0]
  ------------------
  211|  4.87k|		msg = freemsg = expand_emphasis((WI_ITEM_REC *) chanrec, msg);
  212|       |
  213|       |	/* get nick mode & nick what to print the msg with
  214|       |	   (in case there's multiple identical nicks) */
  215|  4.87k|	nickmode = channel_get_nickmode_rec(nickrec);
  216|  4.87k|	printnick = nickrec == NULL ? nick :
  ------------------
  |  Branch (216:14): [True: 4.59k, False: 273]
  ------------------
  217|  4.87k|		g_hash_table_lookup(printnicks, nickrec);
  218|  4.87k|	if (printnick == NULL)
  ------------------
  |  Branch (218:6): [True: 2.74k, False: 2.12k]
  ------------------
  219|  2.74k|		printnick = nick;
  220|       |
  221|  4.87k|	format_create_dest(&dest, server, target, level, NULL);
  222|  4.87k|	dest.address = address;
  223|  4.87k|	dest.nick = nick;
  224|  4.87k|	if (color != NULL) {
  ------------------
  |  Branch (224:6): [True: 0, False: 4.87k]
  ------------------
  225|       |		/* highlighted nick */
  226|      0|		hilight_update_text_dest(&dest,hilight);
  227|      0|		if (!print_channel) /* message to active channel in window */
  ------------------
  |  Branch (227:7): [True: 0, False: 0]
  ------------------
  228|      0|			printformat_dest(&dest, TXT_PUBMSG_HILIGHT, color,
  ------------------
  |  |   41|      0|	printformat_module_dest(MODULE_NAME, dest, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|      0|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  229|      0|				         printnick, msg, nickmode);
  230|      0|		else /* message to not existing/active channel */
  231|      0|			printformat_dest(&dest, TXT_PUBMSG_HILIGHT_CHANNEL,
  ------------------
  |  |   41|      0|	printformat_module_dest(MODULE_NAME, dest, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|      0|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  232|      0|					 color, printnick, target, msg,
  233|      0|					 nickmode);
  234|  4.87k|	} else {
  235|  4.87k|		if (!print_channel)
  ------------------
  |  Branch (235:7): [True: 1.17k, False: 3.69k]
  ------------------
  236|  1.17k|			printformat_dest(&dest,
  ------------------
  |  |   41|  2.35k|	printformat_module_dest(MODULE_NAME, dest, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  1.17k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |  |  Branch (41:45): [True: 0, False: 1.17k]
  |  |  ------------------
  ------------------
  237|  4.87k|				    for_me ? TXT_PUBMSG_ME : TXT_PUBMSG,
  238|  4.87k|				    printnick, msg, nickmode);
  239|  3.69k|		else
  240|  3.69k|			printformat_dest(&dest,
  ------------------
  |  |   41|  7.39k|	printformat_module_dest(MODULE_NAME, dest, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  3.69k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |  |  Branch (41:45): [True: 19, False: 3.67k]
  |  |  ------------------
  ------------------
  241|  4.87k|				    for_me ? TXT_PUBMSG_ME_CHANNEL :
  242|  4.87k|				    TXT_PUBMSG_CHANNEL,
  243|  4.87k|				    printnick, target, msg, nickmode);
  244|  4.87k|	}
  245|       |
  246|  4.87k|	g_free_not_null(nickmode);
  ------------------
  |  |   64|  4.87k|#define g_free_not_null(a) g_free(a)
  ------------------
  247|  4.87k|	g_free_not_null(freemsg);
  ------------------
  |  |   64|  4.87k|#define g_free_not_null(a) g_free(a)
  ------------------
  248|  4.87k|	g_free_not_null(color);
  ------------------
  |  |   64|  4.87k|#define g_free_not_null(a) g_free(a)
  ------------------
  249|  4.87k|}
fe-messages.c:sig_message_private:
  253|  9.80k|{
  254|  9.80k|	QUERY_REC *query;
  255|  9.80k|        char *freemsg = NULL;
  256|  9.80k|	int level = MSGLEVEL_MSGS;
  257|       |
  258|       |	/* own message returned by bouncer? */
  259|  9.80k|	int own = (!g_strcmp0(nick, server->nick));
  260|       |
  261|  9.80k|	query = query_find(server, own ? target : nick);
  ------------------
  |  Branch (261:29): [True: 788, False: 9.01k]
  ------------------
  262|       |
  263|  9.80k|	if (settings_get_bool("emphasis"))
  ------------------
  |  Branch (263:6): [True: 9.80k, False: 0]
  ------------------
  264|  9.80k|		msg = freemsg = expand_emphasis((WI_ITEM_REC *) query, msg);
  265|       |
  266|  9.80k|	ignore_check_plus(server, nick, address, NULL, msg, &level, FALSE);
  267|       |
  268|  9.80k|	if (own) {
  ------------------
  |  Branch (268:6): [True: 788, False: 9.01k]
  ------------------
  269|    788|		printformat(server, target, level,
  ------------------
  |  |   37|  1.57k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|    788|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |  |  Branch (37:57): [True: 0, False: 788]
  |  |  ------------------
  ------------------
  270|    788|			    query == NULL ? TXT_OWN_MSG_PRIVATE :
  271|    788|			    TXT_OWN_MSG_PRIVATE_QUERY, target, msg, server->nick);
  272|  9.01k|	} else {
  273|  9.01k|		printformat(server, nick, level,
  ------------------
  |  |   37|  18.0k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  9.01k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |  |  Branch (37:57): [True: 1.81k, False: 7.20k]
  |  |  ------------------
  ------------------
  274|  9.01k|			    query == NULL ? TXT_MSG_PRIVATE :
  275|  9.01k|			    TXT_MSG_PRIVATE_QUERY, nick, address, msg);
  276|  9.01k|	}
  277|       |
  278|  9.80k|	g_free_not_null(freemsg);
  ------------------
  |  |   64|  9.80k|#define g_free_not_null(a) g_free(a)
  ------------------
  279|  9.80k|}
fe-messages.c:sig_message_join:
  358|   153k|{
  359|   153k|	int level = MSGLEVEL_JOINS;
  360|       |
  361|   153k|	ignore_check_plus(server, nick, address, channel, NULL, &level, FALSE);
  362|       |
  363|   153k|	if (settings_get_bool("show_extended_join")) {
  ------------------
  |  Branch (363:6): [True: 0, False: 153k]
  ------------------
  364|      0|		int txt;
  365|      0|		if (*account == '\0') txt = TXT_JOIN;
  ------------------
  |  Branch (365:7): [True: 0, False: 0]
  ------------------
  366|      0|		else if (g_strcmp0("*", account) == 0) txt = TXT_JOIN_EXTENDED;
  ------------------
  |  Branch (366:12): [True: 0, False: 0]
  ------------------
  367|      0|		else txt = TXT_JOIN_EXTENDED_ACCOUNT;
  368|      0|		printformat(server, channel, level,
  ------------------
  |  |   37|      0|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|      0|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  369|      0|			    txt, nick, address, channel, account, realname);
  370|   153k|	} else {
  371|   153k|		printformat(server, channel, level,
  ------------------
  |  |   37|   153k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|   153k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  372|   153k|			    TXT_JOIN, nick, address, channel, account, realname);
  373|   153k|	}
  374|   153k|}
fe-messages.c:sig_message_host_changed:
  469|  4.12k|{
  470|  4.12k|	spread_server_message_to_windows(
  471|  4.12k|		server,
  472|  4.12k|		settings_get_bool("show_quit_once"),
  473|  4.12k|		TRUE,
  474|  4.12k|		MSGLEVEL_JOINS,
  475|  4.12k|		TXT_HOST_CHANGED, TXT_HOST_CHANGED,
  476|  4.12k|		nick, address, old_address,
  477|       |		NULL
  478|  4.12k|	);
  479|  4.12k|}
fe-messages.c:spread_server_message_to_windows:
  396|  7.11k|{
  397|  7.11k|	WINDOW_REC *window;
  398|  7.11k|	GString *chans;
  399|  7.11k|	GSList *tmp, *windows;
  400|  7.11k|	char *print_channel;
  401|  7.11k|	int count, level = base_level;
  402|       |
  403|  7.11k|	if (ignore_check_plus(server, nick, address, NULL, ignore_data, &level, TRUE))
  ------------------
  |  Branch (403:6): [True: 0, False: 7.11k]
  ------------------
  404|      0|		return;
  405|       |
  406|  7.11k|	print_channel = NULL;
  407|       |
  408|  7.11k|	count = 0; windows = NULL;
  409|  7.11k|	chans = g_string_new(NULL);
  410|   119k|	for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (410:31): [True: 112k, False: 7.11k]
  ------------------
  411|   112k|		CHANNEL_REC *rec;
  412|   112k|		level = base_level;
  413|   112k|		rec = tmp->data;
  414|       |
  415|   112k|		if (!nicklist_find(rec, nick)) {
  ------------------
  |  Branch (415:7): [True: 108k, False: 4.11k]
  ------------------
  416|   108k|			continue;
  417|   108k|		}
  418|       |
  419|  4.11k|		if (ignore_check_plus(server, nick, address, rec->visible_name,
  ------------------
  |  Branch (419:7): [True: 0, False: 4.11k]
  ------------------
  420|  4.11k|				      ignore_data, &level, TRUE)) {
  421|      0|			count++;
  422|      0|			continue;
  423|      0|		}
  424|       |
  425|  4.11k|		if (print_channel == NULL ||
  ------------------
  |  Branch (425:7): [True: 2.05k, False: 2.05k]
  ------------------
  426|  2.05k|		    active_win->active == (WI_ITEM_REC *) rec) {
  ------------------
  |  Branch (426:7): [True: 0, False: 2.05k]
  ------------------
  427|  2.05k|			print_channel = rec->visible_name;
  428|  2.05k|		}
  429|       |
  430|  4.11k|		if (once) {
  ------------------
  |  Branch (430:7): [True: 0, False: 4.11k]
  ------------------
  431|      0|			g_string_append_printf(chans, "%s,", rec->visible_name);
  432|  4.11k|		} else {
  433|  4.11k|			window = window_item_window((WI_ITEM_REC *) rec);
  ------------------
  |  |   15|  4.11k|	((WINDOW_REC *) ((WI_ITEM_REC *) (item))->window)
  ------------------
  434|  4.11k|			if (g_slist_find(windows, window) == NULL) {
  ------------------
  |  Branch (434:8): [True: 3.78k, False: 328]
  ------------------
  435|  3.78k|				windows = g_slist_prepend(windows, window);
  436|  3.78k|				printformat(server, rec->visible_name,
  ------------------
  |  |   37|  3.78k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  3.78k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  437|  3.78k|					    level,
  438|  3.78k|					    txt, nick, address, data,
  439|  3.78k|					    rec->visible_name);
  440|  3.78k|			}
  441|  4.11k|		}
  442|  4.11k|		count++;
  443|  4.11k|	}
  444|  7.11k|	g_slist_free(windows);
  445|       |
  446|  7.11k|	if (!once && in_query) {
  ------------------
  |  Branch (446:6): [True: 7.11k, False: 0]
  |  Branch (446:15): [True: 7.11k, False: 0]
  ------------------
  447|       |		/* check if you had query with the nick and
  448|       |		   display the change there too */
  449|  7.11k|		QUERY_REC *query = query_find(server, nick);
  450|  7.11k|		if (query != NULL) {
  ------------------
  |  Branch (450:7): [True: 327, False: 6.79k]
  ------------------
  451|    327|			printformat(server, nick, level,
  ------------------
  |  |   37|    327|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|    327|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  452|    327|				    txt, nick, address, data, "");
  453|    327|		}
  454|  7.11k|	}
  455|       |
  456|  7.11k|	if (once || count == 0) {
  ------------------
  |  Branch (456:6): [True: 0, False: 7.11k]
  |  Branch (456:14): [True: 5.06k, False: 2.05k]
  ------------------
  457|  5.06k|		if (chans->len > 0) {
  ------------------
  |  Branch (457:7): [True: 0, False: 5.06k]
  ------------------
  458|      0|			g_string_truncate(chans, chans->len-1);
  459|      0|		}
  460|  5.06k|		printformat(server, print_channel, base_level,
  ------------------
  |  |   37|  10.1k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  5.06k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |  |  Branch (37:57): [True: 5.06k, False: 0]
  |  |  ------------------
  ------------------
  461|  5.06k|			    count <= 1 ? txt : txt_once,
  462|  5.06k|			    nick, address, data, chans->str);
  463|  5.06k|	}
  464|       |	g_string_free(chans, TRUE);
  465|  7.11k|}
fe-messages.c:sig_message_account_changed:
  483|     48|{
  484|     48|	gboolean logged_in;
  485|     48|	int txt;
  486|       |
  487|     48|	if (!settings_get_bool("show_account_notify"))
  ------------------
  |  Branch (487:6): [True: 48, False: 0]
  ------------------
  488|     48|		return;
  489|       |
  490|      0|	logged_in = g_strcmp0("*", account) != 0;
  491|      0|	txt = logged_in ? TXT_LOGGED_IN : TXT_LOGGED_OUT;
  ------------------
  |  Branch (491:8): [True: 0, False: 0]
  ------------------
  492|       |
  493|      0|	spread_server_message_to_windows(
  494|      0|		server,
  495|      0|		settings_get_bool("show_quit_once"),
  496|       |		TRUE,
  497|      0|		MSGLEVEL_MODES,
  498|      0|		txt, txt,
  499|      0|		nick, address, account,
  500|      0|		"account"
  501|      0|	);
  502|      0|}
fe-messages.c:sig_message_part:
  379|  4.13k|{
  380|  4.13k|	int level = MSGLEVEL_PARTS;
  381|       |
  382|  4.13k|	ignore_check_plus(server, nick, address, channel, NULL, &level, FALSE);
  383|       |
  384|  4.13k|	printformat(server, channel, level,
  ------------------
  |  |   37|  4.13k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  4.13k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  385|  4.13k|		    TXT_PART, nick, address, channel, reason);
  386|  4.13k|}
fe-messages.c:sig_message_quit:
  506|  2.99k|{
  507|  2.99k|	spread_server_message_to_windows(
  508|  2.99k|		server,
  509|  2.99k|		settings_get_bool("show_quit_once"),
  510|       |		TRUE,
  511|  2.99k|		MSGLEVEL_QUITS,
  512|  2.99k|		TXT_QUIT, TXT_QUIT_ONCE,
  513|  2.99k|		nick, address, reason,
  514|  2.99k|		reason
  515|  2.99k|	);
  516|  2.99k|}
fe-messages.c:sig_message_kick:
  521|    543|{
  522|    543|	int level = MSGLEVEL_KICKS;
  523|       |
  524|    543|	ignore_check_plus(server, kicker, address, channel, reason, &level, FALSE);
  525|       |
  526|    543|	printformat(server, channel, level,
  ------------------
  |  |   37|    543|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|    543|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  527|    543|		    TXT_KICK, nick, channel, kicker, reason, address);
  528|    543|}
fe-messages.c:sig_message_nick:
  586|  10.0k|{
  587|       |	print_nick_change(server, newnick, oldnick, address, FALSE);
  588|  10.0k|}
fe-messages.c:print_nick_change:
  551|  18.2k|{
  552|  18.2k|	GSList *tmp, *windows;
  553|  18.2k|	int msgprint;
  554|       |
  555|  18.2k|	msgprint = FALSE;
  556|       |
  557|       |	/* Print to each channel where the nick is.
  558|       |	   Don't print more than once to the same window. */
  559|  18.2k|	windows = NULL;
  560|   352k|	for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (560:31): [True: 334k, False: 18.2k]
  ------------------
  561|   334k|		CHANNEL_REC *channel = tmp->data;
  562|   334k|		WINDOW_REC *window =
  563|   334k|			window_item_window((WI_ITEM_REC *) channel);
  ------------------
  |  |   15|   334k|	((WINDOW_REC *) ((WI_ITEM_REC *) (item))->window)
  ------------------
  564|       |
  565|   334k|		if (nicklist_find(channel, newnick) == NULL ||
  ------------------
  |  Branch (565:7): [True: 317k, False: 16.3k]
  ------------------
  566|  16.3k|		    g_slist_find(windows, window) != NULL)
  ------------------
  |  Branch (566:7): [True: 573, False: 15.7k]
  ------------------
  567|   318k|			continue;
  568|       |
  569|  15.7k|		windows = g_slist_append(windows, window);
  570|  15.7k|		print_nick_change_channel(server, channel->visible_name,
  571|  15.7k|					  newnick, oldnick, address, ownnick);
  572|  15.7k|		msgprint = TRUE;
  573|  15.7k|	}
  574|       |
  575|  18.2k|	g_slist_free(windows);
  576|       |
  577|  18.2k|	if (!msgprint && ownnick) {
  ------------------
  |  Branch (577:6): [True: 11.0k, False: 7.19k]
  |  Branch (577:19): [True: 2.43k, False: 8.60k]
  ------------------
  578|  2.43k|		printformat(server, NULL, MSGLEVEL_NICKS,
  ------------------
  |  |   37|  2.43k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  2.43k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  579|  2.43k|			    TXT_YOUR_NICK_CHANGED, oldnick, newnick, "",
  580|  2.43k|			    address);
  581|  2.43k|	}
  582|  18.2k|}
fe-messages.c:print_nick_change_channel:
  534|  15.7k|{
  535|  15.7k|	int level;
  536|       |
  537|  15.7k|	level = MSGLEVEL_NICKS;
  538|  15.7k|        if (ownnick) level |= MSGLEVEL_NO_ACT;
  ------------------
  |  Branch (538:13): [True: 14.1k, False: 1.58k]
  ------------------
  539|  15.7k|	if (ignore_check_plus(server, oldnick, address,
  ------------------
  |  Branch (539:6): [True: 0, False: 15.7k]
  ------------------
  540|  15.7k|			      channel, newnick, &level, TRUE))
  541|      0|		return;
  542|       |
  543|  15.7k|	printformat(server, channel, level,
  ------------------
  |  |   37|  31.5k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  15.7k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |  |  Branch (37:57): [True: 14.1k, False: 1.58k]
  |  |  ------------------
  ------------------
  544|  15.7k|		    ownnick ? TXT_YOUR_NICK_CHANGED : TXT_NICK_CHANGED,
  545|  15.7k|		    oldnick, newnick, channel, address);
  546|  15.7k|}
fe-messages.c:sig_message_own_nick:
  592|  8.13k|{
  593|  8.13k|        if (!settings_get_bool("show_own_nickchange_once"))
  ------------------
  |  Branch (593:13): [True: 8.13k, False: 0]
  ------------------
  594|  8.13k|		print_nick_change(server, newnick, oldnick, address, TRUE);
  595|      0|	else {
  596|      0|		printformat(server, NULL, MSGLEVEL_NICKS,
  ------------------
  |  |   37|      0|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|      0|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  597|      0|			    TXT_YOUR_NICK_CHANGED, oldnick, newnick, "",
  598|      0|			    address);
  599|      0|	}
  600|  8.13k|}
fe-messages.c:sig_message_invite:
  604|  3.05k|{
  605|  3.05k|	char *str;
  606|       |
  607|  3.05k|	str = show_lowascii(channel);
  608|  3.05k|	printformat(server, NULL, MSGLEVEL_INVITES,
  ------------------
  |  |   37|  3.05k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  3.05k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  609|  3.05k|		    TXT_INVITE, nick, str, address);
  610|  3.05k|	g_free(str);
  611|  3.05k|}
fe-messages.c:sig_message_invite_other:
  615|  2.54k|{
  616|  2.54k|	char *str;
  617|  2.54k|	int level = MSGLEVEL_INVITES;
  618|       |
  619|  2.54k|	ignore_check_plus(server, nick, address, channel, invited, &level, FALSE);
  620|       |
  621|  2.54k|	str = show_lowascii(channel);
  622|  2.54k|	printformat(server, channel, level,
  ------------------
  |  |   37|  2.54k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  2.54k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  623|  2.54k|		    TXT_INVITE_OTHER, invited, nick, str, address);
  624|  2.54k|	g_free(str);
  625|  2.54k|}
fe-messages.c:sig_message_away_notify:
  642|    198|{
  643|    198|	int txt = *awaymsg == '\0' ? TXT_NOTIFY_UNAWAY_CHANNEL :
  ------------------
  |  Branch (643:12): [True: 0, False: 198]
  ------------------
  644|    198|		TXT_NOTIFY_AWAY_CHANNEL;
  645|       |
  646|    198|	if (!settings_get_bool("away_notify_public"))
  ------------------
  |  Branch (646:6): [True: 198, False: 0]
  ------------------
  647|    198|		return;
  648|       |
  649|      0|	spread_server_message_to_windows(server, FALSE,
  650|       |					 FALSE,
  651|      0|					 MSGLEVEL_CRAP,
  652|      0|					 txt, txt,
  653|      0|					 nick, addr,
  654|      0|					 awaymsg,
  655|      0|					 awaymsg
  656|      0|					);
  657|      0|}
fe-messages.c:sig_nicklist_new:
  690|   105k|{
  691|   105k|	NICK_REC *firstnick;
  692|   105k|	GString *newnick;
  693|   105k|	char *nickhost, *p;
  694|   105k|	int n;
  695|       |
  696|   105k|	firstnick = g_hash_table_lookup(channel->nicks, nick->nick);
  697|   105k|	if (firstnick->next == NULL)
  ------------------
  |  Branch (697:6): [True: 97.1k, False: 7.89k]
  ------------------
  698|  97.1k|		return;
  699|       |
  700|  7.89k|	if (nick == channel->ownnick) {
  ------------------
  |  Branch (700:6): [True: 148, False: 7.74k]
  ------------------
  701|       |		/* own nick is being added, might be a nick change and
  702|       |		   someone else having the original nick already in use.. */
  703|    148|		nick = printnick_find_original(firstnick->next);
  704|    148|		if (nick == NULL)
  ------------------
  |  Branch (704:7): [True: 39, False: 109]
  ------------------
  705|     39|                        return; /* nope, we have it */
  706|    148|	}
  707|       |
  708|  7.85k|	if (nick->host == NULL)
  ------------------
  |  Branch (708:6): [True: 6.57k, False: 1.27k]
  ------------------
  709|  6.57k|                return;
  710|       |
  711|       |	/* identical nick already exists, have to change it somehow.. */
  712|  1.27k|	p = strchr(nick->host, '@');
  713|  1.27k|	if (p == NULL) p = nick->host; else p++;
  ------------------
  |  Branch (713:6): [True: 194, False: 1.08k]
  ------------------
  714|       |
  715|  1.27k|	nickhost = g_strdup_printf("%s@%s", nick->nick, p);
  716|  1.27k|	p = strchr(nickhost+strlen(nick->nick), '.');
  717|  1.27k|	if (p != NULL) *p = '\0';
  ------------------
  |  Branch (717:6): [True: 167, False: 1.11k]
  ------------------
  718|       |
  719|  1.27k|	if (!printnick_exists(firstnick, nick, nickhost)) {
  ------------------
  |  Branch (719:6): [True: 615, False: 664]
  ------------------
  720|       |                /* use nick@host */
  721|    615|		g_hash_table_insert(printnicks, nick, nickhost);
  722|    615|                return;
  723|    615|	}
  724|       |
  725|    664|	newnick = g_string_new(NULL);
  726|    664|        n = 2;
  727|  12.4k|	do {
  728|  12.4k|		g_string_printf(newnick, "%s%d", nickhost, n);
  729|  12.4k|                n++;
  730|  12.4k|	} while (printnick_exists(firstnick, nick, newnick->str));
  ------------------
  |  Branch (730:11): [True: 11.7k, False: 664]
  ------------------
  731|       |
  732|    664|	g_hash_table_insert(printnicks, nick, g_string_free_and_steal(newnick));
  733|    664|	g_free(nickhost);
  734|    664|}
fe-messages.c:printnick_find_original:
  678|    148|{
  679|    335|	while (nick != NULL) {
  ------------------
  |  Branch (679:9): [True: 296, False: 39]
  ------------------
  680|    296|		if (g_hash_table_lookup(printnicks, nick) == NULL)
  ------------------
  |  Branch (680:7): [True: 109, False: 187]
  ------------------
  681|    109|                        return nick;
  682|       |
  683|    187|		nick = nick->next;
  684|    187|	}
  685|       |
  686|     39|	return NULL;
  687|    148|}
fe-messages.c:printnick_exists:
  661|  13.7k|{
  662|  13.7k|	char *printnick;
  663|       |
  664|   501k|	while (first != NULL) {
  ------------------
  |  Branch (664:9): [True: 499k, False: 1.27k]
  ------------------
  665|   499k|		if (first != ignore) {
  ------------------
  |  Branch (665:7): [True: 498k, False: 1.41k]
  ------------------
  666|   498k|			printnick = g_hash_table_lookup(printnicks, first);
  667|   498k|			if (printnick != NULL && g_strcmp0(printnick, nick) == 0)
  ------------------
  |  Branch (667:8): [True: 445k, False: 52.8k]
  |  Branch (667:29): [True: 12.4k, False: 433k]
  ------------------
  668|  12.4k|				return TRUE;
  669|   498k|		}
  670|       |
  671|   487k|		first = first->next;
  672|   487k|	}
  673|       |
  674|  1.27k|        return FALSE;
  675|  13.7k|}
fe-messages.c:sig_nicklist_remove:
  737|  97.9k|{
  738|  97.9k|	char *nickname;
  739|       |
  740|  97.9k|	nickname = g_hash_table_lookup(printnicks, nick);
  741|  97.9k|	if (nickname != NULL) {
  ------------------
  |  Branch (741:6): [True: 1.02k, False: 96.9k]
  ------------------
  742|  1.02k|                g_free(nickname);
  743|  1.02k|		g_hash_table_remove(printnicks, nick);
  744|  1.02k|	}
  745|  97.9k|}
fe-messages.c:sig_nicklist_changed:
  748|  9.83k|{
  749|  9.83k|        sig_nicklist_remove(channel, nick);
  750|  9.83k|        sig_nicklist_new(channel, nick);
  751|  9.83k|}
fe-messages.c:sig_channel_joined:
  754|  5.26k|{
  755|  5.26k|        NICK_REC *nick;
  756|  5.26k|	char *nickname;
  757|       |
  758|       |	/* channel->ownnick is set at this point - check if our own nick
  759|       |	   has been changed, if it was set it back to the original nick and
  760|       |	   change the previous original to something else */
  761|       |
  762|  5.26k|        nickname = g_hash_table_lookup(printnicks, channel->ownnick);
  763|  5.26k|	if (nickname == NULL)
  ------------------
  |  Branch (763:6): [True: 5.01k, False: 255]
  ------------------
  764|  5.01k|		return;
  765|       |
  766|    255|        g_free(nickname);
  767|    255|	g_hash_table_remove(printnicks, channel->ownnick);
  768|       |
  769|       |        /* our own nick is guaranteed to be the first in list */
  770|    255|        nick = channel->ownnick->next;
  771|    468|	while (nick != NULL) {
  ------------------
  |  Branch (771:9): [True: 332, False: 136]
  ------------------
  772|    332|		if (g_hash_table_lookup(printnicks, nick) == NULL) {
  ------------------
  |  Branch (772:7): [True: 119, False: 213]
  ------------------
  773|    119|			sig_nicklist_new(channel, nick);
  774|    119|                        break;
  775|    119|		}
  776|    213|                nick = nick->next;
  777|    213|	}
  778|    255|}

fe_modules_init:
  255|      2|{
  256|      2|	signal_add("module error", (SIGNAL_FUNC) sig_module_error);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  257|      2|	signal_add("module loaded", (SIGNAL_FUNC) sig_module_loaded);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  258|      2|	signal_add("module unloaded", (SIGNAL_FUNC) sig_module_unloaded);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  259|       |
  260|      2|	command_bind("load", NULL, (SIGNAL_FUNC) cmd_load);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  261|      2|	command_bind("unload", NULL, (SIGNAL_FUNC) cmd_unload);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  262|      2|	command_set_options("load", "silent");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  263|      2|}

privmsg_get_query:
   43|  13.4k|{
   44|  13.4k|	QUERY_REC *query;
   45|       |
   46|  13.4k|	g_return_val_if_fail(IS_SERVER(server), NULL);
  ------------------
  |  Branch (46:2): [True: 13.4k, False: 0]
  |  Branch (46:2): [True: 13.4k, False: 0]
  |  Branch (46:2): [True: 13.4k, False: 0]
  |  Branch (46:2): [Folded, False: 13.4k]
  ------------------
   47|  13.4k|        g_return_val_if_fail(nick != NULL, NULL);
  ------------------
  |  Branch (47:9): [True: 10.4k, False: 2.91k]
  |  Branch (47:9): [True: 10.4k, False: 2.91k]
  |  Branch (47:9): [Folded, False: 10.4k]
  ------------------
   48|       |
   49|  10.4k|	query = query_find(server, nick);
   50|  10.4k|	if (query == NULL && !command_hide_output &&
  ------------------
  |  Branch (50:6): [True: 285, False: 10.2k]
  |  Branch (50:23): [True: 285, False: 0]
  ------------------
   51|    285|	    (querycreate_level & level) != 0 &&
  ------------------
  |  Branch (51:6): [True: 285, False: 0]
  ------------------
   52|    285|	    (!own || settings_get_bool("autocreate_own_query"))) {
  ------------------
  |  Branch (52:7): [True: 285, False: 0]
  |  Branch (52:15): [True: 0, False: 0]
  ------------------
   53|    285|		query = CHAT_PROTOCOL(server)->
  ------------------
  |  |   35|    285|	((object) == NULL ? chat_protocol_get_default() : \
  |  |  ------------------
  |  |  |  Branch (35:3): [True: 0, False: 285]
  |  |  ------------------
  |  |   36|    285|	chat_protocol_find_id((object)->chat_type))
  ------------------
   54|    285|			query_create(server->tag, nick, TRUE);
   55|    285|	}
   56|       |
   57|  10.4k|	return query;
   58|  13.4k|}
fe_queries_init:
  357|      2|{
  358|      2|	settings_add_level("lookandfeel", "autocreate_query_level", "MSGS DCCMSGS NOTICES");
  ------------------
  |  |  101|      2|	settings_add_level_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  359|      2|	settings_add_bool("lookandfeel", "autocreate_own_query", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  360|      2|	settings_add_time("lookandfeel", "autoclose_query", "0");
  ------------------
  |  |   99|      2|	settings_add_time_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  361|       |
  362|      2|	queryclose_tag = -1;
  363|      2|	read_settings();
  364|       |
  365|      2|	signal_add("query created", (SIGNAL_FUNC) signal_query_created);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  366|      2|	signal_add("query destroyed", (SIGNAL_FUNC) signal_query_destroyed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  367|      2|	signal_add("query server changed", (SIGNAL_FUNC) signal_query_server_changed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  368|      2|	signal_add("query nick changed", (SIGNAL_FUNC) signal_query_nick_changed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  369|      2|        signal_add("window item server changed", (SIGNAL_FUNC) signal_window_item_server_changed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  370|      2|	signal_add("server connected", (SIGNAL_FUNC) sig_server_connected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  371|      2|	signal_add("window changed", (SIGNAL_FUNC) sig_window_changed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  372|      2|	signal_add_first("message private", (SIGNAL_FUNC) sig_message_private);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  373|      2|	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  374|       |
  375|      2|	command_bind("query", NULL, (SIGNAL_FUNC) cmd_query);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  376|      2|	command_bind("unquery", NULL, (SIGNAL_FUNC) cmd_unquery);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  377|      2|	command_bind("window server", NULL, (SIGNAL_FUNC) cmd_window_server);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  378|       |
  379|      2|	command_set_options("query", "window");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  380|      2|}
fe-queries.c:read_settings:
  345|      2|{
  346|      2|	querycreate_level = settings_get_level("autocreate_query_level");
  347|      2|	query_auto_close = settings_get_time("autoclose_query")/1000;
  348|      2|	if (query_auto_close > 0 && queryclose_tag == -1)
  ------------------
  |  Branch (348:6): [True: 0, False: 2]
  |  Branch (348:30): [True: 0, False: 0]
  ------------------
  349|      0|		queryclose_tag = g_timeout_add(5000, (GSourceFunc) sig_query_autoclose, NULL);
  350|      2|	else if (query_auto_close <= 0 && queryclose_tag != -1) {
  ------------------
  |  Branch (350:11): [True: 2, False: 0]
  |  Branch (350:36): [True: 0, False: 2]
  ------------------
  351|      0|		g_source_remove(queryclose_tag);
  352|      0|		queryclose_tag = -1;
  353|      0|	}
  354|      2|}
fe-queries.c:signal_query_created:
   61|    285|{
   62|    285|        TEXT_DEST_REC dest;
   63|       |
   64|    285|	g_return_if_fail(IS_QUERY(query));
  ------------------
  |  Branch (64:2): [True: 285, False: 0]
  |  Branch (64:2): [True: 285, False: 0]
  |  Branch (64:2): [True: 285, False: 0]
  |  Branch (64:2): [Folded, False: 285]
  ------------------
   65|       |
   66|    285|	if (window_item_window(query) == NULL) {
  ------------------
  |  |   15|    285|	((WINDOW_REC *) ((WI_ITEM_REC *) (item))->window)
  ------------------
  |  Branch (66:6): [True: 285, False: 0]
  ------------------
   67|    285|		window_item_create((WI_ITEM_REC *) query,
   68|    285|				   GPOINTER_TO_INT(automatic));
   69|    285|	}
   70|       |
   71|    285|	format_create_dest_tag(&dest, query->server, query->server_tag,
   72|    285|			       query->name, MSGLEVEL_CLIENTNOTICE, NULL);
   73|    285|	printformat_dest(&dest, TXT_QUERY_START,
  ------------------
  |  |   41|    285|	printformat_module_dest(MODULE_NAME, dest, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|    285|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
   74|    285|			 query->name, query->server_tag);
   75|    285|}
fe-queries.c:signal_query_server_changed:
  110|  5.53M|{
  111|  5.53M|	WINDOW_REC *window;
  112|       |
  113|  5.53M|	g_return_if_fail(query != NULL);
  ------------------
  |  Branch (113:2): [True: 5.53M, False: 0]
  |  Branch (113:2): [True: 5.53M, False: 0]
  |  Branch (113:2): [Folded, False: 5.53M]
  ------------------
  114|       |
  115|  5.53M|	window = window_item_window((WI_ITEM_REC *) query);
  ------------------
  |  |   15|  5.53M|	((WINDOW_REC *) ((WI_ITEM_REC *) (item))->window)
  ------------------
  116|  5.53M|	if (window->active == (WI_ITEM_REC *) query)
  ------------------
  |  Branch (116:6): [True: 5.53M, False: 0]
  ------------------
  117|  5.53M|		window_change_server(window, query->server);
  118|  5.53M|}
fe-queries.c:signal_query_nick_changed:
  121|  2.22k|{
  122|  2.22k|        TEXT_DEST_REC dest;
  123|       |
  124|  2.22k|	g_return_if_fail(query != NULL);
  ------------------
  |  Branch (124:2): [True: 2.22k, False: 0]
  |  Branch (124:2): [True: 2.22k, False: 0]
  |  Branch (124:2): [Folded, False: 2.22k]
  ------------------
  125|       |
  126|  2.22k|	format_create_dest_tag(&dest, query->server, query->server_tag,
  127|  2.22k|			       query->name, MSGLEVEL_NICKS, NULL);
  128|       |
  129|       |	/* don't print the nick change message if only the case was changed */
  130|  2.22k|	if (g_ascii_strcasecmp(query->name, oldnick) != 0) {
  ------------------
  |  Branch (130:6): [True: 1.86k, False: 353]
  ------------------
  131|  1.86k|		printformat_dest(&dest,  TXT_NICK_CHANGED, oldnick,
  ------------------
  |  |   41|  1.86k|	printformat_module_dest(MODULE_NAME, dest, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  1.86k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	printformat_module_dest(MODULE_NAME, dest, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  131|  1.86k|		printformat_dest(&dest,  TXT_NICK_CHANGED, oldnick,
  |  |  |  |  132|  1.86k|				 query->name, query->name,
  |  |  |  |  133|  1.86k|				 query->address == NULL ? "" : query->address);
  |  |  ------------------
  ------------------
  132|  1.86k|				 query->name, query->name,
  133|  1.86k|				 query->address == NULL ? "" : query->address);
  134|  1.86k|	}
  135|       |
  136|  2.22k|	signal_emit("window item changed", 2,
  137|  2.22k|		    window_item_window((WI_ITEM_REC *) query), query);
  ------------------
  |  |   15|  2.22k|	((WINDOW_REC *) ((WI_ITEM_REC *) (item))->window)
  ------------------
  138|  2.22k|}
fe-queries.c:signal_window_item_server_changed:
  142|  5.53M|{
  143|  5.53M|	if (IS_QUERY(query)) {
  ------------------
  |  |   12|  5.53M|	(QUERY(query) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |    8|  5.53M|	MODULE_CHECK_CAST_MODULE(query, QUERY_REC, type, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   67|  5.53M|	((cast *) module_check_cast_module(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (67:2): [True: 5.53M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   68|  5.53M|				offsetof(cast, type_field), module, id))
  |  |  |  |  ------------------
  |  |  |  |    9|  5.53M|			      "WINDOW ITEM TYPE", "QUERY")
  |  |  ------------------
  |  |  |  Branch (12:2): [True: 5.53M, False: 0]
  |  |  ------------------
  ------------------
  144|  5.53M|		g_free_and_null(query->server_tag);
  ------------------
  |  |   67|  5.53M|	G_STMT_START { \
  |  |   68|  5.53M|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 5.53M, False: 0]
  |  |  ------------------
  |  |   69|  5.53M|	} G_STMT_END
  ------------------
  |  Branch (144:3): [Folded, False: 5.53M]
  ------------------
  145|  5.53M|                if (query->server != NULL)
  ------------------
  |  Branch (145:21): [True: 5.53M, False: 0]
  ------------------
  146|  5.53M|			query->server_tag = g_strdup(query->server->tag);
  147|  5.53M|	}
  148|  5.53M|}
fe-queries.c:sig_server_connected:
  151|  29.4k|{
  152|  29.4k|	GSList *tmp;
  153|       |
  154|  29.4k|	if (!IS_SERVER(server))
  ------------------
  |  |   16|  29.4k|	(SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |    9|  29.4k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  29.4k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (154:6): [True: 0, False: 29.4k]
  ------------------
  155|      0|		return;
  156|       |
  157|       |	/* check if there's any queries without server */
  158|  5.56M|	for (tmp = queries; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (158:22): [True: 5.53M, False: 29.4k]
  ------------------
  159|  5.53M|		QUERY_REC *rec = tmp->data;
  160|       |
  161|  5.53M|		if (rec->server == NULL &&
  ------------------
  |  Branch (161:7): [True: 5.53M, False: 0]
  ------------------
  162|  5.53M|		    (rec->server_tag == NULL ||
  ------------------
  |  Branch (162:8): [True: 0, False: 5.53M]
  ------------------
  163|  5.53M|		     g_ascii_strcasecmp(rec->server_tag, server->tag) == 0)) {
  ------------------
  |  Branch (163:8): [True: 5.53M, False: 0]
  ------------------
  164|  5.53M|			window_item_change_server((WI_ITEM_REC *) rec, server);
  165|  5.53M|			server->queries = g_slist_append(server->queries, rec);
  166|  5.53M|		}
  167|  5.53M|	}
  168|  29.4k|}
fe-queries.c:sig_window_changed:
  301|      1|{
  302|       |	/* reset the queries last_unread_msg so query doesn't get closed
  303|       |	   immediately after switched to the window, or after changed to
  304|       |	   some other window from it */
  305|      1|        window_reset_query_timestamps(window);
  306|      1|        window_reset_query_timestamps(old_window);
  307|      1|}
fe-queries.c:window_reset_query_timestamps:
  286|      2|{
  287|      2|	GSList *tmp;
  288|       |
  289|      2|	if (window == NULL)
  ------------------
  |  Branch (289:6): [True: 1, False: 1]
  ------------------
  290|      1|                return;
  291|       |
  292|      2|	for (tmp = window->items; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (292:28): [True: 1, False: 1]
  ------------------
  293|      1|		QUERY_REC *query = QUERY(tmp->data);
  ------------------
  |  |    8|      1|	MODULE_CHECK_CAST_MODULE(query, QUERY_REC, type, \
  |  |  ------------------
  |  |  |  |   67|      1|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|      1|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|      1|			      "WINDOW ITEM TYPE", "QUERY")
  ------------------
  294|       |
  295|      1|		if (query != NULL)
  ------------------
  |  Branch (295:7): [True: 1, False: 0]
  ------------------
  296|      1|                        query->last_unread_msg = time(NULL);
  297|      1|	}
  298|      1|}
fe-queries.c:sig_message_private:
  330|  9.80k|{
  331|  9.80k|	QUERY_REC *query;
  332|       |
  333|       |	/* own message returned by bouncer? */
  334|  9.80k|	int own = (!g_strcmp0(nick, server->nick));
  335|       |
  336|       |	/* create query window if needed */
  337|  9.80k|	query = privmsg_get_query(server, own ? target : nick, FALSE, MSGLEVEL_MSGS);
  ------------------
  |  Branch (337:36): [True: 788, False: 9.01k]
  ------------------
  338|       |
  339|       |	/* reset the query's last_unread_msg timestamp */
  340|  9.80k|        if (query != NULL)
  ------------------
  |  Branch (340:13): [True: 7.99k, False: 1.81k]
  ------------------
  341|  7.99k|		query->last_unread_msg = time(NULL);
  342|  9.80k|}

fe_recode_init:
  194|      2|{
  195|      2|	command_bind("recode", NULL, (SIGNAL_FUNC) fe_recode_cmd);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  196|      2|	command_bind("recode add", NULL, (SIGNAL_FUNC) fe_recode_add_cmd);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  197|      2|	command_bind("recode remove", NULL, (SIGNAL_FUNC) fe_recode_remove_cmd);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  198|       |	signal_add_first("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  199|      2|	read_settings();
  200|      2|}
fe-recode.c:read_settings:
  142|      2|{
  143|       |	/* preserve the valid values */
  144|      2|	char *old_term_charset = g_strdup(term_charset);
  145|      2|	char *old_recode_fallback = g_strdup(recode_fallback);
  146|      2|	char *old_recode_out_default = g_strdup(recode_out_default);
  147|       |
  148|      2|	if (settings_get_bool("recode_transliterate")) {
  ------------------
  |  Branch (148:6): [True: 2, False: 0]
  ------------------
  149|       |		/* check if transliterations are supported in this system */
  150|      2|		if (!is_valid_charset("ASCII")) {
  ------------------
  |  Branch (150:7): [True: 0, False: 2]
  ------------------
  151|      0|			printformat(NULL, NULL, MSGLEVEL_CLIENTERROR,
  ------------------
  |  |   37|      0|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|      0|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  152|      0|				    TXT_CONVERSION_NO_TRANSLITS);
  153|      0|			settings_set_bool("recode_transliterate", FALSE);
  154|      0|		}
  155|      2|	}
  156|       |
  157|      2|	if (recode_fallback)
  ------------------
  |  Branch (157:6): [True: 0, False: 2]
  ------------------
  158|      0|		g_free(recode_fallback);
  159|      2|	recode_fallback = g_strdup(settings_get_str("recode_fallback"));
  160|      2|	if (!is_valid_charset(recode_fallback)) {
  ------------------
  |  Branch (160:6): [True: 0, False: 2]
  ------------------
  161|      0|		signal_emit("error command", 2, GINT_TO_POINTER(CMDERR_INVALID_CHARSET), recode_fallback);
  162|      0|		g_free(recode_fallback);
  163|      0|		recode_fallback = is_valid_charset(old_recode_fallback) ? g_strdup(old_recode_fallback) : NULL;
  ------------------
  |  Branch (163:21): [True: 0, False: 0]
  ------------------
  164|      0|		settings_set_str("recode_fallback", recode_fallback);
  165|      0|	}
  166|       |
  167|      2|	if (term_charset)
  ------------------
  |  Branch (167:6): [True: 0, False: 2]
  ------------------
  168|      0|		g_free(term_charset);
  169|      2|	term_charset = g_strdup(settings_get_str("term_charset"));
  170|      2|	if (!is_valid_charset(term_charset)) {
  ------------------
  |  Branch (170:6): [True: 0, False: 2]
  ------------------
  171|      0|		g_free(term_charset);
  172|      0|		term_charset = is_valid_charset(old_term_charset) ? g_strdup(old_term_charset) : NULL;
  ------------------
  |  Branch (172:18): [True: 0, False: 0]
  ------------------
  173|      0|		settings_set_str("term_charset", term_charset);
  174|      0|	}
  175|      2|	recode_update_charset();
  176|       |
  177|      2|	if (recode_out_default)
  ------------------
  |  Branch (177:6): [True: 0, False: 2]
  ------------------
  178|      0|		g_free(recode_out_default);
  179|      2|	recode_out_default = g_strdup(settings_get_str("recode_out_default_charset"));
  180|      2|	if (recode_out_default != NULL && *recode_out_default != '\0' &&
  ------------------
  |  Branch (180:6): [True: 2, False: 0]
  |  Branch (180:36): [True: 0, False: 2]
  ------------------
  181|      0|	    !is_valid_charset(recode_out_default)) {
  ------------------
  |  Branch (181:6): [True: 0, False: 0]
  ------------------
  182|      0|		signal_emit("error command", 2, GINT_TO_POINTER(CMDERR_INVALID_CHARSET), recode_out_default);
  183|      0|		g_free(recode_out_default);
  184|      0|		recode_out_default = is_valid_charset(old_recode_out_default) ? g_strdup(old_recode_out_default) : NULL;
  ------------------
  |  Branch (184:24): [True: 0, False: 0]
  ------------------
  185|      0|		settings_set_str("recode_out_default_charset", recode_out_default);
  186|      0|	}
  187|       |
  188|      2|	g_free(old_term_charset);
  189|      2|	g_free(old_recode_fallback);
  190|      2|	g_free(old_recode_out_default);
  191|      2|}

fe_server_init:
  495|      2|{
  496|      2|	command_bind("server", NULL, (SIGNAL_FUNC) cmd_server);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  497|      2|	command_bind("server connect", NULL, (SIGNAL_FUNC) cmd_server_connect);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  498|      2|	command_bind("server add", NULL, (SIGNAL_FUNC) cmd_server_add);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  499|      2|	command_bind("server modify", NULL, (SIGNAL_FUNC) cmd_server_modify);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  500|      2|	command_bind("server remove", NULL, (SIGNAL_FUNC) cmd_server_remove);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  501|      2|	command_bind_first("server", NULL, (SIGNAL_FUNC) server_command);
  ------------------
  |  |   74|      2|#define command_bind_first(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind_first(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  502|      2|	command_bind_first("disconnect", NULL, (SIGNAL_FUNC) server_command);
  ------------------
  |  |   74|      2|#define command_bind_first(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind_first(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  503|       |
  504|      2|	command_set_options(
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  505|      2|	    "server add", "4 6 !! ~ssl ~nossl ~+ssl_cert ~+ssl_pkey ~+ssl_pass ~ssl_verify "
  506|      2|	                  "~nossl_verify ~+ssl_cafile ~+ssl_capath ~+ssl_ciphers ~+ssl_fingerprint "
  507|      2|	                  "tls notls +tls_cert +tls_pkey +tls_pass tls_verify notls_verify "
  508|      2|	                  "+tls_cafile +tls_capath +tls_ciphers +tls_pinned_cert "
  509|      2|	                  "+tls_pinned_pubkey auto noauto proxy noproxy -host -port noautosendcmd");
  510|      2|	command_set_options(
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  511|      2|	    "server modify",
  512|      2|	    "4 6 !! ~ssl ~nossl ~+ssl_cert ~+ssl_pkey ~+ssl_pass ~ssl_verify ~nossl_verify "
  513|      2|	    "~+ssl_cafile ~+ssl_capath ~+ssl_ciphers ~+ssl_fingerprint tls notls +tls_cert "
  514|      2|	    "+tls_pkey +tls_pass tls_verify notls_verify +tls_cafile +tls_capath +tls_ciphers "
  515|      2|	    "+tls_pinned_cert +tls_pinned_pubkey auto noauto proxy noproxy -host -port "
  516|      2|	    "noautosendcmd");
  517|       |
  518|      2|	signal_add("server looking", (SIGNAL_FUNC) sig_server_looking);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  519|      2|	signal_add("server connecting", (SIGNAL_FUNC) sig_server_connecting);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  520|      2|	signal_add("server connected", (SIGNAL_FUNC) sig_server_connected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  521|      2|	signal_add("server connect failed", (SIGNAL_FUNC) sig_connect_failed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  522|      2|	signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  523|      2|	signal_add("server quit", (SIGNAL_FUNC) sig_server_quit);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  524|       |
  525|      2|	signal_add("server lag disconnect", (SIGNAL_FUNC) sig_server_lag_disconnected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  526|      2|	signal_add("server reconnect remove", (SIGNAL_FUNC) sig_server_reconnect_removed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  527|      2|	signal_add("server reconnect not found", (SIGNAL_FUNC) sig_server_reconnect_not_found);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  528|       |
  529|       |	signal_add("chat protocol unknown", (SIGNAL_FUNC) sig_chat_protocol_unknown);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  530|      2|}
fe-server.c:sig_server_connected:
  422|  29.4k|{
  423|  29.4k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (423:2): [True: 29.4k, False: 0]
  |  Branch (423:2): [True: 29.4k, False: 0]
  |  Branch (423:2): [Folded, False: 29.4k]
  ------------------
  424|       |
  425|  29.4k|	printformat(server, NULL, MSGLEVEL_CLIENTNOTICE,
  ------------------
  |  |   37|  29.4k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  29.4k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  426|  29.4k|		    TXT_CONNECTION_ESTABLISHED, server->connrec->address);
  427|  29.4k|}
fe-server.c:sig_server_disconnected:
  445|  29.4k|{
  446|  29.4k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (446:2): [True: 29.4k, False: 0]
  |  Branch (446:2): [True: 29.4k, False: 0]
  |  Branch (446:2): [Folded, False: 29.4k]
  ------------------
  447|       |
  448|  29.4k|	printformat(server, NULL, MSGLEVEL_CLIENTNOTICE,
  ------------------
  |  |   37|  29.4k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|  29.4k|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  449|  29.4k|		    TXT_CONNECTION_LOST, server->connrec->address);
  450|  29.4k|}

fe_settings_init:
  430|      2|{
  431|      2|	command_bind("set", NULL, (SIGNAL_FUNC) cmd_set);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  432|      2|	command_bind("toggle", NULL, (SIGNAL_FUNC) cmd_toggle);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  433|      2|	command_bind("alias", NULL, (SIGNAL_FUNC) cmd_alias);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  434|      2|	command_bind("unalias", NULL, (SIGNAL_FUNC) cmd_unalias);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  435|      2|	command_bind("reload", NULL, (SIGNAL_FUNC) cmd_reload);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  436|      2|	command_bind("save", NULL, (SIGNAL_FUNC) cmd_save);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  437|      2|	command_set_options("set", "clear default section");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  438|       |
  439|       |        signal_add("settings errors", (SIGNAL_FUNC) sig_settings_errors);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  440|      2|}

fe_tls_init:
   85|      2|{
   86|      2|	settings_add_bool("lookandfeel", "tls_verbose_connect", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
   87|       |
   88|       |	signal_add("tls handshake finished", (SIGNAL_FUNC)tls_handshake_finished);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
   89|      2|}

window_create:
  121|  98.3k|{
  122|  98.3k|	WINDOW_REC *rec;
  123|       |
  124|  98.3k|	rec = g_new0(WINDOW_REC, 1);
  ------------------
  |  Branch (124:8): [True: 98.3k, False: 0]
  |  Branch (124:8): [True: 0, False: 98.3k]
  ------------------
  125|  98.3k|	rec->refnum = window_get_new_refnum();
  126|  98.3k|	rec->level = settings_get_level("window_default_level");
  127|       |
  128|  98.3k|	windows = g_slist_prepend(windows, rec);
  129|  98.3k|	windows_seq_insert(rec);
  130|  98.3k|	signal_emit("window created", 2, rec, GINT_TO_POINTER(automatic));
  131|       |
  132|  98.3k|	if (item != NULL) window_item_add(rec, item, automatic);
  ------------------
  |  Branch (132:6): [True: 98.3k, False: 0]
  ------------------
  133|  98.3k|	if (windows->next == NULL || !automatic || settings_get_bool("window_auto_change")) {
  ------------------
  |  Branch (133:6): [True: 1, False: 98.3k]
  |  Branch (133:31): [True: 0, False: 98.3k]
  |  Branch (133:45): [True: 0, False: 98.3k]
  ------------------
  134|      1|		if (automatic && windows->next != NULL)
  ------------------
  |  Branch (134:7): [True: 1, False: 0]
  |  Branch (134:20): [True: 0, False: 1]
  ------------------
  135|      0|			signal_emit("window changed automatic", 1, rec);
  136|      1|		window_set_active(rec);
  137|      1|	}
  138|  98.3k|	return rec;
  139|  98.3k|}
window_destroy:
  183|  90.9k|{
  184|  90.9k|	GSequenceIter *iter;
  185|  90.9k|	g_return_if_fail(window != NULL);
  ------------------
  |  Branch (185:2): [True: 90.9k, False: 0]
  |  Branch (185:2): [True: 90.9k, False: 0]
  |  Branch (185:2): [Folded, False: 90.9k]
  ------------------
  186|       |
  187|  90.9k|	if (window->destroying) return;
  ------------------
  |  Branch (187:6): [True: 0, False: 90.9k]
  ------------------
  188|  90.9k|	window->destroying = TRUE;
  189|  90.9k|	windows = g_slist_remove(windows, window);
  190|  90.9k|	iter = windows_seq_window_lookup(window);
  191|  90.9k|	if (iter != NULL) g_sequence_remove(iter);
  ------------------
  |  Branch (191:6): [True: 90.9k, False: 0]
  ------------------
  192|       |
  193|  90.9k|	if (active_win == window) {
  ------------------
  |  Branch (193:6): [True: 0, False: 90.9k]
  ------------------
  194|      0|		active_win = NULL; /* it's corrupted */
  195|      0|		if (windows != NULL)
  ------------------
  |  Branch (195:7): [True: 0, False: 0]
  ------------------
  196|      0|			window_set_active(windows->data);
  197|      0|	}
  198|       |
  199|  90.9k|	while (window->items != NULL)
  ------------------
  |  Branch (199:9): [True: 0, False: 90.9k]
  ------------------
  200|      0|		window_item_destroy(window->items->data);
  201|       |
  202|  90.9k|        if (settings_get_bool("windows_auto_renumber"))
  ------------------
  |  Branch (202:13): [True: 90.9k, False: 0]
  ------------------
  203|  90.9k|		windows_pack(window->refnum);
  204|       |
  205|  90.9k|	signal_emit("window destroyed", 1, window);
  206|       |
  207|  90.9k|	while (window->bound_items != NULL)
  ------------------
  |  Branch (207:9): [True: 0, False: 90.9k]
  ------------------
  208|      0|                window_bind_destroy(window, window->bound_items->data);
  209|       |
  210|  90.9k|	g_free_not_null(window->hilight_color);
  ------------------
  |  |   64|  90.9k|#define g_free_not_null(a) g_free(a)
  ------------------
  211|  90.9k|	g_free_not_null(window->servertag);
  ------------------
  |  |   64|  90.9k|#define g_free_not_null(a) g_free(a)
  ------------------
  212|  90.9k|	g_free_not_null(window->theme_name);
  ------------------
  |  |   64|  90.9k|#define g_free_not_null(a) g_free(a)
  ------------------
  213|  90.9k|	g_free_not_null(window->name);
  ------------------
  |  |   64|  90.9k|#define g_free_not_null(a) g_free(a)
  ------------------
  214|  90.9k|	g_free(window);
  215|  90.9k|}
window_auto_destroy:
  218|  92.6k|{
  219|  92.6k|	if (settings_get_bool("autoclose_windows") && windows->next != NULL &&
  ------------------
  |  Branch (219:6): [True: 92.6k, False: 0]
  |  Branch (219:48): [True: 92.6k, False: 0]
  ------------------
  220|  92.6k|	    window->items == NULL && window->bound_items == NULL &&
  ------------------
  |  Branch (220:6): [True: 91.8k, False: 789]
  |  Branch (220:31): [True: 90.9k, False: 954]
  ------------------
  221|  90.9k|	    window->level == 0 && !window->immortal)
  ------------------
  |  Branch (221:6): [True: 90.9k, False: 0]
  |  Branch (221:28): [True: 90.9k, False: 0]
  ------------------
  222|  90.9k|                window_destroy(window);
  223|  92.6k|}
window_set_active:
  226|      1|{
  227|      1|	WINDOW_REC *old_window;
  228|       |
  229|      1|	if (window == active_win)
  ------------------
  |  Branch (229:6): [True: 0, False: 1]
  ------------------
  230|      0|		return;
  231|       |
  232|      1|	old_window = active_win;
  233|      1|	active_win = window;
  234|      1|	if (active_win != NULL) {
  ------------------
  |  Branch (234:6): [True: 1, False: 0]
  ------------------
  235|      1|		windows = g_slist_remove(windows, active_win);
  236|      1|		windows = g_slist_prepend(windows, active_win);
  237|      1|	}
  238|       |
  239|      1|        if (active_win != NULL)
  ------------------
  |  Branch (239:13): [True: 1, False: 0]
  ------------------
  240|      1|		signal_emit("window changed", 2, active_win, old_window);
  241|      1|}
window_change_server:
  244|   371M|{
  245|   371M|	SERVER_REC *active, *connect;
  246|       |
  247|   371M|	if (server != NULL && SERVER(server)->disconnected)
  ------------------
  |  |    9|   183M|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|   183M|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  |  Branch (247:6): [True: 183M, False: 188M]
  |  Branch (247:24): [True: 992, False: 183M]
  ------------------
  248|    992|		return;
  249|       |
  250|   371M|	if (server == NULL) {
  ------------------
  |  Branch (250:6): [True: 188M, False: 183M]
  ------------------
  251|   188M|		active = connect = NULL;
  252|   188M|	} else if (g_slist_find(servers, server) != NULL) {
  ------------------
  |  Branch (252:13): [True: 183M, False: 0]
  ------------------
  253|   183M|		active = server;
  254|   183M|		connect = NULL;
  255|   183M|	} else {
  256|      0|		active = NULL;
  257|      0|		connect = server;
  258|      0|	}
  259|       |
  260|   371M|	if (window->connect_server != connect) {
  ------------------
  |  Branch (260:6): [True: 0, False: 371M]
  ------------------
  261|      0|		window->connect_server = connect;
  262|      0|		signal_emit("window connect changed", 2, window, connect);
  263|      0|	}
  264|       |
  265|   371M|	if (window->active_server != active) {
  ------------------
  |  Branch (265:6): [True: 366M, False: 5.53M]
  ------------------
  266|   366M|		window->active_server = active;
  267|   366M|		signal_emit("window server changed", 2, window, active);
  268|   366M|	}
  269|   371M|}
window_find_level:
  361|  2.07M|{
  362|  2.07M|	GSList *tmp;
  363|  2.07M|	WINDOW_REC *match;
  364|       |
  365|  2.07M|	match = NULL;
  366|  12.5G|	for (tmp = windows; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (366:22): [True: 12.5G, False: 2.07M]
  ------------------
  367|  12.5G|		WINDOW_REC *rec = tmp->data;
  368|       |
  369|  12.5G|		if (WINDOW_LEVEL_MATCH(rec, server, level)) {
  ------------------
  |  |  357|  12.5G|	(((window)->level & level) && \
  |  |  ------------------
  |  |  |  Branch (357:3): [True: 0, False: 12.5G]
  |  |  ------------------
  |  |  358|  12.5G|	 (server == NULL || (window)->active_server == server))
  |  |  ------------------
  |  |  |  Branch (358:4): [True: 0, False: 0]
  |  |  |  Branch (358:22): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  370|       |			/* prefer windows without any items */
  371|      0|			if (rec->items == NULL)
  ------------------
  |  Branch (371:8): [True: 0, False: 0]
  ------------------
  372|      0|				return rec;
  373|       |
  374|      0|			if (match == NULL)
  ------------------
  |  Branch (374:8): [True: 0, False: 0]
  ------------------
  375|      0|				match = rec;
  376|      0|			else if (active_win == rec) {
  ------------------
  |  Branch (376:13): [True: 0, False: 0]
  ------------------
  377|       |				/* prefer active window over others */
  378|      0|				match = rec;
  379|      0|			}
  380|      0|		}
  381|  12.5G|	}
  382|       |
  383|  2.07M|	return match;
  384|  2.07M|}
window_find_closest:
  387|   804k|{
  388|   804k|	WINDOW_REC *window,*namewindow=NULL;
  389|   804k|	WI_ITEM_REC *item;
  390|   804k|	int i;
  391|       |
  392|       |	/* match by name */
  393|   804k|	item = name == NULL ? NULL :
  ------------------
  |  Branch (393:9): [True: 459k, False: 345k]
  ------------------
  394|   804k|		window_item_find(server, name);
  395|   804k|	if (item != NULL) {
  ------------------
  |  Branch (395:6): [True: 286k, False: 518k]
  ------------------
  396|   286k|		namewindow = window_item_window(item);
  ------------------
  |  |   15|   286k|	((WINDOW_REC *) ((WI_ITEM_REC *) (item))->window)
  ------------------
  397|   286k|		if (namewindow != NULL &&
  ------------------
  |  Branch (397:7): [True: 286k, False: 0]
  ------------------
  398|   286k|		    ((namewindow->level & level) != 0 ||
  ------------------
  |  Branch (398:8): [True: 0, False: 286k]
  ------------------
  399|   286k|		     !settings_get_bool("window_check_level_first"))) {
  ------------------
  |  Branch (399:8): [True: 286k, False: 0]
  ------------------
  400|       |			/* match, but if multiple windows have the same level
  401|       |			   we could be choosing a bad one here, eg.
  402|       |			   name=nick1 would get nick2's query instead of
  403|       |			   generic msgs window.
  404|       |
  405|       |	                   And check for prefixed !channel name --Borys  */
  406|   286k|			if (g_ascii_strcasecmp(name, item->visible_name) == 0 ||
  ------------------
  |  Branch (406:8): [True: 285k, False: 1.35k]
  ------------------
  407|  1.35k|			    g_ascii_strcasecmp(name, (char *) window_item_get_target((WI_ITEM_REC *) item)) == 0)
  ------------------
  |  |   19|  1.35k|	((item)->get_target(item))
  ------------------
  |  Branch (407:8): [True: 1.35k, False: 0]
  ------------------
  408|   286k|				return namewindow;
  409|   286k|		}
  410|   286k|	}
  411|       |
  412|       |	/* prefer windows without items */
  413|  1.55M|	for (i = 0; i < 2; i++) {
  ------------------
  |  Branch (413:14): [True: 1.03M, False: 518k]
  ------------------
  414|       |		/* match by level */
  415|  1.03M|		if (level != MSGLEVEL_HILIGHT)
  ------------------
  |  Branch (415:7): [True: 1.03M, False: 0]
  ------------------
  416|  1.03M|			level &= ~(MSGLEVEL_HILIGHT | MSGLEVEL_NOHILIGHT);
  417|  1.03M|		window = window_find_level(server, level);
  418|  1.03M|		if (window != NULL && (i == 1 || window->items == NULL))
  ------------------
  |  Branch (418:7): [True: 0, False: 1.03M]
  |  Branch (418:26): [True: 0, False: 0]
  |  Branch (418:36): [True: 0, False: 0]
  ------------------
  419|      0|			return window;
  420|       |
  421|       |		/* match by level - ignore server */
  422|  1.03M|		window = window_find_level(NULL, level);
  423|  1.03M|		if (window != NULL && (i == 1 || window->items == NULL))
  ------------------
  |  Branch (423:7): [True: 0, False: 1.03M]
  |  Branch (423:26): [True: 0, False: 0]
  |  Branch (423:36): [True: 0, False: 0]
  ------------------
  424|      0|			return window;
  425|  1.03M|	}
  426|       |
  427|       |	/* still return item's window if we didnt find anything */
  428|   518k|	if (namewindow != NULL) return namewindow;
  ------------------
  |  Branch (428:6): [True: 0, False: 518k]
  ------------------
  429|       |
  430|       |	/* fallback to active */
  431|   518k|	return active_win;
  432|   518k|}
window_refnum_cmp:
  552|  24.6M|{
  553|  24.6M|	return w1 == w2 ? 0 : w1->refnum < w2->refnum ? -1 : 1;
  ------------------
  |  Branch (553:9): [True: 90.9k, False: 24.5M]
  |  Branch (553:24): [True: 16.9M, False: 7.61M]
  ------------------
  554|  24.6M|}
windows_get_sorted:
  557|   117k|{
  558|   117k|	GSequenceIter *iter, *begin;
  559|   117k|	GSList *sorted;
  560|       |
  561|   117k|        sorted = NULL;
  562|   117k|	iter = windows_seq_end();
  563|   117k|	begin = windows_seq_begin();
  564|       |
  565|   665M|	while (iter != begin) {
  ------------------
  |  Branch (565:9): [True: 665M, False: 117k]
  ------------------
  566|   665M|		WINDOW_REC *rec;
  567|       |
  568|   665M|		iter = g_sequence_iter_prev(iter);
  569|   665M|		rec = g_sequence_get(iter);
  570|       |
  571|   665M|		sorted = g_slist_prepend(sorted, rec);
  572|   665M|	}
  573|       |
  574|   117k|        return sorted;
  575|   117k|}
window_bind_add:
  580|  28.2k|{
  581|  28.2k|	WINDOW_BIND_REC *rec;
  582|       |
  583|  28.2k|        g_return_val_if_fail(window != NULL, NULL);
  ------------------
  |  Branch (583:9): [True: 28.2k, False: 0]
  |  Branch (583:9): [True: 28.2k, False: 0]
  |  Branch (583:9): [Folded, False: 28.2k]
  ------------------
  584|  28.2k|        g_return_val_if_fail(servertag != NULL, NULL);
  ------------------
  |  Branch (584:9): [True: 28.2k, False: 0]
  |  Branch (584:9): [True: 28.2k, False: 0]
  |  Branch (584:9): [Folded, False: 28.2k]
  ------------------
  585|  28.2k|	g_return_val_if_fail(name != NULL, NULL);
  ------------------
  |  Branch (585:2): [True: 28.2k, False: 0]
  |  Branch (585:2): [True: 28.2k, False: 0]
  |  Branch (585:2): [Folded, False: 28.2k]
  ------------------
  586|       |
  587|  28.2k|	rec = window_bind_find(window, servertag, name);
  588|  28.2k|	if (rec != NULL)
  ------------------
  |  Branch (588:6): [True: 615, False: 27.6k]
  ------------------
  589|    615|		return rec;
  590|       |
  591|  27.6k|	rec = g_new0(WINDOW_BIND_REC, 1);
  ------------------
  |  Branch (591:8): [True: 27.6k, False: 0]
  |  Branch (591:8): [True: 0, False: 27.6k]
  ------------------
  592|  27.6k|        rec->name = g_strdup(name);
  593|  27.6k|        rec->servertag = g_strdup(servertag);
  594|       |
  595|  27.6k|	window->bound_items = g_slist_append(window->bound_items, rec);
  596|  27.6k|        return rec;
  597|  28.2k|}
window_bind_destroy:
  600|  19.2k|{
  601|  19.2k|	g_return_if_fail(window != NULL);
  ------------------
  |  Branch (601:2): [True: 19.2k, False: 0]
  |  Branch (601:2): [True: 19.2k, False: 0]
  |  Branch (601:2): [Folded, False: 19.2k]
  ------------------
  602|  19.2k|        g_return_if_fail(rec != NULL);
  ------------------
  |  Branch (602:9): [True: 19.2k, False: 0]
  |  Branch (602:9): [True: 19.2k, False: 0]
  |  Branch (602:9): [Folded, False: 19.2k]
  ------------------
  603|       |
  604|  19.2k|	window->bound_items = g_slist_remove(window->bound_items, rec);
  605|       |
  606|  19.2k|        g_free(rec->servertag);
  607|  19.2k|        g_free(rec->name);
  608|  19.2k|        g_free(rec);
  609|  19.2k|}
window_bind_find:
  613|   631M|{
  614|   631M|	GSList *tmp;
  615|       |
  616|   631M|        g_return_val_if_fail(window != NULL, NULL);
  ------------------
  |  Branch (616:9): [True: 631M, False: 0]
  |  Branch (616:9): [True: 631M, False: 0]
  |  Branch (616:9): [Folded, False: 631M]
  ------------------
  617|   631M|        g_return_val_if_fail(servertag != NULL, NULL);
  ------------------
  |  Branch (617:9): [True: 631M, False: 0]
  |  Branch (617:9): [True: 631M, False: 0]
  |  Branch (617:9): [Folded, False: 631M]
  ------------------
  618|   631M|        g_return_val_if_fail(name != NULL, NULL);
  ------------------
  |  Branch (618:9): [True: 631M, False: 0]
  |  Branch (618:9): [True: 631M, False: 0]
  |  Branch (618:9): [Folded, False: 631M]
  ------------------
  619|       |
  620|  1.28G|	for (tmp = window->bound_items; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (620:34): [True: 649M, False: 631M]
  ------------------
  621|   649M|		WINDOW_BIND_REC *rec = tmp->data;
  622|       |
  623|   649M|		if (g_ascii_strcasecmp(rec->name, name) == 0 &&
  ------------------
  |  Branch (623:7): [True: 19.8k, False: 649M]
  ------------------
  624|  19.8k|		    g_ascii_strcasecmp(rec->servertag, servertag) == 0)
  ------------------
  |  Branch (624:7): [True: 19.8k, False: 0]
  ------------------
  625|  19.8k|                        return rec;
  626|   649M|	}
  627|       |
  628|   631M|        return NULL;
  629|   631M|}
window_bind_remove_unsticky:
  632|  98.3k|{
  633|  98.3k|	GSList *tmp, *next;
  634|       |
  635|  98.3k|	for (tmp = window->bound_items; tmp != NULL; tmp = next) {
  ------------------
  |  Branch (635:34): [True: 0, False: 98.3k]
  ------------------
  636|      0|		WINDOW_BIND_REC *rec = tmp->data;
  637|       |
  638|      0|		next = tmp->next;
  639|      0|		if (!rec->sticky)
  ------------------
  |  Branch (639:7): [True: 0, False: 0]
  ------------------
  640|      0|                        window_bind_destroy(window, rec);
  641|      0|	}
  642|  98.3k|}
windows_init:
  816|      2|{
  817|      2|	active_win = NULL;
  818|      2|	windows_seq = g_sequence_new(NULL);
  819|      2|	daycheck = 0; daytag = -1;
  820|      2|	settings_add_bool("lookandfeel", "window_auto_change", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  821|      2|	settings_add_bool("lookandfeel", "windows_auto_renumber", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  822|      2|	settings_add_bool("lookandfeel", "window_check_level_first", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  823|      2|	settings_add_level("lookandfeel", "window_default_level", "NONE");
  ------------------
  |  |  101|      2|	settings_add_level_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  824|       |
  825|      2|	read_settings();
  826|      2|	signal_add("server looking", (SIGNAL_FUNC) sig_server_connected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  827|      2|	signal_add("server connected", (SIGNAL_FUNC) sig_server_connected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  828|      2|	signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  829|      2|	signal_add("server connect failed", (SIGNAL_FUNC) sig_server_disconnected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  830|       |	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  831|      2|}
fe-windows.c:window_get_new_refnum:
   98|  98.3k|{
   99|  98.3k|	WINDOW_REC *win;
  100|  98.3k|	GSequenceIter *iter, *end;
  101|  98.3k|	int refnum;
  102|       |
  103|  98.3k|	refnum = 1;
  104|  98.3k|	iter = windows_seq_begin();
  105|  98.3k|	end = windows_seq_end();
  106|       |
  107|   548M|	while (iter != end) {
  ------------------
  |  Branch (107:9): [True: 548M, False: 98.3k]
  ------------------
  108|   548M|		win = g_sequence_get(iter);
  109|       |
  110|   548M|		if (refnum != win->refnum)
  ------------------
  |  Branch (110:7): [True: 0, False: 548M]
  ------------------
  111|      0|			return refnum;
  112|       |
  113|   548M|		refnum++;
  114|   548M|		iter = g_sequence_iter_next(iter);
  115|   548M|	}
  116|       |
  117|  98.3k|	return refnum;
  118|  98.3k|}
fe-windows.c:windows_seq_insert:
   62|  98.3k|{
   63|       |	return g_sequence_insert_sorted(windows_seq, rec, (GCompareDataFunc)window_refnum_cmp, NULL);
   64|  98.3k|}
fe-windows.c:windows_seq_window_lookup:
   77|  90.9k|{
   78|       |	return g_sequence_lookup(windows_seq, rec, (GCompareDataFunc)window_refnum_cmp, NULL);
   79|  90.9k|}
fe-windows.c:windows_pack:
  158|  90.9k|{
  159|  90.9k|	WINDOW_REC *window;
  160|  90.9k|	int refnum;
  161|  90.9k|	GSequenceIter *iter, *end;
  162|       |
  163|  90.9k|	refnum = removed_refnum + 1;
  164|  90.9k|	end = windows_seq_end();
  165|  90.9k|	iter = windows_seq_refnum_lookup(refnum);
  166|  90.9k|	if (iter == NULL) return;
  ------------------
  |  Branch (166:6): [True: 26.5k, False: 64.4k]
  ------------------
  167|       |
  168|  1.52M|	while (iter != end) {
  ------------------
  |  Branch (168:9): [True: 1.45M, False: 64.4k]
  ------------------
  169|  1.45M|		window = g_sequence_get(iter);
  170|       |
  171|  1.45M|		if (window == NULL || window->sticky_refnum || window->refnum != refnum)
  ------------------
  |  Branch (171:7): [True: 0, False: 1.45M]
  |  Branch (171:25): [True: 0, False: 1.45M]
  |  Branch (171:50): [True: 0, False: 1.45M]
  ------------------
  172|      0|			break;
  173|       |
  174|  1.45M|		window_set_refnum0(window, refnum - 1);
  175|  1.45M|		windows_seq_changed(iter);
  176|       |
  177|  1.45M|		refnum++;
  178|  1.45M|		iter = g_sequence_iter_next(iter);
  179|  1.45M|	}
  180|  64.4k|}
fe-windows.c:window_set_refnum0:
  142|  1.45M|{
  143|  1.45M|	int old_refnum;
  144|       |
  145|  1.45M|	g_return_if_fail(window != NULL);
  ------------------
  |  Branch (145:2): [True: 1.45M, False: 0]
  |  Branch (145:2): [True: 1.45M, False: 0]
  |  Branch (145:2): [Folded, False: 1.45M]
  ------------------
  146|  1.45M|	g_return_if_fail(refnum >= 1);
  ------------------
  |  Branch (146:2): [True: 1.45M, False: 0]
  |  Branch (146:2): [True: 1.45M, False: 0]
  |  Branch (146:2): [Folded, False: 1.45M]
  ------------------
  147|  1.45M|	if (window->refnum == refnum) return;
  ------------------
  |  Branch (147:6): [True: 0, False: 1.45M]
  ------------------
  148|       |
  149|  1.45M|	old_refnum = window->refnum;
  150|  1.45M|	window->refnum = refnum;
  151|       |	signal_emit("window refnum changed", 2, window, GINT_TO_POINTER(old_refnum));
  152|  1.45M|}
fe-windows.c:windows_seq_refnum_lookup:
   67|  90.9k|{
   68|  90.9k|	return g_sequence_lookup(windows_seq, GINT_TO_POINTER(refnum), (GCompareDataFunc)window_refnum_lookup, NULL);
   69|  90.9k|}
fe-windows.c:window_refnum_lookup:
   46|  1.03M|{
   47|  1.03M|	int refnum = GPOINTER_TO_INT(refnum_p);
   48|  1.03M|	return window->refnum == refnum ? 0 : window->refnum < refnum ? -1 : 1;
  ------------------
  |  Branch (48:9): [True: 64.4k, False: 972k]
  |  Branch (48:40): [True: 843k, False: 129k]
  ------------------
   49|  1.03M|}
fe-windows.c:windows_seq_changed:
   72|  1.45M|{
   73|       |	g_sequence_sort_changed(iter, (GCompareDataFunc)window_refnum_cmp, NULL);
   74|  1.45M|}
fe-windows.c:windows_seq_end:
   57|   306k|{
   58|   306k|	return g_sequence_get_end_iter(windows_seq);
   59|   306k|}
fe-windows.c:windows_seq_begin:
   52|   215k|{
   53|   215k|	return g_sequence_get_begin_iter(windows_seq);
   54|   215k|}
fe-windows.c:read_settings:
  805|      2|{
  806|      2|	if (daytag != -1) {
  ------------------
  |  Branch (806:6): [True: 0, False: 2]
  ------------------
  807|      0|		g_source_remove(daytag);
  808|      0|		daytag = -1;
  809|      0|	}
  810|       |
  811|      2|	if (settings_get_bool("timestamps"))
  ------------------
  |  Branch (811:6): [True: 2, False: 0]
  ------------------
  812|      2|		daytag = g_timeout_add(30000, (GSourceFunc) sig_check_daychange, NULL);
  813|      2|}
fe-windows.c:sig_server_connected:
  645|  29.4k|{
  646|  29.4k|	GSList *tmp;
  647|       |
  648|  29.4k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (648:2): [True: 29.4k, False: 0]
  |  Branch (648:2): [True: 29.4k, False: 0]
  |  Branch (648:2): [Folded, False: 29.4k]
  ------------------
  649|       |
  650|       |	/* Try to keep some server assigned to windows..
  651|       |	   Also change active window's server if the window is empty */
  652|   183M|	for (tmp = windows; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (652:22): [True: 183M, False: 29.4k]
  ------------------
  653|   183M|		WINDOW_REC *rec = tmp->data;
  654|       |
  655|   183M|		if ((rec->servertag == NULL ||
  ------------------
  |  Branch (655:8): [True: 183M, False: 0]
  ------------------
  656|      0|		     g_ascii_strcasecmp(rec->servertag, server->tag) == 0) &&
  ------------------
  |  Branch (656:8): [True: 0, False: 0]
  ------------------
  657|   183M|		    (rec->active_server == NULL ||
  ------------------
  |  Branch (657:8): [True: 177M, False: 5.53M]
  ------------------
  658|  5.53M|		     (rec == active_win && rec->items == NULL)))
  ------------------
  |  Branch (658:9): [True: 29.4k, False: 5.50M]
  |  Branch (658:30): [True: 0, False: 29.4k]
  ------------------
  659|   177M|			window_change_server(rec, server);
  660|   183M|	}
  661|  29.4k|}
fe-windows.c:sig_server_disconnected:
  664|  29.4k|{
  665|  29.4k|	GSList *tmp;
  666|  29.4k|        SERVER_REC *new_server;
  667|       |
  668|  29.4k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (668:2): [True: 29.4k, False: 0]
  |  Branch (668:2): [True: 29.4k, False: 0]
  |  Branch (668:2): [Folded, False: 29.4k]
  ------------------
  669|       |
  670|  29.4k|	new_server = servers == NULL ? NULL : servers->data;
  ------------------
  |  Branch (670:15): [True: 29.4k, False: 0]
  ------------------
  671|   183M|	for (tmp = windows; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (671:22): [True: 183M, False: 29.4k]
  ------------------
  672|   183M|		WINDOW_REC *rec = tmp->data;
  673|       |
  674|   183M|		if (rec->active_server == server ||
  ------------------
  |  Branch (674:7): [True: 183M, False: 0]
  ------------------
  675|   183M|		    rec->connect_server == server) {
  ------------------
  |  Branch (675:7): [True: 0, False: 0]
  ------------------
  676|   183M|			window_change_server(rec, rec->servertag != NULL ?
  ------------------
  |  Branch (676:30): [True: 0, False: 183M]
  ------------------
  677|   183M|					     NULL : new_server);
  678|   183M|		}
  679|   183M|	}
  680|  29.4k|}

unformat_24bit_color:
  146|    282|{
  147|    282|	unsigned int color;
  148|    282|	unsigned char rgbx[4];
  149|    282|	unsigned int i;
  150|  1.40k|	for (i = 0; i < 4; ++i) {
  ------------------
  |  Branch (150:14): [True: 1.12k, False: 280]
  ------------------
  151|  1.12k|		if ((*ptr)[i + off] == '\0')
  ------------------
  |  Branch (151:7): [True: 2, False: 1.12k]
  ------------------
  152|      2|			return;
  153|  1.12k|		rgbx[i] = (*ptr)[i + off];
  154|  1.12k|	}
  155|    280|	rgbx[3] -= 0x20;
  156|    280|	*ptr += 4;
  157|  1.12k|	for (i = 0; i < 3; ++i) {
  ------------------
  |  Branch (157:14): [True: 840, False: 280]
  ------------------
  158|    840|		if (rgbx[3] & (0x10 << i))
  ------------------
  |  Branch (158:7): [True: 408, False: 432]
  ------------------
  159|    408|			rgbx[i] -= 0x20;
  160|    840|	}
  161|    280|	color = rgbx[0] << 16 | rgbx[1] << 8 | rgbx[2];
  162|    280|	if (rgbx[3] & 0x1) {
  ------------------
  |  Branch (162:6): [True: 151, False: 129]
  ------------------
  163|    151|		*bgcolor = color;
  164|    151|		*flags |= GUI_PRINT_FLAG_COLOR_24_BG;
  ------------------
  |  |   19|    151|#define GUI_PRINT_FLAG_COLOR_24_BG   0x0800
  ------------------
  165|    151|	}
  166|    129|	else {
  167|    129|		*fgcolor = color;
  168|    129|		*flags |= GUI_PRINT_FLAG_COLOR_24_FG;
  ------------------
  |  |   18|    129|#define GUI_PRINT_FLAG_COLOR_24_FG   0x0400
  ------------------
  169|    129|	}
  170|    280|}
format_expand_styles:
  213|  7.20M|{
  214|  7.20M|	int retval = 1;
  215|       |
  216|  7.20M|	char *p, fmt;
  217|       |
  218|       |	/* storage for numerical parsing code for %x/X formats. */
  219|  7.20M|	int tmp;
  220|  7.20M|	unsigned int tmp2;
  221|       |
  222|  7.20M|	fmt = **format;
  223|  7.20M|	switch (fmt) {
  224|      0|	case '{':
  ------------------
  |  Branch (224:2): [True: 0, False: 7.20M]
  ------------------
  225|      0|	case '}':
  ------------------
  |  Branch (225:2): [True: 0, False: 7.20M]
  ------------------
  226|      0|	case '%':
  ------------------
  |  Branch (226:2): [True: 0, False: 7.20M]
  ------------------
  227|       |		/* escaped char */
  228|      0|		g_string_append_c(out, fmt);
  229|      0|		break;
  230|      0|	case 'U':
  ------------------
  |  Branch (230:2): [True: 0, False: 7.20M]
  ------------------
  231|       |		/* Underline on/off */
  232|      0|		g_string_append_c(out, 4);
  233|      0|		g_string_append_c(out, FORMAT_STYLE_UNDERLINE);
  234|      0|		break;
  235|      0|	case '9':
  ------------------
  |  Branch (235:2): [True: 0, False: 7.20M]
  ------------------
  236|   959k|	case '_':
  ------------------
  |  Branch (236:2): [True: 959k, False: 6.24M]
  ------------------
  237|       |		/* bold on/off */
  238|   959k|		g_string_append_c(out, 4);
  239|   959k|		g_string_append_c(out, FORMAT_STYLE_BOLD);
  240|   959k|		break;
  241|      0|	case '8':
  ------------------
  |  Branch (241:2): [True: 0, False: 7.20M]
  ------------------
  242|       |		/* reverse */
  243|      0|		g_string_append_c(out, 4);
  244|      0|		g_string_append_c(out, FORMAT_STYLE_REVERSE);
  245|      0|		break;
  246|      0|	case 'I':
  ------------------
  |  Branch (246:2): [True: 0, False: 7.20M]
  ------------------
  247|       |		/* italic */
  248|      0|		g_string_append_c(out, 4);
  249|      0|		g_string_append_c(out, FORMAT_STYLE_ITALIC);
  250|      0|		break;
  251|  3.58k|	case ':':
  ------------------
  |  Branch (251:2): [True: 3.58k, False: 7.20M]
  ------------------
  252|       |		/* Newline */
  253|  3.58k|		g_string_append_c(out, '\n');
  254|  3.58k|		break;
  255|  36.0k|	case '|':
  ------------------
  |  Branch (255:2): [True: 36.0k, False: 7.16M]
  ------------------
  256|       |		/* Indent here */
  257|  36.0k|		g_string_append_c(out, 4);
  258|  36.0k|		g_string_append_c(out, FORMAT_STYLE_INDENT);
  259|  36.0k|		break;
  260|      0|	case 'F':
  ------------------
  |  Branch (260:2): [True: 0, False: 7.20M]
  ------------------
  261|       |		/* blink */
  262|      0|		g_string_append_c(out, 4);
  263|      0|		g_string_append_c(out, FORMAT_STYLE_BLINK);
  264|      0|		break;
  265|  3.06M|	case 'n':
  ------------------
  |  Branch (265:2): [True: 3.06M, False: 4.13M]
  ------------------
  266|  3.07M|	case 'N':
  ------------------
  |  Branch (266:2): [True: 7.45k, False: 7.19M]
  ------------------
  267|       |		/* default color */
  268|  3.07M|		g_string_append_c(out, 4);
  269|  3.07M|		g_string_append_c(out, FORMAT_STYLE_DEFAULTS);
  270|  3.07M|		break;
  271|      0|	case '>':
  ------------------
  |  Branch (271:2): [True: 0, False: 7.20M]
  ------------------
  272|       |		/* clear to end of line */
  273|      0|		g_string_append_c(out, 4);
  274|      0|		g_string_append_c(out, FORMAT_STYLE_CLRTOEOL);
  275|      0|		break;
  276|  32.0k|	case '#':
  ------------------
  |  Branch (276:2): [True: 32.0k, False: 7.17M]
  ------------------
  277|  32.0k|		g_string_append_c(out, 4);
  278|  32.0k|		g_string_append_c(out, FORMAT_STYLE_MONOSPACE);
  279|  32.0k|		break;
  280|      0|	case '[':
  ------------------
  |  Branch (280:2): [True: 0, False: 7.20M]
  ------------------
  281|       |		/* code */
  282|      0|		format_expand_code(format, out, flags);
  283|      0|		if ((*format)[0] == '\0')
  ------------------
  |  Branch (283:7): [True: 0, False: 0]
  ------------------
  284|       |			/* oops, reached end prematurely */
  285|      0|			(*format)--;
  286|       |
  287|      0|		break;
  288|      0|	case 'x':
  ------------------
  |  Branch (288:2): [True: 0, False: 7.20M]
  ------------------
  289|      0|	case 'X':
  ------------------
  |  Branch (289:2): [True: 0, False: 7.20M]
  ------------------
  290|      0|		if ((*format)[1] < '0' || (*format)[1] > '7')
  ------------------
  |  Branch (290:7): [True: 0, False: 0]
  |  Branch (290:29): [True: 0, False: 0]
  ------------------
  291|      0|			break;
  292|       |
  293|      0|		tmp = 16 + ((*format)[1]-'0'-1)*36;
  294|      0|		if (tmp > 231) {
  ------------------
  |  Branch (294:7): [True: 0, False: 0]
  ------------------
  295|      0|			if (!isalpha((*format)[2]))
  ------------------
  |  Branch (295:8): [True: 0, False: 0]
  ------------------
  296|      0|				break;
  297|       |
  298|      0|			tmp += (*format)[2] >= 'a' ? (*format)[2] - 'a' : (*format)[2] - 'A';
  ------------------
  |  Branch (298:11): [True: 0, False: 0]
  ------------------
  299|       |
  300|      0|			if (tmp > 255)
  ------------------
  |  Branch (300:8): [True: 0, False: 0]
  ------------------
  301|      0|				break;
  302|      0|		}
  303|      0|		else if (tmp > 0) {
  ------------------
  |  Branch (303:12): [True: 0, False: 0]
  ------------------
  304|      0|			if (!isalnum((*format)[2]))
  ------------------
  |  Branch (304:8): [True: 0, False: 0]
  ------------------
  305|      0|				break;
  306|       |
  307|      0|			if ((*format)[2] >= 'a')
  ------------------
  |  Branch (307:8): [True: 0, False: 0]
  ------------------
  308|      0|				tmp += 10 + (*format)[2] - 'a';
  309|      0|			else if ((*format)[2] >= 'A')
  ------------------
  |  Branch (309:13): [True: 0, False: 0]
  ------------------
  310|      0|				tmp += 10 + (*format)[2] - 'A';
  311|      0|			else
  312|      0|				tmp += (*format)[2] - '0';
  313|      0|		}
  314|      0|		else {
  315|      0|			if (!isxdigit((*format)[2]))
  ------------------
  |  Branch (315:8): [True: 0, False: 0]
  ------------------
  316|      0|				break;
  317|       |
  318|      0|			tmp = g_ascii_xdigit_value((*format)[2]);
  319|      0|		}
  320|       |
  321|      0|		retval += 2;
  322|       |
  323|      0|		format_ext_color(out, fmt == 'x', tmp);
  324|      0|		break;
  325|      0|	case 'z':
  ------------------
  |  Branch (325:2): [True: 0, False: 7.20M]
  ------------------
  326|      0|	case 'Z':
  ------------------
  |  Branch (326:2): [True: 0, False: 7.20M]
  ------------------
  327|      0|		tmp2 = 0;
  328|      0|		for (tmp = 1; tmp < 7; ++tmp) {
  ------------------
  |  Branch (328:17): [True: 0, False: 0]
  ------------------
  329|      0|			if (!isxdigit((*format)[tmp])) {
  ------------------
  |  Branch (329:8): [True: 0, False: 0]
  ------------------
  330|      0|				tmp2 = UINT_MAX;
  331|      0|				break;
  332|      0|			}
  333|      0|			tmp2 <<= 4;
  334|      0|			tmp2 |= g_ascii_xdigit_value((*format)[tmp]);
  335|      0|		}
  336|       |
  337|      0|		if (tmp2 == UINT_MAX)
  ------------------
  |  Branch (337:7): [True: 0, False: 0]
  ------------------
  338|      0|			break;
  339|       |
  340|      0|		retval += 6;
  341|       |
  342|      0|		format_24bit_color(out, fmt == 'z', tmp2);
  343|      0|		break;
  344|      0|	case 'o':
  ------------------
  |  Branch (344:2): [True: 0, False: 7.20M]
  ------------------
  345|      0|		g_string_append_c(out, 4);
  346|      0|		g_string_append_c(out, FORMAT_COLOR_NOCHANGE);
  347|      0|		g_string_append_c(out, (char) -1);
  348|      0|		break;
  349|      0|	case 'O':
  ------------------
  |  Branch (349:2): [True: 0, False: 7.20M]
  ------------------
  350|      0|		g_string_append_c(out, 4);
  351|      0|		g_string_append_c(out, (char) -1);
  352|      0|		g_string_append_c(out, FORMAT_COLOR_NOCHANGE);
  353|      0|		break;
  354|  3.09M|	default:
  ------------------
  |  Branch (354:2): [True: 3.09M, False: 4.10M]
  ------------------
  355|       |		/* check if it's a background color */
  356|  3.09M|		p = strchr(format_backs, fmt);
  357|  3.09M|		if (p != NULL) {
  ------------------
  |  Branch (357:7): [True: 0, False: 3.09M]
  ------------------
  358|      0|			g_string_append_c(out, 4);
  359|      0|			g_string_append_c(out, FORMAT_COLOR_NOCHANGE);
  360|      0|			g_string_append_c(out, (char) ((int) (p-format_backs)+'0'));
  361|      0|			break;
  362|      0|		}
  363|       |
  364|       |		/* check if it's a foreground color */
  365|  3.09M|		if (fmt == 'p') fmt = 'm';
  ------------------
  |  Branch (365:7): [True: 0, False: 3.09M]
  ------------------
  366|  3.09M|		p = strchr(format_fores, fmt);
  367|  3.09M|		if (p != NULL) {
  ------------------
  |  Branch (367:7): [True: 263k, False: 2.83M]
  ------------------
  368|   263k|			g_string_append_c(out, 4);
  369|   263k|			g_string_append_c(out, (char) ((int) (p-format_fores)+'0'));
  370|   263k|			g_string_append_c(out, FORMAT_COLOR_NOCHANGE);
  371|   263k|			break;
  372|   263k|		}
  373|       |
  374|       |		/* check if it's a bold foreground color */
  375|  2.83M|		if (fmt == 'P') fmt = 'M';
  ------------------
  |  Branch (375:7): [True: 0, False: 2.83M]
  ------------------
  376|  2.83M|		p = strchr(format_boldfores, fmt);
  377|  2.83M|		if (p != NULL) {
  ------------------
  |  Branch (377:7): [True: 2.83M, False: 0]
  ------------------
  378|  2.83M|			g_string_append_c(out, 4);
  379|  2.83M|			g_string_append_c(out, (char) (8+(int) (p-format_boldfores)+'0'));
  380|  2.83M|			g_string_append_c(out, FORMAT_COLOR_NOCHANGE);
  381|  2.83M|			break;
  382|  2.83M|		}
  383|       |
  384|      0|		return FALSE;
  385|  7.20M|	}
  386|       |
  387|  7.20M|	return retval;
  388|  7.20M|}
format_read_arglist:
  393|  2.61M|{
  394|  2.61M|	int num, len, bufpos;
  395|       |
  396|  2.61M|	g_return_if_fail(format->params < arglist_size);
  ------------------
  |  Branch (396:2): [True: 2.61M, False: 0]
  |  Branch (396:2): [True: 2.61M, False: 0]
  |  Branch (396:2): [Folded, False: 2.61M]
  ------------------
  397|       |
  398|  2.61M|	bufpos = 0;
  399|  2.61M|	arglist[format->params] = NULL;
  400|  4.44M|	for (num = 0; num < format->params; num++) {
  ------------------
  |  Branch (400:16): [True: 1.83M, False: 2.61M]
  ------------------
  401|  1.83M|		switch (format->paramtypes[num]) {
  ------------------
  |  Branch (401:11): [True: 1.83M, False: 0]
  ------------------
  402|  1.73M|		case FORMAT_STRING:
  ------------------
  |  Branch (402:3): [True: 1.73M, False: 99.0k]
  ------------------
  403|  1.73M|			arglist[num] = (char *) va_arg(va, char *);
  404|  1.73M|			if (arglist[num] == NULL)
  ------------------
  |  Branch (404:8): [True: 387k, False: 1.35M]
  ------------------
  405|   387k|				arglist[num] = "";
  406|  1.73M|			break;
  407|  98.9k|		case FORMAT_INT: {
  ------------------
  |  Branch (407:3): [True: 98.9k, False: 1.73M]
  ------------------
  408|  98.9k|			int d = (int) va_arg(va, int);
  409|       |
  410|  98.9k|			if (bufpos >= buffer_size) {
  ------------------
  |  Branch (410:8): [True: 0, False: 98.9k]
  ------------------
  411|      0|				arglist[num] = "";
  412|      0|				break;
  413|      0|			}
  414|       |
  415|  98.9k|			arglist[num] = buffer+bufpos;
  416|  98.9k|			len = g_snprintf(buffer+bufpos, buffer_size-bufpos,
  417|  98.9k|					 "%d", d);
  418|  98.9k|			bufpos += len+1;
  419|  98.9k|			break;
  420|  98.9k|		}
  421|     40|		case FORMAT_LONG: {
  ------------------
  |  Branch (421:3): [True: 40, False: 1.83M]
  ------------------
  422|     40|			long l = (long) va_arg(va, long);
  423|       |
  424|     40|			if (bufpos >= buffer_size) {
  ------------------
  |  Branch (424:8): [True: 0, False: 40]
  ------------------
  425|      0|				arglist[num] = "";
  426|      0|				break;
  427|      0|			}
  428|       |
  429|     40|			arglist[num] = buffer+bufpos;
  430|     40|			len = g_snprintf(buffer+bufpos, buffer_size-bufpos,
  431|     40|					 "%ld", l);
  432|     40|			bufpos += len+1;
  433|     40|			break;
  434|     40|		}
  435|      0|		case FORMAT_FLOAT: {
  ------------------
  |  Branch (435:3): [True: 0, False: 1.83M]
  ------------------
  436|      0|			double f = (double) va_arg(va, double);
  437|       |
  438|      0|			if (bufpos >= buffer_size) {
  ------------------
  |  Branch (438:8): [True: 0, False: 0]
  ------------------
  439|      0|				arglist[num] = "";
  440|      0|				break;
  441|      0|			}
  442|       |
  443|      0|			arglist[num] = buffer+bufpos;
  444|      0|			len = g_snprintf(buffer+bufpos, buffer_size-bufpos,
  445|      0|					 "%0.2f", f);
  446|      0|			bufpos += len+1;
  447|      0|			break;
  448|      0|		}
  449|  1.83M|		}
  450|  1.83M|	}
  451|  2.61M|}
format_create_dest_tag_meta:
  477|   800k|{
  478|   800k|	memset(dest, 0, sizeof(TEXT_DEST_REC));
  479|       |
  480|   800k|	dest->server = server;
  481|   800k|	dest->server_tag = server != NULL ? SERVER(server)->tag : server_tag;
  ------------------
  |  |    9|   720k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|   720k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  |  Branch (481:21): [True: 720k, False: 79.9k]
  ------------------
  482|   800k|	dest->target = target;
  483|   800k|	dest->level = level;
  484|   800k|	dest->window = window != NULL ? window :
  ------------------
  |  Branch (484:17): [True: 0, False: 800k]
  ------------------
  485|   800k|		window_find_closest(server, target, level);
  486|   800k|	dest->meta = meta != NULL ? meta : global_meta;
  ------------------
  |  Branch (486:15): [True: 720k, False: 79.9k]
  ------------------
  487|   800k|}
format_create_dest_tag:
  491|   800k|{
  492|   800k|	format_create_dest_tag_meta(dest, server, server_tag, target, level, window,
  493|   800k|	                            server != NULL ? SERVER(server)->current_incoming_meta : NULL);
  ------------------
  |  |    9|   720k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|   720k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  |  Branch (493:30): [True: 720k, False: 79.9k]
  ------------------
  494|   800k|}
format_create_dest:
  498|   797k|{
  499|       |	format_create_dest_tag(dest, server, NULL, target, level, window);
  500|   797k|}
format_get_text_theme:
  800|  2.07M|{
  801|  2.07M|	va_list va;
  802|  2.07M|	char *str;
  803|       |
  804|  2.07M|	if (theme == NULL)
  ------------------
  |  Branch (804:6): [True: 0, False: 2.07M]
  ------------------
  805|      0|		theme = window_get_theme(dest->window);
  ------------------
  |  |   76|      0|	(window != NULL && (window)->theme != NULL ? \
  |  |  ------------------
  |  |  |  Branch (76:3): [True: 0, False: 0]
  |  |  |  Branch (76:21): [True: 0, False: 0]
  |  |  ------------------
  |  |   77|      0|	(window)->theme : current_theme)
  ------------------
  806|       |
  807|  2.07M|	va_start(va, formatnum);
  808|  2.07M|	str = format_get_text_theme_args(theme, module, dest, formatnum, va);
  809|  2.07M|	va_end(va);
  810|       |
  811|  2.07M|	return str;
  812|  2.07M|}
format_get_text_theme_args:
  817|  2.09M|{
  818|  2.09M|	char *arglist[MAX_FORMAT_PARAMS];
  819|  2.09M|	char buffer[DEFAULT_FORMAT_ARGLIST_SIZE];
  820|  2.09M|	FORMAT_REC *formats;
  821|       |
  822|  2.09M|	formats = g_hash_table_lookup(default_formats, module);
  823|  2.09M|	format_read_arglist(va, &formats[formatnum],
  824|  2.09M|			    arglist, sizeof(arglist)/sizeof(char *),
  825|  2.09M|			    buffer, sizeof(buffer));
  826|       |
  827|  2.09M|	return format_get_text_theme_charargs(theme, module, dest,
  828|  2.09M|					      formatnum, arglist);
  829|  2.09M|}
format_get_text_theme_charargs:
  834|  2.61M|{
  835|  2.61M|	MODULE_THEME_REC *module_theme;
  836|  2.61M|	char *text;
  837|       |
  838|  2.61M|	if (module == NULL)
  ------------------
  |  Branch (838:6): [True: 0, False: 2.61M]
  ------------------
  839|      0|		return NULL;
  840|       |
  841|  2.61M|	module_theme = g_hash_table_lookup(theme->modules, module);
  842|  2.61M|	if (module_theme == NULL)
  ------------------
  |  Branch (842:6): [True: 0, False: 2.61M]
  ------------------
  843|      0|		return NULL;
  844|       |
  845|  2.61M|	text = module_theme->expanded_formats[formatnum];
  846|  2.61M|	return format_get_text_args(dest, text, args);
  847|  2.61M|}
format_get_text:
  852|  24.1k|{
  853|  24.1k|	TEXT_DEST_REC dest;
  854|  24.1k|	THEME_REC *theme;
  855|  24.1k|	va_list va;
  856|  24.1k|	char *str;
  857|       |
  858|  24.1k|	format_create_dest(&dest, server, target, 0, window);
  859|  24.1k|	theme = window_get_theme(dest.window);
  ------------------
  |  |   76|  24.1k|	(window != NULL && (window)->theme != NULL ? \
  |  |  ------------------
  |  |  |  Branch (76:3): [True: 24.1k, False: 0]
  |  |  |  Branch (76:21): [True: 0, False: 24.1k]
  |  |  ------------------
  |  |   77|  24.1k|	(window)->theme : current_theme)
  ------------------
  860|       |
  861|  24.1k|	va_start(va, formatnum);
  862|  24.1k|	str = format_get_text_theme_args(theme, module, &dest, formatnum, va);
  863|  24.1k|	va_end(va);
  864|       |
  865|  24.1k|	return str;
  866|  24.1k|}
format_add_linestart:
  871|  2.26M|{
  872|  2.26M|	GString *str;
  873|  2.26M|	char *ret;
  874|       |
  875|  2.26M|	if (linestart == NULL)
  ------------------
  |  Branch (875:6): [True: 196k, False: 2.06M]
  ------------------
  876|   196k|		return g_strdup(text);
  877|       |
  878|  2.06M|	if (strchr(text, '\n') == NULL)
  ------------------
  |  Branch (878:6): [True: 1.46M, False: 604k]
  ------------------
  879|  1.46M|		return g_strconcat(linestart, text, NULL);
  880|       |
  881|   604k|	str = g_string_new(linestart);
  882|   218M|	while (*text != '\0') {
  ------------------
  |  Branch (882:9): [True: 217M, False: 604k]
  ------------------
  883|   217M|		g_string_append_c(str, *text);
  884|   217M|		if (*text == '\n')
  ------------------
  |  Branch (884:7): [True: 6.02M, False: 211M]
  ------------------
  885|  6.02M|			g_string_append(str, linestart);
  886|   217M|		text++;
  887|   217M|	}
  888|       |
  889|   604k|	ret = g_string_free_and_steal(str);
  890|   604k|	return ret;
  891|  2.06M|}
format_get_level_tag:
  927|  1.13M|{
  928|  1.13M|	int format;
  929|       |
  930|       |	/* check for flags if we want to override defaults */
  931|  1.13M|	if (dest->flags & PRINT_FLAG_UNSET_LINE_START)
  ------------------
  |  |   42|  1.13M|#define PRINT_FLAG_UNSET_LINE_START	0x0040
  ------------------
  |  Branch (931:6): [True: 0, False: 1.13M]
  ------------------
  932|      0|		return NULL;
  933|       |
  934|  1.13M|	if (dest->flags & PRINT_FLAG_SET_LINE_START)
  ------------------
  |  |   40|  1.13M|#define PRINT_FLAG_SET_LINE_START	0x0001
  ------------------
  |  Branch (934:6): [True: 0, False: 1.13M]
  ------------------
  935|      0|		format = TXT_LINE_START;
  936|  1.13M|	else if (dest->flags & PRINT_FLAG_SET_LINE_START_IRSSI)
  ------------------
  |  |   41|  1.13M|#define PRINT_FLAG_SET_LINE_START_IRSSI	0x0002
  ------------------
  |  Branch (936:11): [True: 0, False: 1.13M]
  ------------------
  937|      0|		format = TXT_LINE_START_IRSSI;
  938|  1.13M|	else {
  939|       |		/* use defaults */
  940|  1.13M|		if (dest->level & LINE_START_IRSSI_LEVEL)
  ------------------
  |  |  918|  1.13M|	(MSGLEVEL_CLIENTERROR | MSGLEVEL_CLIENTNOTICE)
  ------------------
  |  Branch (940:7): [True: 73.5k, False: 1.05M]
  ------------------
  941|  73.5k|			format = TXT_LINE_START_IRSSI;
  942|  1.05M|		else if ((dest->level & NOT_LINE_START_LEVEL) == 0)
  ------------------
  |  |  921|  1.05M|	(MSGLEVEL_NEVER | MSGLEVEL_LASTLOG | MSGLEVEL_CLIENTCRAP | MSGLEVEL_MSGS |                 \
  |  |  922|  1.05M|	 MSGLEVEL_PUBLIC | MSGLEVEL_DCC | MSGLEVEL_DCCMSGS | MSGLEVEL_ACTIONS | MSGLEVEL_NOTICES | \
  |  |  923|  1.05M|	 MSGLEVEL_PUBNOTICES | MSGLEVEL_SNOTES | MSGLEVEL_CTCPS)
  ------------------
  |  Branch (942:12): [True: 933k, False: 124k]
  ------------------
  943|   933k|			format = TXT_LINE_START;
  944|   124k|		else
  945|   124k|			return NULL;
  946|  1.13M|	}
  947|       |
  948|  1.00M|	return format_get_text_theme(theme, MODULE_NAME, dest, format);
  ------------------
  |  |    3|  1.00M|#define MODULE_NAME "fe-common/core"
  ------------------
  949|  1.13M|}
format_get_line_start:
 1021|  1.13M|{
 1022|  1.13M|	char *timestamp, *servertag;
 1023|  1.13M|	char *linestart;
 1024|       |
 1025|  1.13M|	timestamp = get_timestamp(theme, dest, t);
 1026|  1.13M|	servertag = get_server_tag(theme, dest);
 1027|       |
 1028|  1.13M|	if (timestamp == NULL && servertag == NULL)
  ------------------
  |  Branch (1028:6): [True: 72.3k, False: 1.06M]
  |  Branch (1028:27): [True: 72.3k, False: 0]
  ------------------
 1029|  72.3k|		return NULL;
 1030|       |
 1031|  1.06M|	linestart = g_strconcat(timestamp != NULL ? timestamp : "",
  ------------------
  |  Branch (1031:26): [True: 1.06M, False: 0]
  ------------------
 1032|  1.06M|				servertag, NULL);
 1033|       |
 1034|  1.06M|	g_free_not_null(timestamp);
  ------------------
  |  |   64|  1.06M|#define g_free_not_null(a) g_free(a)
  ------------------
 1035|  1.06M|	g_free_not_null(servertag);
  ------------------
  |  |   64|  1.06M|#define g_free_not_null(a) g_free(a)
  ------------------
 1036|  1.06M|	return linestart;
 1037|  1.13M|}
strip_codes:
 1344|  1.14M|{
 1345|  1.14M|	const char *p;
 1346|  1.14M|	char *str, *out;
 1347|       |
 1348|  1.14M|	out = str = g_strdup(input);
 1349|   230M|	for (p = input; *p != '\0'; p++) {
  ------------------
  |  Branch (1349:18): [True: 229M, False: 1.14M]
  ------------------
 1350|   229M|		if (*p == 3) {
  ------------------
  |  Branch (1350:7): [True: 43.9k, False: 229M]
  ------------------
 1351|  43.9k|			p++;
 1352|       |
 1353|       |			/* mirc color */
 1354|  43.9k|			get_mirc_color(&p, NULL, NULL);
 1355|  43.9k|			p--;
 1356|  43.9k|			continue;
 1357|  43.9k|		}
 1358|       |
 1359|   229M|		if (*p == 4 && p[1] != '\0') {
  ------------------
  |  Branch (1359:7): [True: 19.0M, False: 210M]
  |  Branch (1359:18): [True: 19.0M, False: 136]
  ------------------
 1360|  19.0M|			if (p[1] >= FORMAT_STYLE_SPECIAL) {
  ------------------
  |  |  163|  19.0M|#define FORMAT_STYLE_SPECIAL	0x60
  ------------------
  |  Branch (1360:8): [True: 10.0M, False: 8.98M]
  ------------------
 1361|  10.0M|				p++;
 1362|  10.0M|				continue;
 1363|  10.0M|			}
 1364|       |
 1365|       |			/* irssi color */
 1366|  8.98M|			if (p[2] != '\0') {
  ------------------
  |  Branch (1366:8): [True: 8.98M, False: 189]
  ------------------
 1367|  8.98M|				if (p[1] == FORMAT_COLOR_24) {
  ------------------
  |  |  161|  8.98M|#define FORMAT_COLOR_24	('0'-13)
  ------------------
  |  Branch (1367:9): [True: 282, False: 8.98M]
  ------------------
 1368|    282|					if (p[3] == '\0') p += 2;
  ------------------
  |  Branch (1368:10): [True: 0, False: 282]
  ------------------
 1369|    282|					else if (p[4] == '\0') p += 3;
  ------------------
  |  Branch (1369:15): [True: 2, False: 280]
  ------------------
 1370|    280|					else if (p[5] == '\0') p += 4;
  ------------------
  |  Branch (1370:15): [True: 0, False: 280]
  ------------------
 1371|    280|					else p += 5;
 1372|    282|				} else
 1373|  8.98M|				p += 2;
 1374|  8.98M|				continue;
 1375|  8.98M|			}
 1376|  8.98M|		}
 1377|       |
 1378|   210M|		if (*p == 27 && p[1] != '\0') {
  ------------------
  |  Branch (1378:7): [True: 1.08M, False: 209M]
  |  Branch (1378:19): [True: 1.08M, False: 1.30k]
  ------------------
 1379|  1.08M|			p++;
 1380|  1.08M|			p = get_ansi_color(current_theme, p, NULL, NULL, NULL);
 1381|  1.08M|			p--;
 1382|   209M|		} else if (!IS_COLOR_CODE(*p))
  ------------------
  |  | 1277|   209M|	((c) == 2 || (c) == 3 || (c) == 4 || (c) == 6 || (c) == 7 || \
  |  |  ------------------
  |  |  |  Branch (1277:3): [True: 584k, False: 208M]
  |  |  |  Branch (1277:15): [True: 0, False: 208M]
  |  |  |  Branch (1277:27): [True: 325, False: 208M]
  |  |  |  Branch (1277:39): [True: 19.7k, False: 208M]
  |  |  |  Branch (1277:51): [True: 5.10k, False: 208M]
  |  |  ------------------
  |  | 1278|   209M|	(c) == 15 || (c) == 17 || (c) == 22 || (c) == 27 || (c) == 29 || (c) == 31)
  |  |  ------------------
  |  |  |  Branch (1278:2): [True: 5.01k, False: 208M]
  |  |  |  Branch (1278:15): [True: 5.71k, False: 208M]
  |  |  |  Branch (1278:28): [True: 49.6k, False: 208M]
  |  |  |  Branch (1278:41): [True: 1.30k, False: 208M]
  |  |  |  Branch (1278:54): [True: 10.4k, False: 208M]
  |  |  |  Branch (1278:67): [True: 44.7k, False: 208M]
  |  |  ------------------
  ------------------
 1383|   208M|			*out++ = *p;
 1384|   210M|	}
 1385|       |
 1386|  1.14M|	*out = '\0';
 1387|  1.14M|	return str;
 1388|  1.14M|}
format_send_as_gui_flags:
 1398|  1.13M|{
 1399|  1.13M|	THEME_REC *theme;
 1400|  1.13M|	char *dup, *str, *ptr, type;
 1401|  1.13M|	int fgcolor, bgcolor;
 1402|  1.13M|	int flags;
 1403|       |
 1404|  1.13M|	theme = window_get_theme(dest->window);
  ------------------
  |  |   76|  1.13M|	(window != NULL && (window)->theme != NULL ? \
  |  |  ------------------
  |  |  |  Branch (76:3): [True: 1.13M, False: 0]
  |  |  |  Branch (76:21): [True: 0, False: 1.13M]
  |  |  ------------------
  |  |   77|  1.13M|	(window)->theme : current_theme)
  ------------------
 1405|       |
 1406|  1.13M|	dup = str = g_strdup(text);
 1407|       |
 1408|  1.13M|	flags = 0; fgcolor = theme->default_color; bgcolor = -1;
 1409|       |
 1410|  1.13M|	if (*str == '\0') {
  ------------------
  |  Branch (1410:6): [True: 22.7k, False: 1.10M]
  ------------------
 1411|       |		/* empty line, write line info only */
 1412|  22.7k|		handler(dest->window, GINT_TO_POINTER(fgcolor), GINT_TO_POINTER(bgcolor),
 1413|  22.7k|		        GINT_TO_POINTER(flags), str, dest);
 1414|  22.7k|	}
 1415|       |
 1416|  25.0M|	while (*str != '\0') {
  ------------------
  |  Branch (1416:9): [True: 24.7M, False: 331k]
  ------------------
 1417|  24.7M|		type = '\0';
 1418|   255M|		for (ptr = str; *ptr != '\0'; ptr++) {
  ------------------
  |  Branch (1418:19): [True: 254M, False: 794k]
  ------------------
 1419|   254M|			if (IS_COLOR_CODE(*ptr) || *ptr == '\n') {
  ------------------
  |  | 1277|   509M|	((c) == 2 || (c) == 3 || (c) == 4 || (c) == 6 || (c) == 7 || \
  |  |  ------------------
  |  |  |  Branch (1277:3): [True: 584k, False: 253M]
  |  |  |  Branch (1277:15): [True: 43.9k, False: 253M]
  |  |  |  Branch (1277:27): [True: 18.9M, False: 234M]
  |  |  |  Branch (1277:39): [True: 19.7k, False: 234M]
  |  |  |  Branch (1277:51): [True: 5.10k, False: 234M]
  |  |  ------------------
  |  | 1278|   254M|	(c) == 15 || (c) == 17 || (c) == 22 || (c) == 27 || (c) == 29 || (c) == 31)
  |  |  ------------------
  |  |  |  Branch (1278:2): [True: 5.01k, False: 234M]
  |  |  |  Branch (1278:15): [True: 5.71k, False: 234M]
  |  |  |  Branch (1278:28): [True: 49.6k, False: 234M]
  |  |  |  Branch (1278:41): [True: 1.08M, False: 233M]
  |  |  |  Branch (1278:54): [True: 10.4k, False: 233M]
  |  |  |  Branch (1278:67): [True: 44.7k, False: 233M]
  |  |  ------------------
  ------------------
  |  Branch (1419:31): [True: 3.09M, False: 230M]
  ------------------
 1420|  23.9M|				type = *ptr;
 1421|  23.9M|				*ptr++ = '\0';
 1422|  23.9M|				break;
 1423|  23.9M|			}
 1424|   254M|		}
 1425|       |
 1426|  24.7M|		if (type == 4 && *ptr == FORMAT_STYLE_CLRTOEOL) {
  ------------------
  |  |  171|  18.9M|#define FORMAT_STYLE_CLRTOEOL	(0x08 + FORMAT_STYLE_SPECIAL)
  |  |  ------------------
  |  |  |  |  163|  18.9M|#define FORMAT_STYLE_SPECIAL	0x60
  |  |  ------------------
  ------------------
  |  Branch (1426:7): [True: 18.9M, False: 5.74M]
  |  Branch (1426:20): [True: 89, False: 18.9M]
  ------------------
 1427|       |			/* clear to end of line */
 1428|     89|			flags |= GUI_PRINT_FLAG_CLRTOEOL;
  ------------------
  |  |   16|     89|#define GUI_PRINT_FLAG_CLRTOEOL      0x0100
  ------------------
 1429|     89|		}
 1430|       |
 1431|  24.7M|		if (*str != '\0' || (flags & GUI_PRINT_FLAG_CLRTOEOL)) {
  ------------------
  |  |   16|  2.00M|#define GUI_PRINT_FLAG_CLRTOEOL      0x0100
  ------------------
  |  Branch (1431:7): [True: 22.7M, False: 2.00M]
  |  Branch (1431:23): [True: 1, False: 2.00M]
  ------------------
 1432|       |			/* send the text to gui handler */
 1433|  22.7M|			handler(dest->window, GINT_TO_POINTER(fgcolor), GINT_TO_POINTER(bgcolor),
 1434|  22.7M|			        GINT_TO_POINTER(flags), str, dest);
 1435|  22.7M|			flags &= ~(GUI_PRINT_FLAG_INDENT|GUI_PRINT_FLAG_CLRTOEOL);
  ------------------
  |  |   13|  22.7M|#define GUI_PRINT_FLAG_INDENT        0x0020
  ------------------
              			flags &= ~(GUI_PRINT_FLAG_INDENT|GUI_PRINT_FLAG_CLRTOEOL);
  ------------------
  |  |   16|  22.7M|#define GUI_PRINT_FLAG_CLRTOEOL      0x0100
  ------------------
 1436|  22.7M|		}
 1437|       |
 1438|  24.7M|		if (type == '\n') {
  ------------------
  |  Branch (1438:7): [True: 3.09M, False: 21.6M]
  ------------------
 1439|  3.09M|			handler(dest->window, GINT_TO_POINTER(-1), GINT_TO_POINTER(-1),
 1440|  3.09M|			        GINT_TO_POINTER(GUI_PRINT_FLAG_NEWLINE), "", dest);
 1441|  3.09M|			fgcolor = theme->default_color;
 1442|  3.09M|			bgcolor = -1;
 1443|  3.09M|			flags &= GUI_PRINT_FLAG_INDENT|GUI_PRINT_FLAG_MONOSPACE;
  ------------------
  |  |   13|  3.09M|#define GUI_PRINT_FLAG_INDENT        0x0020
  ------------------
              			flags &= GUI_PRINT_FLAG_INDENT|GUI_PRINT_FLAG_MONOSPACE;
  ------------------
  |  |   17|  3.09M|#define GUI_PRINT_FLAG_MONOSPACE     0x0200
  ------------------
 1444|  3.09M|		}
 1445|       |
 1446|  24.7M|		if (*ptr == '\0')
  ------------------
  |  Branch (1446:7): [True: 799k, False: 23.9M]
  ------------------
 1447|   799k|			break;
 1448|       |
 1449|  23.9M|		switch (type)
  ------------------
  |  Branch (1449:11): [True: 20.8M, False: 3.10M]
  ------------------
 1450|  23.9M|		{
 1451|   582k|		case 2:
  ------------------
  |  Branch (1451:3): [True: 582k, False: 23.3M]
  ------------------
 1452|       |			/* bold */
 1453|   582k|			if (!hide_text_style)
  ------------------
  |  Branch (1453:8): [True: 582k, False: 0]
  ------------------
 1454|   582k|				flags ^= GUI_PRINT_FLAG_BOLD;
  ------------------
  |  |    8|   582k|#define GUI_PRINT_FLAG_BOLD          0x0001
  ------------------
 1455|   582k|			break;
 1456|  43.9k|		case 3:
  ------------------
  |  Branch (1456:3): [True: 43.9k, False: 23.8M]
  ------------------
 1457|       |			/* MIRC color */
 1458|  43.9k|			get_mirc_color((const char **) &ptr,
 1459|  43.9k|					hide_colors ? NULL : &fgcolor,
  ------------------
  |  Branch (1459:6): [True: 0, False: 43.9k]
  ------------------
 1460|  43.9k|					hide_colors ? NULL : &bgcolor);
  ------------------
  |  Branch (1460:6): [True: 0, False: 43.9k]
  ------------------
 1461|  43.9k|			if (!hide_colors)
  ------------------
  |  Branch (1461:8): [True: 43.9k, False: 0]
  ------------------
 1462|  43.9k|				flags |= GUI_PRINT_FLAG_MIRC_COLOR;
  ------------------
  |  |   12|  43.9k|#define GUI_PRINT_FLAG_MIRC_COLOR    0x0010
  ------------------
 1463|  43.9k|			break;
 1464|  18.9M|		case 4:
  ------------------
  |  Branch (1464:3): [True: 18.9M, False: 4.94M]
  ------------------
 1465|       |			/* user specific colors */
 1466|  18.9M|			flags &= ~GUI_PRINT_FLAG_MIRC_COLOR;
  ------------------
  |  |   12|  18.9M|#define GUI_PRINT_FLAG_MIRC_COLOR    0x0010
  ------------------
 1467|  18.9M|			switch (*ptr) {
 1468|    519|			case FORMAT_STYLE_BLINK:
  ------------------
  |  |  164|    519|#define FORMAT_STYLE_BLINK	(0x01 + FORMAT_STYLE_SPECIAL)
  |  |  ------------------
  |  |  |  |  163|    519|#define FORMAT_STYLE_SPECIAL	0x60
  |  |  ------------------
  ------------------
  |  Branch (1468:4): [True: 519, False: 18.9M]
  ------------------
 1469|    519|				flags ^= GUI_PRINT_FLAG_BLINK;
  ------------------
  |  |   11|    519|#define GUI_PRINT_FLAG_BLINK         0x0008
  ------------------
 1470|    519|				break;
 1471|     93|			case FORMAT_STYLE_UNDERLINE:
  ------------------
  |  |  165|     93|#define FORMAT_STYLE_UNDERLINE	(0x02 + FORMAT_STYLE_SPECIAL)
  |  |  ------------------
  |  |  |  |  163|     93|#define FORMAT_STYLE_SPECIAL	0x60
  |  |  ------------------
  ------------------
  |  Branch (1471:4): [True: 93, False: 18.9M]
  ------------------
 1472|     93|				flags ^= GUI_PRINT_FLAG_UNDERLINE;
  ------------------
  |  |   10|     93|#define GUI_PRINT_FLAG_UNDERLINE     0x0004
  ------------------
 1473|     93|				break;
 1474|   968k|			case FORMAT_STYLE_BOLD:
  ------------------
  |  |  166|   968k|#define FORMAT_STYLE_BOLD	(0x03 + FORMAT_STYLE_SPECIAL)
  |  |  ------------------
  |  |  |  |  163|   968k|#define FORMAT_STYLE_SPECIAL	0x60
  |  |  ------------------
  ------------------
  |  Branch (1474:4): [True: 968k, False: 18.0M]
  ------------------
 1475|   968k|				flags ^= GUI_PRINT_FLAG_BOLD;
  ------------------
  |  |    8|   968k|#define GUI_PRINT_FLAG_BOLD          0x0001
  ------------------
 1476|   968k|				break;
 1477|     28|			case FORMAT_STYLE_REVERSE:
  ------------------
  |  |  167|     28|#define FORMAT_STYLE_REVERSE	(0x04 + FORMAT_STYLE_SPECIAL)
  |  |  ------------------
  |  |  |  |  163|     28|#define FORMAT_STYLE_SPECIAL	0x60
  |  |  ------------------
  ------------------
  |  Branch (1477:4): [True: 28, False: 18.9M]
  ------------------
 1478|     28|				flags ^= GUI_PRINT_FLAG_REVERSE;
  ------------------
  |  |    9|     28|#define GUI_PRINT_FLAG_REVERSE       0x0002
  ------------------
 1479|     28|				break;
 1480|      0|			case FORMAT_STYLE_ITALIC:
  ------------------
  |  |  169|      0|#define FORMAT_STYLE_ITALIC	(0x06 + FORMAT_STYLE_SPECIAL)
  |  |  ------------------
  |  |  |  |  163|      0|#define FORMAT_STYLE_SPECIAL	0x60
  |  |  ------------------
  ------------------
  |  Branch (1480:4): [True: 0, False: 18.9M]
  ------------------
 1481|      0|				flags ^= GUI_PRINT_FLAG_ITALIC;
  ------------------
  |  |   14|      0|#define GUI_PRINT_FLAG_ITALIC        0x0040
  ------------------
 1482|      0|				break;
 1483|  42.5k|			case FORMAT_STYLE_MONOSPACE:
  ------------------
  |  |  172|  42.5k|#define FORMAT_STYLE_MONOSPACE	(0x09 + FORMAT_STYLE_SPECIAL)
  |  |  ------------------
  |  |  |  |  163|  42.5k|#define FORMAT_STYLE_SPECIAL	0x60
  |  |  ------------------
  ------------------
  |  Branch (1483:4): [True: 42.5k, False: 18.9M]
  ------------------
 1484|  42.5k|				flags ^= GUI_PRINT_FLAG_MONOSPACE;
  ------------------
  |  |   17|  42.5k|#define GUI_PRINT_FLAG_MONOSPACE     0x0200
  ------------------
 1485|  42.5k|				break;
 1486|  43.1k|			case FORMAT_STYLE_INDENT:
  ------------------
  |  |  168|  43.1k|#define FORMAT_STYLE_INDENT	(0x05 + FORMAT_STYLE_SPECIAL)
  |  |  ------------------
  |  |  |  |  163|  43.1k|#define FORMAT_STYLE_SPECIAL	0x60
  |  |  ------------------
  ------------------
  |  Branch (1486:4): [True: 43.1k, False: 18.9M]
  ------------------
 1487|  43.1k|				flags |= GUI_PRINT_FLAG_INDENT;
  ------------------
  |  |   13|  43.1k|#define GUI_PRINT_FLAG_INDENT        0x0020
  ------------------
 1488|  43.1k|				break;
 1489|  8.94M|			case FORMAT_STYLE_DEFAULTS:
  ------------------
  |  |  170|  8.94M|#define FORMAT_STYLE_DEFAULTS	(0x07 + FORMAT_STYLE_SPECIAL)
  |  |  ------------------
  |  |  |  |  163|  8.94M|#define FORMAT_STYLE_SPECIAL	0x60
  |  |  ------------------
  ------------------
  |  Branch (1489:4): [True: 8.94M, False: 10.0M]
  ------------------
 1490|  8.94M|				fgcolor = theme->default_color;
 1491|  8.94M|				bgcolor = -1;
 1492|  8.94M|				flags &= GUI_PRINT_FLAG_INDENT|GUI_PRINT_FLAG_MONOSPACE;
  ------------------
  |  |   13|  8.94M|#define GUI_PRINT_FLAG_INDENT        0x0020
  ------------------
              				flags &= GUI_PRINT_FLAG_INDENT|GUI_PRINT_FLAG_MONOSPACE;
  ------------------
  |  |   17|  8.94M|#define GUI_PRINT_FLAG_MONOSPACE     0x0200
  ------------------
 1493|  8.94M|				break;
 1494|     89|			case FORMAT_STYLE_CLRTOEOL:
  ------------------
  |  |  171|     89|#define FORMAT_STYLE_CLRTOEOL	(0x08 + FORMAT_STYLE_SPECIAL)
  |  |  ------------------
  |  |  |  |  163|     89|#define FORMAT_STYLE_SPECIAL	0x60
  |  |  ------------------
  ------------------
  |  Branch (1494:4): [True: 89, False: 18.9M]
  ------------------
 1495|     89|				break;
 1496|      4|			case FORMAT_COLOR_EXT1:
  ------------------
  |  |  155|      4|#define FORMAT_COLOR_EXT1	('0'-2)
  ------------------
  |  Branch (1496:4): [True: 4, False: 18.9M]
  ------------------
 1497|      4|				fgcolor = 0x10 + *++ptr - FORMAT_COLOR_NOCHANGE;
  ------------------
  |  |  154|      4|#define FORMAT_COLOR_NOCHANGE	('0'-1) /* don't change this, at least hilighting depends this value */
  ------------------
 1498|      4|				flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
  ------------------
  |  |   18|      4|#define GUI_PRINT_FLAG_COLOR_24_FG   0x0400
  ------------------
 1499|      4|				break;
 1500|     28|			case FORMAT_COLOR_EXT1_BG:
  ------------------
  |  |  158|     28|#define FORMAT_COLOR_EXT1_BG	('0'-5)
  ------------------
  |  Branch (1500:4): [True: 28, False: 18.9M]
  ------------------
 1501|     28|				bgcolor = 0x10 + *++ptr - FORMAT_COLOR_NOCHANGE;
  ------------------
  |  |  154|     28|#define FORMAT_COLOR_NOCHANGE	('0'-1) /* don't change this, at least hilighting depends this value */
  ------------------
 1502|     28|				flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
  ------------------
  |  |   19|     28|#define GUI_PRINT_FLAG_COLOR_24_BG   0x0800
  ------------------
 1503|     28|				break;
 1504|    970|			case FORMAT_COLOR_EXT2:
  ------------------
  |  |  156|    970|#define FORMAT_COLOR_EXT2	('0'-3)
  ------------------
  |  Branch (1504:4): [True: 970, False: 18.9M]
  ------------------
 1505|    970|				fgcolor = 0x60 + *++ptr - FORMAT_COLOR_NOCHANGE;
  ------------------
  |  |  154|    970|#define FORMAT_COLOR_NOCHANGE	('0'-1) /* don't change this, at least hilighting depends this value */
  ------------------
 1506|    970|				flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
  ------------------
  |  |   18|    970|#define GUI_PRINT_FLAG_COLOR_24_FG   0x0400
  ------------------
 1507|    970|				break;
 1508|     36|			case FORMAT_COLOR_EXT2_BG:
  ------------------
  |  |  159|     36|#define FORMAT_COLOR_EXT2_BG	('0'-9)
  ------------------
  |  Branch (1508:4): [True: 36, False: 18.9M]
  ------------------
 1509|     36|				bgcolor = 0x60 + *++ptr - FORMAT_COLOR_NOCHANGE;
  ------------------
  |  |  154|     36|#define FORMAT_COLOR_NOCHANGE	('0'-1) /* don't change this, at least hilighting depends this value */
  ------------------
 1510|     36|				flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
  ------------------
  |  |   19|     36|#define GUI_PRINT_FLAG_COLOR_24_BG   0x0800
  ------------------
 1511|     36|				break;
 1512|     60|			case FORMAT_COLOR_EXT3:
  ------------------
  |  |  157|     60|#define FORMAT_COLOR_EXT3	('0'-4)
  ------------------
  |  Branch (1512:4): [True: 60, False: 18.9M]
  ------------------
 1513|     60|				fgcolor = 0xb0 + *++ptr - FORMAT_COLOR_NOCHANGE;
  ------------------
  |  |  154|     60|#define FORMAT_COLOR_NOCHANGE	('0'-1) /* don't change this, at least hilighting depends this value */
  ------------------
 1514|     60|				flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
  ------------------
  |  |   18|     60|#define GUI_PRINT_FLAG_COLOR_24_FG   0x0400
  ------------------
 1515|     60|				break;
 1516|    395|			case FORMAT_COLOR_EXT3_BG:
  ------------------
  |  |  160|    395|#define FORMAT_COLOR_EXT3_BG	('0'-10)
  ------------------
  |  Branch (1516:4): [True: 395, False: 18.9M]
  ------------------
 1517|    395|				bgcolor = 0xb0 + *++ptr - FORMAT_COLOR_NOCHANGE;
  ------------------
  |  |  154|    395|#define FORMAT_COLOR_NOCHANGE	('0'-1) /* don't change this, at least hilighting depends this value */
  ------------------
 1518|    395|				flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
  ------------------
  |  |   19|    395|#define GUI_PRINT_FLAG_COLOR_24_BG   0x0800
  ------------------
 1519|    395|				break;
 1520|    282|			case FORMAT_COLOR_24:
  ------------------
  |  |  161|    282|#define FORMAT_COLOR_24	('0'-13)
  ------------------
  |  Branch (1520:4): [True: 282, False: 18.9M]
  ------------------
 1521|    282|				unformat_24bit_color(&ptr, 1, &fgcolor, &bgcolor, &flags);
 1522|    282|				break;
 1523|  8.97M|			default:
  ------------------
  |  Branch (1523:4): [True: 8.97M, False: 10.0M]
  ------------------
 1524|  8.97M|				if (*ptr != FORMAT_COLOR_NOCHANGE) {
  ------------------
  |  |  154|  8.97M|#define FORMAT_COLOR_NOCHANGE	('0'-1) /* don't change this, at least hilighting depends this value */
  ------------------
  |  Branch (1524:9): [True: 8.97M, False: 0]
  ------------------
 1525|  8.97M|					flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
  ------------------
  |  |   18|  8.97M|#define GUI_PRINT_FLAG_COLOR_24_FG   0x0400
  ------------------
 1526|  8.97M|					fgcolor = *ptr==(char)0xff ? -1 : (unsigned char) *ptr-'0';
  ------------------
  |  Branch (1526:16): [True: 57, False: 8.97M]
  ------------------
 1527|  8.97M|				}
 1528|  8.97M|				if (ptr[1] == '\0')
  ------------------
  |  Branch (1528:9): [True: 187, False: 8.97M]
  ------------------
 1529|    187|					break;
 1530|       |
 1531|  8.97M|				ptr++;
 1532|  8.97M|				if (*ptr != FORMAT_COLOR_NOCHANGE) {
  ------------------
  |  |  154|  8.97M|#define FORMAT_COLOR_NOCHANGE	('0'-1) /* don't change this, at least hilighting depends this value */
  ------------------
  |  Branch (1532:9): [True: 6.93k, False: 8.96M]
  ------------------
 1533|  6.93k|					flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
  ------------------
  |  |   19|  6.93k|#define GUI_PRINT_FLAG_COLOR_24_BG   0x0800
  ------------------
 1534|  6.93k|					bgcolor = *ptr==(char)0xff ? -1 : *ptr-'0';
  ------------------
  |  Branch (1534:16): [True: 31, False: 6.90k]
  ------------------
 1535|  6.93k|				}
 1536|  18.9M|			}
 1537|  18.9M|			if (*ptr == '\0')
  ------------------
  |  Branch (1537:8): [True: 2, False: 18.9M]
  ------------------
 1538|      2|				break;
 1539|       |
 1540|  18.9M|			ptr++;
 1541|  18.9M|			break;
 1542|  18.6k|		case 6:
  ------------------
  |  Branch (1542:3): [True: 18.6k, False: 23.9M]
  ------------------
 1543|       |			/* blink */
 1544|  18.6k|			if (!hide_text_style)
  ------------------
  |  Branch (1544:8): [True: 18.6k, False: 0]
  ------------------
 1545|  18.6k|				flags ^= GUI_PRINT_FLAG_BLINK;
  ------------------
  |  |   11|  18.6k|#define GUI_PRINT_FLAG_BLINK         0x0008
  ------------------
 1546|  18.6k|			break;
 1547|  4.87k|		case 15:
  ------------------
  |  Branch (1547:3): [True: 4.87k, False: 23.9M]
  ------------------
 1548|       |			/* remove all styling */
 1549|  4.87k|			if (!hide_text_style) {
  ------------------
  |  Branch (1549:8): [True: 4.87k, False: 0]
  ------------------
 1550|  4.87k|				if (!hide_colors) {
  ------------------
  |  Branch (1550:9): [True: 4.87k, False: 0]
  ------------------
 1551|  4.87k|					fgcolor = theme->default_color;
 1552|  4.87k|					bgcolor = -1;
 1553|  4.87k|				}
 1554|  4.87k|				flags &= GUI_PRINT_FLAG_INDENT | GUI_PRINT_FLAG_MONOSPACE;
  ------------------
  |  |   13|  4.87k|#define GUI_PRINT_FLAG_INDENT        0x0020
  ------------------
              				flags &= GUI_PRINT_FLAG_INDENT | GUI_PRINT_FLAG_MONOSPACE;
  ------------------
  |  |   17|  4.87k|#define GUI_PRINT_FLAG_MONOSPACE     0x0200
  ------------------
 1555|  4.87k|			}
 1556|  4.87k|			break;
 1557|  5.70k|		case 17:
  ------------------
  |  Branch (1557:3): [True: 5.70k, False: 23.9M]
  ------------------
 1558|  5.70k|			if (!hide_text_style)
  ------------------
  |  Branch (1558:8): [True: 5.70k, False: 0]
  ------------------
 1559|  5.70k|				flags ^= GUI_PRINT_FLAG_MONOSPACE;
  ------------------
  |  |   17|  5.70k|#define GUI_PRINT_FLAG_MONOSPACE     0x0200
  ------------------
 1560|  5.70k|			break;
 1561|  49.5k|		case 22:
  ------------------
  |  Branch (1561:3): [True: 49.5k, False: 23.8M]
  ------------------
 1562|       |			/* reverse */
 1563|  49.5k|			if (!hide_text_style)
  ------------------
  |  Branch (1563:8): [True: 49.5k, False: 0]
  ------------------
 1564|  49.5k|				flags ^= GUI_PRINT_FLAG_REVERSE;
  ------------------
  |  |    9|  49.5k|#define GUI_PRINT_FLAG_REVERSE       0x0002
  ------------------
 1565|  49.5k|			break;
 1566|  10.0k|		case 29:
  ------------------
  |  Branch (1566:3): [True: 10.0k, False: 23.9M]
  ------------------
 1567|       |			/* italic */
 1568|  10.0k|			if (!hide_text_style)
  ------------------
  |  Branch (1568:8): [True: 10.0k, False: 0]
  ------------------
 1569|  10.0k|				flags ^= GUI_PRINT_FLAG_ITALIC;
  ------------------
  |  |   14|  10.0k|#define GUI_PRINT_FLAG_ITALIC        0x0040
  ------------------
 1570|  10.0k|			break;
 1571|  43.9k|		case 31:
  ------------------
  |  Branch (1571:3): [True: 43.9k, False: 23.8M]
  ------------------
 1572|       |			/* underline */
 1573|  43.9k|			if (!hide_text_style)
  ------------------
  |  Branch (1573:8): [True: 43.9k, False: 0]
  ------------------
 1574|  43.9k|				flags ^= GUI_PRINT_FLAG_UNDERLINE;
  ------------------
  |  |   10|  43.9k|#define GUI_PRINT_FLAG_UNDERLINE     0x0004
  ------------------
 1575|  43.9k|			break;
 1576|  1.08M|		case 27:
  ------------------
  |  Branch (1576:3): [True: 1.08M, False: 22.8M]
  ------------------
 1577|       |			/* ansi color code */
 1578|  1.08M|			ptr = (char *)
 1579|  1.08M|				get_ansi_color(theme, ptr,
 1580|  1.08M|					       hide_colors ? NULL : &fgcolor,
  ------------------
  |  Branch (1580:13): [True: 0, False: 1.08M]
  ------------------
 1581|  1.08M|					       hide_colors ? NULL : &bgcolor,
  ------------------
  |  Branch (1581:13): [True: 0, False: 1.08M]
  ------------------
 1582|  1.08M|					       hide_colors ? NULL : &flags);
  ------------------
  |  Branch (1582:13): [True: 0, False: 1.08M]
  ------------------
 1583|  1.08M|			break;
 1584|  23.9M|		}
 1585|       |
 1586|  23.9M|		str = ptr;
 1587|  23.9M|	}
 1588|       |
 1589|  1.13M|	g_free(dup);
 1590|  1.13M|}
format_send_to_gui:
 1602|  1.13M|{
 1603|  1.13M|	format_send_as_gui_flags(dest, text, (SIGNAL_FUNC) gui_print_text_emitter);
 1604|  1.13M|}
formats_init:
 1695|      2|{
 1696|      2|	signal_gui_print_text = signal_get_uniq_id("gui print text");
  ------------------
  |  |   68|      2|        module_get_uniq_id_str("signals", signal)
  ------------------
 1697|      2|	global_meta =
 1698|      2|	    g_hash_table_new_full(g_str_hash, (GEqualFunc) g_str_equal,
 1699|      2|	                          (GDestroyNotify) i_refstr_release, (GDestroyNotify) g_free);
 1700|       |
 1701|      2|	read_settings();
 1702|      2|	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1703|       |	signal_add_last("gui print text finished", (SIGNAL_FUNC) clear_global_meta);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
 1704|      2|}
formats.c:format_get_text_args:
  740|  2.61M|{
  741|  2.61M|	GString *out;
  742|  2.61M|	char code, *ret;
  743|  2.61M|	int need_free;
  744|  2.61M|	int adv;
  745|       |
  746|  2.61M|	out = g_string_new(NULL);
  747|       |
  748|  2.61M|	code = 0;
  749|  34.8M|	while (*text != '\0') {
  ------------------
  |  Branch (749:9): [True: 32.2M, False: 2.61M]
  ------------------
  750|  32.2M|		if (code == '%') {
  ------------------
  |  Branch (750:7): [True: 7.20M, False: 25.0M]
  ------------------
  751|       |			/* color code */
  752|  7.20M|			adv = format_expand_styles(out, &text, &dest->flags);
  753|  7.20M|			if (!adv) {
  ------------------
  |  Branch (753:8): [True: 0, False: 7.20M]
  ------------------
  754|      0|				g_string_append_c(out, '%');
  755|      0|				g_string_append_c(out, '%');
  756|      0|				g_string_append_c(out, *text);
  757|  7.20M|			} else {
  758|  7.20M|				text += adv - 1;
  759|  7.20M|			}
  760|  7.20M|			code = 0;
  761|  25.0M|		} else if (code == '$') {
  ------------------
  |  Branch (761:14): [True: 2.20M, False: 22.8M]
  ------------------
  762|       |			/* argument */
  763|  2.20M|			char *ret;
  764|       |
  765|  2.20M|			ret = parse_special((char **) &text, dest->server,
  766|  2.20M|					    dest->target == NULL ? NULL :
  ------------------
  |  Branch (766:10): [True: 1.04M, False: 1.15M]
  ------------------
  767|  2.20M|					    window_item_find(dest->server, dest->target),
  768|  2.20M|					    arglist, &need_free, NULL, 0);
  769|       |
  770|  2.20M|			if (ret != NULL) {
  ------------------
  |  Branch (770:8): [True: 2.20M, False: 0]
  ------------------
  771|       |				/* string shouldn't end with \003 or it could
  772|       |				   mess up the next one or two characters */
  773|  2.20M|				int diff;
  774|  2.20M|				int len = strlen(ret);
  775|  2.20M|				while (len > 0 && ret[len-1] == 3) len--;
  ------------------
  |  Branch (775:12): [True: 1.80M, False: 400k]
  |  Branch (775:23): [True: 369, False: 1.80M]
  ------------------
  776|  2.20M|				diff = strlen(ret)-len;
  777|       |
  778|  2.20M|				g_string_append(out, ret);
  779|  2.20M|				if (diff > 0)
  ------------------
  |  Branch (779:9): [True: 369, False: 2.20M]
  ------------------
  780|    369|					g_string_truncate(out, out->len-diff);
  781|  2.20M|				if (need_free) g_free(ret);
  ------------------
  |  Branch (781:9): [True: 2.20M, False: 0]
  ------------------
  782|  2.20M|			}
  783|  2.20M|			code = 0;
  784|  22.8M|		} else {
  785|  22.8M|			if (*text == '%' || *text == '$')
  ------------------
  |  Branch (785:8): [True: 7.20M, False: 15.6M]
  |  Branch (785:24): [True: 2.20M, False: 13.4M]
  ------------------
  786|  9.41M|				code = *text;
  787|  13.4M|			else
  788|  22.8M|				g_string_append_c(out, *text);
  789|  22.8M|		}
  790|       |
  791|  32.2M|		text++;
  792|  32.2M|	}
  793|       |
  794|  2.61M|	ret = g_string_free_and_steal(out);
  795|  2.61M|	return ret;
  796|  2.61M|}
formats.c:get_timestamp:
  952|  1.13M|{
  953|  1.13M|	char *format, str[256];
  954|  1.13M|	struct tm *tm;
  955|  1.13M|	int diff;
  956|       |
  957|  1.13M|	if ((timestamp_level & dest->level) == 0)
  ------------------
  |  Branch (957:6): [True: 0, False: 1.13M]
  ------------------
  958|      0|		return NULL;
  959|       |
  960|       |	/* check for flags if we want to override defaults */
  961|  1.13M|	if (dest->flags & PRINT_FLAG_UNSET_TIMESTAMP)
  ------------------
  |  |   45|  1.13M|#define PRINT_FLAG_UNSET_TIMESTAMP	0x0008
  ------------------
  |  Branch (961:6): [True: 0, False: 1.13M]
  ------------------
  962|      0|		return NULL;
  963|       |
  964|  1.13M|	if ((dest->flags & PRINT_FLAG_SET_TIMESTAMP) == 0 &&
  ------------------
  |  |   44|  1.13M|#define PRINT_FLAG_SET_TIMESTAMP	0x0004
  ------------------
  |  Branch (964:6): [True: 1.13M, False: 0]
  ------------------
  965|  1.13M|	    (dest->level & (MSGLEVEL_NEVER|MSGLEVEL_LASTLOG)) != 0)
  ------------------
  |  Branch (965:6): [True: 72.3k, False: 1.06M]
  ------------------
  966|  72.3k|		return NULL;
  967|       |
  968|       |
  969|  1.06M|	if (timestamp_timeout > 0) {
  ------------------
  |  Branch (969:6): [True: 0, False: 1.06M]
  ------------------
  970|      0|		diff = t - dest->window->last_timestamp;
  971|      0|		dest->window->last_timestamp = t;
  972|      0|		if (diff < timestamp_timeout)
  ------------------
  |  Branch (972:7): [True: 0, False: 0]
  ------------------
  973|      0|			return NULL;
  974|      0|	}
  975|       |
  976|  1.06M|	tm = localtime(&t);
  977|  1.06M|	format = format_get_text_theme(theme, MODULE_NAME, dest,
  ------------------
  |  |    3|  1.06M|#define MODULE_NAME "fe-common/core"
  ------------------
  978|  1.06M|				       TXT_TIMESTAMP);
  979|  1.06M|	if (strftime(str, sizeof(str), format, tm) <= 0)
  ------------------
  |  Branch (979:6): [True: 0, False: 1.06M]
  ------------------
  980|      0|		str[0] = '\0';
  981|  1.06M|	g_free(format);
  982|  1.06M|	return g_strdup(str);
  983|  1.06M|}
formats.c:get_server_tag:
  986|  1.13M|{
  987|  1.13M|	int count = 0;
  988|       |
  989|  1.13M|	if (dest->server_tag == NULL || hide_server_tags)
  ------------------
  |  Branch (989:6): [True: 79.9k, False: 1.05M]
  |  Branch (989:34): [True: 0, False: 1.05M]
  ------------------
  990|  79.9k|		return NULL;
  991|       |
  992|       |	/* check for flags if we want to override defaults */
  993|  1.05M|	if (dest->flags & PRINT_FLAG_UNSET_SERVERTAG)
  ------------------
  |  |   48|  1.05M|#define PRINT_FLAG_UNSET_SERVERTAG	0x0020
  ------------------
  |  Branch (993:6): [True: 0, False: 1.05M]
  ------------------
  994|      0|		return NULL;
  995|       |
  996|  1.05M|	if ((dest->flags & PRINT_FLAG_SET_SERVERTAG) == 0) {
  ------------------
  |  |   47|  1.05M|#define PRINT_FLAG_SET_SERVERTAG	0x0010
  ------------------
  |  Branch (996:6): [True: 1.05M, False: 0]
  ------------------
  997|  1.05M|		if (dest->window->active != NULL &&
  ------------------
  |  Branch (997:7): [True: 1.05M, False: 0]
  ------------------
  998|  1.05M|		    dest->window->active->server == dest->server)
  ------------------
  |  Branch (998:7): [True: 1.05M, False: 0]
  ------------------
  999|  1.05M|			return NULL;
 1000|       |
 1001|      0|		if (servers != NULL) {
  ------------------
  |  Branch (1001:7): [True: 0, False: 0]
  ------------------
 1002|      0|			count++;
 1003|      0|			if (servers->next != NULL)
  ------------------
  |  Branch (1003:8): [True: 0, False: 0]
  ------------------
 1004|      0|				count++;
 1005|      0|		}
 1006|      0|		if (count < 2 && lookup_servers != NULL) {
  ------------------
  |  Branch (1006:7): [True: 0, False: 0]
  |  Branch (1006:20): [True: 0, False: 0]
  ------------------
 1007|      0|			count++;
 1008|      0|			if (lookup_servers->next != NULL)
  ------------------
  |  Branch (1008:8): [True: 0, False: 0]
  ------------------
 1009|      0|				count++;
 1010|      0|		}
 1011|       |
 1012|      0|		if (count < 2)
  ------------------
  |  Branch (1012:7): [True: 0, False: 0]
  ------------------
 1013|      0|			return NULL;
 1014|      0|	}
 1015|       |
 1016|      0|	return format_get_text_theme(theme, MODULE_NAME, dest,
  ------------------
  |  |    3|      0|#define MODULE_NAME "fe-common/core"
  ------------------
 1017|      0|				     TXT_SERVERTAG, dest->server_tag);
 1018|  1.05M|}
formats.c:get_mirc_color:
 1241|  87.8k|{
 1242|  87.8k|	int fg, bg;
 1243|       |
 1244|  87.8k|	fg = fg_ret == NULL ? -1 : *fg_ret;
  ------------------
  |  Branch (1244:7): [True: 43.9k, False: 43.9k]
  ------------------
 1245|  87.8k|	bg = bg_ret == NULL ? -1 : *bg_ret;
  ------------------
  |  Branch (1245:7): [True: 43.9k, False: 43.9k]
  ------------------
 1246|       |
 1247|  87.8k|	if (!i_isdigit(**str)) {
  ------------------
  |  |   79|  87.8k|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (1247:6): [True: 77.0k, False: 10.8k]
  ------------------
 1248|       |		/* turn off color */
 1249|  77.0k|		fg = -1;
 1250|  77.0k|		bg = -1;
 1251|  77.0k|	} else {
 1252|       |		/* foreground color */
 1253|  10.8k|		fg = **str-'0';
 1254|  10.8k|		(*str)++;
 1255|  10.8k|		if (i_isdigit(**str)) {
  ------------------
  |  |   79|  10.8k|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (1255:7): [True: 7.18k, False: 3.68k]
  ------------------
 1256|  7.18k|			fg = fg*10 + (**str-'0');
 1257|  7.18k|			(*str)++;
 1258|  7.18k|		}
 1259|       |
 1260|  10.8k|		if ((*str)[0] == ',' && i_isdigit((*str)[1])) {
  ------------------
  |  |   79|  10.8k|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (1260:7): [True: 884, False: 9.98k]
  |  Branch (1260:27): [True: 742, False: 142]
  ------------------
 1261|       |			/* background color */
 1262|    742|			(*str)++;
 1263|    742|			bg = **str-'0';
 1264|    742|			(*str)++;
 1265|    742|			if (i_isdigit(**str)) {
  ------------------
  |  |   79|    742|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (1265:8): [True: 294, False: 448]
  ------------------
 1266|    294|				bg = bg*10 + (**str-'0');
 1267|    294|				(*str)++;
 1268|    294|			}
 1269|    742|		}
 1270|  10.8k|	}
 1271|       |
 1272|  87.8k|	if (fg_ret) *fg_ret = fg;
  ------------------
  |  Branch (1272:6): [True: 43.9k, False: 43.9k]
  ------------------
 1273|  87.8k|	if (bg_ret) *bg_ret = bg;
  ------------------
  |  Branch (1273:6): [True: 43.9k, False: 43.9k]
  ------------------
 1274|  87.8k|}
formats.c:get_ansi_color:
 1052|  2.17M|{
 1053|  2.17M|	static char ansitab[8] = { 0, 4, 2, 6, 1, 5, 3, 7 };
 1054|  2.17M|	const char *start;
 1055|  2.17M|	char *endptr;
 1056|  2.17M|	int fg, bg, flags, i;
 1057|  2.17M|	guint num, num2;
 1058|       |
 1059|  2.17M|	if (*str != '[')
  ------------------
  |  Branch (1059:6): [True: 2.03M, False: 141k]
  ------------------
 1060|  2.03M|		return str;
 1061|   141k|	start = str++;
 1062|       |
 1063|   141k|	fg = fg_ret == NULL || *fg_ret < 0 ? theme->default_color : *fg_ret;
  ------------------
  |  Branch (1063:7): [True: 70.7k, False: 70.6k]
  |  Branch (1063:25): [True: 66.4k, False: 4.22k]
  ------------------
 1064|   141k|	bg = bg_ret == NULL || *bg_ret < 0 ? -1 : *bg_ret;
  ------------------
  |  Branch (1064:7): [True: 70.7k, False: 70.6k]
  |  Branch (1064:25): [True: 63.7k, False: 6.90k]
  ------------------
 1065|   141k|	flags = flags_ret == NULL ? 0 : *flags_ret;
  ------------------
  |  Branch (1065:10): [True: 70.7k, False: 70.6k]
  ------------------
 1066|       |
 1067|   141k|	num = 0;
 1068|   216k|	for (;; str++) {
 1069|   216k|		if (*str == '\0') return start;
  ------------------
  |  Branch (1069:7): [True: 338, False: 216k]
  ------------------
 1070|       |
 1071|   216k|		if (i_isdigit(*str)) {
  ------------------
  |  |   79|   216k|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (1071:7): [True: 168k, False: 47.3k]
  ------------------
 1072|   168k|			if (!parse_uint(str, &endptr, 10, &num)) {
  ------------------
  |  Branch (1072:8): [True: 5.79k, False: 163k]
  ------------------
 1073|  5.79k|				return start;
 1074|  5.79k|			}
 1075|   163k|			str = endptr;
 1076|   163k|		}
 1077|       |
 1078|   210k|		if (*str != ';' && *str != 'm')
  ------------------
  |  Branch (1078:7): [True: 126k, False: 84.0k]
  |  Branch (1078:22): [True: 83.4k, False: 43.0k]
  ------------------
 1079|  83.4k|			return start;
 1080|       |
 1081|   127k|		switch (num) {
 1082|  6.12k|		case 0:
  ------------------
  |  Branch (1082:3): [True: 6.12k, False: 120k]
  ------------------
 1083|       |			/* reset colors and attributes back to default */
 1084|  6.12k|			fg = theme->default_color;
 1085|  6.12k|			bg = -1;
 1086|  6.12k|			flags &= ~(GUI_PRINT_FLAG_INDENT |
  ------------------
  |  |   13|  6.12k|#define GUI_PRINT_FLAG_INDENT        0x0020
  ------------------
 1087|  6.12k|				   GUI_PRINT_FLAG_BOLD | GUI_PRINT_FLAG_ITALIC | GUI_PRINT_FLAG_UNDERLINE |
  ------------------
  |  |    8|  6.12k|#define GUI_PRINT_FLAG_BOLD          0x0001
  ------------------
              				   GUI_PRINT_FLAG_BOLD | GUI_PRINT_FLAG_ITALIC | GUI_PRINT_FLAG_UNDERLINE |
  ------------------
  |  |   14|  6.12k|#define GUI_PRINT_FLAG_ITALIC        0x0040
  ------------------
              				   GUI_PRINT_FLAG_BOLD | GUI_PRINT_FLAG_ITALIC | GUI_PRINT_FLAG_UNDERLINE |
  ------------------
  |  |   10|  6.12k|#define GUI_PRINT_FLAG_UNDERLINE     0x0004
  ------------------
 1088|  6.12k|				   GUI_PRINT_FLAG_BLINK | GUI_PRINT_FLAG_REVERSE |
  ------------------
  |  |   11|  6.12k|#define GUI_PRINT_FLAG_BLINK         0x0008
  ------------------
              				   GUI_PRINT_FLAG_BLINK | GUI_PRINT_FLAG_REVERSE |
  ------------------
  |  |    9|  6.12k|#define GUI_PRINT_FLAG_REVERSE       0x0002
  ------------------
 1089|  6.12k|				   GUI_PRINT_FLAG_COLOR_24_FG | GUI_PRINT_FLAG_COLOR_24_BG);
  ------------------
  |  |   18|  6.12k|#define GUI_PRINT_FLAG_COLOR_24_FG   0x0400
  ------------------
              				   GUI_PRINT_FLAG_COLOR_24_FG | GUI_PRINT_FLAG_COLOR_24_BG);
  ------------------
  |  |   19|  6.12k|#define GUI_PRINT_FLAG_COLOR_24_BG   0x0800
  ------------------
 1090|  6.12k|			break;
 1091|  2.24k|		case 1:
  ------------------
  |  Branch (1091:3): [True: 2.24k, False: 124k]
  ------------------
 1092|       |			/* hilight */
 1093|  2.24k|			flags |= GUI_PRINT_FLAG_BOLD;
  ------------------
  |  |    8|  2.24k|#define GUI_PRINT_FLAG_BOLD          0x0001
  ------------------
 1094|  2.24k|			break;
 1095|  1.63k|		case 22:
  ------------------
  |  Branch (1095:3): [True: 1.63k, False: 125k]
  ------------------
 1096|       |			/* normal */
 1097|  1.63k|			flags &= ~GUI_PRINT_FLAG_BOLD;
  ------------------
  |  |    8|  1.63k|#define GUI_PRINT_FLAG_BOLD          0x0001
  ------------------
 1098|  1.63k|			break;
 1099|  28.2k|		case 3:
  ------------------
  |  Branch (1099:3): [True: 28.2k, False: 98.7k]
  ------------------
 1100|       |			/* italic */
 1101|  28.2k|			flags |= GUI_PRINT_FLAG_ITALIC;
  ------------------
  |  |   14|  28.2k|#define GUI_PRINT_FLAG_ITALIC        0x0040
  ------------------
 1102|  28.2k|			break;
 1103|    706|		case 23:
  ------------------
  |  Branch (1103:3): [True: 706, False: 126k]
  ------------------
 1104|       |			/* not italic */
 1105|    706|			flags &= ~GUI_PRINT_FLAG_ITALIC;
  ------------------
  |  |   14|    706|#define GUI_PRINT_FLAG_ITALIC        0x0040
  ------------------
 1106|    706|			break;
 1107|  1.21k|		case 4:
  ------------------
  |  Branch (1107:3): [True: 1.21k, False: 125k]
  ------------------
 1108|       |			/* underline */
 1109|  1.21k|			flags |= GUI_PRINT_FLAG_UNDERLINE;
  ------------------
  |  |   10|  1.21k|#define GUI_PRINT_FLAG_UNDERLINE     0x0004
  ------------------
 1110|  1.21k|			break;
 1111|      2|		case 24:
  ------------------
  |  Branch (1111:3): [True: 2, False: 127k]
  ------------------
 1112|       |			/* not underline */
 1113|      2|			flags &= ~GUI_PRINT_FLAG_UNDERLINE;
  ------------------
  |  |   10|      2|#define GUI_PRINT_FLAG_UNDERLINE     0x0004
  ------------------
 1114|      2|			break;
 1115|      2|		case 5:
  ------------------
  |  Branch (1115:3): [True: 2, False: 127k]
  ------------------
 1116|       |			/* blink */
 1117|      2|			flags |= GUI_PRINT_FLAG_BLINK;
  ------------------
  |  |   11|      2|#define GUI_PRINT_FLAG_BLINK         0x0008
  ------------------
 1118|      2|			break;
 1119|      0|		case 25:
  ------------------
  |  Branch (1119:3): [True: 0, False: 127k]
  ------------------
 1120|       |			/* steady */
 1121|      0|			flags &= ~GUI_PRINT_FLAG_BLINK;
  ------------------
  |  |   11|      0|#define GUI_PRINT_FLAG_BLINK         0x0008
  ------------------
 1122|      0|			break;
 1123|      9|		case 7:
  ------------------
  |  Branch (1123:3): [True: 9, False: 127k]
  ------------------
 1124|       |			/* reverse */
 1125|      9|			flags |= GUI_PRINT_FLAG_REVERSE;
  ------------------
  |  |    9|      9|#define GUI_PRINT_FLAG_REVERSE       0x0002
  ------------------
 1126|      9|			break;
 1127|      0|		case 27:
  ------------------
  |  Branch (1127:3): [True: 0, False: 127k]
  ------------------
 1128|       |			/* positive */
 1129|      0|			flags &= ~GUI_PRINT_FLAG_REVERSE;
  ------------------
  |  |    9|      0|#define GUI_PRINT_FLAG_REVERSE       0x0002
  ------------------
 1130|      0|			break;
 1131|    194|		case 39:
  ------------------
  |  Branch (1131:3): [True: 194, False: 126k]
  ------------------
 1132|       |			/* reset fg */
 1133|    194|			flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
  ------------------
  |  |   18|    194|#define GUI_PRINT_FLAG_COLOR_24_FG   0x0400
  ------------------
 1134|    194|			fg = theme->default_color;
 1135|    194|			break;
 1136|    224|		case 49:
  ------------------
  |  Branch (1136:3): [True: 224, False: 126k]
  ------------------
 1137|       |			/* reset bg */
 1138|    224|			bg = -1;
 1139|    224|			flags &= ~(GUI_PRINT_FLAG_COLOR_24_BG | GUI_PRINT_FLAG_INDENT);
  ------------------
  |  |   19|    224|#define GUI_PRINT_FLAG_COLOR_24_BG   0x0800
  ------------------
              			flags &= ~(GUI_PRINT_FLAG_COLOR_24_BG | GUI_PRINT_FLAG_INDENT);
  ------------------
  |  |   13|    224|#define GUI_PRINT_FLAG_INDENT        0x0020
  ------------------
 1140|    224|			break;
 1141|  43.0k|		case 38:
  ------------------
  |  Branch (1141:3): [True: 43.0k, False: 84.0k]
  ------------------
 1142|  51.5k|		case 48:
  ------------------
  |  Branch (1142:3): [True: 8.55k, False: 118k]
  ------------------
 1143|       |			/* ANSI indexed color or RGB color */
 1144|  51.5k|			if (*str != ';') break;
  ------------------
  |  Branch (1144:8): [True: 2, False: 51.5k]
  ------------------
 1145|  51.5k|			str++;
 1146|       |
 1147|  51.5k|			if (!parse_uint(str, &endptr, 10, &num2)) {
  ------------------
  |  Branch (1147:8): [True: 8.77k, False: 42.7k]
  ------------------
 1148|  8.77k|				return start;
 1149|  8.77k|			}
 1150|  42.7k|			str = endptr;
 1151|       |
 1152|  42.7k|			if (*str == '\0') return start;
  ------------------
  |  Branch (1152:8): [True: 14, False: 42.7k]
  ------------------
 1153|       |
 1154|  42.7k|			switch (num2) {
  ------------------
  |  Branch (1154:12): [True: 41.4k, False: 1.33k]
  ------------------
 1155|  40.6k|			case 2:
  ------------------
  |  Branch (1155:4): [True: 40.6k, False: 2.14k]
  ------------------
 1156|       |				/* RGB */
 1157|  40.6k|				num2 = 0;
 1158|       |
 1159|   120k|				for (i = 0; i < 3; ++i) {
  ------------------
  |  Branch (1159:17): [True: 103k, False: 17.1k]
  ------------------
 1160|   103k|					num2 <<= 8;
 1161|       |
 1162|   103k|					if (*str != ';' && *str != ':') {
  ------------------
  |  Branch (1162:10): [True: 29.3k, False: 74.0k]
  |  Branch (1162:25): [True: 23.5k, False: 5.82k]
  ------------------
 1163|  23.5k|						i = -1;
 1164|  23.5k|						break;
 1165|  23.5k|					}
 1166|  79.9k|					str++;
 1167|   270k|					for (; i_isdigit(*str); str++)
  ------------------
  |  Branch (1167:13): [True: 270k, False: 79.9k]
  ------------------
 1168|   270k|						num2 = (num2&~0xff) |
 1169|   270k|							(((num2&0xff) * 10 + (*str-'0'))&0xff);
 1170|       |
 1171|  79.9k|					if (*str == '\0') return start;
  ------------------
  |  Branch (1171:10): [True: 2, False: 79.9k]
  ------------------
 1172|  79.9k|				}
 1173|       |
 1174|  40.6k|				if (i == -1) break;
  ------------------
  |  Branch (1174:9): [True: 23.5k, False: 17.1k]
  ------------------
 1175|       |
 1176|  17.1k|				if (num == 38) {
  ------------------
  |  Branch (1176:9): [True: 15.2k, False: 1.83k]
  ------------------
 1177|  15.2k|					flags |= GUI_PRINT_FLAG_COLOR_24_FG;
  ------------------
  |  |   18|  15.2k|#define GUI_PRINT_FLAG_COLOR_24_FG   0x0400
  ------------------
 1178|  15.2k|					fg = num2;
 1179|  15.2k|				} else if (num == 48) {
  ------------------
  |  Branch (1179:16): [True: 1.83k, False: 0]
  ------------------
 1180|  1.83k|					flags |= GUI_PRINT_FLAG_COLOR_24_BG;
  ------------------
  |  |   19|  1.83k|#define GUI_PRINT_FLAG_COLOR_24_BG   0x0800
  ------------------
 1181|  1.83k|					bg = num2;
 1182|  1.83k|				}
 1183|       |
 1184|  17.1k|				break;
 1185|    814|			case 5:
  ------------------
  |  Branch (1185:4): [True: 814, False: 41.9k]
  ------------------
 1186|       |				/* indexed */
 1187|    814|				if (*str != ';') break;
  ------------------
  |  Branch (1187:9): [True: 798, False: 16]
  ------------------
 1188|     16|				str++;
 1189|       |
 1190|     16|				if (!parse_uint(str, &endptr, 10, &num2)) {
  ------------------
  |  Branch (1190:9): [True: 0, False: 16]
  ------------------
 1191|      0|					return start;
 1192|      0|				}
 1193|     16|				str = endptr;
 1194|       |
 1195|     16|				if (*str == '\0') return start;
  ------------------
  |  Branch (1195:9): [True: 0, False: 16]
  ------------------
 1196|       |
 1197|     16|				if (num == 38) {
  ------------------
  |  Branch (1197:9): [True: 0, False: 16]
  ------------------
 1198|      0|					flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
  ------------------
  |  |   18|      0|#define GUI_PRINT_FLAG_COLOR_24_FG   0x0400
  ------------------
 1199|      0|					fg = num2;
 1200|     16|				} else if (num == 48) {
  ------------------
  |  Branch (1200:16): [True: 16, False: 0]
  ------------------
 1201|     16|					flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
  ------------------
  |  |   19|     16|#define GUI_PRINT_FLAG_COLOR_24_BG   0x0800
  ------------------
 1202|     16|					bg = num2;
 1203|     16|				}
 1204|       |
 1205|     16|				break;
 1206|  42.7k|			}
 1207|  42.7k|			break;
 1208|  42.7k|		default:
  ------------------
  |  Branch (1208:3): [True: 34.8k, False: 92.1k]
  ------------------
 1209|  34.8k|			if (num >= 30 && num <= 37) {
  ------------------
  |  Branch (1209:8): [True: 17.0k, False: 17.8k]
  |  Branch (1209:21): [True: 709, False: 16.3k]
  ------------------
 1210|    709|				flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
  ------------------
  |  |   18|    709|#define GUI_PRINT_FLAG_COLOR_24_FG   0x0400
  ------------------
 1211|    709|				fg = ansitab[num-30];
 1212|  34.1k|			} else if (num >= 40 && num <= 47) {
  ------------------
  |  Branch (1212:15): [True: 16.3k, False: 17.8k]
  |  Branch (1212:28): [True: 3.13k, False: 13.1k]
  ------------------
 1213|  3.13k|				flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
  ------------------
  |  |   19|  3.13k|#define GUI_PRINT_FLAG_COLOR_24_BG   0x0800
  ------------------
 1214|  3.13k|				bg = ansitab[num-40];
 1215|  31.0k|			} else if (num >= 90 && num <= 97) {
  ------------------
  |  Branch (1215:15): [True: 12.7k, False: 18.2k]
  |  Branch (1215:28): [True: 198, False: 12.5k]
  ------------------
 1216|    198|				flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
  ------------------
  |  |   18|    198|#define GUI_PRINT_FLAG_COLOR_24_FG   0x0400
  ------------------
 1217|    198|				fg = 8 + ansitab[num-90];
 1218|  30.8k|			} else if (num >= 100 && num <= 107) {
  ------------------
  |  Branch (1218:15): [True: 12.5k, False: 18.2k]
  |  Branch (1218:29): [True: 3.41k, False: 9.14k]
  ------------------
 1219|  3.41k|				flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
  ------------------
  |  |   19|  3.41k|#define GUI_PRINT_FLAG_COLOR_24_BG   0x0800
  ------------------
 1220|  3.41k|				bg = 8 + ansitab[num-100];
 1221|  3.41k|			}
 1222|  34.8k|			break;
 1223|   127k|		}
 1224|   118k|		num = 0;
 1225|       |
 1226|   118k|		if (*str == 'm') {
  ------------------
  |  Branch (1226:7): [True: 43.0k, False: 75.2k]
  ------------------
 1227|  43.0k|			if (fg_ret != NULL) *fg_ret = fg;
  ------------------
  |  Branch (1227:8): [True: 21.4k, False: 21.5k]
  ------------------
 1228|  43.0k|			if (bg_ret != NULL) *bg_ret = bg;
  ------------------
  |  Branch (1228:8): [True: 21.4k, False: 21.5k]
  ------------------
 1229|  43.0k|			if (flags_ret != NULL) *flags_ret = flags;
  ------------------
  |  Branch (1229:8): [True: 21.4k, False: 21.5k]
  ------------------
 1230|       |
 1231|  43.0k|			str++;
 1232|  43.0k|			break;
 1233|  43.0k|		}
 1234|   118k|	}
 1235|       |
 1236|  43.0k|	return str;
 1237|   141k|}
formats.c:gui_print_text_emitter:
 1595|  25.8M|{
 1596|  25.8M|	signal_emit_id(signal_gui_print_text, 6, window, fgcolor_int, bgcolor_int, flags_int,
 1597|  25.8M|	               textpiece, dest);
 1598|  25.8M|}
formats.c:read_settings:
 1683|      2|{
 1684|      2|	timestamp_level = settings_get_bool("timestamps") ? MSGLEVEL_ALL : 0;
  ------------------
  |  Branch (1684:20): [True: 2, False: 0]
  ------------------
 1685|      2|	if (timestamp_level > 0)
  ------------------
  |  Branch (1685:6): [True: 2, False: 0]
  ------------------
 1686|      2|		timestamp_level = settings_get_level("timestamp_level");
 1687|      2|	timestamp_timeout = settings_get_time("timestamp_timeout")/1000;
 1688|       |
 1689|      2|	hide_server_tags = settings_get_bool("hide_server_tags");
 1690|      2|	hide_text_style = settings_get_bool("hide_text_style");
 1691|      2|	hide_colors = hide_text_style || settings_get_bool("hide_colors");
  ------------------
  |  Branch (1691:16): [True: 0, False: 2]
  |  Branch (1691:35): [True: 0, False: 2]
  ------------------
 1692|      2|}
formats.c:clear_global_meta:
  469|  1.13M|{
  470|  1.13M|	if (dest != NULL && dest->meta == global_meta)
  ------------------
  |  Branch (470:6): [True: 1.13M, False: 0]
  |  Branch (470:22): [True: 79.9k, False: 1.05M]
  ------------------
  471|  79.9k|		g_hash_table_remove_all(global_meta);
  472|  1.13M|}

hilight_match:
  243|  1.13M|{
  244|  1.13M|	GSList *tmp;
  245|  1.13M|	CHANNEL_REC *chanrec;
  246|  1.13M|	NICK_REC *nickrec;
  247|  1.13M|	HILIGHT_REC *tmprec;
  248|  1.13M|	int priority = -1;
  249|       |
  250|  1.13M|	g_return_val_if_fail(str != NULL, NULL);
  ------------------
  |  Branch (250:2): [True: 1.13M, False: 0]
  |  Branch (250:2): [True: 1.13M, False: 0]
  |  Branch (250:2): [Folded, False: 1.13M]
  ------------------
  251|  1.13M|	tmprec = NULL;
  252|       |
  253|  1.13M|	if ((never_hilight_level & level) == level)
  ------------------
  |  Branch (253:6): [True: 1.03M, False: 102k]
  ------------------
  254|  1.03M|		return NULL;
  255|       |
  256|   102k|	if (nick != NULL) {
  ------------------
  |  Branch (256:6): [True: 7.06k, False: 95.5k]
  ------------------
  257|       |		/* check nick mask hilights */
  258|  7.06k|		chanrec = channel_find(server, channel);
  259|  7.06k|		nickrec = chanrec == NULL ? NULL :
  ------------------
  |  Branch (259:13): [True: 5.75k, False: 1.31k]
  ------------------
  260|  7.06k|			nicklist_find(chanrec, nick);
  261|  7.06k|		if (nickrec != NULL) {
  ------------------
  |  Branch (261:7): [True: 546, False: 6.51k]
  ------------------
  262|    546|			HILIGHT_REC *rec;
  263|       |
  264|    546|			if (nickrec->host == NULL)
  ------------------
  |  Branch (264:8): [True: 0, False: 546]
  ------------------
  265|      0|				nicklist_set_host(chanrec, nickrec, address);
  266|       |
  267|    546|			rec = nickmatch_find(nickmatch, nickrec);
  ------------------
  |  |   22|    546|        g_hash_table_lookup((rec)->nicks, nick)
  ------------------
  268|    546|			if (rec != NULL && hilight_match_level(rec, level))
  ------------------
  |  |  233|      0|	(level & (((rec)->level != 0 ? rec->level : default_hilight_level)))
  |  |  ------------------
  |  |  |  Branch (233:2): [True: 0, False: 0]
  |  |  |  Branch (233:13): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (268:8): [True: 0, False: 546]
  ------------------
  269|      0|				return rec;
  270|    546|		}
  271|  7.06k|	}
  272|       |
  273|   102k|	for (tmp = hilights; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (273:23): [True: 0, False: 102k]
  ------------------
  274|      0|		HILIGHT_REC *rec = tmp->data;
  275|       |
  276|      0|		if (rec->priority > priority && !rec->nickmask && hilight_match_level(rec, level) &&
  ------------------
  |  |  233|      0|	(level & (((rec)->level != 0 ? rec->level : default_hilight_level)))
  |  |  ------------------
  |  |  |  Branch (233:2): [True: 0, False: 0]
  |  |  |  Branch (233:13): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (276:7): [True: 0, False: 0]
  |  Branch (276:35): [True: 0, False: 0]
  ------------------
  277|      0|		    hilight_match_channel(rec, channel) &&
  ------------------
  |  |  236|      0|	((rec)->channels == NULL || ((channel) != NULL && \
  |  |  ------------------
  |  |  |  Branch (236:3): [True: 0, False: 0]
  |  |  |  Branch (236:31): [True: 0, False: 0]
  |  |  ------------------
  |  |  237|      0|		strarray_find((rec)->channels, (channel)) != -1))
  |  |  ------------------
  |  |  |  Branch (237:3): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  278|      0|		    (rec->servertag == NULL ||
  ------------------
  |  Branch (278:8): [True: 0, False: 0]
  ------------------
  279|      0|		     (server != NULL && g_ascii_strcasecmp(rec->servertag, server->tag) == 0)) &&
  ------------------
  |  Branch (279:9): [True: 0, False: 0]
  |  Branch (279:27): [True: 0, False: 0]
  ------------------
  280|      0|		    hilight_match_text(rec, str, match_beg, match_end)) {
  ------------------
  |  Branch (280:7): [True: 0, False: 0]
  ------------------
  281|      0|			tmprec = rec;
  282|      0|			priority = rec->priority;
  283|      0|		}
  284|      0|	}
  285|       |
  286|   102k|	return tmprec;
  287|   102k|}
hilight_match_nick:
  495|  7.45k|{
  496|  7.45k|	HILIGHT_REC *rec;
  497|       |
  498|  7.45k|	rec = hilight_match(server, channel, nick, address,
  499|  7.45k|				level, msg, NULL, NULL);
  500|  7.45k|	return (rec == NULL || !rec->nick) ? NULL : rec;
  ------------------
  |  Branch (500:10): [True: 7.45k, False: 0]
  |  Branch (500:25): [True: 0, False: 0]
  ------------------
  501|  7.45k|}
hilight_text_init:
  788|      2|{
  789|      2|	settings_add_str("lookandfeel", "hilight_color", "%Y");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  790|      2|	settings_add_str("lookandfeel", "hilight_act_color", "%M");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  791|      2|	settings_add_level("lookandfeel", "hilight_level", "PUBLIC DCCMSGS");
  ------------------
  |  |  101|      2|	settings_add_level_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  792|       |
  793|      2|	read_settings();
  794|       |
  795|      2|	nickmatch = nickmatch_init(hilight_nick_cache, NULL);
  796|      2|	read_hilight_config();
  797|       |
  798|      2|	signal_add_first("print text", (SIGNAL_FUNC) sig_print_text);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  799|      2|	signal_add("gui render line text", (SIGNAL_FUNC) sig_render_line_text);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  800|      2|	signal_add("setup reread", (SIGNAL_FUNC) read_hilight_config);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  801|      2|	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  802|       |
  803|      2|	command_bind("hilight", NULL, (SIGNAL_FUNC) cmd_hilight);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  804|      2|	command_bind("dehilight", NULL, (SIGNAL_FUNC) cmd_dehilight);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  805|      2|	command_set_options("hilight", "-color -actcolor -level -priority -network -channels nick word line mask full regexp matchcase");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  806|      2|}
hilight-text.c:read_settings:
  782|      2|{
  783|      2|	default_hilight_level = settings_get_level("hilight_level");
  784|      2|	reset_level_cache();
  785|      2|}
hilight-text.c:reset_level_cache:
   45|      4|{
   46|      4|	GSList *tmp;
   47|       |
   48|      4|	never_hilight_level = MSGLEVEL_ALL & ~default_hilight_level;
   49|      4|	for (tmp = hilights; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (49:23): [True: 0, False: 4]
  ------------------
   50|      0|		HILIGHT_REC *rec = tmp->data;
   51|       |
   52|      0|		if (never_hilight_level & rec->level)
  ------------------
  |  Branch (52:7): [True: 0, False: 0]
  ------------------
   53|      0|			never_hilight_level &= ~rec->level;
   54|      0|	}
   55|      4|}
hilight-text.c:hilight_nick_cache:
  748|   104k|{
  749|   104k|	GSList *tmp;
  750|   104k|	HILIGHT_REC *match;
  751|   104k|	char *nickmask;
  752|   104k|	int len, best_match;
  753|   104k|	int priority = -1;
  754|       |
  755|   104k|	if (nick->host == NULL)
  ------------------
  |  Branch (755:6): [True: 96.4k, False: 8.51k]
  ------------------
  756|  96.4k|		return; /* don't check until host is known */
  757|       |
  758|  8.51k|	nickmask = g_strconcat(nick->nick, "!", nick->host, NULL);
  759|       |
  760|  8.51k|	best_match = 0; match = NULL;
  761|  8.51k|	for (tmp = hilights; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (761:23): [True: 0, False: 8.51k]
  ------------------
  762|      0|		HILIGHT_REC *rec = tmp->data;
  763|       |
  764|      0|		if (rec->priority > priority && rec->nickmask &&
  ------------------
  |  Branch (764:7): [True: 0, False: 0]
  |  Branch (764:35): [True: 0, False: 0]
  ------------------
  765|      0|		    hilight_match_channel(rec, channel->name) &&
  ------------------
  |  |  236|      0|	((rec)->channels == NULL || ((channel) != NULL && \
  |  |  ------------------
  |  |  |  Branch (236:3): [True: 0, False: 0]
  |  |  |  Branch (236:31): [True: 0, False: 0]
  |  |  ------------------
  |  |  237|      0|		strarray_find((rec)->channels, (channel)) != -1))
  |  |  ------------------
  |  |  |  Branch (237:3): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  766|      0|		    match_wildcards(rec->text, nickmask)) {
  ------------------
  |  Branch (766:7): [True: 0, False: 0]
  ------------------
  767|      0|			len = strlen(rec->text);
  768|      0|			if (best_match < len) {
  ------------------
  |  Branch (768:8): [True: 0, False: 0]
  ------------------
  769|      0|				priority = rec->priority;
  770|      0|				best_match = len;
  771|      0|				match = rec;
  772|      0|			}
  773|      0|		}
  774|      0|	}
  775|  8.51k|	g_free_not_null(nickmask);
  ------------------
  |  |   64|  8.51k|#define g_free_not_null(a) g_free(a)
  ------------------
  776|       |
  777|  8.51k|	if (match != NULL)
  ------------------
  |  Branch (777:6): [True: 0, False: 8.51k]
  ------------------
  778|      0|		g_hash_table_insert(list, nick, match);
  779|  8.51k|}
hilight-text.c:read_hilight_config:
  504|      2|{
  505|      2|	CONFIG_NODE *node;
  506|      2|	HILIGHT_REC *rec;
  507|      2|	GSList *tmp;
  508|      2|	char *text, *color, *servertag;
  509|       |
  510|      2|	hilights_destroy_all();
  511|       |
  512|      2|	node = iconfig_node_traverse("hilights", FALSE);
  ------------------
  |  |   51|      2|#define iconfig_node_traverse(a, b) config_node_traverse(mainconfig, a, b)
  ------------------
  513|      2|	if (node == NULL) {
  ------------------
  |  Branch (513:6): [True: 2, False: 0]
  ------------------
  514|      2|		reset_cache();
  515|      2|		return;
  516|      2|	}
  517|       |
  518|      0|	tmp = config_node_first(node->value);
  519|      0|	for (; tmp != NULL; tmp = config_node_next(tmp)) {
  ------------------
  |  Branch (519:9): [True: 0, False: 0]
  ------------------
  520|      0|		node = tmp->data;
  521|       |
  522|      0|		if (node->type != NODE_TYPE_BLOCK)
  ------------------
  |  Branch (522:7): [True: 0, False: 0]
  ------------------
  523|      0|			continue;
  524|       |
  525|      0|		text = config_node_get_str(node, "text", NULL);
  526|      0|		if (text == NULL || *text == '\0')
  ------------------
  |  Branch (526:7): [True: 0, False: 0]
  |  Branch (526:23): [True: 0, False: 0]
  ------------------
  527|      0|			continue;
  528|       |
  529|      0|		rec = g_new0(HILIGHT_REC, 1);
  ------------------
  |  Branch (529:9): [True: 0, False: 0]
  |  Branch (529:9): [True: 0, False: 0]
  ------------------
  530|      0|		hilights = g_slist_append(hilights, rec);
  531|       |
  532|      0|		rec->text = g_strdup(text);
  533|       |
  534|      0|		color = config_node_get_str(node, "color", NULL);
  535|      0|		rec->color = color == NULL || *color == '\0' ? NULL :
  ------------------
  |  Branch (535:16): [True: 0, False: 0]
  |  Branch (535:33): [True: 0, False: 0]
  ------------------
  536|      0|			g_strdup(color);
  537|       |
  538|      0|		color = config_node_get_str(node, "act_color", NULL);
  539|      0|		rec->act_color = color == NULL || *color == '\0' ? NULL :
  ------------------
  |  Branch (539:20): [True: 0, False: 0]
  |  Branch (539:37): [True: 0, False: 0]
  ------------------
  540|      0|			g_strdup(color);
  541|       |
  542|      0|		rec->level = config_node_get_int(node, "level", 0);
  543|      0|		rec->priority = config_node_get_int(node, "priority", 0);
  544|      0|		rec->nick = config_node_get_bool(node, "nick", TRUE);
  545|      0|		rec->word = config_node_get_bool(node, "word", TRUE);
  546|      0|		rec->case_sensitive = config_node_get_bool(node, "matchcase", FALSE);
  547|       |
  548|      0|		rec->nickmask = config_node_get_bool(node, "mask", FALSE);
  549|      0|		rec->fullword = config_node_get_bool(node, "fullword", FALSE);
  550|      0|		rec->regexp = config_node_get_bool(node, "regexp", FALSE);
  551|      0|		servertag = config_node_get_str(node, "servertag", NULL);
  552|      0|		rec->servertag = servertag == NULL || *servertag == '\0' ? NULL :
  ------------------
  |  Branch (552:20): [True: 0, False: 0]
  |  Branch (552:41): [True: 0, False: 0]
  ------------------
  553|      0|			g_strdup(servertag);
  554|      0|		hilight_init_rec(rec);
  555|       |
  556|      0|		node = iconfig_node_section(node, "channels", -1);
  ------------------
  |  |   49|      0|#define iconfig_node_section(a, b, c) config_node_section(mainconfig, a, b, c)
  ------------------
  557|      0|		if (node != NULL) rec->channels = config_node_get_list(node);
  ------------------
  |  Branch (557:7): [True: 0, False: 0]
  ------------------
  558|      0|	}
  559|       |
  560|      0|	reset_cache();
  561|      0|}
hilight-text.c:reset_cache:
   58|      2|{
   59|      2|	reset_level_cache();
   60|      2|	nickmatch_rebuild(nickmatch);
   61|      2|}
hilight-text.c:sig_print_text:
  393|  1.13M|{
  394|  1.13M|	HILIGHT_REC *hilight;
  395|  1.13M|	char *color, *newstr;
  396|  1.13M|	int old_level, hilight_start, hilight_end, hilight_len;
  397|  1.13M|	int nick_match;
  398|       |
  399|  1.13M|	if (dest->level & MSGLEVEL_NOHILIGHT)
  ------------------
  |  Branch (399:6): [True: 0, False: 1.13M]
  ------------------
  400|      0|		return;
  401|       |
  402|  1.13M|	hilight_start = hilight_end = 0;
  403|  1.13M|	hilight = hilight_match(dest->server, dest->target, dest->nick,
  404|  1.13M|				dest->address, dest->level, stripped,
  405|  1.13M|				&hilight_start, &hilight_end);
  406|       |
  407|  1.13M|	if (hilight == NULL)
  ------------------
  |  Branch (407:6): [True: 1.13M, False: 0]
  ------------------
  408|  1.13M|		return;
  409|       |
  410|      0|	nick_match = hilight->nick && (dest->level & (MSGLEVEL_PUBLIC|MSGLEVEL_ACTIONS)) == MSGLEVEL_PUBLIC;
  ------------------
  |  Branch (410:15): [True: 0, False: 0]
  |  Branch (410:32): [True: 0, False: 0]
  ------------------
  411|       |
  412|      0|	old_level = dest->level;
  413|      0|	if (!nick_match || (dest->level & MSGLEVEL_HILIGHT)) {
  ------------------
  |  Branch (413:6): [True: 0, False: 0]
  |  Branch (413:21): [True: 0, False: 0]
  ------------------
  414|       |		/* Remove NO_ACT, this means explicitly defined hilights will bypass
  415|       |		 * /IGNORE ... NO_ACT.
  416|       |		 * (It's still possible to use /hilight -actcolor %n to hide
  417|       |		 * hilight/beep).
  418|       |		 */
  419|      0|		dest->level &= ~MSGLEVEL_NO_ACT;
  420|       |		/* update the level / hilight info */
  421|      0|		hilight_update_text_dest(dest, hilight);
  422|      0|	}
  423|       |
  424|      0|	if (nick_match)
  ------------------
  |  Branch (424:6): [True: 0, False: 0]
  ------------------
  425|      0|		return; /* fe-messages.c should have taken care of this */
  426|       |
  427|      0|	if (old_level & MSGLEVEL_HILIGHT) {
  ------------------
  |  Branch (427:6): [True: 0, False: 0]
  ------------------
  428|       |		/* nick is highlighted, just set priority */
  429|      0|		return;
  430|      0|	}
  431|       |
  432|      0|	color = hilight_get_color(hilight);
  433|      0|	hilight_len = hilight_end-hilight_start;
  434|       |
  435|      0|	if (!hilight->word) {
  ------------------
  |  Branch (435:6): [True: 0, False: 0]
  ------------------
  436|       |		/* hilight whole line */
  437|      0|		char *tmp = strip_codes(text);
  438|      0|		newstr = g_strconcat(color, tmp, NULL);
  439|      0|		g_free(tmp);
  440|       |
  441|      0|		format_dest_meta_stash(dest, "hilight-line", "\001");
  442|      0|	} else {
  443|       |		/* hilight part of the line */
  444|      0|		GString *str;
  445|      0|		char *middle, *tmp;
  446|      0|		int pos, color_pos, color_len;
  447|       |
  448|       |		/* start of the line */
  449|      0|		pos = strip_real_length(text, hilight_start, NULL, NULL);
  450|      0|		str = g_string_new_len(text, pos);
  451|       |
  452|       |		/* color */
  453|      0|		g_string_append(str, color);
  454|       |
  455|       |		/* middle of the line, stripped */
  456|      0|		middle = strip_codes(text + pos);
  457|      0|		g_string_append_len(str, middle, hilight_len);
  458|      0|		g_free(middle);
  459|       |
  460|       |		/* end of the line */
  461|      0|		pos = strip_real_length(text, hilight_end,
  462|      0|					&color_pos, &color_len);
  463|      0|		if (color_pos > 0) {
  ------------------
  |  Branch (463:7): [True: 0, False: 0]
  ------------------
  464|      0|			g_string_append_len(str, text + color_pos, color_len);
  465|      0|		} else {
  466|       |			/* no colors in line, change back to default */
  467|      0|			g_string_append_c(str, 4);
  468|      0|			g_string_append_c(str, FORMAT_STYLE_DEFAULTS);
  469|      0|		}
  470|      0|		g_string_append(str, text + pos);
  471|       |
  472|      0|		newstr = g_string_free_and_steal(str);
  473|       |
  474|      0|		format_dest_meta_stash(dest, "hilight-start",
  475|      0|		                       tmp = g_strdup_printf("%d", hilight_start));
  476|      0|		g_free(tmp);
  477|      0|		format_dest_meta_stash(dest, "hilight-end",
  478|      0|		                       tmp = g_strdup_printf("%d", hilight_end));
  479|      0|		g_free(tmp);
  480|      0|	}
  481|      0|	if (hilight->color != NULL)
  ------------------
  |  Branch (481:6): [True: 0, False: 0]
  ------------------
  482|      0|		format_dest_meta_stash(dest, "hilight-color", hilight->color);
  483|       |
  484|      0|	signal_emit("print text", 3, dest, newstr, stripped);
  485|       |
  486|      0|	g_free(color);
  487|      0|	g_free(newstr);
  488|       |
  489|      0|	signal_stop();
  490|      0|}
hilight-text.c:hilights_destroy_all:
  115|      2|{
  116|      2|	g_slist_foreach(hilights, (GFunc) hilight_destroy, NULL);
  117|      2|	g_slist_free(hilights);
  118|       |	hilights = NULL;
  119|      2|}

key_info_find:
  177|      8|{
  178|      8|	GSList *tmp;
  179|       |
  180|     20|	for (tmp = keyinfos; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (180:23): [True: 12, False: 8]
  ------------------
  181|     12|		KEYINFO_REC *rec = tmp->data;
  182|       |
  183|     12|		if (g_ascii_strcasecmp(rec->id, id) == 0)
  ------------------
  |  Branch (183:7): [True: 0, False: 12]
  ------------------
  184|      0|			return rec;
  185|     12|	}
  186|       |
  187|      8|	return NULL;
  188|      8|}
key_bind:
  490|      8|{
  491|      8|	KEYINFO_REC *info;
  492|      8|	char *key;
  493|       |
  494|      8|	g_return_if_fail(id != NULL);
  ------------------
  |  Branch (494:2): [True: 8, False: 0]
  |  Branch (494:2): [True: 8, False: 0]
  |  Branch (494:2): [Folded, False: 8]
  ------------------
  495|       |
  496|       |	/* create key info record */
  497|      8|	info = key_info_find(id);
  498|      8|	if (info == NULL) {
  ------------------
  |  Branch (498:6): [True: 8, False: 0]
  ------------------
  499|      8|		g_return_if_fail(func != NULL);
  ------------------
  |  Branch (499:3): [True: 8, False: 0]
  |  Branch (499:3): [True: 8, False: 0]
  |  Branch (499:3): [Folded, False: 8]
  ------------------
  500|       |
  501|      8|		if (description == NULL)
  ------------------
  |  Branch (501:7): [True: 0, False: 8]
  ------------------
  502|      8|			g_warning("key_bind(%s) should have description!", id);
  503|      8|		info = g_new0(KEYINFO_REC, 1);
  ------------------
  |  Branch (503:10): [True: 8, False: 0]
  |  Branch (503:10): [True: 0, False: 8]
  ------------------
  504|      8|		info->id = g_strdup(id);
  505|      8|		info->description = g_strdup(description);
  506|      8|		keyinfos = g_slist_append(keyinfos, info);
  507|       |
  508|       |		/* add the signal */
  509|      8|		key = g_strconcat("key ", id, NULL);
  510|      8|		signal_add(key, func);
  ------------------
  |  |   21|      8|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      8|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      8|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  511|      8|		g_free(key);
  512|       |
  513|      8|		signal_emit("keyinfo created", 1, info);
  514|      8|	}
  515|       |
  516|      8|	if (key_default != NULL && *key_default != '\0') {
  ------------------
  |  Branch (516:6): [True: 0, False: 8]
  |  Branch (516:29): [True: 0, False: 0]
  ------------------
  517|      0|                key_default_add(id, key_default, data);
  518|      0|		key_configure_create(id, key_default, data);
  519|      0|	}
  520|      8|}
keyboard_init:
  961|      2|{
  962|      2|	keys = g_hash_table_new((GHashFunc) g_str_hash,
  963|      2|				(GCompareFunc) g_str_equal);
  964|      2|	default_keys = g_hash_table_new((GHashFunc) g_str_hash,
  965|      2|					(GCompareFunc) g_str_equal);
  966|      2|	keyinfos = NULL;
  967|      2|	key_states = g_tree_new((GCompareFunc) g_strcmp0);
  968|      2|        key_config_frozen = 0;
  969|      2|	memset(used_keys, 0, sizeof(used_keys));
  970|       |
  971|      2|	settings_add_int("misc", "key_timeout", 0);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  972|       |
  973|      2|	key_bind("command", "Run any command", NULL, NULL, (SIGNAL_FUNC) sig_command);
  974|      2|	key_bind("key", "Specify name for key binding", NULL, NULL, (SIGNAL_FUNC) sig_key);
  975|      2|	key_bind("multi", "Run multiple commands", NULL, NULL, (SIGNAL_FUNC) sig_multi);
  976|      2|	key_bind("nothing", "Do nothing", NULL, NULL, (SIGNAL_FUNC) sig_nothing);
  977|       |
  978|       |	/* read the keyboard config when all key binds are known */
  979|      2|	signal_add("irssi init read settings", (SIGNAL_FUNC) read_keyboard_config);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  980|      2|	signal_add("setup reread", (SIGNAL_FUNC) read_keyboard_config);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  981|      2|	signal_add("complete command bind", (SIGNAL_FUNC) sig_complete_bind);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  982|       |
  983|      2|	command_bind("bind", NULL, (SIGNAL_FUNC) cmd_bind);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  984|      2|	command_set_options("bind", "delete reset list");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  985|      2|}

printformat_module_dest_args:
   51|   515k|{
   52|   515k|	char *arglist[MAX_FORMAT_PARAMS];
   53|   515k|	char buffer[DEFAULT_FORMAT_ARGLIST_SIZE];
   54|   515k|	FORMAT_REC *formats;
   55|       |
   56|   515k|	formats = g_hash_table_lookup(default_formats, module);
   57|   515k|	format_read_arglist(va, &formats[formatnum],
   58|   515k|			    arglist, sizeof(arglist)/sizeof(char *),
   59|   515k|			    buffer, sizeof(buffer));
   60|       |
   61|   515k|	printformat_module_dest_charargs(module, dest, formatnum, arglist);
   62|   515k|}
printformat_module_dest_charargs:
   66|   515k|{
   67|   515k|	THEME_REC *theme;
   68|       |
   69|   515k|	theme = window_get_theme(dest->window);
  ------------------
  |  |   76|   515k|	(window != NULL && (window)->theme != NULL ? \
  |  |  ------------------
  |  |  |  Branch (76:3): [True: 515k, False: 1]
  |  |  |  Branch (76:21): [True: 0, False: 515k]
  |  |  ------------------
  |  |   77|   515k|	(window)->theme : current_theme)
  ------------------
   70|       |
   71|   515k|	if (!sending_print_starting) {
  ------------------
  |  Branch (71:6): [True: 515k, False: 4]
  ------------------
   72|   515k|		sending_print_starting = TRUE;
   73|   515k|		signal_emit_id(signal_print_starting, 1, dest);
   74|   515k|                sending_print_starting = FALSE;
   75|   515k|	}
   76|       |
   77|   515k|	signal_emit_id(signal_print_format, 5, theme, module,
   78|       |		       dest, GINT_TO_POINTER(formatnum), arglist);
   79|   515k|}
printformat_module_dest:
   83|  7.02k|{
   84|  7.02k|	va_list va;
   85|       |
   86|  7.02k|	va_start(va, formatnum);
   87|  7.02k|	printformat_module_dest_args(module, dest, formatnum, va);
   88|       |	va_end(va);
   89|  7.02k|}
printformat_module_args:
   94|   508k|{
   95|   508k|	TEXT_DEST_REC dest;
   96|       |
   97|       |	format_create_dest(&dest, server, target, level, NULL);
   98|   508k|	printformat_module_dest_args(module, &dest, formatnum, va);
   99|   508k|}
printformat_module:
  103|   508k|{
  104|   508k|	va_list va;
  105|       |
  106|   508k|	va_start(va, formatnum);
  107|   508k|	printformat_module_args(module, server, target, level, formatnum, va);
  108|       |	va_end(va);
  109|   508k|}
printtext:
  303|   255k|{
  304|   255k|	TEXT_DEST_REC dest;
  305|   255k|	va_list va;
  306|       |
  307|   255k|	g_return_if_fail(text != NULL);
  ------------------
  |  Branch (307:2): [True: 255k, False: 0]
  |  Branch (307:2): [True: 255k, False: 0]
  |  Branch (307:2): [Folded, False: 255k]
  ------------------
  308|       |
  309|   255k|        format_create_dest(&dest, server, target, level, NULL);
  310|       |
  311|   255k|	va_start(va, text);
  312|   255k|	printtext_dest_args(&dest, text, va);
  313|       |	va_end(va);
  314|   255k|}
printtext_init:
  541|      2|{
  542|      2|	sending_print_starting = FALSE;
  543|      2|	signal_gui_print_text_finished = signal_get_uniq_id("gui print text finished");
  ------------------
  |  |   68|      2|        module_get_uniq_id_str("signals", signal)
  ------------------
  544|      2|	signal_print_starting = signal_get_uniq_id("print starting");
  ------------------
  |  |   68|      2|        module_get_uniq_id_str("signals", signal)
  ------------------
  545|      2|	signal_print_text = signal_get_uniq_id("print text");
  ------------------
  |  |   68|      2|        module_get_uniq_id_str("signals", signal)
  ------------------
  546|      2|	signal_print_format = signal_get_uniq_id("print format");
  ------------------
  |  |   68|      2|        module_get_uniq_id_str("signals", signal)
  ------------------
  547|      2|	signal_print_noformat = signal_get_uniq_id("print noformat");
  ------------------
  |  |   68|      2|        module_get_uniq_id_str("signals", signal)
  ------------------
  548|      2|	signal_window_hilight_check = signal_get_uniq_id("window hilight check");
  ------------------
  |  |   68|      2|        module_get_uniq_id_str("signals", signal)
  ------------------
  549|       |
  550|      2|	read_settings();
  551|      2|	signal_add("print text", (SIGNAL_FUNC) sig_print_text);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  552|      2|	signal_add("print format", (SIGNAL_FUNC) sig_print_format);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  553|      2|	signal_add("print noformat", (SIGNAL_FUNC) sig_print_noformat);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  554|      2|	signal_add("gui dialog", (SIGNAL_FUNC) sig_gui_dialog);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  555|       |	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  556|      2|}
printtext.c:printtext_dest_args:
  278|   255k|{
  279|   255k|	char *str;
  280|       |
  281|   255k|	if (!sending_print_starting) {
  ------------------
  |  Branch (281:6): [True: 255k, False: 0]
  ------------------
  282|   255k|		sending_print_starting = TRUE;
  283|   255k|		signal_emit_id(signal_print_starting, 1, dest);
  284|   255k|                sending_print_starting = FALSE;
  285|   255k|	}
  286|       |
  287|   255k|	str = printtext_get_args(dest, text, va);
  288|   255k|	print_line(dest, str, 0);
  289|   255k|	g_free(str);
  290|   255k|}
printtext.c:printtext_get_args:
  180|   255k|{
  181|   255k|	GString *out;
  182|   255k|	char *ret;
  183|   255k|	int adv;
  184|       |
  185|   255k|	out = g_string_new(NULL);
  186|   511k|	for (; *str != '\0'; str++) {
  ------------------
  |  Branch (186:9): [True: 255k, False: 255k]
  ------------------
  187|   255k|		if (*str != '%') {
  ------------------
  |  Branch (187:7): [True: 0, False: 255k]
  ------------------
  188|      0|			g_string_append_c(out, *str);
  189|      0|			continue;
  190|      0|		}
  191|       |
  192|   255k|		if (*++str == '\0')
  ------------------
  |  Branch (192:7): [True: 0, False: 255k]
  ------------------
  193|      0|			break;
  194|       |
  195|       |		/* standard parameters */
  196|   255k|		switch (*str) {
  197|   255k|		case 's': {
  ------------------
  |  Branch (197:3): [True: 255k, False: 0]
  ------------------
  198|   255k|			char *s = (char *) va_arg(va, char *);
  199|   255k|			if (s && *s) printtext_append_str(dest, out, s);
  ------------------
  |  Branch (199:8): [True: 255k, False: 0]
  |  Branch (199:13): [True: 227k, False: 28.1k]
  ------------------
  200|   255k|			break;
  201|      0|		}
  202|      0|		case 'd': {
  ------------------
  |  Branch (202:3): [True: 0, False: 255k]
  ------------------
  203|      0|			int d = (int) va_arg(va, int);
  204|      0|			g_string_append_printf(out, "%d", d);
  205|      0|			break;
  206|      0|		}
  207|      0|		case 'f': {
  ------------------
  |  Branch (207:3): [True: 0, False: 255k]
  ------------------
  208|      0|			double f = (double) va_arg(va, double);
  209|      0|			g_string_append_printf(out, "%0.2f", f);
  210|      0|			break;
  211|      0|		}
  212|      0|		case 'u': {
  ------------------
  |  Branch (212:3): [True: 0, False: 255k]
  ------------------
  213|      0|			unsigned int d =
  214|      0|				(unsigned int) va_arg(va, unsigned int);
  215|      0|			g_string_append_printf(out, "%u", d);
  216|      0|			break;
  217|      0|                }
  218|      0|		case 'l': {
  ------------------
  |  Branch (218:3): [True: 0, False: 255k]
  ------------------
  219|      0|			long d = (long) va_arg(va, long);
  220|       |
  221|      0|			if (*++str != 'd' && *str != 'u') {
  ------------------
  |  Branch (221:8): [True: 0, False: 0]
  |  Branch (221:25): [True: 0, False: 0]
  ------------------
  222|      0|				g_string_append_printf(out, "%ld", d);
  223|      0|				str--;
  224|      0|			} else {
  225|      0|				if (*str == 'd')
  ------------------
  |  Branch (225:9): [True: 0, False: 0]
  ------------------
  226|      0|					g_string_append_printf(out, "%ld", d);
  227|      0|				else
  228|      0|					g_string_append_printf(out, "%lu", d);
  229|      0|			}
  230|      0|			break;
  231|      0|		}
  232|      0|		default:
  ------------------
  |  Branch (232:3): [True: 0, False: 255k]
  ------------------
  233|      0|			adv = format_expand_styles(out, &str, &dest->flags);
  234|      0|			if (!adv) {
  ------------------
  |  Branch (234:8): [True: 0, False: 0]
  ------------------
  235|      0|				g_string_append_c(out, '%');
  236|      0|				g_string_append_c(out, *str);
  237|      0|			} else {
  238|      0|				str += adv - 1;
  239|      0|			}
  240|      0|			break;
  241|   255k|		}
  242|   255k|	}
  243|       |
  244|   255k|	ret = g_string_free_and_steal(out);
  245|   255k|	return ret;
  246|   255k|}
printtext.c:printtext_append_str:
  166|   227k|{
  167|  62.9M|	while (*str != '\0') {
  ------------------
  |  Branch (167:9): [True: 62.7M, False: 227k]
  ------------------
  168|  62.7M|		if (*str != '\n')
  ------------------
  |  Branch (168:7): [True: 62.3M, False: 360k]
  ------------------
  169|  62.7M|			g_string_append_c(out, *str);
  170|   360k|		else {
  171|   360k|			print_line(dest, out->str, 0);
  172|   360k|			g_string_truncate(out, 0);
  173|   360k|		}
  174|  62.7M|		str++;
  175|  62.7M|	}
  176|   227k|}
printtext.c:print_line:
  494|  1.13M|{
  495|  1.13M|	g_return_if_fail(dest != NULL);
  ------------------
  |  Branch (495:2): [True: 1.13M, False: 0]
  |  Branch (495:2): [True: 1.13M, False: 0]
  |  Branch (495:2): [Folded, False: 1.13M]
  ------------------
  496|  1.13M|	g_return_if_fail(text != NULL);
  ------------------
  |  Branch (496:2): [True: 1.13M, False: 0]
  |  Branch (496:2): [True: 1.13M, False: 0]
  |  Branch (496:2): [Folded, False: 1.13M]
  ------------------
  497|       |
  498|  1.13M|	if (!formatted)
  ------------------
  |  Branch (498:6): [True: 615k, False: 515k]
  ------------------
  499|   615k|		signal_emit_id(signal_print_noformat, 2, dest, text);
  500|   515k|	else
  501|   515k|		sig_print_noformat(dest, text);
  502|  1.13M|}
printtext.c:read_settings:
  533|      2|{
  534|      2|	beep_msg_level = settings_get_level("beep_msg_level");
  535|      2|	beep_msg_level_ignore = settings_get_level_negative("beep_msg_level");
  536|      2|	beep_when_away = settings_get_bool("beep_when_away");
  537|      2|        beep_when_window_active = settings_get_bool("beep_when_window_active");
  538|      2|}
printtext.c:sig_print_text:
  423|  1.13M|{
  424|  1.13M|        THEME_REC *theme;
  425|  1.13M|	char *str, *tmp;
  426|       |
  427|  1.13M|	g_return_if_fail(dest != NULL);
  ------------------
  |  Branch (427:2): [True: 1.13M, False: 0]
  |  Branch (427:2): [True: 1.13M, False: 0]
  |  Branch (427:2): [Folded, False: 1.13M]
  ------------------
  428|  1.13M|	g_return_if_fail(text != NULL);
  ------------------
  |  Branch (428:2): [True: 1.13M, False: 0]
  |  Branch (428:2): [True: 1.13M, False: 0]
  |  Branch (428:2): [Folded, False: 1.13M]
  ------------------
  429|       |
  430|  1.13M|	if (dest->window == NULL) {
  ------------------
  |  Branch (430:6): [True: 1, False: 1.13M]
  ------------------
  431|      1|                str = strip_codes(text);
  432|       |#ifndef SUPPRESS_PRINTF_FALLBACK
  433|       |		printf("## NO WINDOWS: %s\n", str);
  434|       |#endif
  435|      1|                g_free(str);
  436|      1|                return;
  437|      1|	}
  438|       |
  439|  1.13M|	msg_beep_check(dest);
  440|       |
  441|  1.13M|        if ((dest->level & MSGLEVEL_NEVER) == 0)
  ------------------
  |  Branch (441:13): [True: 1.05M, False: 72.3k]
  ------------------
  442|  1.05M|		dest->window->last_line = time(NULL);
  443|       |
  444|       |	/* add timestamp/server tag here - if it's done in print_line()
  445|       |	   it would be written to log files too */
  446|  1.13M|        theme = window_get_theme(dest->window);
  ------------------
  |  |   76|  1.13M|	(window != NULL && (window)->theme != NULL ? \
  |  |  ------------------
  |  |  |  Branch (76:3): [True: 1.13M, False: 0]
  |  |  |  Branch (76:21): [True: 0, False: 1.13M]
  |  |  ------------------
  |  |   77|  1.13M|	(window)->theme : current_theme)
  ------------------
  447|  1.13M|	tmp = format_get_line_start(theme, dest, time(NULL));
  448|  1.13M|	str = !theme->info_eol ? format_add_linestart(text, tmp) :
  ------------------
  |  Branch (448:8): [True: 1.13M, False: 0]
  ------------------
  449|  1.13M|		format_add_lineend(text, tmp);
  450|       |
  451|  1.13M|	g_free_not_null(tmp);
  ------------------
  |  |   64|  1.13M|#define g_free_not_null(a) g_free(a)
  ------------------
  452|       |
  453|  1.13M|	format_send_to_gui(dest, str);
  454|  1.13M|	g_free(str);
  455|       |
  456|  1.13M|	signal_emit_id(signal_gui_print_text_finished, 2, dest->window, dest);
  457|  1.13M|}
printtext.c:msg_beep_check:
  401|  1.13M|{
  402|  1.13M|	if (dest->level != 0 && (dest->level & MSGLEVEL_NO_ACT) == 0 &&
  ------------------
  |  Branch (402:6): [True: 1.13M, False: 0]
  |  Branch (402:26): [True: 1.11M, False: 14.1k]
  ------------------
  403|  1.11M|	    (beep_msg_level & dest->level) &&
  ------------------
  |  Branch (403:6): [True: 0, False: 1.11M]
  ------------------
  404|      0|	    (beep_when_away || (dest->server != NULL &&
  ------------------
  |  Branch (404:7): [True: 0, False: 0]
  |  Branch (404:26): [True: 0, False: 0]
  ------------------
  405|      0|				!dest->server->usermode_away)) &&
  ------------------
  |  Branch (405:5): [True: 0, False: 0]
  ------------------
  406|      0|	    (beep_when_window_active || dest->window != active_win)) {
  ------------------
  |  Branch (406:7): [True: 0, False: 0]
  |  Branch (406:34): [True: 0, False: 0]
  ------------------
  407|      0|		if (beep_msg_level_ignore & MSGLEVEL_HIDDEN) {
  ------------------
  |  Branch (407:7): [True: 0, False: 0]
  ------------------
  408|      0|			int cb_ignore = 0;
  409|      0|			if (signal_emit_id(signal_window_hilight_check, 4, dest, NULL, NULL,
  ------------------
  |  Branch (409:8): [True: 0, False: 0]
  ------------------
  410|      0|			                   &cb_ignore),
  411|      0|			    cb_ignore) {
  412|      0|				return;
  413|      0|			}
  414|      0|		} else if (beep_msg_level_ignore & dest->level) {
  ------------------
  |  Branch (414:14): [True: 0, False: 0]
  ------------------
  415|      0|			return;
  416|      0|		}
  417|       |
  418|      0|		signal_emit("beep", 0);
  419|      0|	}
  420|  1.13M|}
printtext.c:sig_print_format:
  461|   515k|{
  462|   515k|	int formatnum;
  463|   515k|	char *str;
  464|       |
  465|   515k|	formatnum = GPOINTER_TO_INT(formatnump);
  466|   515k|	str = format_get_text_theme_charargs(theme, module, dest, formatnum, arglist);
  467|   515k|	if (str != NULL && *str != '\0')
  ------------------
  |  Branch (467:6): [True: 515k, False: 0]
  |  Branch (467:21): [True: 515k, False: 0]
  ------------------
  468|   515k|		print_line(dest, str, 1);
  469|       |
  470|   515k|	g_free(str);
  471|   515k|}
printtext.c:sig_print_noformat:
  474|  1.13M|{
  475|  1.13M|	THEME_REC *theme;
  476|  1.13M|	char *str, *tmp, *stripped;
  477|       |
  478|  1.13M|	theme = window_get_theme(dest->window);
  ------------------
  |  |   76|  1.13M|	(window != NULL && (window)->theme != NULL ? \
  |  |  ------------------
  |  |  |  Branch (76:3): [True: 1.13M, False: 1]
  |  |  |  Branch (76:21): [True: 0, False: 1.13M]
  |  |  ------------------
  |  |   77|  1.13M|	(window)->theme : current_theme)
  ------------------
  479|  1.13M|	tmp = format_get_level_tag(theme, dest);
  480|  1.13M|	str = !theme->info_eol ? format_add_linestart(text, tmp) : format_add_lineend(text, tmp);
  ------------------
  |  Branch (480:8): [True: 1.13M, False: 0]
  ------------------
  481|  1.13M|	g_free_not_null(tmp);
  ------------------
  |  |   64|  1.13M|#define g_free_not_null(a) g_free(a)
  ------------------
  482|       |
  483|       |	/* send both the formatted + stripped (for logging etc.) */
  484|  1.13M|	stripped = strip_codes(str);
  485|  1.13M|	signal_emit_id(signal_print_text, 3, dest, str, stripped);
  486|       |
  487|  1.13M|	g_free_and_null(dest->hilight_color);
  ------------------
  |  |   67|  1.13M|	G_STMT_START { \
  |  |   68|  1.13M|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 0, False: 1.13M]
  |  |  ------------------
  |  |   69|  1.13M|	} G_STMT_END
  ------------------
  |  Branch (487:2): [Folded, False: 1.13M]
  ------------------
  488|       |
  489|  1.13M|	g_free(str);
  490|  1.13M|	g_free(stripped);
  491|  1.13M|}

theme_create:
   47|      4|{
   48|      4|	THEME_REC *rec;
   49|       |
   50|      4|	g_return_val_if_fail(path != NULL, NULL);
  ------------------
  |  Branch (50:2): [True: 4, False: 0]
  |  Branch (50:2): [True: 4, False: 0]
  |  Branch (50:2): [Folded, False: 4]
  ------------------
   51|      4|	g_return_val_if_fail(name != NULL, NULL);
  ------------------
  |  Branch (51:2): [True: 4, False: 0]
  |  Branch (51:2): [True: 4, False: 0]
  |  Branch (51:2): [Folded, False: 4]
  ------------------
   52|       |
   53|      4|	rec = g_new0(THEME_REC, 1);
  ------------------
  |  Branch (53:8): [True: 4, False: 0]
  |  Branch (53:8): [True: 0, False: 4]
  ------------------
   54|      4|	rec->refcount = 1;
   55|      4|	rec->path = g_strdup(path);
   56|      4|	rec->name = g_strdup(name);
   57|      4|	rec->abstracts = g_hash_table_new((GHashFunc) g_str_hash,
   58|      4|					  (GCompareFunc) g_str_equal);
   59|      4|	rec->modules = g_hash_table_new((GHashFunc) i_istr_hash, (GCompareFunc) i_istr_equal);
   60|      4|	themes = g_slist_append(themes, rec);
   61|      4|	signal_emit("theme created", 1, rec);
   62|       |
   63|      4|	return rec;
   64|      4|}
theme_destroy:
  109|      2|{
  110|      2|	themes = g_slist_remove(themes, rec);
  111|      2|	signal_emit("theme destroyed", 1, rec);
  112|       |
  113|      2|	theme_unref(rec);
  114|      2|}
theme_format_expand_get:
  363|    788|{
  364|    788|	GString *str;
  365|    788|	char *ret;
  366|    788|	theme_rm_col dummy, reset;
  367|    788|	int braces = 1; /* we start with one brace opened */
  368|    788|	dummy.m[0] = '\0';
  369|    788|	strcpy(reset.m, "n");
  370|       |
  371|    788|	str = g_string_new(NULL);
  372|  4.00k|	while (**format != '\0' && braces != 0) {
  ------------------
  |  Branch (372:9): [True: 4.00k, False: 0]
  |  Branch (372:29): [True: 4.00k, False: 0]
  ------------------
  373|  4.00k|		if (**format == '{')
  ------------------
  |  Branch (373:7): [True: 104, False: 3.90k]
  ------------------
  374|    104|			braces++;
  375|  3.90k|		else if (**format == '}')
  ------------------
  |  Branch (375:12): [True: 892, False: 3.01k]
  ------------------
  376|    892|			braces--;
  377|  3.01k|		else if ((braces > 1) && (**format == ' ')) {
  ------------------
  |  Branch (377:12): [True: 1.01k, False: 1.99k]
  |  Branch (377:28): [True: 106, False: 912]
  ------------------
  378|    106|			g_string_append(str, "\\x20");
  379|    106|			(*format)++;
  380|    106|			continue;
  381|  2.90k|		} else {
  382|  2.90k|			theme_format_append_next(theme, str, format,
  383|  2.90k|						 reset, reset,
  384|  2.90k|						 &dummy, &dummy,
  385|  2.90k|						 EXPAND_FLAG_IGNORE_REPLACES);
  ------------------
  |  |   53|  2.90k|#define EXPAND_FLAG_IGNORE_REPLACES     0x01 /* don't use the character replaces when expanding */
  ------------------
  386|  2.90k|			continue;
  387|  2.90k|		}
  388|       |
  389|    996|		if (braces == 0) {
  ------------------
  |  Branch (389:7): [True: 788, False: 208]
  ------------------
  390|    788|			(*format)++;
  391|    788|			break;
  392|    788|		}
  393|       |
  394|    996|		g_string_append_c(str, **format);
  395|    208|		(*format)++;
  396|    208|	}
  397|       |
  398|    788|	ret = g_string_free_and_steal(str);
  399|    788|	return ret;
  400|    788|}
theme_format_expand_data:
  583|  1.01k|{
  584|  1.01k|	return theme_format_expand_data_rec(theme, format, default_fg, default_bg, save_last_bg,
  585|       |	                                    save_last_bg, flags, NULL);
  586|  1.01k|}
theme_format_expand:
  650|    754|{
  651|    754|	char *data, *ret;
  652|    754|	theme_rm_col reset;
  653|    754|	strcpy(reset.m, "n");
  654|       |
  655|    754|	g_return_val_if_fail(theme != NULL, NULL);
  ------------------
  |  Branch (655:2): [True: 754, False: 0]
  |  Branch (655:2): [True: 754, False: 0]
  |  Branch (655:2): [Folded, False: 754]
  ------------------
  656|    754|	g_return_val_if_fail(format != NULL, NULL);
  ------------------
  |  Branch (656:2): [True: 754, False: 0]
  |  Branch (656:2): [True: 754, False: 0]
  |  Branch (656:2): [Folded, False: 754]
  ------------------
  657|       |
  658|    754|	data = theme_format_expand_data(theme, &format, reset, reset, NULL, NULL,
  659|    754|					EXPAND_FLAG_ROOT);
  ------------------
  |  |   57|    754|#define EXPAND_FLAG_ROOT		0x10
  ------------------
  660|    754|	ret = theme_format_compress_colors(theme, data);
  661|    754|        g_free(data);
  662|    754|	return ret;
  663|    754|}
theme_register_module:
  848|      4|{
  849|      4|	if (g_hash_table_lookup(default_formats, module) != NULL)
  ------------------
  |  Branch (849:6): [True: 0, False: 4]
  ------------------
  850|      0|		return;
  851|       |
  852|      4|        g_hash_table_insert(default_formats, g_strdup(module), formats);
  853|      4|	themes_read_module(module);
  854|      4|}
theme_load:
  915|      4|{
  916|      4|	THEME_REC *theme, *oldtheme;
  917|      4|	struct stat statbuf;
  918|      4|	char *fname, *name, *p;
  919|       |
  920|      4|        name = g_strdup(setname);
  921|      4|	p = strrchr(name, '.');
  922|      4|	if (p != NULL && g_strcmp0(p, ".theme") == 0) {
  ------------------
  |  Branch (922:6): [True: 0, False: 4]
  |  Branch (922:19): [True: 0, False: 0]
  ------------------
  923|       |		/* remove the trailing .theme */
  924|      0|                *p = '\0';
  925|      0|	}
  926|       |
  927|      4|	theme = theme_find(name);
  928|       |
  929|       |	/* check home dir */
  930|      4|	fname = g_strdup_printf("%s/%s.theme", get_irssi_dir(), name);
  931|      4|	if (stat(fname, &statbuf) != 0) {
  ------------------
  |  Branch (931:6): [True: 4, False: 0]
  ------------------
  932|       |		/* check global config dir */
  933|      4|		g_free(fname);
  934|      4|		fname = g_strdup_printf(THEMESDIR"/%s.theme", name);
  935|      4|		if (stat(fname, &statbuf) != 0) {
  ------------------
  |  Branch (935:7): [True: 4, False: 0]
  ------------------
  936|       |			/* theme not found */
  937|      4|			g_free(fname);
  938|      4|			g_free(name);
  939|      4|			return theme; /* use the one in memory if possible */
  940|      4|		}
  941|      4|	}
  942|       |
  943|      0|	if (theme != NULL && theme->last_modify == statbuf.st_mtime) {
  ------------------
  |  Branch (943:6): [True: 0, False: 0]
  |  Branch (943:23): [True: 0, False: 0]
  ------------------
  944|       |		/* theme not modified, use the one already in memory */
  945|      0|		g_free(fname);
  946|      0|		g_free(name);
  947|      0|		return theme;
  948|      0|	}
  949|       |
  950|      0|        oldtheme = theme;
  951|      0|	theme = theme_create(fname, name);
  952|      0|	theme->last_modify = statbuf.st_mtime;
  953|      0|	if (!theme_read(theme, theme->path)) {
  ------------------
  |  Branch (953:6): [True: 0, False: 0]
  ------------------
  954|       |                /* error reading .theme file */
  955|      0|		theme_destroy(theme);
  956|      0|		theme = NULL;
  957|      0|	}
  958|       |
  959|      0|	if (oldtheme != NULL && theme != NULL) {
  ------------------
  |  Branch (959:6): [True: 0, False: 0]
  |  Branch (959:26): [True: 0, False: 0]
  ------------------
  960|      0|		theme_destroy(oldtheme);
  961|      0|		if (current_theme == oldtheme)
  ------------------
  |  Branch (961:7): [True: 0, False: 0]
  ------------------
  962|      0|			current_theme = theme;
  963|      0|		window_themes_update();
  964|      0|	}
  965|       |
  966|      0|	g_free(fname);
  967|      0|	g_free(name);
  968|      0|	return theme;
  969|      0|}
themes_reload:
 1392|      2|{
 1393|      2|	GSList *refs;
 1394|      2|	char *fname;
 1395|       |
 1396|       |	/* increase every theme's refcount, and destroy them. this way if
 1397|       |	   we want to use the theme before it's reloaded we don't crash. */
 1398|      2|	refs = NULL;
 1399|      2|	while (themes != NULL) {
  ------------------
  |  Branch (1399:9): [True: 0, False: 2]
  ------------------
 1400|      0|		THEME_REC *theme = themes->data;
 1401|       |
 1402|      0|		refs = g_slist_prepend(refs, theme);
 1403|       |
 1404|      0|		theme->refcount++;
 1405|      0|		theme_destroy(theme);
 1406|      0|	}
 1407|       |
 1408|       |	/* first there's default theme.. */
 1409|      2|	current_theme = theme_load("default");
 1410|      2|	if (current_theme == NULL) {
  ------------------
  |  Branch (1410:6): [True: 2, False: 0]
  ------------------
 1411|      2|		fname = g_strdup_printf("%s/default.theme", get_irssi_dir());
 1412|      2|		current_theme = theme_create(fname, "default");
 1413|      2|		current_theme->default_color = -1;
 1414|      2|                theme_read(current_theme, NULL);
 1415|      2|		g_free(fname);
 1416|      2|	}
 1417|       |
 1418|      2|        window_themes_update();
 1419|      2|	change_theme(settings_get_str("theme"), FALSE);
 1420|       |
 1421|      2|	while (refs != NULL) {
  ------------------
  |  Branch (1421:9): [True: 0, False: 2]
  ------------------
 1422|      0|		void *tmp = refs->data;
 1423|      0|		refs = g_slist_remove(refs, refs->data);
 1424|      0|		theme_unref(tmp);
 1425|      0|	}
 1426|      2|}
themes_init:
 1446|      2|{
 1447|      2|	settings_add_str("lookandfeel", "theme", "default");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1448|       |
 1449|      2|	default_formats = g_hash_table_new((GHashFunc) g_str_hash,
 1450|      2|					   (GCompareFunc) g_str_equal);
 1451|      2|	internal_theme = read_internal_theme();
 1452|       |
 1453|      2|        init_finished = FALSE;
 1454|      2|        init_errors = NULL;
 1455|       |
 1456|      2|	themes_reload();
 1457|       |
 1458|      2|	command_bind("format", NULL, (SIGNAL_FUNC) cmd_format);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1459|      2|	command_bind("save", NULL, (SIGNAL_FUNC) cmd_save);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1460|      2|	signal_add("complete command format", (SIGNAL_FUNC) sig_complete_format);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1461|      2|	signal_add("irssi init finished", (SIGNAL_FUNC) sig_print_errors);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1462|      2|        signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1463|      2|	signal_add("setup reread", (SIGNAL_FUNC) themes_reload);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1464|       |
 1465|      2|	command_set_options("format", "delete reset");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1466|      2|	command_set_options("save", "formats");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1467|      2|}
themes.c:theme_unref:
  103|      2|{
  104|      2|	if (--rec->refcount == 0)
  ------------------
  |  Branch (104:6): [True: 0, False: 2]
  ------------------
  105|      0|		theme_real_destroy(rec);
  106|      2|}
themes.c:theme_format_append_next:
  204|  21.4k|{
  205|  21.4k|	int index;
  206|  21.4k|	unsigned char chr;
  207|  21.4k|	char *t;
  208|       |
  209|  21.4k|	chr = **format;
  210|  21.4k|	if ((chr == '$' || chr == '%') &&
  ------------------
  |  Branch (210:7): [True: 2.24k, False: 19.1k]
  |  Branch (210:21): [True: 1.97k, False: 17.2k]
  ------------------
  211|  4.22k|	    (*format)[1] == '\0') {
  ------------------
  |  Branch (211:6): [True: 0, False: 4.22k]
  ------------------
  212|       |		/* last char, always append */
  213|      0|		g_string_append_c(str, chr);
  214|      0|		(*format)++;
  215|      0|                return;
  216|      0|	}
  217|       |
  218|  21.4k|	if (chr == '$') {
  ------------------
  |  Branch (218:6): [True: 2.24k, False: 19.1k]
  ------------------
  219|       |		/* $variable .. we'll always need to skip this, since it
  220|       |		   may contain characters that are in replace chars. */
  221|  2.24k|		theme_format_append_variable(str, format);
  222|  2.24k|		return;
  223|  2.24k|	}
  224|       |
  225|  19.1k|	if (**format == '%') {
  ------------------
  |  Branch (225:6): [True: 1.97k, False: 17.2k]
  ------------------
  226|       |		/* format */
  227|  1.97k|		(*format)++;
  228|  1.97k|		if (**format != '{' && **format != '}') {
  ------------------
  |  Branch (228:7): [True: 1.97k, False: 0]
  |  Branch (228:26): [True: 1.97k, False: 0]
  ------------------
  229|  1.97k|                        chr = **format;
  230|  1.97k|			if (**format == 'n') {
  ------------------
  |  Branch (230:8): [True: 492, False: 1.48k]
  ------------------
  231|       |				/* %n = change to default color */
  232|    492|				g_string_append(str, "%n");
  233|       |
  234|    492|				if (default_bg.m[0] != 'n') {
  ------------------
  |  Branch (234:9): [True: 0, False: 492]
  ------------------
  235|      0|					g_string_append_c(str, '%');
  236|      0|					g_string_append(str, default_bg.m);
  237|      0|				}
  238|    492|				if (default_fg.m[0] != 'n') {
  ------------------
  |  Branch (238:9): [True: 10, False: 482]
  ------------------
  239|     10|					g_string_append_c(str, '%');
  240|     10|					g_string_append(str, default_fg.m);
  241|     10|				}
  242|       |
  243|    492|				*last_fg = default_fg;
  244|    492|				*last_bg = default_bg;
  245|  1.48k|			} else if (chr == 'z' || chr == 'Z') {
  ------------------
  |  Branch (245:15): [True: 0, False: 1.48k]
  |  Branch (245:29): [True: 0, False: 1.48k]
  ------------------
  246|      0|				if (chr_is_valid_rgb(*format) == 0) {
  ------------------
  |  Branch (246:9): [True: 0, False: 0]
  ------------------
  247|      0|					t = chr == 'z' ? (*last_bg).m : (*last_fg).m;
  ------------------
  |  Branch (247:10): [True: 0, False: 0]
  ------------------
  248|      0|					strncpy(t, *format, 7);
  249|      0|					t[7] = '\0';
  250|      0|					g_string_append_c(str, '%');
  251|      0|					g_string_append(str, t);
  252|      0|					(*format)+=6;
  253|      0|				} else {
  254|      0|					g_string_append(str, "%%");
  255|      0|					g_string_append_c(str, **format);
  256|      0|				}
  257|  1.48k|			} else if (chr == 'x' || chr == 'X') {
  ------------------
  |  Branch (257:15): [True: 0, False: 1.48k]
  |  Branch (257:29): [True: 0, False: 1.48k]
  ------------------
  258|      0|				if (chr_is_valid_ext(*format) == 0) {
  ------------------
  |  Branch (258:9): [True: 0, False: 0]
  ------------------
  259|      0|					t = chr == 'x' ? (*last_bg).m : (*last_fg).m;
  ------------------
  |  Branch (259:10): [True: 0, False: 0]
  ------------------
  260|      0|					strncpy(t, *format, 3);
  261|      0|					t[3] = '\0';
  262|      0|					g_string_append_c(str, '%');
  263|      0|					g_string_append(str, t);
  264|      0|					(*format)+=2;
  265|      0|				} else {
  266|      0|					g_string_append(str, "%%");
  267|      0|					g_string_append_c(str, **format);
  268|      0|				}
  269|  1.48k|			} else {
  270|  1.48k|				if (IS_FGCOLOR_FORMAT(chr)) {
  ------------------
  |  |  143|  1.48k|        ((c) != '\0' && strchr(fgcolorformats, c) != NULL)
  |  |  ------------------
  |  |  |  Branch (143:10): [True: 1.48k, False: 0]
  |  |  |  Branch (143:25): [True: 500, False: 984]
  |  |  ------------------
  ------------------
  271|    500|					(*last_fg).m[0] = chr;
  272|    500|					(*last_fg).m[1] = '\0';
  273|    500|				}
  274|  1.48k|				if (IS_BGCOLOR_FORMAT(chr)) {
  ------------------
  |  |  145|  1.48k|        ((c) != '\0' && strchr(bgcolorformats, c) != NULL)
  |  |  ------------------
  |  |  |  Branch (145:10): [True: 1.48k, False: 0]
  |  |  |  Branch (145:25): [True: 0, False: 1.48k]
  |  |  ------------------
  ------------------
  275|      0|					(*last_bg).m[0] = chr;
  276|      0|					(*last_bg).m[1] = '\0';
  277|      0|				}
  278|  1.48k|				g_string_append_c(str, '%');
  279|  1.48k|				g_string_append_c(str, chr);
  280|  1.48k|			}
  281|  1.97k|			(*format)++;
  282|  1.97k|			return;
  283|  1.97k|		}
  284|       |
  285|       |		/* %{ or %} gives us { or } char - keep the % char
  286|       |		   though to make sure {} isn't treated as abstract */
  287|  1.97k|		g_string_append_c(str, '%');
  288|      0|		chr = **format;
  289|      0|	}
  290|       |
  291|  17.2k|	index = (flags & EXPAND_FLAG_IGNORE_REPLACES) ? -1 :
  ------------------
  |  |   53|  17.2k|#define EXPAND_FLAG_IGNORE_REPLACES     0x01 /* don't use the character replaces when expanding */
  ------------------
  |  Branch (291:10): [True: 1.95k, False: 15.2k]
  ------------------
  292|  17.2k|		theme->replace_keys[(int) (unsigned char) chr];
  293|  17.2k|	if (index == -1)
  ------------------
  |  Branch (293:6): [True: 16.9k, False: 262]
  ------------------
  294|  17.2k|		g_string_append_c(str, chr);
  295|    262|	else {
  296|    262|		char *value;
  297|       |
  298|    262|		value = theme_replace_expand(theme, index,
  299|    262|					     default_fg, default_bg,
  300|    262|					     last_fg, last_bg, chr, flags);
  301|    262|		g_string_append(str, value);
  302|    262|		g_free(value);
  303|    262|	}
  304|       |
  305|  17.2k|        (*format)++;
  306|  17.2k|}
themes.c:theme_format_append_variable:
  149|  3.31k|{
  150|  3.31k|	const char *orig;
  151|  3.31k|	char *value, *args[1] = { NULL };
  152|  3.31k|	int free_ret;
  153|       |
  154|  3.31k|	orig = *format;
  155|  3.31k|	(*format)++;
  156|       |
  157|  3.31k|	value = parse_special((char **) format, NULL, NULL,
  158|  3.31k|			      args, &free_ret, NULL, PARSE_FLAG_ONLY_ARGS);
  ------------------
  |  |   10|  3.31k|#define PARSE_FLAG_ONLY_ARGS	0x10 /* expand only arguments ($0 $1 etc.) but no other $variables */
  ------------------
  159|  3.31k|	if (free_ret) g_free(value);
  ------------------
  |  Branch (159:6): [True: 3.31k, False: 0]
  ------------------
  160|       |
  161|  3.31k|	if (**format != '\0')
  ------------------
  |  Branch (161:6): [True: 3.31k, False: 0]
  ------------------
  162|  3.31k|		(*format)++;
  163|       |
  164|       |	/* append the variable name */
  165|  3.31k|	value = g_strndup(orig, (int) (*format-orig));
  166|  3.31k|	g_string_append(str, value);
  167|  3.31k|	g_free(value);
  168|  3.31k|}
themes.c:theme_replace_expand:
  120|    262|{
  121|    262|	GSList *rec;
  122|    262|	char *ret, *abstract, data[2];
  123|       |
  124|    262|	rec = g_slist_nth(theme->replace_values, index);
  125|    262|	g_return_val_if_fail(rec != NULL, NULL);
  ------------------
  |  Branch (125:2): [True: 262, False: 0]
  |  Branch (125:2): [True: 262, False: 0]
  |  Branch (125:2): [Folded, False: 262]
  ------------------
  126|       |
  127|    262|	data[0] = chr; data[1] = '\0';
  128|       |
  129|    262|	abstract = rec->data;
  130|    262|	abstract = theme_format_expand_data(theme, (const char **) &abstract,
  131|    262|					    default_fg, default_bg,
  132|    262|					    last_fg, last_bg, (flags | EXPAND_FLAG_IGNORE_REPLACES));
  ------------------
  |  |   53|    262|#define EXPAND_FLAG_IGNORE_REPLACES     0x01 /* don't use the character replaces when expanding */
  ------------------
  133|    262|	ret = parse_special_string(abstract, NULL, NULL, data, NULL,
  134|    262|				   PARSE_FLAG_ONLY_ARGS);
  ------------------
  |  |   10|    262|#define PARSE_FLAG_ONLY_ARGS	0x10 /* expand only arguments ($0 $1 etc.) but no other $variables */
  ------------------
  135|    262|	g_free(abstract);
  136|    262|	return ret;
  137|    262|}
themes.c:theme_format_expand_data_rec:
  516|  1.80k|{
  517|  1.80k|	GString *str;
  518|  1.80k|	char *ret, *abstract;
  519|  1.80k|	theme_rm_col last_fg, last_bg;
  520|  1.80k|        int recurse_flags;
  521|       |
  522|  1.80k|	last_fg = default_fg;
  523|  1.80k|	last_bg = default_bg;
  524|  1.80k|        recurse_flags = flags & EXPAND_FLAG_RECURSIVE_MASK;
  ------------------
  |  |   55|  1.80k|#define EXPAND_FLAG_RECURSIVE_MASK      0x0f
  ------------------
  525|       |
  526|  1.80k|	str = g_string_new(NULL);
  527|  21.1k|	while (**format != '\0') {
  ------------------
  |  Branch (527:9): [True: 19.3k, False: 1.80k]
  ------------------
  528|  19.3k|		if ((flags & EXPAND_FLAG_ROOT) == 0 && **format == '}') {
  ------------------
  |  |   57|  19.3k|#define EXPAND_FLAG_ROOT		0x10
  ------------------
  |  Branch (528:7): [True: 4.60k, False: 14.7k]
  |  Branch (528:42): [True: 0, False: 4.60k]
  ------------------
  529|       |			/* ignore } if we're expanding original string */
  530|      0|			(*format)++;
  531|      0|			break;
  532|      0|		}
  533|       |
  534|  19.3k|		if (**format != '{') {
  ------------------
  |  Branch (534:7): [True: 18.5k, False: 788]
  ------------------
  535|  18.5k|			if ((flags & EXPAND_FLAG_LASTCOLOR_ARG) &&
  ------------------
  |  |   58|  18.5k|#define EXPAND_FLAG_LASTCOLOR_ARG	0x20
  ------------------
  |  Branch (535:8): [True: 3.63k, False: 14.8k]
  ------------------
  536|  3.63k|			    **format == '$' && (*format)[1] == '0') {
  ------------------
  |  Branch (536:8): [True: 694, False: 2.94k]
  |  Branch (536:27): [True: 34, False: 660]
  ------------------
  537|       |				/* save the color before $0 ..
  538|       |				   this is for the %n replacing */
  539|     34|				if (save_last_fg != NULL) {
  ------------------
  |  Branch (539:9): [True: 34, False: 0]
  ------------------
  540|     34|					*save_last_fg = last_fg;
  541|     34|					save_last_fg = NULL;
  542|     34|				}
  543|     34|				if (save_last_bg != NULL) {
  ------------------
  |  Branch (543:9): [True: 34, False: 0]
  ------------------
  544|     34|					*save_last_bg = last_bg;
  545|     34|					save_last_bg = NULL;
  546|     34|				}
  547|     34|			}
  548|       |
  549|  18.5k|			theme_format_append_next(theme, str, format,
  550|  18.5k|						 default_fg, default_bg,
  551|  18.5k|						 &last_fg, &last_bg,
  552|  18.5k|						 recurse_flags);
  553|  18.5k|			continue;
  554|  18.5k|		}
  555|       |
  556|    788|		(*format)++;
  557|    788|		if (**format == '\0' || **format == '}')
  ------------------
  |  Branch (557:7): [True: 0, False: 788]
  |  Branch (557:27): [True: 0, False: 788]
  ------------------
  558|      0|			break; /* error */
  559|       |
  560|       |		/* get a single {...} */
  561|    788|		abstract = theme_format_expand_abstract(theme, format, &last_fg, &last_bg,
  562|    788|		                                        recurse_flags, block_list);
  563|    788|		if (abstract != NULL) {
  ------------------
  |  Branch (563:7): [True: 788, False: 0]
  ------------------
  564|    788|			g_string_append(str, abstract);
  565|    788|			g_free(abstract);
  566|    788|		}
  567|    788|	}
  568|       |
  569|       |	/* save the last color */
  570|  1.80k|	if (save_last_fg != NULL)
  ------------------
  |  Branch (570:6): [True: 1.01k, False: 788]
  ------------------
  571|  1.01k|		*save_last_fg = last_fg;
  572|  1.80k|	if (save_last_bg != NULL)
  ------------------
  |  Branch (572:6): [True: 1.01k, False: 788]
  ------------------
  573|  1.01k|		*save_last_bg = last_bg;
  574|       |
  575|  1.80k|	ret = g_string_free_and_steal(str);
  576|  1.80k|	return ret;
  577|  1.80k|}
themes.c:theme_format_expand_abstract:
  411|    788|{
  412|    788|	GString *str;
  413|    788|	const char *p, *format;
  414|    788|	char *abstract, *data, *ret, *blocking;
  415|    788|	theme_rm_col default_fg, default_bg;
  416|    788|	int len;
  417|       |
  418|    788|	format = *formatp;
  419|    788|	default_fg = *last_fg;
  420|    788|	default_bg = *last_bg;
  421|       |
  422|       |	/* get abstract name first */
  423|    788|	p = format;
  424|  6.55k|	while (*p != '\0' && *p != ' ' &&
  ------------------
  |  Branch (424:9): [True: 6.55k, False: 0]
  |  Branch (424:23): [True: 5.77k, False: 784]
  ------------------
  425|  5.77k|	       *p != '{' && *p != '}') p++;
  ------------------
  |  Branch (425:9): [True: 5.77k, False: 0]
  |  Branch (425:22): [True: 5.76k, False: 4]
  ------------------
  426|    788|	if (*p == '\0' || p == format)
  ------------------
  |  Branch (426:6): [True: 0, False: 788]
  |  Branch (426:20): [True: 0, False: 788]
  ------------------
  427|      0|		return NULL; /* error */
  428|       |
  429|    788|	len = (int) (p-format);
  430|    788|	abstract = g_strndup(format, len);
  431|       |
  432|       |	/* skip the following space, if there's any more spaces they're
  433|       |	   treated as arguments */
  434|    788|	if (*p == ' ') {
  ------------------
  |  Branch (434:6): [True: 784, False: 4]
  ------------------
  435|    784|		len++;
  436|    784|		if ((flags & EXPAND_FLAG_IGNORE_EMPTY) && data_is_empty(&p)) {
  ------------------
  |  |   54|    784|#define EXPAND_FLAG_IGNORE_EMPTY        0x02 /* if abstract's argument is empty, or the argument is a $variable that is empty, don't try to expand it (ie. {xx }, but not {xx}) */
  ------------------
  |  Branch (436:7): [True: 0, False: 784]
  |  Branch (436:45): [True: 0, False: 0]
  ------------------
  437|      0|			*formatp = p;
  438|      0|			g_free(abstract);
  439|      0|			return NULL;
  440|      0|		}
  441|    784|	}
  442|    788|	*formatp = format+len;
  443|       |
  444|    788|	if (block_list == NULL) {
  ------------------
  |  Branch (444:6): [True: 610, False: 178]
  ------------------
  445|    610|		block_list = g_tree_new_full((GCompareDataFunc) g_strcmp0, NULL, g_free, NULL);
  446|    610|	} else {
  447|    178|		g_tree_ref(block_list);
  448|    178|	}
  449|       |
  450|       |	/* get the abstract data */
  451|    788|	data = g_hash_table_lookup(theme->abstracts, abstract);
  452|    788|	if (data == NULL || g_tree_lookup(block_list, abstract) != NULL) {
  ------------------
  |  Branch (452:6): [True: 0, False: 788]
  |  Branch (452:22): [True: 4, False: 784]
  ------------------
  453|       |		/* unknown abstract, just display the data */
  454|      4|		data = "$0-";
  455|      4|		g_free(abstract);
  456|      4|		blocking = NULL;
  457|    784|	} else {
  458|    784|		blocking = abstract;
  459|    784|		g_tree_insert(block_list, blocking, blocking);
  460|    784|	}
  461|    788|	abstract = g_strdup(data);
  462|       |
  463|       |	/* we'll need to get the data part. it may contain
  464|       |	   more abstracts, they are _NOT_ expanded. */
  465|    788|	data = theme_format_expand_get(theme, formatp);
  466|    788|	len = strlen(data);
  467|       |
  468|    788|	if (len > 1 && i_isdigit(data[len-1]) && data[len-2] == '$') {
  ------------------
  |  |   79|    788|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (468:6): [True: 784, False: 4]
  |  Branch (468:17): [True: 598, False: 186]
  |  Branch (468:43): [True: 590, False: 8]
  ------------------
  469|       |		/* ends with $<digit> .. this breaks things if next
  470|       |		   character is digit or '-' */
  471|    590|                char digit, *tmp;
  472|       |
  473|    590|		tmp = data;
  474|    590|		digit = tmp[len-1];
  475|    590|		tmp[len-1] = '\0';
  476|       |
  477|    590|		data = g_strdup_printf("%s{%c}", tmp, digit);
  478|    590|		g_free(tmp);
  479|    590|	}
  480|       |
  481|    788|	ret = parse_special_string(abstract, NULL, NULL, data, NULL,
  482|    788|				   PARSE_FLAG_ONLY_ARGS);
  ------------------
  |  |   10|    788|#define PARSE_FLAG_ONLY_ARGS	0x10 /* expand only arguments ($0 $1 etc.) but no other $variables */
  ------------------
  483|    788|	g_free(abstract);
  484|    788|        g_free(data);
  485|    788|	str = g_string_new(NULL);
  486|    788|	p = ret;
  487|  10.5k|	while (*p != '\0') {
  ------------------
  |  Branch (487:9): [True: 9.74k, False: 788]
  ------------------
  488|  9.74k|		if (*p == '\\' && p[1] != '\0') {
  ------------------
  |  Branch (488:7): [True: 106, False: 9.63k]
  |  Branch (488:21): [True: 106, False: 0]
  ------------------
  489|    106|			int chr;
  490|    106|			p++;
  491|    106|			chr = expand_escape(&p);
  492|    106|			g_string_append_c(str, chr != -1 ? chr : *p);
  ------------------
  |  Branch (492:4): [True: 106, False: 0]
  ------------------
  493|    106|		} else
  494|  9.74k|			g_string_append_c(str, *p);
  495|  9.74k|		p++;
  496|  9.74k|	}
  497|    788|	g_free(ret);
  498|    788|	abstract = g_string_free_and_steal(str);
  499|       |
  500|       |	/* abstract may itself contain abstracts or replaces */
  501|    788|	p = abstract;
  502|    788|	ret = theme_format_expand_data_rec(theme, &p, default_fg, default_bg, last_fg, last_bg,
  503|    788|	                                   flags | EXPAND_FLAG_LASTCOLOR_ARG, block_list);
  ------------------
  |  |   58|    788|#define EXPAND_FLAG_LASTCOLOR_ARG	0x20
  ------------------
  504|    788|	g_free(abstract);
  505|    788|	if (blocking != NULL) {
  ------------------
  |  Branch (505:6): [True: 784, False: 4]
  ------------------
  506|    784|		g_tree_remove(block_list, blocking);
  507|    784|	}
  508|    788|	g_tree_unref(block_list);
  509|    788|	return ret;
  510|    788|}
themes.c:theme_format_compress_colors:
  593|    754|{
  594|    754|	GString *str;
  595|    754|	char *ret;
  596|    754|	char last_fg, last_bg;
  597|       |
  598|    754|	str = g_string_new(NULL);
  599|       |
  600|    754|	last_fg = last_bg = '\0';
  601|  19.0k|	while (*format != '\0') {
  ------------------
  |  Branch (601:9): [True: 18.2k, False: 754]
  ------------------
  602|  18.2k|		if (*format == '$') {
  ------------------
  |  Branch (602:7): [True: 1.07k, False: 17.1k]
  ------------------
  603|       |                        /* $variable, skrip it entirely */
  604|  1.07k|			theme_format_append_variable(str, &format);
  605|  1.07k|                        last_fg = last_bg = '\0';
  606|  17.1k|		} else if (*format != '%') {
  ------------------
  |  Branch (606:14): [True: 15.2k, False: 1.94k]
  ------------------
  607|       |			/* a normal character */
  608|  15.2k|			g_string_append_c(str, *format);
  609|  15.2k|			format++;
  610|  15.2k|		} else if (format[1] != '\0') {
  ------------------
  |  Branch (610:14): [True: 1.94k, False: 0]
  ------------------
  611|       |			/* %format */
  612|  1.94k|			format++;
  613|  1.94k|			if (IS_OLD_FORMAT(*format, last_fg, last_bg)) {
  ------------------
  |  |  589|  1.94k|	(((code) == 'n' && (last_fg) == 'n' && (last_bg) == 'n') || \
  |  |  ------------------
  |  |  |  Branch (589:4): [True: 476, False: 1.46k]
  |  |  |  Branch (589:21): [True: 4, False: 472]
  |  |  |  Branch (589:41): [True: 4, False: 0]
  |  |  ------------------
  |  |  590|  1.94k|	((code) != 'n' && ((code) == (last_fg) || (code) == (last_bg))))
  |  |  ------------------
  |  |  |  Branch (590:3): [True: 1.46k, False: 472]
  |  |  |  Branch (590:21): [True: 4, False: 1.46k]
  |  |  |  Branch (590:44): [True: 0, False: 1.46k]
  |  |  ------------------
  ------------------
  614|       |				/* active color set again */
  615|  1.93k|			} else if (IS_FGCOLOR_FORMAT(*format) &&
  ------------------
  |  |  143|  3.87k|        ((c) != '\0' && strchr(fgcolorformats, c) != NULL)
  |  |  ------------------
  |  |  |  Branch (143:10): [True: 1.93k, False: 0]
  |  |  |  Branch (143:25): [True: 966, False: 970]
  |  |  ------------------
  ------------------
  616|    966|				   format[1] == '%' &&
  ------------------
  |  Branch (616:8): [True: 114, False: 852]
  ------------------
  617|    114|				   IS_FGCOLOR_FORMAT(format[2]) &&
  ------------------
  |  |  143|  2.05k|        ((c) != '\0' && strchr(fgcolorformats, c) != NULL)
  |  |  ------------------
  |  |  |  Branch (143:10): [True: 114, False: 0]
  |  |  |  Branch (143:25): [True: 82, False: 32]
  |  |  ------------------
  ------------------
  618|     82|				   (*format != 'n' || format[2] == 'n')) {
  ------------------
  |  Branch (618:9): [True: 2, False: 80]
  |  Branch (618:27): [True: 6, False: 74]
  ------------------
  619|       |				/* two fg colors in a row. bg colors are
  620|       |				   so rare that we don't bother checking
  621|       |				   them */
  622|  1.92k|			} else {
  623|       |				/* some format, add it */
  624|  1.92k|				g_string_append_c(str, '%');
  625|  1.92k|				g_string_append_c(str, *format);
  626|       |
  627|  1.92k|				if (IS_FGCOLOR_FORMAT(*format))
  ------------------
  |  |  143|  1.92k|        ((c) != '\0' && strchr(fgcolorformats, c) != NULL)
  |  |  ------------------
  |  |  |  Branch (143:10): [True: 1.92k, False: 0]
  |  |  |  Branch (143:25): [True: 958, False: 970]
  |  |  ------------------
  ------------------
  628|    958|					last_fg = *format;
  629|    970|				else if (*format == 'Z' || *format == 'X')
  ------------------
  |  Branch (629:14): [True: 0, False: 970]
  |  Branch (629:32): [True: 0, False: 970]
  ------------------
  630|      0|					last_fg = '\0';
  631|  1.92k|				if (IS_BGCOLOR_FORMAT(*format))
  ------------------
  |  |  145|  1.92k|        ((c) != '\0' && strchr(bgcolorformats, c) != NULL)
  |  |  ------------------
  |  |  |  Branch (145:10): [True: 1.92k, False: 0]
  |  |  |  Branch (145:25): [True: 466, False: 1.46k]
  |  |  ------------------
  ------------------
  632|    466|					last_bg = *format;
  633|  1.46k|				else if (*format == 'z' || *format == 'x')
  ------------------
  |  Branch (633:14): [True: 0, False: 1.46k]
  |  Branch (633:32): [True: 0, False: 1.46k]
  ------------------
  634|      0|					last_bg = '\0';
  635|  1.92k|			}
  636|  1.94k|			format++;
  637|  1.94k|		} else {
  638|       |			/* % at end of string */
  639|      0|			format++;
  640|      0|			g_string_append_c(str, '%');
  641|      0|			g_string_append_c(str, '%');
  642|      0|		}
  643|  18.2k|	}
  644|       |
  645|    754|	ret = g_string_free_and_steal(str);
  646|    754|	return ret;
  647|    754|}
themes.c:themes_read_module:
  827|      4|{
  828|      4|        g_slist_foreach(themes, (GFunc) theme_read_module, (void *) module);
  829|      4|}
themes.c:theme_read_module:
  814|      4|{
  815|      4|	CONFIG_REC *config;
  816|       |
  817|      4|	config = config_open(theme->path, -1);
  818|      4|	if (config != NULL)
  ------------------
  |  Branch (818:6): [True: 0, False: 4]
  ------------------
  819|      0|		config_parse(config);
  820|       |
  821|      4|	theme_init_module(theme, module, config);
  822|       |
  823|      4|	if (config != NULL) config_close(config);
  ------------------
  |  Branch (823:6): [True: 0, False: 4]
  ------------------
  824|      4|}
themes.c:theme_init_module:
  781|      4|{
  782|      4|	MODULE_THEME_REC *rec;
  783|      4|	FORMAT_REC *formats;
  784|      4|	int n;
  785|       |
  786|      4|	formats = g_hash_table_lookup(default_formats, module);
  787|      4|	g_return_if_fail(formats != NULL);
  ------------------
  |  Branch (787:2): [True: 4, False: 0]
  |  Branch (787:2): [True: 4, False: 0]
  |  Branch (787:2): [Folded, False: 4]
  ------------------
  788|       |
  789|      4|	rec = theme_module_create(theme, module);
  790|       |
  791|      4|	if (config != NULL)
  ------------------
  |  Branch (791:6): [True: 0, False: 4]
  ------------------
  792|      0|		theme_read_formats(theme, module, config, rec);
  793|       |
  794|       |	/* expand the remaining formats */
  795|    758|	for (n = 0; n < rec->count; n++) {
  ------------------
  |  Branch (795:14): [True: 754, False: 4]
  ------------------
  796|    754|		if (rec->expanded_formats[n] == NULL) {
  ------------------
  |  Branch (796:7): [True: 754, False: 0]
  ------------------
  797|    754|			rec->expanded_formats[n] =
  798|    754|				theme_format_expand(theme, formats[n].def);
  799|    754|		}
  800|    754|	}
  801|      4|}
themes.c:theme_module_create:
  666|      4|{
  667|      4|	MODULE_THEME_REC *rec;
  668|      4|	FORMAT_REC *formats;
  669|       |
  670|      4|	rec = g_hash_table_lookup(theme->modules, module);
  671|      4|	if (rec != NULL) return rec;
  ------------------
  |  Branch (671:6): [True: 0, False: 4]
  ------------------
  672|       |
  673|      4|	formats = g_hash_table_lookup(default_formats, module);
  674|      4|        g_return_val_if_fail(formats != NULL, NULL);
  ------------------
  |  Branch (674:9): [True: 4, False: 0]
  |  Branch (674:9): [True: 4, False: 0]
  |  Branch (674:9): [Folded, False: 4]
  ------------------
  675|       |
  676|      4|	rec = g_new0(MODULE_THEME_REC, 1);
  ------------------
  |  Branch (676:8): [True: 4, False: 0]
  |  Branch (676:8): [True: 0, False: 4]
  ------------------
  677|      4|	rec->name = g_strdup(module);
  678|       |
  679|    758|	for (rec->count = 0; formats[rec->count].def != NULL; rec->count++) ;
  ------------------
  |  Branch (679:23): [True: 754, False: 4]
  ------------------
  680|      4|	rec->formats = g_new0(char *, rec->count);
  ------------------
  |  Branch (680:17): [True: 0, False: 4]
  |  Branch (680:17): [True: 0, False: 4]
  ------------------
  681|      4|	rec->expanded_formats = g_new0(char *, rec->count);
  ------------------
  |  Branch (681:26): [True: 0, False: 4]
  |  Branch (681:26): [True: 0, False: 4]
  ------------------
  682|       |
  683|      4|	g_hash_table_insert(theme->modules, rec->name, rec);
  684|      4|	return rec;
  685|      4|}
themes.c:theme_find:
  889|      4|{
  890|      4|	GSList *tmp;
  891|       |
  892|      4|	for (tmp = themes; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (892:21): [True: 2, False: 2]
  ------------------
  893|      2|		THEME_REC *rec = tmp->data;
  894|       |
  895|      2|		if (g_ascii_strcasecmp(rec->name, name) == 0)
  ------------------
  |  Branch (895:7): [True: 2, False: 0]
  ------------------
  896|      2|			return rec;
  897|      2|	}
  898|       |
  899|      2|	return NULL;
  900|      4|}
themes.c:window_themes_update:
  903|      2|{
  904|      2|	GSList *tmp;
  905|       |
  906|      2|	for (tmp = windows; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (906:22): [True: 0, False: 2]
  ------------------
  907|      0|		WINDOW_REC *rec = tmp->data;
  908|       |
  909|      0|		if (rec->theme_name != NULL)
  ------------------
  |  Branch (909:7): [True: 0, False: 0]
  ------------------
  910|      0|                        rec->theme = theme_load(rec->theme_name);
  911|      0|	}
  912|      2|}
themes.c:theme_read:
 1009|      2|{
 1010|      2|	CONFIG_REC *config;
 1011|      2|	THEME_READ_REC rec;
 1012|      2|        char *str;
 1013|       |
 1014|      2|	config = config_open(path, -1) ;
 1015|      2|	if (config == NULL) {
  ------------------
  |  Branch (1015:6): [True: 0, False: 2]
  ------------------
 1016|       |		/* didn't exist or no access? */
 1017|      0|		str = g_strdup_printf("Error reading theme file %s: %s",
 1018|      0|				      path, g_strerror(errno));
 1019|      0|		read_error(str);
 1020|      0|		g_free(str);
 1021|      0|		return FALSE;
 1022|      0|	}
 1023|       |
 1024|      2|	if (path == NULL)
  ------------------
  |  Branch (1024:6): [True: 2, False: 0]
  ------------------
 1025|      2|		config_parse_data(config, default_theme, "internal");
 1026|      0|        else
 1027|      0|		config_parse(config);
 1028|       |
 1029|      2|	if (config_last_error(config) != NULL) {
  ------------------
  |  |   89|      2|    (rec)->last_error
  ------------------
  |  Branch (1029:6): [True: 0, False: 2]
  ------------------
 1030|      0|		str = g_strdup_printf("Ignored errors in theme %s:\n%s",
 1031|      0|				      theme->name, config_last_error(config));
  ------------------
  |  |   89|      0|    (rec)->last_error
  ------------------
 1032|      0|		read_error(str);
 1033|      0|                g_free(str);
 1034|      0|	}
 1035|       |
 1036|      2|	theme->default_color =
 1037|      2|		config_get_int(config, NULL, "default_color", -1);
 1038|      2|	theme->info_eol = config_get_bool(config, NULL, "info_eol", FALSE);
 1039|       |
 1040|      2|	theme_read_replaces(config, theme);
 1041|       |
 1042|      2|	if (path != NULL)
  ------------------
  |  Branch (1042:6): [True: 0, False: 2]
  ------------------
 1043|      0|		theme_copy_abstracts(theme, internal_theme);
 1044|      2|	theme_read_abstracts(config, theme);
 1045|       |
 1046|      2|	rec.theme = theme;
 1047|      2|	rec.config = config;
 1048|      2|	g_hash_table_foreach(default_formats,
 1049|      2|			     (GHFunc) theme_read_modules, &rec);
 1050|      2|	config_close(config);
 1051|       |
 1052|       |        return TRUE;
 1053|      2|}
themes.c:theme_read_replaces:
  688|      2|{
  689|      2|	GSList *tmp;
  690|      2|	CONFIG_NODE *node;
  691|      2|	const char *p;
  692|      2|        int index;
  693|       |
  694|       |        /* reset replace keys */
  695|    514|	for (index = 0; index < 256; index++)
  ------------------
  |  Branch (695:18): [True: 512, False: 2]
  ------------------
  696|    512|                theme->replace_keys[index] = -1;
  697|      2|	index = 0;
  698|       |
  699|      2|	node = config_node_traverse(config, "replaces", FALSE);
  700|      2|	if (node == NULL || node->type !=  NODE_TYPE_BLOCK) return;
  ------------------
  |  Branch (700:6): [True: 0, False: 2]
  |  Branch (700:22): [True: 0, False: 2]
  ------------------
  701|       |
  702|      4|	for (tmp = node->value; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (702:26): [True: 2, False: 2]
  ------------------
  703|      2|		node = tmp->data;
  704|       |
  705|      2|		if (node->key != NULL && node->value != NULL) {
  ------------------
  |  Branch (705:7): [True: 2, False: 0]
  |  Branch (705:28): [True: 2, False: 0]
  ------------------
  706|      8|			for (p = node->key; *p != '\0'; p++)
  ------------------
  |  Branch (706:24): [True: 6, False: 2]
  ------------------
  707|      6|                                theme->replace_keys[(int) (unsigned char) *p] = index;
  708|       |
  709|      2|			theme->replace_values =
  710|      2|				g_slist_append(theme->replace_values,
  711|      2|					       g_strdup(node->value));
  712|      2|                        index++;
  713|      2|		}
  714|      2|	}
  715|      2|}
themes.c:theme_read_abstracts:
  718|      4|{
  719|      4|	GSList *tmp;
  720|      4|	CONFIG_NODE *node;
  721|      4|        gpointer oldkey, oldvalue;
  722|       |
  723|      4|	node = config_node_traverse(config, "abstracts", FALSE);
  724|      4|	if (node == NULL || node->type !=  NODE_TYPE_BLOCK) return;
  ------------------
  |  Branch (724:6): [True: 0, False: 4]
  |  Branch (724:22): [True: 0, False: 4]
  ------------------
  725|       |
  726|    944|	for (tmp = node->value; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (726:26): [True: 940, False: 4]
  ------------------
  727|    940|		node = tmp->data;
  728|       |
  729|    940|		if (node->key == NULL || node->value == NULL)
  ------------------
  |  Branch (729:7): [True: 588, False: 352]
  |  Branch (729:28): [True: 0, False: 352]
  ------------------
  730|    588|			continue;
  731|       |
  732|    352|		if (g_hash_table_lookup_extended(theme->abstracts, node->key,
  ------------------
  |  Branch (732:7): [True: 0, False: 352]
  ------------------
  733|    352|						 &oldkey, &oldvalue)) {
  734|       |                        /* new values override old ones */
  735|      0|                        g_hash_table_remove(theme->abstracts, oldkey);
  736|      0|			g_free(oldkey);
  737|      0|			g_free(oldvalue);
  738|      0|		}
  739|       |
  740|    352|		g_hash_table_insert(theme->abstracts, g_strdup(node->key),
  741|    352|				    g_strdup(node->value));
  742|    352|	}
  743|      4|}
themes.c:change_theme:
 1359|      2|{
 1360|      2|	THEME_REC *rec;
 1361|       |
 1362|      2|	rec = theme_load(name);
 1363|      2|	if (rec != NULL) {
  ------------------
  |  Branch (1363:6): [True: 2, False: 0]
  ------------------
 1364|      2|		current_theme = rec;
 1365|      2|                signal_emit("theme changed", 1, rec);
 1366|       |
 1367|      2|		if (verbose) {
  ------------------
  |  Branch (1367:7): [True: 0, False: 2]
  ------------------
 1368|      0|			printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
  ------------------
  |  |   37|      0|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|      0|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1369|      0|				    TXT_THEME_CHANGED,
 1370|      0|				    rec->name, rec->path);
 1371|      0|		}
 1372|      2|	} else if (verbose) {
  ------------------
  |  Branch (1372:13): [True: 0, False: 0]
  ------------------
 1373|      0|		printformat(NULL, NULL, MSGLEVEL_CLIENTERROR,
  ------------------
  |  |   37|      0|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|      0|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
 1374|      0|			    TXT_THEME_NOT_FOUND, name);
 1375|      0|	}
 1376|      2|}
themes.c:read_internal_theme:
 1429|      2|{
 1430|      2|	CONFIG_REC *config;
 1431|      2|	THEME_REC *theme;
 1432|       |
 1433|      2|	theme = theme_create("internal", "_internal");
 1434|      2|	theme->refcount++;
 1435|      2|	theme_destroy(theme);
 1436|       |
 1437|      2|	config = config_open(NULL, -1);
 1438|      2|	config_parse_data(config, default_theme, "internal");
 1439|      2|	theme_read_abstracts(config, theme);
 1440|      2|	config_close(config);
 1441|       |
 1442|      2|	return theme;
 1443|      2|}

window_activity:
   41|   249k|{
   42|   249k|	int old_data_level;
   43|       |
   44|   249k|	old_data_level = window->data_level;
   45|   249k|	if (data_level == 0 || window->data_level < data_level) {
  ------------------
  |  Branch (45:6): [True: 0, False: 249k]
  |  Branch (45:25): [True: 99.3k, False: 149k]
  ------------------
   46|  99.3k|		window->data_level = data_level;
   47|  99.3k|                g_free_not_null(window->hilight_color);
  ------------------
  |  |   64|  99.3k|#define g_free_not_null(a) g_free(a)
  ------------------
   48|  99.3k|		window->hilight_color = g_strdup(hilight_color);
   49|  99.3k|		signal_emit("window hilight", 1, window);
   50|  99.3k|	}
   51|       |
   52|   249k|	signal_emit("window activity", 2, window,
   53|       |		    GINT_TO_POINTER(old_data_level));
   54|   249k|}
window_item_activity:
   58|   249k|{
   59|   249k|	int old_data_level;
   60|       |
   61|   249k|	old_data_level = item->data_level;
   62|   249k|	if (data_level == 0 || item->data_level < data_level) {
  ------------------
  |  Branch (62:6): [True: 0, False: 249k]
  |  Branch (62:25): [True: 118k, False: 130k]
  ------------------
   63|   118k|		item->data_level = data_level;
   64|   118k|                g_free_not_null(item->hilight_color);
  ------------------
  |  |   64|   118k|#define g_free_not_null(a) g_free(a)
  ------------------
   65|   118k|		item->hilight_color = g_strdup(hilight_color);
   66|   118k|		signal_emit("window item hilight", 1, item);
   67|   118k|	}
   68|       |
   69|   249k|	signal_emit("window item activity", 2, item,
   70|       |		    GINT_TO_POINTER(old_data_level));
   71|   249k|}
window_activity_init:
  143|      2|{
  144|      2|	settings_add_str("lookandfeel", "activity_hide_targets", "");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  145|      2|	settings_add_level("lookandfeel", "activity_hide_level", "");
  ------------------
  |  |  101|      2|	settings_add_level_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  146|      2|	settings_add_level("lookandfeel", "activity_msg_level", "PUBLIC NOTICES");
  ------------------
  |  |  101|      2|	settings_add_level_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  147|      2|	settings_add_level("lookandfeel", "activity_hilight_level", "MSGS DCCMSGS");
  ------------------
  |  |  101|      2|	settings_add_level_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  148|      2|	signal_window_hilight_check = signal_get_uniq_id("window hilight check");
  ------------------
  |  |   68|      2|        module_get_uniq_id_str("signals", signal)
  ------------------
  149|       |
  150|      2|	read_settings();
  151|      2|	signal_add("print text", (SIGNAL_FUNC) sig_hilight_text);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  152|      2|	signal_add("window changed", (SIGNAL_FUNC) sig_dehilight_window);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  153|      2|	signal_add("window dehilight", (SIGNAL_FUNC) sig_dehilight_window);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  154|       |	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  155|      2|}
window-activity.c:read_settings:
  125|      2|{
  126|      2|	const char *targets;
  127|       |
  128|      2|	if (hide_targets != NULL)
  ------------------
  |  Branch (128:6): [True: 0, False: 2]
  ------------------
  129|      0|		g_strfreev(hide_targets);
  130|       |
  131|      2|        targets = settings_get_str("activity_hide_targets");
  132|      2|	hide_targets = *targets == '\0' ? NULL :
  ------------------
  |  Branch (132:17): [True: 2, False: 0]
  ------------------
  133|      2|		g_strsplit(targets, " ", -1);
  134|       |
  135|      2|	hide_level = MSGLEVEL_NEVER | MSGLEVEL_NO_ACT |
  136|      2|		settings_get_level("activity_hide_level");
  137|      2|	msg_level = settings_get_level("activity_msg_level");
  138|      2|	hilight_level = MSGLEVEL_HILIGHT |
  139|      2|		settings_get_level("activity_hilight_level");
  140|      2|}
window-activity.c:sig_hilight_text:
   74|  1.13M|{
   75|  1.13M|	WI_ITEM_REC *item;
   76|  1.13M|	int data_level;
   77|  1.13M|	int cb_ignore = 0;
   78|       |
   79|  1.13M|	if (dest->window == active_win || (dest->level & hide_level))
  ------------------
  |  Branch (79:6): [True: 868k, False: 263k]
  |  Branch (79:36): [True: 14.1k, False: 249k]
  ------------------
   80|   882k|		return;
   81|       |
   82|   249k|	if (dest->level & hilight_level) {
  ------------------
  |  Branch (82:6): [True: 9.54k, False: 239k]
  ------------------
   83|  9.54k|		data_level = DATA_LEVEL_HILIGHT+dest->hilight_priority;
   84|   239k|	} else {
   85|   239k|		data_level = (dest->level & msg_level) ?
  ------------------
  |  Branch (85:16): [True: 2.22k, False: 237k]
  ------------------
   86|   237k|			DATA_LEVEL_MSG : DATA_LEVEL_TEXT;
   87|   239k|	}
   88|       |
   89|   249k|	if (hide_targets != NULL && (dest->level & MSGLEVEL_HILIGHT) == 0) {
  ------------------
  |  Branch (89:6): [True: 0, False: 249k]
  |  Branch (89:30): [True: 0, False: 0]
  ------------------
   90|       |		/* check for both target and tag/target */
   91|      0|		if (strarray_find_dest(hide_targets, dest))
  ------------------
  |  Branch (91:7): [True: 0, False: 0]
  ------------------
   92|      0|			return;
   93|      0|	}
   94|       |
   95|       |	/* we should ask the text view if this line is hidden */
   96|   249k|	signal_emit_id(signal_window_hilight_check, 4, dest, msg, &data_level, &cb_ignore);
   97|   249k|	if (cb_ignore) {
  ------------------
  |  Branch (97:6): [True: 0, False: 249k]
  ------------------
   98|      0|		return;
   99|      0|	}
  100|       |
  101|   249k|	if (dest->target != NULL) {
  ------------------
  |  Branch (101:6): [True: 249k, False: 0]
  ------------------
  102|   249k|		item = window_item_find(dest->server, dest->target);
  103|   249k|		if (item != NULL) {
  ------------------
  |  Branch (103:7): [True: 249k, False: 0]
  ------------------
  104|   249k|			window_item_activity(item, data_level,
  105|   249k|					     dest->hilight_color);
  106|   249k|		}
  107|   249k|	}
  108|   249k|	window_activity(dest->window, data_level, dest->hilight_color);
  109|   249k|}
window-activity.c:sig_dehilight_window:
  112|      1|{
  113|      1|        GSList *tmp;
  114|       |
  115|      1|	g_return_if_fail(window != NULL);
  ------------------
  |  Branch (115:2): [True: 1, False: 0]
  |  Branch (115:2): [True: 1, False: 0]
  |  Branch (115:2): [Folded, False: 1]
  ------------------
  116|       |
  117|      1|	if (window->data_level != 0) {
  ------------------
  |  Branch (117:6): [True: 0, False: 1]
  ------------------
  118|      0|		window_activity(window, 0, NULL);
  119|      0|		for (tmp = window->items; tmp != NULL; tmp = tmp->next)
  ------------------
  |  Branch (119:29): [True: 0, False: 0]
  ------------------
  120|      0|			window_item_activity(tmp->data, 0, NULL);
  121|      0|	}
  122|      1|}

window_commands_init:
  881|      2|{
  882|      2|	settings_add_bool("lookandfeel", "active_window_ignore_refnum", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  883|      2|	settings_add_bool("misc", "window_number_commands", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  884|       |
  885|      2|	signal_add("default command", (SIGNAL_FUNC) cmd_window_default_command);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  886|       |
  887|      2|	command_bind("window", NULL, (SIGNAL_FUNC) cmd_window);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  888|      2|	command_bind("window new", NULL, (SIGNAL_FUNC) cmd_window_new);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  889|      2|	command_bind("window close", NULL, (SIGNAL_FUNC) cmd_window_close);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  890|      2|	command_bind("window kill", NULL, (SIGNAL_FUNC) cmd_window_close);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  891|      2|	command_bind("window server", NULL, (SIGNAL_FUNC) cmd_window_server);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  892|      2|	command_bind("window refnum", NULL, (SIGNAL_FUNC) cmd_window_refnum);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  893|      2|	command_bind("window goto", NULL, (SIGNAL_FUNC) cmd_window_goto);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  894|      2|	command_bind("window previous", NULL, (SIGNAL_FUNC) cmd_window_previous);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  895|      2|	command_bind("window next", NULL, (SIGNAL_FUNC) cmd_window_next);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  896|      2|	command_bind("window last", NULL, (SIGNAL_FUNC) cmd_window_last);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  897|      2|	command_bind("window level", NULL, (SIGNAL_FUNC) cmd_window_level);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  898|      2|	command_bind("window immortal", NULL, (SIGNAL_FUNC) cmd_window_immortal);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  899|      2|	command_bind("window item", NULL, (SIGNAL_FUNC) cmd_window_item);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  900|      2|	command_bind("window item prev", NULL, (SIGNAL_FUNC) cmd_window_item_prev);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  901|      2|	command_bind("window item next", NULL, (SIGNAL_FUNC) cmd_window_item_next);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  902|      2|	command_bind("window item goto", NULL, (SIGNAL_FUNC) cmd_window_item_goto);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  903|      2|	command_bind("window item move", NULL, (SIGNAL_FUNC) cmd_window_item_move);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  904|      2|	command_bind("window number", NULL, (SIGNAL_FUNC) cmd_window_number);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  905|      2|	command_bind("window name", NULL, (SIGNAL_FUNC) cmd_window_name);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  906|      2|	command_bind("window history", NULL, (SIGNAL_FUNC) cmd_window_history);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  907|      2|	command_bind("window move", NULL, (SIGNAL_FUNC) cmd_window_move);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  908|      2|	command_bind("window move prev", NULL, (SIGNAL_FUNC) cmd_window_move_prev);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  909|      2|	command_bind("window move next", NULL, (SIGNAL_FUNC) cmd_window_move_next);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  910|      2|	command_bind("window move first", NULL, (SIGNAL_FUNC) cmd_window_move_first);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  911|      2|	command_bind("window move last", NULL, (SIGNAL_FUNC) cmd_window_move_last);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  912|      2|	command_bind("window list", NULL, (SIGNAL_FUNC) cmd_window_list);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  913|      2|	command_bind("window theme", NULL, (SIGNAL_FUNC) cmd_window_theme);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  914|      2|	command_bind("layout", NULL, (SIGNAL_FUNC) cmd_layout);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  915|       |	/* SYNTAX: LAYOUT SAVE */
  916|      2|	command_bind("layout save", NULL, (SIGNAL_FUNC) windows_layout_save);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  917|       |	/* SYNTAX: LAYOUT RESET */
  918|      2|	command_bind("layout reset", NULL, (SIGNAL_FUNC) windows_layout_reset);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  919|      2|	command_bind("foreach window", NULL, (SIGNAL_FUNC) cmd_foreach_window);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  920|       |
  921|      2|	command_set_options("window number", "sticky");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  922|      2|	command_set_options("window server", "sticky unsticky");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  923|      2|	command_set_options("window theme", "delete");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  924|      2|	command_set_options("window history", "clear");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  925|      2|}

window_item_add:
   66|   117k|{
   67|       |	window_item_add_signal(window, item, automatic, TRUE);
   68|   117k|}
window_item_remove:
   94|   117k|{
   95|       |	window_item_remove_signal(item, TRUE);
   96|   117k|}
window_item_destroy:
   99|   117k|{
  100|   117k|        window_item_remove(item);
  101|   117k|        item->destroy(item);
  102|   117k|}
window_item_change_server:
  105|  5.53M|{
  106|  5.53M|	WINDOW_REC *window;
  107|       |
  108|  5.53M|	g_return_if_fail(item != NULL);
  ------------------
  |  Branch (108:2): [True: 5.53M, False: 0]
  |  Branch (108:2): [True: 5.53M, False: 0]
  |  Branch (108:2): [Folded, False: 5.53M]
  ------------------
  109|       |
  110|  5.53M|	window = window_item_window(item);
  ------------------
  |  |   15|  5.53M|	((WINDOW_REC *) ((WI_ITEM_REC *) (item))->window)
  ------------------
  111|  5.53M|	item->server = server;
  112|       |
  113|  5.53M|        signal_emit("window item server changed", 2, window, item);
  114|  5.53M|	if (window->active == item) window_change_server(window, item->server);
  ------------------
  |  Branch (114:6): [True: 5.53M, False: 0]
  ------------------
  115|  5.53M|}
window_item_set_active:
  118|   232k|{
  119|   232k|		WINDOW_REC *old_window;
  120|       |
  121|   232k|        g_return_if_fail(window != NULL);
  ------------------
  |  Branch (121:9): [True: 232k, False: 0]
  |  Branch (121:9): [True: 232k, False: 0]
  |  Branch (121:9): [Folded, False: 232k]
  ------------------
  122|       |
  123|   232k|        if (item != NULL) {
  ------------------
  |  Branch (123:13): [True: 117k, False: 115k]
  ------------------
  124|   117k|            old_window = window_item_window(item);
  ------------------
  |  |   15|   117k|	((WINDOW_REC *) ((WI_ITEM_REC *) (item))->window)
  ------------------
  125|   117k|        	if (old_window != window) {
  ------------------
  |  Branch (125:14): [True: 0, False: 117k]
  ------------------
  126|       |                /* move item to different window */
  127|      0|                window_item_remove_signal(item, FALSE);
  128|      0|                window_item_add_signal(window, item, FALSE, FALSE);
  129|      0|                signal_emit("window item moved", 3, window, item, old_window);
  130|      0|        	}
  131|   117k|        }
  132|       |
  133|   232k|	if (window->active != item) {
  ------------------
  |  Branch (133:6): [True: 232k, False: 0]
  ------------------
  134|   232k|		window->active = item;
  135|   232k|		if (item != NULL && window->active_server != item->server)
  ------------------
  |  Branch (135:7): [True: 117k, False: 115k]
  |  Branch (135:23): [True: 992, False: 116k]
  ------------------
  136|    992|			window_change_server(window, item->server);
  137|   232k|		signal_emit("window item changed", 2, window, item);
  138|   232k|	}
  139|   232k|}
window_item_is_active:
  144|  2.28k|{
  145|  2.28k|	WINDOW_REC *window;
  146|       |
  147|  2.28k|	if (item == NULL)
  ------------------
  |  Branch (147:6): [True: 1.10k, False: 1.18k]
  ------------------
  148|  1.10k|		return FALSE;
  149|       |
  150|  1.18k|	window = window_item_window(item);
  ------------------
  |  |   15|  1.18k|	((WINDOW_REC *) ((WI_ITEM_REC *) (item))->window)
  ------------------
  151|  1.18k|	if (window == NULL)
  ------------------
  |  Branch (151:6): [True: 0, False: 1.18k]
  ------------------
  152|      0|		return FALSE;
  153|       |
  154|  1.18k|	return window->active == item;
  155|  1.18k|}
window_item_find_window:
  213|  2.99G|{
  214|  2.99G|	GSList *tmp;
  215|       |
  216|  3.09G|	for (tmp = window->items; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (216:28): [True: 101M, False: 2.99G]
  ------------------
  217|   101M|		WI_ITEM_REC *rec = tmp->data;
  218|       |
  219|   101M|		if ((server == NULL || rec->server == server) &&
  ------------------
  |  Branch (219:8): [True: 0, False: 101M]
  |  Branch (219:26): [True: 101M, False: 0]
  ------------------
  220|   101M|		    (g_ascii_strcasecmp(name, rec->visible_name) == 0
  ------------------
  |  Branch (220:8): [True: 1.48M, False: 100M]
  ------------------
  221|   100M|		     || (rec->name && g_ascii_strcasecmp(name, rec->name) == 0)))
  ------------------
  |  Branch (221:12): [True: 100M, False: 0]
  |  Branch (221:25): [True: 9.48k, False: 100M]
  ------------------
  222|  1.49M|			return rec;
  223|   101M|	}
  224|  2.99G|	return NULL;
  225|  2.99G|}
window_item_find:
  229|  1.75M|{
  230|  1.75M|	WI_ITEM_REC *item;
  231|  1.75M|	GSList *tmp;
  232|       |
  233|  1.75M|	g_return_val_if_fail(name != NULL, NULL);
  ------------------
  |  Branch (233:2): [True: 1.75M, False: 0]
  |  Branch (233:2): [True: 1.75M, False: 0]
  |  Branch (233:2): [Folded, False: 1.75M]
  ------------------
  234|       |
  235|  2.99G|	for (tmp = windows; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (235:22): [True: 2.99G, False: 264k]
  ------------------
  236|  2.99G|		WINDOW_REC *rec = tmp->data;
  237|       |
  238|  2.99G|		item = window_item_find_window(rec, server, name);
  239|  2.99G|		if (item != NULL) return item;
  ------------------
  |  Branch (239:7): [True: 1.49M, False: 2.99G]
  ------------------
  240|  2.99G|	}
  241|       |
  242|   264k|	return NULL;
  243|  1.75M|}
window_item_create:
  260|   117k|{
  261|   117k|	WINDOW_REC *window;
  262|   117k|        WINDOW_BIND_REC *bind;
  263|   117k|	GSList *tmp, *sorted;
  264|   117k|	int clear_waiting, reuse_unused_windows;
  265|       |
  266|   117k|	g_return_if_fail(item != NULL);
  ------------------
  |  Branch (266:2): [True: 117k, False: 0]
  |  Branch (266:2): [True: 117k, False: 0]
  |  Branch (266:2): [Folded, False: 117k]
  ------------------
  267|       |
  268|   117k|	reuse_unused_windows = settings_get_bool("reuse_unused_windows");
  269|       |
  270|   117k|	clear_waiting = TRUE;
  271|   117k|	window = NULL;
  272|   117k|        sorted = windows_get_sorted();
  273|   631M|	for (tmp = sorted; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (273:21): [True: 631M, False: 98.3k]
  ------------------
  274|   631M|		WINDOW_REC *rec = tmp->data;
  275|       |
  276|       |                /* is item bound to this window? */
  277|   631M|		if (item->server != NULL) {
  ------------------
  |  Branch (277:7): [True: 631M, False: 0]
  ------------------
  278|   631M|			bind = window_bind_find(rec, item->server->tag,
  279|   631M|						item->visible_name);
  280|   631M|			if (bind != NULL) {
  ------------------
  |  Branch (280:8): [True: 19.2k, False: 631M]
  ------------------
  281|  19.2k|                                if (!bind->sticky)
  ------------------
  |  Branch (281:37): [True: 19.2k, False: 0]
  ------------------
  282|  19.2k|					window_bind_destroy(rec, bind);
  283|  19.2k|				window = rec;
  284|  19.2k|				clear_waiting = FALSE;
  285|  19.2k|				break;
  286|  19.2k|			}
  287|   631M|		}
  288|       |
  289|       |		/* use this window IF:
  290|       |		     - reuse_unused_windows is ON
  291|       |		     - window has no existing items
  292|       |		     - window has no name
  293|       |		     - window has no sticky binds (/LAYOUT SAVEd)
  294|       |		     - we already haven't found "good enough" window,
  295|       |		       except if
  296|       |                         - this is the active window
  297|       |                         - old window had some temporary bounds and this
  298|       |			   one doesn't
  299|       |		     */
  300|   631M|		if (reuse_unused_windows && rec->items == NULL &&
  ------------------
  |  Branch (300:7): [True: 0, False: 631M]
  |  Branch (300:31): [True: 0, False: 0]
  ------------------
  301|      0|		    rec->name == NULL && !window_bind_has_sticky(rec) &&
  ------------------
  |  Branch (301:7): [True: 0, False: 0]
  |  Branch (301:28): [True: 0, False: 0]
  ------------------
  302|      0|		    (window == NULL || rec == active_win ||
  ------------------
  |  Branch (302:8): [True: 0, False: 0]
  |  Branch (302:26): [True: 0, False: 0]
  ------------------
  303|      0|		     window->bound_items != NULL))
  ------------------
  |  Branch (303:8): [True: 0, False: 0]
  ------------------
  304|      0|			window = rec;
  305|   631M|	}
  306|   117k|        g_slist_free(sorted);
  307|       |
  308|   117k|        if (window == NULL && !settings_get_bool("autocreate_windows")) {
  ------------------
  |  Branch (308:13): [True: 98.3k, False: 19.2k]
  |  Branch (308:31): [True: 0, False: 98.3k]
  ------------------
  309|       |                /* never create new windows automatically */
  310|      0|                window = active_win;
  311|      0|        }
  312|       |
  313|   117k|	if (window == NULL) {
  ------------------
  |  Branch (313:6): [True: 98.3k, False: 19.2k]
  ------------------
  314|       |		/* create new window to use */
  315|  98.3k|		if (settings_get_bool("autocreate_split_windows")) {
  ------------------
  |  Branch (315:7): [True: 0, False: 98.3k]
  ------------------
  316|      0|			signal_emit("gui window create override", 1,
  317|      0|				    GINT_TO_POINTER(MAIN_WINDOW_TYPE_SPLIT));
  318|      0|		}
  319|  98.3k|		window = window_create(item, automatic);
  320|  98.3k|	} else {
  321|       |		/* use existing window */
  322|  19.2k|		window_item_add(window, item, automatic);
  323|  19.2k|	}
  324|       |
  325|   117k|	if (clear_waiting)
  ------------------
  |  Branch (325:6): [True: 98.3k, False: 19.2k]
  ------------------
  326|  98.3k|                window_bind_remove_unsticky(window);
  327|   117k|}
window_items_init:
  343|      2|{
  344|      2|	settings_add_bool("lookandfeel", "reuse_unused_windows", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  345|      2|	settings_add_bool("lookandfeel", "autocreate_windows", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  346|      2|	settings_add_bool("lookandfeel", "autocreate_split_windows", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  347|      2|	settings_add_bool("lookandfeel", "autofocus_new_items", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  348|       |
  349|       |	signal_add_last("window item changed", (SIGNAL_FUNC) signal_window_item_changed);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  350|      2|}
window-items.c:window_item_add_signal:
   36|   117k|{
   37|   117k|	g_return_if_fail(window != NULL);
  ------------------
  |  Branch (37:2): [True: 117k, False: 0]
  |  Branch (37:2): [True: 117k, False: 0]
  |  Branch (37:2): [Folded, False: 117k]
  ------------------
   38|   117k|	g_return_if_fail(item != NULL);
  ------------------
  |  Branch (38:2): [True: 117k, False: 0]
  |  Branch (38:2): [True: 117k, False: 0]
  |  Branch (38:2): [Folded, False: 117k]
  ------------------
   39|   117k|	g_return_if_fail(item->window == NULL);
  ------------------
  |  Branch (39:2): [True: 117k, False: 0]
  |  Branch (39:2): [True: 117k, False: 0]
  |  Branch (39:2): [Folded, False: 117k]
  ------------------
   40|       |
   41|   117k|        item->window = window;
   42|       |
   43|   117k|	if (window->items == NULL) {
  ------------------
  |  Branch (43:6): [True: 115k, False: 1.78k]
  ------------------
   44|   115k|		window->active = item;
   45|   115k|		window->active_server = item->server;
   46|   115k|	}
   47|       |
   48|   117k|	if (!automatic || settings_get_bool("window_auto_change")) {
  ------------------
  |  Branch (48:6): [True: 0, False: 117k]
  |  Branch (48:20): [True: 0, False: 117k]
  ------------------
   49|      0|		if (automatic)
  ------------------
  |  Branch (49:7): [True: 0, False: 0]
  ------------------
   50|      0|			signal_emit("window changed automatic", 1, window);
   51|      0|		window_set_active(window);
   52|      0|	}
   53|       |
   54|   117k|	window->items = g_slist_append(window->items, item);
   55|   117k|	if (send_signal)
  ------------------
  |  Branch (55:6): [True: 117k, False: 0]
  ------------------
   56|   117k|		signal_emit("window item new", 2, window, item);
   57|       |
   58|   117k|	if (g_slist_length(window->items) == 1 ||
  ------------------
  |  Branch (58:6): [True: 115k, False: 1.78k]
  ------------------
   59|   115k|	    (!automatic && settings_get_bool("autofocus_new_items"))) {
  ------------------
  |  Branch (59:7): [True: 0, False: 1.78k]
  |  Branch (59:21): [True: 0, False: 0]
  ------------------
   60|       |                window->active = NULL;
   61|   115k|		window_item_set_active(window, item);
   62|   115k|	}
   63|   117k|}
window-items.c:window_item_remove_signal:
   71|   117k|{
   72|   117k|	WINDOW_REC *window;
   73|       |
   74|   117k|	g_return_if_fail(item != NULL);
  ------------------
  |  Branch (74:2): [True: 117k, False: 0]
  |  Branch (74:2): [True: 117k, False: 0]
  |  Branch (74:2): [Folded, False: 117k]
  ------------------
   75|       |
   76|   117k|	window = window_item_window(item);
  ------------------
  |  |   15|   117k|	((WINDOW_REC *) ((WI_ITEM_REC *) (item))->window)
  ------------------
   77|       |
   78|   117k|	if (window == NULL)
  ------------------
  |  Branch (78:6): [True: 0, False: 117k]
  ------------------
   79|      0|		return;
   80|       |
   81|   117k|        item->window = NULL;
   82|   117k|	window->items = g_slist_remove(window->items, item);
   83|       |
   84|   117k|	if (window->active == item) {
  ------------------
  |  Branch (84:6): [True: 117k, False: 199]
  ------------------
   85|   117k|		window_item_set_active(window, window->items == NULL ? NULL :
  ------------------
  |  Branch (85:34): [True: 115k, False: 1.58k]
  ------------------
   86|   117k|				       window->items->data);
   87|   117k|	}
   88|       |
   89|   117k|	if (emit_signal)
  ------------------
  |  Branch (89:6): [True: 117k, False: 0]
  ------------------
   90|   117k|		signal_emit("window item remove", 2, window, item);
   91|   117k|}
window-items.c:signal_window_item_changed:
  330|   235k|{
  331|   235k|	g_return_if_fail(window != NULL);
  ------------------
  |  Branch (331:2): [True: 235k, False: 0]
  |  Branch (331:2): [True: 235k, False: 0]
  |  Branch (331:2): [Folded, False: 235k]
  ------------------
  332|       |
  333|   235k|	if (g_slist_length(window->items) > 1) {
  ------------------
  |  Branch (333:6): [True: 0, False: 235k]
  ------------------
  334|       |		/* default to printing "talking with ...",
  335|       |		   you can override it it you wish */
  336|      0|		printformat(item->server, item->visible_name,
  ------------------
  |  |   37|      0|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    3|      0|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  ------------------
  337|      0|			    MSGLEVEL_CLIENTNOTICE,
  338|      0|			    TXT_TALKING_WITH, item->visible_name);
  339|      0|	}
  340|   235k|}

windows_layout_init:
  267|      2|{
  268|      2|	signal_add("layout restore item", (SIGNAL_FUNC) sig_layout_restore_item);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  269|      2|	signal_add("layout restore", (SIGNAL_FUNC) sig_layout_restore);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  270|       |	signal_add("layout save item", (SIGNAL_FUNC) sig_layout_save_item);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    3|      2|#define MODULE_NAME "fe-common/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  271|      2|}

fe_cap_init:
   75|      2|{
   76|      2|	signal_add("event cap", (SIGNAL_FUNC) event_cap);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
   77|       |	signal_add("server cap req", (SIGNAL_FUNC) sig_server_cap_req);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
   78|      2|}
fe-cap.c:event_cap:
   44|  7.28k|{
   45|  7.28k|	int i;
   46|  7.28k|	char *params, *evt, *list, *star;
   47|       |
   48|  7.28k|	params = event_get_params(args, 4, NULL, &evt, &star, &list);
   49|       |
   50|  7.28k|	if (params == NULL) {
  ------------------
  |  Branch (50:6): [True: 0, False: 7.28k]
  ------------------
   51|      0|		return;
   52|      0|	}
   53|       |
   54|       |	/* With multiline CAP LS, if the '*' parameter isn't present,
   55|       |	 * adjust the parameter pointer to compensate for this */
   56|  7.28k|	if (strcmp(star, "*") != 0 && list[0] == '\0') {
  ------------------
  |  Branch (56:6): [True: 7.07k, False: 217]
  |  Branch (56:32): [True: 6.11k, False: 959]
  ------------------
   57|  6.11k|		list = star;
   58|  6.11k|	}
   59|       |
   60|  51.0k|	for (i = 0; i < G_N_ELEMENTS(fe_cap_messages); i++) {
  ------------------
  |  Branch (60:14): [True: 43.7k, False: 7.28k]
  ------------------
   61|  43.7k|		if (!g_ascii_strcasecmp(evt, fe_cap_messages[i].command)) {
  ------------------
  |  Branch (61:7): [True: 4.39k, False: 39.3k]
  ------------------
   62|  4.39k|			printformat(server, NULL, MSGLEVEL_CRAP, fe_cap_messages[i].template, list);
  ------------------
  |  |   37|  4.39k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  4.39k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
   63|  4.39k|		}
   64|  43.7k|	}
   65|       |
   66|  7.28k|	g_free(params);
   67|  7.28k|}

fe_common_irc_init:
   79|      2|{
   80|      2|	settings_add_bool("lookandfeel", "show_away_once", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
   81|       |
   82|      2|	theme_register(fecommon_irc_formats);
  ------------------
  |  |   46|      2|#define theme_register(formats) theme_register_module(MODULE_NAME, formats)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
   83|       |
   84|      2|	fe_irc_channels_init();
   85|      2|	fe_irc_queries_init();
   86|      2|	fe_irc_messages_init();
   87|      2|	fe_irc_commands_init();
   88|      2|	fe_ircnet_init();
   89|      2|	fe_irc_server_init();
   90|      2|	fe_ctcp_init();
   91|      2|	fe_events_init();
   92|      2|	fe_events_numeric_init();
   93|      2|	fe_modes_init();
   94|      2|	fe_netsplit_init();
   95|      2|	fe_netjoin_init();
   96|      2|        fe_whois_init();
   97|      2|	fe_sasl_init();
   98|      2|	fe_cap_init();
   99|      2|        irc_completion_init();
  100|       |
  101|      2|	settings_check();
  ------------------
  |  |  125|      2|#define settings_check() settings_check_module(MODULE_NAME)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  102|      2|	module_register("irc", "fe-common");
  ------------------
  |  |   59|      2|        module_register_full(name, submodule, MODULE_NAME)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  103|      2|}

fe_ctcp_init:
  149|      2|{
  150|      2|	signal_add("default ctcp msg", (SIGNAL_FUNC) ctcp_default_msg);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  151|      2|	signal_add("ctcp msg ping", (SIGNAL_FUNC) ctcp_ping_msg);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  152|      2|	signal_add("ctcp msg version", (SIGNAL_FUNC) ctcp_version_msg);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  153|      2|	signal_add("ctcp msg time", (SIGNAL_FUNC) ctcp_time_msg);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  154|      2|	signal_add("ctcp msg userinfo", (SIGNAL_FUNC) ctcp_userinfo_msg);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  155|      2|	signal_add("ctcp msg clientinfo", (SIGNAL_FUNC) ctcp_clientinfo_msg);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  156|      2|	signal_add("default ctcp reply", (SIGNAL_FUNC) ctcp_default_reply);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  157|       |	signal_add("ctcp reply ping", (SIGNAL_FUNC) ctcp_ping_reply);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  158|      2|}
fe-ctcp.c:ctcp_default_msg:
   39|  3.82k|{
   40|  3.82k|        const char *p;
   41|  3.82k|	char *cmd;
   42|       |
   43|  3.82k|	p = strchr(data, ' ');
   44|  3.82k|	if (p == NULL) {
  ------------------
  |  Branch (44:6): [True: 1.33k, False: 2.48k]
  ------------------
   45|  1.33k|		cmd = g_strdup(data);
   46|  1.33k|                data = "";
   47|  2.48k|	} else {
   48|  2.48k|		cmd = g_strndup(data, (int) (p-data));
   49|  2.48k|                data = p+1;
   50|  2.48k|	}
   51|       |
   52|  3.82k|	printformat(server, server_ischannel(SERVER(server), target) ? target : nick, MSGLEVEL_CTCPS,
  ------------------
  |  |   37|  7.65k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  3.82k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |  |  Branch (37:42): [True: 1.54k, False: 2.27k]
  |  |  ------------------
  ------------------
   53|  3.82k|		    IRCTXT_CTCP_REQUESTED_UNKNOWN,
   54|  3.82k|		    nick, addr, cmd, data, target);
   55|  3.82k|        g_free(cmd);
   56|  3.82k|}
fe-ctcp.c:ctcp_ping_msg:
   61|  1.54k|{
   62|  1.54k|	signal_emit("message irc ctcp", 6, server, "PING",
   63|  1.54k|		    data, nick, addr, target);
   64|  1.54k|}
fe-ctcp.c:ctcp_version_msg:
   69|     11|{
   70|     11|	signal_emit("message irc ctcp", 6, server, "VERSION",
   71|     11|		    data, nick, addr, target);
   72|     11|}
fe-ctcp.c:ctcp_time_msg:
   77|     80|{
   78|     80|	signal_emit("message irc ctcp", 6, server, "TIME",
   79|     80|		    data, nick, addr, target);
   80|     80|}
fe-ctcp.c:ctcp_default_reply:
  101|    419|{
  102|    419|	const char *ctcpdata;
  103|    419|	char *ctcp, *ptr;
  104|       |
  105|    419|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (105:2): [True: 419, False: 0]
  |  Branch (105:2): [True: 419, False: 0]
  |  Branch (105:2): [Folded, False: 419]
  ------------------
  106|       |
  107|    419|	ctcp = g_strdup(data);
  108|    419|	ptr = strchr(ctcp, ' ');
  109|    419|	if (ptr == NULL)
  ------------------
  |  Branch (109:6): [True: 16, False: 403]
  ------------------
  110|     16|		ctcpdata = "";
  111|    403|	else {
  112|    403|		*ptr = '\0';
  113|    403|		ctcpdata = ptr+1;
  114|    403|	}
  115|       |
  116|    419|	printformat(server, server_ischannel(SERVER(server), target) ? target : nick, MSGLEVEL_CTCPS,
  ------------------
  |  |   37|    838|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    419|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |  |  Branch (37:42): [True: 72, False: 347]
  |  |  |  Branch (37:57): [True: 72, False: 347]
  |  |  ------------------
  ------------------
  117|    419|		    server_ischannel(SERVER(server), target) ? IRCTXT_CTCP_REPLY_CHANNEL :
  118|    419|		    IRCTXT_CTCP_REPLY, ctcp, nick, ctcpdata, target);
  119|    419|	g_free(ctcp);
  120|    419|}
fe-ctcp.c:ctcp_ping_reply:
  124|     20|{
  125|     20|	gint64 tv, tv2 = 0;
  126|     20|	long usecs;
  127|       |
  128|     20|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (128:2): [True: 20, False: 0]
  |  Branch (128:2): [True: 20, False: 0]
  |  Branch (128:2): [Folded, False: 20]
  ------------------
  129|       |
  130|     20|	if (sscanf(data,
  ------------------
  |  Branch (130:6): [True: 0, False: 20]
  ------------------
  131|     20|	           "%" G_GINT64_FORMAT " "
  132|     20|	           "%" G_GINT64_FORMAT,
  133|     20|	           &tv, &tv2) < 1) {
  134|      0|		char *tmp = g_strconcat("PING ", data, NULL);
  135|      0|		ctcp_default_reply(server, tmp, nick, addr, target);
  136|      0|		g_free(tmp);
  137|      0|		return;
  138|      0|	}
  139|       |
  140|     20|	tv2 += tv * G_TIME_SPAN_SECOND;
  141|     20|	tv = g_get_real_time();
  142|     20|	usecs = tv - tv2;
  143|     20|	printformat(server, server_ischannel(SERVER(server), target) ? target : nick,
  ------------------
  |  |   37|     40|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|     20|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|     40|	            MSGLEVEL_CTCPS, IRCTXT_CTCP_PING_REPLY, nick, usecs / G_TIME_SPAN_SECOND,
  |  |  |  |  145|     40|	            usecs % G_TIME_SPAN_SECOND);
  |  |  ------------------
  |  |  |  Branch (37:42): [True: 0, False: 20]
  |  |  ------------------
  ------------------
  144|     20|	            MSGLEVEL_CTCPS, IRCTXT_CTCP_PING_REPLY, nick, usecs / G_TIME_SPAN_SECOND,
  145|       |	            usecs % G_TIME_SPAN_SECOND);
  146|     20|}

fe_events_numeric_init:
  765|      2|{
  766|      2|	last_away_nick = NULL;
  767|      2|	last_away_msg = NULL;
  768|       |
  769|       |	/* clang-format off */
  770|      2|	signal_add("event 221", (SIGNAL_FUNC) event_user_mode);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  771|      2|	signal_add("event 303", (SIGNAL_FUNC) event_ison);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  772|      2|	signal_add("event 353", (SIGNAL_FUNC) event_names_list);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  773|      2|	signal_add_first("event 366", (SIGNAL_FUNC) event_end_of_names);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  774|      2|	signal_add("event 352", (SIGNAL_FUNC) event_who);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  775|      2|	signal_add("event 315", (SIGNAL_FUNC) event_end_of_who);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  776|      2|	signal_add("event 271", (SIGNAL_FUNC) event_silence_list);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  777|      2|	signal_add("event 272", (SIGNAL_FUNC) sig_empty);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  778|      2|	signal_add("event 281", (SIGNAL_FUNC) event_accept_list);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  779|      2|	signal_add("event 367", (SIGNAL_FUNC) event_ban_list);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  780|      2|	signal_add("event 348", (SIGNAL_FUNC) event_eban_list);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  781|      2|	signal_add("event 728", (SIGNAL_FUNC) event_quiet_list);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  782|      2|	signal_add("event 344", (SIGNAL_FUNC) event_hybrid_quiet_list); /* used by ircd-hybrid */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  783|      2|	signal_add("event 346", (SIGNAL_FUNC) event_invite_list);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  784|      2|	signal_add("event 433", (SIGNAL_FUNC) event_nick_in_use);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  785|      2|	signal_add("event 332", (SIGNAL_FUNC) event_topic_get);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  786|      2|	signal_add("event 333", (SIGNAL_FUNC) event_topic_info);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  787|      2|	signal_add("event 324", (SIGNAL_FUNC) event_channel_mode);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  788|      2|	signal_add("event 329", (SIGNAL_FUNC) event_channel_created);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  789|      2|	signal_add("event 306", (SIGNAL_FUNC) event_nowaway);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  790|      2|	signal_add("event 305", (SIGNAL_FUNC) event_unaway);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  791|      2|	signal_add("event 301", (SIGNAL_FUNC) event_away);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  792|      2|	signal_add("event 328", (SIGNAL_FUNC) event_chanserv_url);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  793|      2|	signal_add("event 302", (SIGNAL_FUNC) event_userhost);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  794|      2|	signal_add("event 341", (SIGNAL_FUNC) event_sent_invite);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  795|       |
  796|      2|	signal_add("event 437", (SIGNAL_FUNC) event_target_unavailable);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  797|      2|	signal_add("event 401", (SIGNAL_FUNC) event_no_such_nick);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  798|      2|	signal_add("event 403", (SIGNAL_FUNC) event_no_such_channel);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  799|      2|	signal_add("event 405", (SIGNAL_FUNC) event_too_many_channels);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  800|      2|	signal_add("event 407", (SIGNAL_FUNC) event_duplicate_channel);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  801|      2|	signal_add("event 471", (SIGNAL_FUNC) event_channel_is_full);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  802|      2|	signal_add("event 472", (SIGNAL_FUNC) event_unknown_mode);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  803|      2|	signal_add("event 473", (SIGNAL_FUNC) event_invite_only);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  804|      2|	signal_add("event 474", (SIGNAL_FUNC) event_banned);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  805|      2|	signal_add("event 475", (SIGNAL_FUNC) event_bad_channel_key);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  806|      2|	signal_add("event 476", (SIGNAL_FUNC) event_bad_channel_mask);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  807|      2|	signal_add("event 477", (SIGNAL_FUNC) event_477);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  808|      2|	signal_add("event 489", (SIGNAL_FUNC) event_489); /* cannot join to channel (secure only), or not chanop or voice. */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  809|      2|	signal_add("event 375", (SIGNAL_FUNC) event_motd);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  810|      2|	signal_add("event 376", (SIGNAL_FUNC) event_motd);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  811|      2|	signal_add("event 372", (SIGNAL_FUNC) event_motd);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  812|      2|	signal_add("event 422", (SIGNAL_FUNC) event_motd);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  813|      2|	signal_add("event 439", (SIGNAL_FUNC) event_target_too_fast);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  814|      2|	signal_add("event 704", (SIGNAL_FUNC) event_helpstart);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  815|      2|	signal_add("event 705", (SIGNAL_FUNC) event_helptxt);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  816|      2|	signal_add("event 706", (SIGNAL_FUNC) event_endofhelp);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  817|      2|	signal_add("event 707", (SIGNAL_FUNC) event_target_too_fast);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  818|       |
  819|      2|        signal_add("default event numeric", (SIGNAL_FUNC) event_numeric);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  820|       |	/* Because default event numeric only fires if there is no specific
  821|       |	 * event, add all numerics with a handler elsewhere in irssi that
  822|       |	 * should not be printed specially here.
  823|       |	 */
  824|      2|	signal_add("event 001", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  825|      2|	signal_add("event 004", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  826|      2|	signal_add("event 005", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  827|      2|	signal_add("event 254", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  828|      2|	signal_add("event 354", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  829|      2|	signal_add("event 364", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  830|      2|	signal_add("event 365", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  831|      2|	signal_add("event 381", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  832|      2|	signal_add("event 396", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  833|      2|	signal_add("event 421", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  834|      2|	signal_add("event 432", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  835|      2|	signal_add("event 436", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  836|      2|	signal_add("event 438", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  837|      2|	signal_add("event 465", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  838|      2|	signal_add("event 470", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  839|      2|	signal_add("event 479", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  840|       |
  841|      2|	signal_add("event 345", (SIGNAL_FUNC) event_target_received); /* end of reop list/hybrid quiet list */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  842|      2|	signal_add("event 347", (SIGNAL_FUNC) event_target_received); /* end of invite exception list */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  843|      2|	signal_add("event 349", (SIGNAL_FUNC) event_target_received); /* end of ban exception list */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  844|      2|	signal_add("event 368", (SIGNAL_FUNC) event_target_received); /* end of ban list */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  845|      2|	signal_add("event 386", (SIGNAL_FUNC) event_target_received); /* owner list; old rsa challenge (harmless) */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  846|      2|	signal_add("event 387", (SIGNAL_FUNC) event_target_received); /* end of owner list */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  847|      2|	signal_add("event 388", (SIGNAL_FUNC) event_target_received); /* protect list */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  848|      2|	signal_add("event 389", (SIGNAL_FUNC) event_target_received); /* end of protect list */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  849|      2|	signal_add("event 404", (SIGNAL_FUNC) event_target_received); /* cannot send to channel */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  850|      2|	signal_add("event 408", (SIGNAL_FUNC) event_target_received); /* cannot send (+c) */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  851|      2|	signal_add("event 442", (SIGNAL_FUNC) event_target_received); /* you're not on that channel */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  852|      2|	signal_add("event 478", (SIGNAL_FUNC) event_target_received); /* ban list is full */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  853|      2|	signal_add("event 482", (SIGNAL_FUNC) event_target_received); /* not chanop */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  854|      2|	signal_add("event 486", (SIGNAL_FUNC) event_target_received); /* cannot /msg (+R) */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  855|      2|	signal_add("event 494", (SIGNAL_FUNC) event_target_received); /* cannot /msg (own +R) */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  856|      2|	signal_add("event 506", (SIGNAL_FUNC) event_target_received); /* cannot send (+R) */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  857|      2|	signal_add("event 716", (SIGNAL_FUNC) event_target_received); /* cannot /msg (+g) */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  858|      2|	signal_add("event 717", (SIGNAL_FUNC) event_target_received); /* +g notified */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  859|      2|	signal_add("event 729", (SIGNAL_FUNC) event_target_received); /* end of quiet (or other) list */
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  860|       |	/* clang-format on */
  861|      2|}
fe-events-numeric.c:event_user_mode:
   47|    689|{
   48|    689|	char *params, *mode;
   49|       |
   50|    689|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (50:2): [True: 689, False: 0]
  |  Branch (50:2): [True: 689, False: 0]
  |  Branch (50:2): [Folded, False: 689]
  ------------------
   51|    689|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (51:2): [True: 689, False: 0]
  |  Branch (51:2): [True: 689, False: 0]
  |  Branch (51:2): [Folded, False: 689]
  ------------------
   52|       |
   53|    689|	params = event_get_params(data, 2, NULL, &mode);
   54|    689|        printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_USER_MODE,
  ------------------
  |  |   37|    689|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    689|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
   55|    689|                    g_strchomp(mode));
   56|    689|	g_free(params);
   57|    689|}
fe-events-numeric.c:event_ison:
   60|    105|{
   61|    105|	char *params, *online;
   62|       |
   63|    105|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (63:2): [True: 105, False: 0]
  |  Branch (63:2): [True: 105, False: 0]
  |  Branch (63:2): [Folded, False: 105]
  ------------------
   64|    105|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (64:2): [True: 105, False: 0]
  |  Branch (64:2): [True: 105, False: 0]
  |  Branch (64:2): [Folded, False: 105]
  ------------------
   65|       |
   66|    105|	params = event_get_params(data, 2, NULL, &online);
   67|    105|	printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_ONLINE, online);
  ------------------
  |  |   37|    105|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    105|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
   68|    105|	g_free(params);
   69|    105|}
fe-events-numeric.c:event_names_list:
   72|  17.0k|{
   73|  17.0k|	IRC_CHANNEL_REC *chanrec;
   74|  17.0k|	char *params, *channel, *names;
   75|       |
   76|  17.0k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (76:2): [True: 17.0k, False: 0]
  |  Branch (76:2): [True: 17.0k, False: 0]
  |  Branch (76:2): [Folded, False: 17.0k]
  ------------------
   77|       |
   78|  17.0k|	params = event_get_params(data, 4, NULL, NULL, &channel, &names);
   79|       |
   80|  17.0k|	chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|  17.0k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|  17.0k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  17.0k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|  17.0k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   81|  17.0k|	if (chanrec == NULL || chanrec->names_got) {
  ------------------
  |  Branch (81:6): [True: 7.50k, False: 9.53k]
  |  Branch (81:25): [True: 1.43k, False: 8.09k]
  ------------------
   82|  8.93k|		printformat_module("fe-common/core", server, channel,
   83|  8.93k|				   MSGLEVEL_CRAP, TXT_NAMES,
   84|  8.93k|				   channel, 0, 0, 0, 0, 0);
   85|  8.93k|                printtext(server, channel, MSGLEVEL_CRAP, "%s", names);
   86|       |
   87|  8.93k|	}
   88|  17.0k|	g_free(params);
   89|  17.0k|}
fe-events-numeric.c:event_end_of_names:
   93|  13.3k|{
   94|  13.3k|	IRC_CHANNEL_REC *chanrec;
   95|  13.3k|	char *params, *channel;
   96|       |
   97|  13.3k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (97:2): [True: 13.3k, False: 0]
  |  Branch (97:2): [True: 13.3k, False: 0]
  |  Branch (97:2): [Folded, False: 13.3k]
  ------------------
   98|       |
   99|  13.3k|	params = event_get_params(data, 2, NULL, &channel);
  100|       |
  101|  13.3k|	chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|  13.3k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|  13.3k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  13.3k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|  13.3k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  102|  13.3k|	if (chanrec == NULL || chanrec->names_got)
  ------------------
  |  Branch (102:6): [True: 5.74k, False: 7.57k]
  |  Branch (102:25): [True: 2.30k, False: 5.26k]
  ------------------
  103|  8.04k|		print_event_received(server, data, nick, FALSE);
  104|  13.3k|	g_free(params);
  105|  13.3k|}
fe-events-numeric.c:print_event_received:
  673|   140k|{
  674|   140k|	char *target, *args, *ptr, *ptr2, *recoded;
  675|   140k|	int format;
  676|       |
  677|   140k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (677:2): [True: 140k, False: 0]
  |  Branch (677:2): [True: 140k, False: 0]
  |  Branch (677:2): [Folded, False: 140k]
  ------------------
  678|       |
  679|       |        /* first param is our nick, "*" or a channel */
  680|   140k|	ptr = strchr(data, ' ');
  681|   140k|	if (ptr == NULL)
  ------------------
  |  Branch (681:6): [True: 47.8k, False: 93.1k]
  ------------------
  682|  47.8k|		return;
  683|  93.1k|	ptr++;
  684|       |
  685|  93.1k|	if (server_ischannel(SERVER(server), data)) /* directed at channel */
  ------------------
  |  |   22|  93.1k|	((server)->ischannel(server, channel))
  |  |  ------------------
  |  |  |  Branch (22:2): [True: 5.82k, False: 87.3k]
  |  |  ------------------
  ------------------
  686|  5.82k|		target = g_strndup(data, (int)(ptr - data - 1));
  687|  87.3k|	else if (!target_param || *ptr == ':' || (ptr2 = strchr(ptr, ' ')) == NULL)
  ------------------
  |  Branch (687:11): [True: 78.6k, False: 8.66k]
  |  Branch (687:28): [True: 255, False: 8.41k]
  |  Branch (687:43): [True: 5.93k, False: 2.47k]
  ------------------
  688|  84.8k|		target = NULL;
  689|  2.47k|	else {
  690|       |                /* target parameter expected and present */
  691|  2.47k|                target = g_strndup(ptr, (int) (ptr2-ptr));
  692|  2.47k|	}
  693|       |
  694|       |	/* param1 param2 ... :last parameter */
  695|  93.1k|	if (*ptr == ':') {
  ------------------
  |  Branch (695:6): [True: 1.88k, False: 91.2k]
  ------------------
  696|       |                /* only one parameter */
  697|  1.88k|		args = g_strdup(ptr+1);
  698|  91.2k|	} else {
  699|  91.2k|		args = g_strdup(ptr);
  700|  91.2k|		ptr = strstr(args, " :");
  701|  91.2k|		if (ptr != NULL)
  ------------------
  |  Branch (701:7): [True: 5.21k, False: 86.0k]
  ------------------
  702|  5.21k|			memmove(ptr+1, ptr+2, strlen(ptr+1));
  703|  91.2k|	}
  704|       |
  705|  93.1k|	recoded = recode_in(SERVER(server), args, NULL);
  ------------------
  |  |    9|  93.1k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  93.1k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  706|  93.1k|	format = nick == NULL || server->real_address == NULL ||
  ------------------
  |  Branch (706:11): [True: 60.2k, False: 32.9k]
  |  Branch (706:27): [True: 23.4k, False: 9.46k]
  ------------------
  707|  9.46k|		g_strcmp0(nick, server->real_address) == 0 ?
  ------------------
  |  Branch (707:3): [True: 8.60k, False: 863]
  ------------------
  708|  92.3k|		IRCTXT_DEFAULT_EVENT : IRCTXT_DEFAULT_EVENT_SERVER;
  709|  93.1k|	printformat(server, target, MSGLEVEL_CRAP, format,
  ------------------
  |  |   37|  93.1k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  93.1k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  710|  93.1k|		    nick, recoded, current_server_event);
  711|       |
  712|  93.1k|	g_free(recoded);
  713|  93.1k|	g_free(args);
  714|  93.1k|	g_free(target);
  715|  93.1k|}
fe-events-numeric.c:event_who:
  108|  15.3k|{
  109|  15.3k|	char *params, *nick, *channel, *user, *host, *stat, *realname, *hops;
  110|  15.3k|	char *serv, *recoded;
  111|       |
  112|  15.3k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (112:2): [True: 15.3k, False: 0]
  |  Branch (112:2): [True: 15.3k, False: 0]
  |  Branch (112:2): [Folded, False: 15.3k]
  ------------------
  113|       |
  114|  15.3k|	params = event_get_params(data, 8, NULL, &channel, &user,
  115|  15.3k|				  &host, &serv, &nick, &stat, &realname);
  116|       |
  117|       |	/* split hops/realname */
  118|  15.3k|	hops = realname;
  119|   102k|	while (*realname != '\0' && *realname != ' ') realname++;
  ------------------
  |  Branch (119:9): [True: 87.4k, False: 15.3k]
  |  Branch (119:30): [True: 87.4k, False: 0]
  ------------------
  120|  15.3k|	if (*realname == ' ')
  ------------------
  |  Branch (120:6): [True: 0, False: 15.3k]
  ------------------
  121|      0|		*realname++ = '\0';
  122|       |
  123|  15.3k|	recoded = recode_in(SERVER(server), realname, nick);
  ------------------
  |  |    9|  15.3k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  15.3k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  124|  15.3k|	printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_WHO,
  ------------------
  |  |   37|  15.3k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  15.3k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  125|  15.3k|		    channel, nick, stat, hops, user, host, recoded, serv);
  126|       |
  127|  15.3k|	g_free(params);
  128|  15.3k|	g_free(recoded);
  129|  15.3k|}
fe-events-numeric.c:event_end_of_who:
  132|     82|{
  133|     82|	char *params, *channel;
  134|       |
  135|     82|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (135:2): [True: 82, False: 0]
  |  Branch (135:2): [True: 82, False: 0]
  |  Branch (135:2): [Folded, False: 82]
  ------------------
  136|       |
  137|     82|	params = event_get_params(data, 2, NULL, &channel);
  138|     82|	printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_END_OF_WHO, channel);
  ------------------
  |  |   37|     82|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|     82|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  139|     82|	g_free(params);
  140|     82|}
fe-events-numeric.c:event_silence_list:
  220|      6|{
  221|      6|	char *params, *nick, *mask;
  222|       |
  223|      6|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (223:2): [True: 6, False: 0]
  |  Branch (223:2): [True: 6, False: 0]
  |  Branch (223:2): [Folded, False: 6]
  ------------------
  224|       |
  225|      6|	params = event_get_params(data, 3, NULL, &nick, &mask);
  226|      6|	printformat(server, NULL, MSGLEVEL_CRAP,
  ------------------
  |  |   37|      6|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|      6|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  227|      6|		    IRCTXT_SILENCE_LINE, nick, mask);
  228|      6|	g_free(params);
  229|      6|}
fe-events-numeric.c:event_ban_list:
  143|  2.97k|{
  144|  2.97k|	IRC_CHANNEL_REC *chanrec;
  145|  2.97k|	BAN_REC *banrec;
  146|  2.97k|	const char *channel;
  147|  2.97k|	char *params, *ban, *setby, *tims, *timestr, *ago;
  148|       |
  149|  2.97k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (149:2): [True: 2.97k, False: 0]
  |  Branch (149:2): [True: 2.97k, False: 0]
  |  Branch (149:2): [Folded, False: 2.97k]
  ------------------
  150|       |
  151|  2.97k|	params = event_get_params(data, 5, NULL, &channel,
  152|  2.97k|				  &ban, &setby, &tims);
  153|  2.97k|	timestr = my_asctime((time_t) atoll(tims));
  154|  2.97k|	ago = time_ago((time_t) atoll(tims));
  155|       |
  156|  2.97k|	chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|  2.97k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|  2.97k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  2.97k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|  2.97k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  157|  2.97k|	banrec = chanrec == NULL ? NULL : banlist_find(chanrec->banlist, ban);
  ------------------
  |  Branch (157:11): [True: 1.24k, False: 1.72k]
  ------------------
  158|       |
  159|  2.97k|	channel = get_visible_target(server, channel);
  160|  2.97k|	printformat(server, channel, MSGLEVEL_CRAP,
  ------------------
  |  |   37|  5.94k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  2.97k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  162|  2.97k|	            banrec == NULL ? 0 : g_slist_index(chanrec->banlist, banrec) + 1, channel, ban,
  |  |  |  |  163|  2.97k|	            setby, ago, timestr);
  |  |  ------------------
  |  |  |  Branch (37:57): [True: 2.68k, False: 286]
  |  |  ------------------
  ------------------
  161|  2.97k|	            *setby == '\0' ? IRCTXT_BANLIST : IRCTXT_BANLIST_LONG,
  162|  2.97k|	            banrec == NULL ? 0 : g_slist_index(chanrec->banlist, banrec) + 1, channel, ban,
  163|  2.97k|	            setby, ago, timestr);
  164|       |
  165|  2.97k|	g_free(timestr);
  166|  2.97k|	g_free(params);
  167|  2.97k|}
fe-events-numeric.c:event_quiet_list:
  207|     20|{
  208|     20|	const char *channel;
  209|     20|	char *params, *ban, *setby, *tims;
  210|       |
  211|     20|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (211:2): [True: 20, False: 0]
  |  Branch (211:2): [True: 20, False: 0]
  |  Branch (211:2): [Folded, False: 20]
  ------------------
  212|       |
  213|     20|	params = event_get_params(data, 6, NULL, &channel, NULL, &ban, &setby, &tims);
  214|     20|	do_quiet_list(server, channel, ban, setby, tims);
  215|       |
  216|     20|	g_free(params);
  217|     20|}
fe-events-numeric.c:do_quiet_list:
  192|    728|{
  193|    728|	char *timestr, *ago;
  194|       |
  195|    728|	timestr = my_asctime((time_t) atoll(tims));
  196|    728|	ago = time_ago((time_t) atoll(tims));
  197|       |
  198|    728|	channel = get_visible_target(server, channel);
  199|    728|	printformat(server, channel, MSGLEVEL_CRAP,
  ------------------
  |  |   37|  1.45k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    728|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |  |  Branch (37:57): [True: 0, False: 728]
  |  |  ------------------
  ------------------
  200|    728|	            *setby == '\0' ? IRCTXT_QUIETLIST : IRCTXT_QUIETLIST_LONG, channel, ban, setby,
  201|    728|	            ago, timestr);
  202|       |
  203|    728|	g_free(timestr);
  204|    728|}
fe-events-numeric.c:event_hybrid_quiet_list:
  730|  1.03k|{
  731|  1.03k|	const char *channel;
  732|  1.03k|	char *params, *ban, *setby, *tims;
  733|       |
  734|  1.03k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (734:2): [True: 1.03k, False: 0]
  |  Branch (734:2): [True: 1.03k, False: 0]
  |  Branch (734:2): [Folded, False: 1.03k]
  ------------------
  735|       |
  736|  1.03k|	params = event_get_params(data, 5, NULL, &channel, &ban, &setby, &tims);
  737|       |
  738|  1.03k|	if (*tims == '\0') {
  ------------------
  |  Branch (738:6): [True: 328, False: 708]
  ------------------
  739|       |		/* probably not a quiet list */
  740|    328|		event_target_received(server, data, NULL);
  741|    328|		return;
  742|    328|	}
  743|       |
  744|    708|	do_quiet_list(server, channel, ban, setby, tims);
  745|       |
  746|    708|	g_free(params);
  747|    708|}
fe-events-numeric.c:event_invite_list:
  245|    169|{
  246|    169|	const char *channel;
  247|    169|	char *params, *invite, *setby, *tims, *timestr, *ago;
  248|       |
  249|    169|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (249:2): [True: 169, False: 0]
  |  Branch (249:2): [True: 169, False: 0]
  |  Branch (249:2): [Folded, False: 169]
  ------------------
  250|       |
  251|    169|	params = event_get_params(data, 5, NULL, &channel, &invite,
  252|    169|			&setby, &tims);
  253|    169|	timestr = my_asctime((time_t) atoll(tims));
  254|    169|	ago = time_ago((time_t) atoll(tims));
  255|       |
  256|    169|	channel = get_visible_target(server, channel);
  257|    169|	printformat(server, channel, MSGLEVEL_CRAP,
  ------------------
  |  |   37|    338|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    169|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |  |  Branch (37:57): [True: 109, False: 60]
  |  |  ------------------
  ------------------
  258|    169|	            *setby == '\0' ? IRCTXT_INVITELIST : IRCTXT_INVITELIST_LONG, channel, invite,
  259|    169|	            setby, timestr, ago);
  260|       |
  261|    169|	g_free(timestr);
  262|    169|	g_free(params);
  263|    169|}
fe-events-numeric.c:event_nick_in_use:
  266|  1.29k|{
  267|  1.29k|	char *params, *nick;
  268|       |
  269|  1.29k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (269:2): [True: 1.29k, False: 0]
  |  Branch (269:2): [True: 1.29k, False: 0]
  |  Branch (269:2): [Folded, False: 1.29k]
  ------------------
  270|       |
  271|  1.29k|	params = event_get_params(data, 2, NULL, &nick);
  272|  1.29k|	if (server->connected) {
  ------------------
  |  Branch (272:6): [True: 16, False: 1.28k]
  ------------------
  273|     16|		printformat(server, NULL, MSGLEVEL_CRAP,
  ------------------
  |  |   37|     16|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|     16|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  274|     16|			    IRCTXT_NICK_IN_USE, nick);
  275|     16|	}
  276|       |
  277|  1.29k|	g_free(params);
  278|  1.29k|}
fe-events-numeric.c:event_topic_get:
  281|  1.36k|{
  282|  1.36k|	const char *channel;
  283|  1.36k|	char *params, *topic, *recoded;
  284|       |
  285|  1.36k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (285:2): [True: 1.36k, False: 0]
  |  Branch (285:2): [True: 1.36k, False: 0]
  |  Branch (285:2): [Folded, False: 1.36k]
  ------------------
  286|       |
  287|  1.36k|	params = event_get_params(data, 3, NULL, &channel, &topic);
  288|  1.36k|	recoded = recode_in(SERVER(server), topic, channel);
  ------------------
  |  |    9|  1.36k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  1.36k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  289|  1.36k|	channel = get_visible_target(server, channel);
  290|  1.36k|	printformat(server, channel, MSGLEVEL_CRAP,
  ------------------
  |  |   37|  1.36k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  1.36k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  291|  1.36k|		    IRCTXT_TOPIC, channel, recoded);
  292|  1.36k|	g_free(params);
  293|  1.36k|	g_free(recoded);
  294|  1.36k|}
fe-events-numeric.c:event_topic_info:
  297|  1.20k|{
  298|  1.20k|	const char *channel;
  299|  1.20k|	char *params, *timestr, *bynick, *byhost, *topictime;
  300|       |
  301|  1.20k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (301:2): [True: 1.20k, False: 0]
  |  Branch (301:2): [True: 1.20k, False: 0]
  |  Branch (301:2): [Folded, False: 1.20k]
  ------------------
  302|       |
  303|  1.20k|	params = event_get_params(data, 4, NULL, &channel,
  304|  1.20k|				  &bynick, &topictime);
  305|       |
  306|  1.20k|        timestr = my_asctime((time_t) atol(topictime));
  307|       |
  308|  1.20k|	byhost = strchr(bynick, '!');
  309|  1.20k|	if (byhost != NULL)
  ------------------
  |  Branch (309:6): [True: 540, False: 666]
  ------------------
  310|    540|		*byhost++ = '\0';
  311|       |
  312|  1.20k|	channel = get_visible_target(server, channel);
  313|  1.20k|	printformat(server, channel, MSGLEVEL_CRAP, IRCTXT_TOPIC_INFO,
  ------------------
  |  |   37|  1.20k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  1.20k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  314|  1.20k|		    bynick, timestr, byhost == NULL ? "" : byhost);
  |  |  ------------------
  ------------------
  314|       |		    bynick, timestr, byhost == NULL ? "" : byhost);
  315|  1.20k|	g_free(timestr);
  316|  1.20k|	g_free(params);
  317|  1.20k|}
fe-events-numeric.c:event_channel_mode:
  320|  1.07k|{
  321|  1.07k|	const char *channel;
  322|  1.07k|	char *params, *mode;
  323|       |
  324|  1.07k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (324:2): [True: 1.07k, False: 0]
  |  Branch (324:2): [True: 1.07k, False: 0]
  |  Branch (324:2): [Folded, False: 1.07k]
  ------------------
  325|       |
  326|  1.07k|	params = event_get_params(data, 3 | PARAM_FLAG_GETREST,
  ------------------
  |  |  126|  1.07k|#define PARAM_FLAG_GETREST 0x00002000
  ------------------
  327|  1.07k|				  NULL, &channel, &mode);
  328|  1.07k|	channel = get_visible_target(server, channel);
  329|  1.07k|	printformat(server, channel, MSGLEVEL_CRAP,
  ------------------
  |  |   37|  1.07k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  1.07k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  330|  1.07k|		    IRCTXT_CHANNEL_MODE, channel, g_strchomp(mode));
  331|  1.07k|	g_free(params);
  332|  1.07k|}
fe-events-numeric.c:event_channel_created:
  335|    776|{
  336|    776|	const char *channel;
  337|    776|	char *params, *createtime, *timestr;
  338|       |
  339|    776|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (339:2): [True: 776, False: 0]
  |  Branch (339:2): [True: 776, False: 0]
  |  Branch (339:2): [Folded, False: 776]
  ------------------
  340|       |
  341|    776|	params = event_get_params(data, 3, NULL, &channel, &createtime);
  342|       |
  343|    776|        timestr = my_asctime((time_t) atol(createtime));
  344|    776|	channel = get_visible_target(server, channel);
  345|    776|	printformat(server, channel, MSGLEVEL_CRAP,
  ------------------
  |  |   37|    776|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    776|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  346|    776|		    IRCTXT_CHANNEL_CREATED, channel, timestr);
  347|    776|	g_free(timestr);
  348|    776|	g_free(params);
  349|    776|}
fe-events-numeric.c:event_nowaway:
  352|  10.3k|{
  353|  10.3k|	printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_AWAY);
  ------------------
  |  |   37|  10.3k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  10.3k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  354|  10.3k|}
fe-events-numeric.c:event_unaway:
  357|  11.8k|{
  358|  11.8k|	printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_UNAWAY);
  ------------------
  |  |   37|  11.8k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  11.8k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  359|  11.8k|}
fe-events-numeric.c:event_away:
  362|      4|{
  363|      4|	char *params, *nick, *awaymsg, *recoded;
  364|       |
  365|      4|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (365:2): [True: 4, False: 0]
  |  Branch (365:2): [True: 4, False: 0]
  |  Branch (365:2): [Folded, False: 4]
  ------------------
  366|       |
  367|      4|	params = event_get_params(data, 3, NULL, &nick, &awaymsg);
  368|      4|	recoded = recode_in(SERVER(server), awaymsg, nick);
  ------------------
  |  |    9|      4|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|      4|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  369|      4|	if (!settings_get_bool("show_away_once") ||
  ------------------
  |  Branch (369:6): [True: 0, False: 4]
  ------------------
  370|      4|	    last_away_nick == NULL ||
  ------------------
  |  Branch (370:6): [True: 1, False: 3]
  ------------------
  371|      3|	    g_ascii_strcasecmp(last_away_nick, nick) != 0 ||
  ------------------
  |  Branch (371:6): [True: 1, False: 2]
  ------------------
  372|      2|	    last_away_msg == NULL ||
  ------------------
  |  Branch (372:6): [True: 0, False: 2]
  ------------------
  373|      2|	    g_ascii_strcasecmp(last_away_msg, awaymsg) != 0) {
  ------------------
  |  Branch (373:6): [True: 0, False: 2]
  ------------------
  374|       |		/* don't show the same away message
  375|       |		   from the same nick all the time */
  376|      2|		g_free_not_null(last_away_nick);
  ------------------
  |  |   64|      2|#define g_free_not_null(a) g_free(a)
  ------------------
  377|      2|		g_free_not_null(last_away_msg);
  ------------------
  |  |   64|      2|#define g_free_not_null(a) g_free(a)
  ------------------
  378|      2|		last_away_nick = g_strdup(nick);
  379|      2|		last_away_msg = g_strdup(awaymsg);
  380|       |
  381|      2|		printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|      2|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  382|      2|			    IRCTXT_NICK_AWAY, nick, recoded);
  383|      2|	}
  384|      4|	g_free(params);
  385|      4|	g_free(recoded);
  386|      4|}
fe-events-numeric.c:event_chanserv_url:
  412|     44|{
  413|     44|	const char *channel;
  414|     44|	char *params, *url;
  415|       |
  416|     44|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (416:2): [True: 44, False: 0]
  |  Branch (416:2): [True: 44, False: 0]
  |  Branch (416:2): [Folded, False: 44]
  ------------------
  417|       |
  418|     44|	params = event_get_params(data, 3, NULL, &channel, &url);
  419|     44|	channel = get_visible_target(server, channel);
  420|     44|	printformat(server, channel, MSGLEVEL_CRAP,
  ------------------
  |  |   37|     44|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|     44|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  421|     44|		    IRCTXT_CHANNEL_URL, channel, url);
  422|     44|	g_free(params);
  423|     44|}
fe-events-numeric.c:event_sent_invite:
  400|    342|{
  401|    342|        char *params, *nick, *channel;
  402|       |
  403|    342|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (403:2): [True: 342, False: 0]
  |  Branch (403:2): [True: 342, False: 0]
  |  Branch (403:2): [Folded, False: 342]
  ------------------
  404|       |
  405|    342|	params = event_get_params(data, 3, NULL, &nick, &channel);
  406|    342|	printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|    342|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    342|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  407|    342|		    IRCTXT_INVITING, nick, channel);
  408|    342|	g_free(params);
  409|    342|}
fe-events-numeric.c:event_target_unavailable:
  427|  8.73k|{
  428|  8.73k|	IRC_CHANNEL_REC *chanrec;
  429|  8.73k|	char *params, *target;
  430|       |
  431|  8.73k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (431:2): [True: 8.73k, False: 0]
  |  Branch (431:2): [True: 8.73k, False: 0]
  |  Branch (431:2): [Folded, False: 8.73k]
  ------------------
  432|       |
  433|  8.73k|	params = event_get_params(data, 2, NULL, &target);
  434|  8.73k|	if (!server_ischannel(SERVER(server), target)) {
  ------------------
  |  |   22|  8.73k|	((server)->ischannel(server, channel))
  ------------------
  |  Branch (434:6): [True: 3.69k, False: 5.04k]
  ------------------
  435|       |		/* nick unavailable */
  436|  3.69k|		printformat(server, NULL, MSGLEVEL_CRAP,
  ------------------
  |  |   37|  3.69k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  3.69k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  437|  3.69k|			    IRCTXT_NICK_UNAVAILABLE, target);
  438|  5.04k|	} else {
  439|  5.04k|		chanrec = irc_channel_find(server, target);
  ------------------
  |  |   57|  5.04k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|  5.04k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  5.04k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|  5.04k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  440|  5.04k|		if (chanrec != NULL && chanrec->joined) {
  ------------------
  |  Branch (440:7): [True: 3.10k, False: 1.94k]
  |  Branch (440:26): [True: 3.10k, False: 0]
  ------------------
  441|       |			/* dalnet - can't change nick while being banned */
  442|  3.10k|			print_event_received(server, data, nick, FALSE);
  443|  3.10k|		} else {
  444|       |			/* channel is unavailable. */
  445|  1.94k|			printformat(server, NULL, MSGLEVEL_CRAP,
  ------------------
  |  |   37|  1.94k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  1.94k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  446|  1.94k|				    IRCTXT_JOINERROR_UNAVAIL, target);
  447|  1.94k|		}
  448|  5.04k|	}
  449|       |
  450|  8.73k|	g_free(params);
  451|  8.73k|}
fe-events-numeric.c:event_no_such_nick:
  455|  1.69k|{
  456|  1.69k|	char *params, *unick;
  457|       |
  458|  1.69k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (458:2): [True: 1.69k, False: 0]
  |  Branch (458:2): [True: 1.69k, False: 0]
  |  Branch (458:2): [Folded, False: 1.69k]
  ------------------
  459|       |
  460|  1.69k|	params = event_get_params(data, 2, NULL, &unick);
  461|  1.69k|	if (!g_strcmp0(unick, "*"))
  ------------------
  |  Branch (461:6): [True: 61, False: 1.63k]
  ------------------
  462|       |		/* more information will be in the description,
  463|       |		 * e.g. * :Target left IRC. Failed to deliver: [hi] */
  464|     61|		print_event_received(server, data, nick, FALSE);
  465|  1.63k|	else
  466|  1.63k|		printformat(server, unick, MSGLEVEL_CRAP, IRCTXT_NO_SUCH_NICK, unick);
  ------------------
  |  |   37|  1.63k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  1.63k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  467|  1.69k|	g_free(params);
  468|  1.69k|}
fe-events-numeric.c:event_no_such_channel:
  471|    376|{
  472|    376|	char *params, *channel;
  473|       |
  474|    376|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (474:2): [True: 376, False: 0]
  |  Branch (474:2): [True: 376, False: 0]
  |  Branch (474:2): [Folded, False: 376]
  ------------------
  475|       |
  476|    376|	params = event_get_params(data, 2, NULL, &channel);
  477|    376|	printformat(server, channel, MSGLEVEL_CRAP,
  ------------------
  |  |   37|    376|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    376|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  478|    376|		    IRCTXT_NO_SUCH_CHANNEL, channel);
  479|    376|	g_free(params);
  480|    376|}
fe-events-numeric.c:event_too_many_channels:
  494|      4|{
  495|      4|	cannot_join(server, data, IRCTXT_JOINERROR_TOOMANY);
  496|      4|}
fe-events-numeric.c:cannot_join:
  483|  3.41k|{
  484|  3.41k|	char *params, *channel;
  485|       |
  486|  3.41k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (486:2): [True: 3.41k, False: 0]
  |  Branch (486:2): [True: 3.41k, False: 0]
  |  Branch (486:2): [Folded, False: 3.41k]
  ------------------
  487|       |
  488|  3.41k|	params = event_get_params(data, 2, NULL, &channel);
  489|  3.41k|	printformat(server, NULL, MSGLEVEL_CRAP, format, channel);
  ------------------
  |  |   37|  3.41k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  3.41k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  490|  3.41k|	g_free(params);
  491|  3.41k|}
fe-events-numeric.c:event_duplicate_channel:
  500|  2.15k|{
  501|  2.15k|	char *params, *channel, *p;
  502|       |
  503|  2.15k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (503:2): [True: 2.15k, False: 0]
  |  Branch (503:2): [True: 2.15k, False: 0]
  |  Branch (503:2): [Folded, False: 2.15k]
  ------------------
  504|       |
  505|       |	/* this new addition to ircd breaks completely with older
  506|       |	   "standards", "nick Duplicate ::!!channel ...." */
  507|  2.15k|	params = event_get_params(data, 3, NULL, NULL, &channel);
  508|  2.15k|	p = strchr(channel, ' ');
  509|  2.15k|	if (p != NULL) *p = '\0';
  ------------------
  |  Branch (509:6): [True: 0, False: 2.15k]
  ------------------
  510|       |
  511|  2.15k|	if (channel[0] == '!' && channel[1] == '!') {
  ------------------
  |  Branch (511:6): [True: 1.24k, False: 913]
  |  Branch (511:27): [True: 264, False: 979]
  ------------------
  512|    264|		printformat(server, NULL, MSGLEVEL_CRAP,
  ------------------
  |  |   37|    264|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    264|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  513|    264|			    IRCTXT_JOINERROR_DUPLICATE, channel+1);
  514|    264|	} else
  515|  1.89k|		print_event_received(server, data, nick, FALSE);
  516|       |
  517|  2.15k|	g_free(params);
  518|  2.15k|}
fe-events-numeric.c:event_channel_is_full:
  521|    202|{
  522|    202|	cannot_join(server, data, IRCTXT_JOINERROR_FULL);
  523|    202|}
fe-events-numeric.c:event_unknown_mode:
  653|    390|{
  654|    390|	char *params, *mode;
  655|       |
  656|    390|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (656:2): [True: 390, False: 0]
  |  Branch (656:2): [True: 390, False: 0]
  |  Branch (656:2): [Folded, False: 390]
  ------------------
  657|       |
  658|    390|	params = event_get_params(data, 2, NULL, &mode);
  659|    390|	printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_UNKNOWN_MODE, mode);
  ------------------
  |  |   37|    390|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    390|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  660|    390|	g_free(params);
  661|    390|}
fe-events-numeric.c:event_invite_only:
  526|    238|{
  527|    238|	cannot_join(server, data, IRCTXT_JOINERROR_INVITE);
  528|    238|}
fe-events-numeric.c:event_banned:
  531|    276|{
  532|    276|	cannot_join(server, data, IRCTXT_JOINERROR_BANNED);
  533|    276|}
fe-events-numeric.c:event_bad_channel_key:
  536|  1.94k|{
  537|  1.94k|	cannot_join(server, data, IRCTXT_JOINERROR_BAD_KEY);
  538|  1.94k|}
fe-events-numeric.c:event_bad_channel_mask:
  541|    741|{
  542|    741|	cannot_join(server, data, IRCTXT_JOINERROR_BAD_MASK);
  543|    741|}
fe-events-numeric.c:event_477:
  546|  8.24k|{
  547|       |	/* Numeric 477 can mean many things:
  548|       |	 * modeless channel, cannot join/send to channel (+r/+R/+M).
  549|       |	 * If we tried to join this channel, display the error in the
  550|       |	 * status window. Otherwise display it in the channel window.
  551|       |	 */
  552|  8.24k|	IRC_CHANNEL_REC *chanrec;
  553|  8.24k|	char *params, *channel;
  554|       |
  555|  8.24k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (555:2): [True: 8.24k, False: 0]
  |  Branch (555:2): [True: 8.24k, False: 0]
  |  Branch (555:2): [Folded, False: 8.24k]
  ------------------
  556|       |
  557|  8.24k|	params = event_get_params(data, 2, NULL, &channel);
  558|       |
  559|  8.24k|	chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|  8.24k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|  8.24k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  8.24k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|  8.24k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  560|  8.24k|	print_event_received(server, data, nick, chanrec == NULL || chanrec->joined);
  ------------------
  |  Branch (560:43): [True: 6.55k, False: 1.69k]
  |  Branch (560:62): [True: 1.69k, False: 0]
  ------------------
  561|  8.24k|	g_free(params);
  562|  8.24k|}
fe-events-numeric.c:event_489:
  565|    299|{
  566|       |	/* Numeric 489 can mean one of two things things:
  567|       |	 * cannot join to channel (secure only), or not chanop or voice.
  568|       |	 * If we tried to join this channel, display the joinerror.
  569|       |	 * Otherwise depending on the channel being joined or not
  570|       |	 * display the error in the channel or status window.
  571|       |	 */
  572|    299|	IRC_CHANNEL_REC *chanrec;
  573|    299|	char *params, *channel;
  574|       |
  575|    299|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (575:2): [True: 299, False: 0]
  |  Branch (575:2): [True: 299, False: 0]
  |  Branch (575:2): [Folded, False: 299]
  ------------------
  576|       |
  577|    299|	params = event_get_params(data, 2, NULL, &channel);
  578|       |
  579|    299|	chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|    299|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|    299|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    299|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|    299|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  580|    299|	if (chanrec != NULL && !chanrec->joined) {
  ------------------
  |  Branch (580:6): [True: 27, False: 272]
  |  Branch (580:25): [True: 0, False: 27]
  ------------------
  581|      0|		cannot_join(server, data, IRCTXT_JOINERROR_SECURE_ONLY);
  582|    299|	} else {
  583|    299|		print_event_received(server, data, nick, chanrec == NULL || chanrec->joined);
  ------------------
  |  Branch (583:44): [True: 272, False: 27]
  |  Branch (583:63): [True: 27, False: 0]
  ------------------
  584|    299|	}
  585|    299|	g_free(params);
  586|    299|}
fe-events-numeric.c:event_motd:
  751|  1.70k|{
  752|       |	/* don't ignore motd anymore after 3 seconds of connection time -
  753|       |	   we might have called /MOTD */
  754|  1.70k|	if (settings_get_bool("skip_motd") && !server->motd_got)
  ------------------
  |  Branch (754:6): [True: 0, False: 1.70k]
  |  Branch (754:40): [True: 0, False: 0]
  ------------------
  755|      0|		return;
  756|       |
  757|  1.70k|        print_event_received(server, data, nick, FALSE);
  758|  1.70k|}
fe-events-numeric.c:event_target_too_fast:
  635|     22|{
  636|       |	/* Target change too fast, could be nick or channel.
  637|       |	 * If we tried to join this channel, display the error in the
  638|       |	 * status window. Otherwise display it in the channel window.
  639|       |	 */
  640|     22|	IRC_CHANNEL_REC *chanrec;
  641|     22|	char *params, *channel;
  642|       |
  643|     22|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (643:2): [True: 22, False: 0]
  |  Branch (643:2): [True: 22, False: 0]
  |  Branch (643:2): [Folded, False: 22]
  ------------------
  644|       |
  645|     22|	params = event_get_params(data, 2, NULL, &channel);
  646|       |
  647|     22|	chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|     22|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|     22|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|     22|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|     22|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  648|     22|	print_event_received(server, data, nick, chanrec == NULL || chanrec->joined);
  ------------------
  |  Branch (648:43): [True: 22, False: 0]
  |  Branch (648:62): [True: 0, False: 0]
  ------------------
  649|     22|	g_free(params);
  650|     22|}
fe-events-numeric.c:event_help:
  589|     99|{
  590|       |	/* Common handling for umerics 704 (RPL_HELPSTART), 705 (RPL_HELPTXT),
  591|       |	 * and 706 (RPL_ENDOFHELP); sent as a reply to HELP or HELPOP command.
  592|       |	 */
  593|     99|	char *params, *topic, *help_text;
  594|       |
  595|     99|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (595:2): [True: 99, False: 0]
  |  Branch (595:2): [True: 99, False: 0]
  |  Branch (595:2): [Folded, False: 99]
  ------------------
  596|       |
  597|     99|	params = event_get_params(data, 3, NULL, &topic, &help_text);
  598|       |
  599|     99|	g_return_if_fail(help_text != NULL);
  ------------------
  |  Branch (599:2): [True: 99, False: 0]
  |  Branch (599:2): [True: 99, False: 0]
  |  Branch (599:2): [Folded, False: 99]
  ------------------
  600|       |
  601|     99|	if (help_text[0] == '\0') {
  ------------------
  |  Branch (601:6): [True: 58, False: 41]
  ------------------
  602|       |		/* Empty lines can be used by servers for styling; and we need to replace
  603|       |		 * them with something non-empty or they would be dropped when displayed.
  604|       |		 */
  605|     58|		help_text = " ";
  606|     58|	}
  607|       |
  608|     99|	printformat(server, NULL, MSGLEVEL_CRAP, formatnum, topic, help_text);
  ------------------
  |  |   37|     99|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|     99|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  609|     99|	g_free(params);
  610|     99|}
fe-events-numeric.c:event_helptxt:
  620|     23|{
  621|       |	/* Numeric 705 (RPL_HELPTXT), sent as a reply to HELP or HELPOP command.
  622|       |	 */
  623|     23|	event_help(server, IRCTXT_SERVER_HELP_TXT, data);
  624|     23|}
fe-events-numeric.c:event_endofhelp:
  627|     76|{
  628|       |	/* Numeric 706 (RPL_ENDOFHELP), sent as a reply to HELP or HELPOP command.
  629|       |	 */
  630|     76|	event_help(server, IRCTXT_SERVER_END_OF_HELP, data);
  631|     76|}
fe-events-numeric.c:event_numeric:
  665|  95.6k|{
  666|  95.6k|	data = strchr(data, ' ');
  667|  95.6k|	if (data != NULL)
  ------------------
  |  Branch (667:6): [True: 69.2k, False: 26.4k]
  ------------------
  668|  69.2k|                print_event_received(server, data+1, nick, FALSE);
  669|  95.6k|}
fe-events-numeric.c:event_received:
  719|  46.3k|{
  720|       |        print_event_received(server, data, nick, FALSE);
  721|  46.3k|}
fe-events-numeric.c:event_target_received:
  725|  2.05k|{
  726|       |        print_event_received(server, data, nick, TRUE);
  727|  2.05k|}

fe_events_init:
  489|      2|{
  490|      2|	signal_add("event privmsg", (SIGNAL_FUNC) event_privmsg);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  491|      2|	signal_add("ctcp action", (SIGNAL_FUNC) ctcp_action);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  492|      2|	signal_add("event notice", (SIGNAL_FUNC) event_notice);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  493|      2|	signal_add("event join", (SIGNAL_FUNC) event_join);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  494|      2|	signal_add("event chghost", (SIGNAL_FUNC) event_chghost);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  495|      2|	signal_add("event account", (SIGNAL_FUNC) event_account);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  496|      2|	signal_add("event part", (SIGNAL_FUNC) event_part);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  497|      2|	signal_add("event quit", (SIGNAL_FUNC) event_quit);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  498|      2|	signal_add("event kick", (SIGNAL_FUNC) event_kick);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  499|      2|	signal_add("event kill", (SIGNAL_FUNC) event_kill);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  500|      2|	signal_add("event nick", (SIGNAL_FUNC) event_nick);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  501|      2|	signal_add("event mode", (SIGNAL_FUNC) event_mode);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  502|      2|	signal_add("event pong", (SIGNAL_FUNC) event_pong);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  503|      2|	signal_add("event invite", (SIGNAL_FUNC) event_invite);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  504|      2|	signal_add("event topic", (SIGNAL_FUNC) event_topic);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  505|      2|	signal_add("event error", (SIGNAL_FUNC) event_error);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  506|      2|	signal_add("event wallops", (SIGNAL_FUNC) event_wallops);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  507|      2|	signal_add("event silence", (SIGNAL_FUNC) event_silence);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  508|      2|	signal_add("event away", (SIGNAL_FUNC) event_away_notify);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  509|       |
  510|      2|	signal_add("default event", (SIGNAL_FUNC) event_received);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  511|       |
  512|      2|	signal_add("channel sync", (SIGNAL_FUNC) channel_sync);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  513|      2|	signal_add("event connected", (SIGNAL_FUNC) event_connected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  514|      2|	signal_add("nickfind event whois", (SIGNAL_FUNC) event_nickfind_whois);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  515|      2|	signal_add("ban type changed", (SIGNAL_FUNC) event_ban_type_changed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  516|      2|	signal_add("whois event not found", (SIGNAL_FUNC) sig_whois_event_not_found);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  517|       |	signal_add("whowas event end", (SIGNAL_FUNC) sig_whowas_event_end);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  518|      2|}
fe-events.c:event_privmsg:
   48|  17.2k|{
   49|  17.2k|	char *params, *target, *msg, *recoded;
   50|       |
   51|  17.2k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (51:2): [True: 17.2k, False: 0]
  |  Branch (51:2): [True: 17.2k, False: 0]
  |  Branch (51:2): [Folded, False: 17.2k]
  ------------------
   52|       |
   53|  17.2k|	params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &msg);
  ------------------
  |  |  126|  17.2k|#define PARAM_FLAG_GETREST 0x00002000
  ------------------
   54|  17.2k|	if (nick == NULL) nick = server->real_address;
  ------------------
  |  Branch (54:6): [True: 6.17k, False: 11.1k]
  ------------------
   55|  17.2k|	if (addr == NULL) addr = "";
  ------------------
  |  Branch (55:6): [True: 11.7k, False: 5.49k]
  ------------------
   56|       |
   57|  17.2k|	if (fe_channel_is_opchannel(server, target)) {
  ------------------
  |  Branch (57:6): [True: 2.60k, False: 14.6k]
  ------------------
   58|       |		/* Hybrid 6 feature, send msg to all ops in channel */
   59|  2.60k|		const char *cleantarget = fe_channel_skip_prefix(server, target);
   60|  2.60k|		recoded = recode_in(SERVER(server), msg, cleantarget);
  ------------------
  |  |    9|  2.60k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  2.60k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
   61|       |
   62|       |		/* pass the original target to the signal, with the @+ here
   63|       |		 * the other one is only needed for recode_in*/
   64|  2.60k|		signal_emit("message irc op_public", 5,
   65|  2.60k|			    server, recoded, nick, addr, target);
   66|  14.6k|	} else {
   67|  14.6k|		recoded = recode_in(SERVER(server), msg, server_ischannel(SERVER(server), target) ? target : nick);
  ------------------
  |  |    9|  14.6k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  14.6k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
              		recoded = recode_in(SERVER(server), msg, server_ischannel(SERVER(server), target) ? target : nick);
  ------------------
  |  |   22|  14.6k|	((server)->ischannel(server, channel))
  |  |  ------------------
  |  |  |  Branch (22:2): [True: 4.87k, False: 9.80k]
  |  |  ------------------
  ------------------
   68|  14.6k|		signal_emit(server_ischannel(SERVER(server), target) ?
  ------------------
  |  |   22|  14.6k|	((server)->ischannel(server, channel))
  |  |  ------------------
  |  |  |  Branch (22:2): [True: 4.87k, False: 9.80k]
  |  |  ------------------
  ------------------
   69|  9.80k|			    "message public" : "message private", 5,
   70|  14.6k|			    server, recoded, nick, addr,
   71|  14.6k|			    get_visible_target(server, target));
   72|  14.6k|	}
   73|       |
   74|  17.2k|	g_free(params);
   75|  17.2k|	g_free(recoded);
   76|  17.2k|}
fe-events.c:ctcp_action:
   81|  3.77k|{
   82|  3.77k|	char *recoded;
   83|       |
   84|  3.77k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (84:2): [True: 3.77k, False: 0]
  |  Branch (84:2): [True: 3.77k, False: 0]
  |  Branch (84:2): [Folded, False: 3.77k]
  ------------------
   85|  3.77k|	recoded = recode_in(SERVER(server), data, target);
  ------------------
  |  |    9|  3.77k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  3.77k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
   86|  3.77k|	signal_emit("message irc action", 5,
   87|  3.77k|		    server, recoded, nick, addr,
   88|  3.77k|		    get_visible_target(server, target));
   89|  3.77k|	g_free(recoded);
   90|  3.77k|}
fe-events.c:event_notice:
   94|  1.12k|{
   95|  1.12k|	char *params, *target, *msg, *recoded;
   96|       |
   97|  1.12k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (97:2): [True: 1.12k, False: 0]
  |  Branch (97:2): [True: 1.12k, False: 0]
  |  Branch (97:2): [Folded, False: 1.12k]
  ------------------
   98|       |
   99|  1.12k|	params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &msg);
  ------------------
  |  |  126|  1.12k|#define PARAM_FLAG_GETREST 0x00002000
  ------------------
  100|  1.12k|	recoded = recode_in(SERVER(server), msg, target);
  ------------------
  |  |    9|  1.12k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  1.12k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  101|  1.12k|	if (nick == NULL) {
  ------------------
  |  Branch (101:6): [True: 173, False: 951]
  ------------------
  102|    173|		nick = server->real_address == NULL ?
  ------------------
  |  Branch (102:10): [True: 10, False: 163]
  ------------------
  103|     10|			server->connrec->address :
  104|    173|			server->real_address;
  105|    173|	}
  106|       |
  107|  1.12k|	signal_emit("message irc notice", 5, server, recoded, nick, addr,
  108|  1.12k|		    get_visible_target(server, target));
  109|  1.12k|	g_free(params);
  110|  1.12k|	g_free(recoded);
  111|  1.12k|}
fe-events.c:event_join:
  115|   153k|{
  116|   153k|	char *params, *channel, *tmp, *account, *realname;
  117|       |
  118|   153k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (118:2): [True: 153k, False: 0]
  |  Branch (118:2): [True: 153k, False: 0]
  |  Branch (118:2): [Folded, False: 153k]
  ------------------
  119|       |
  120|   153k|	params = event_get_params(data, 3, &channel, &account, &realname);
  121|   153k|	tmp = strchr(channel, 7); /* ^G does something weird.. */
  122|   153k|	if (tmp != NULL) *tmp = '\0';
  ------------------
  |  Branch (122:6): [True: 547, False: 152k]
  ------------------
  123|       |
  124|   153k|	signal_emit("message join", 6, server,
  125|   153k|		    get_visible_target(server, channel), nick, addr, account, realname);
  126|   153k|	g_free(params);
  127|   153k|}
fe-events.c:event_chghost:
  131|  4.12k|{
  132|  4.12k|	char *params, *user, *host, *new_addr;
  133|       |
  134|  4.12k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (134:2): [True: 4.12k, False: 0]
  |  Branch (134:2): [True: 4.12k, False: 0]
  |  Branch (134:2): [Folded, False: 4.12k]
  ------------------
  135|       |
  136|  4.12k|	params = event_get_params(data, 2, &user, &host);
  137|  4.12k|	new_addr = g_strconcat(user, "@", host, NULL);
  138|       |
  139|  4.12k|	signal_emit("message host_changed", 4, server, nick, new_addr, addr);
  140|       |
  141|  4.12k|	g_free(new_addr);
  142|  4.12k|	g_free(params);
  143|  4.12k|}
fe-events.c:event_account:
  147|     48|{
  148|     48|	char *params, *account;
  149|       |
  150|     48|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (150:2): [True: 48, False: 0]
  |  Branch (150:2): [True: 48, False: 0]
  |  Branch (150:2): [Folded, False: 48]
  ------------------
  151|       |
  152|     48|	params = event_get_params(data, 1, &account);
  153|       |
  154|     48|	signal_emit("message account_changed", 4, server, nick, addr, account);
  155|       |
  156|     48|	g_free(params);
  157|     48|}
fe-events.c:event_part:
  161|  4.13k|{
  162|  4.13k|	char *params, *channel, *reason, *recoded;
  163|       |
  164|  4.13k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (164:2): [True: 4.13k, False: 0]
  |  Branch (164:2): [True: 4.13k, False: 0]
  |  Branch (164:2): [Folded, False: 4.13k]
  ------------------
  165|       |
  166|  4.13k|	params = event_get_params(data, 2 | PARAM_FLAG_GETREST,
  ------------------
  |  |  126|  4.13k|#define PARAM_FLAG_GETREST 0x00002000
  ------------------
  167|  4.13k|				  &channel, &reason);
  168|       |	recoded = recode_in(SERVER(server), reason, channel);
  ------------------
  |  |    9|  4.13k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  4.13k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  169|  4.13k|	signal_emit("message part", 5, server,
  170|  4.13k|		    get_visible_target(server, channel), nick, addr, recoded);
  171|  4.13k|	g_free(params);
  172|  4.13k|	g_free(recoded);
  173|  4.13k|}
fe-events.c:event_quit:
  177|  2.99k|{
  178|  2.99k|	char *recoded;
  179|       |
  180|  2.99k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (180:2): [True: 2.99k, False: 0]
  |  Branch (180:2): [True: 2.99k, False: 0]
  |  Branch (180:2): [Folded, False: 2.99k]
  ------------------
  181|       |
  182|  2.99k|	if (*data == ':') data++; /* quit message */
  ------------------
  |  Branch (182:6): [True: 24, False: 2.97k]
  ------------------
  183|       |	recoded = recode_in(SERVER(server), data, nick);
  ------------------
  |  |    9|  2.99k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  2.99k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  184|  2.99k|	signal_emit("message quit", 4, server, nick, addr, recoded);
  185|  2.99k|	g_free(recoded);
  186|  2.99k|}
fe-events.c:event_kick:
  190|    543|{
  191|    543|	char *params, *channel, *nick, *reason, *recoded;
  192|       |
  193|    543|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (193:2): [True: 543, False: 0]
  |  Branch (193:2): [True: 543, False: 0]
  |  Branch (193:2): [Folded, False: 543]
  ------------------
  194|       |
  195|    543|	params = event_get_params(data, 3 | PARAM_FLAG_GETREST,
  ------------------
  |  |  126|    543|#define PARAM_FLAG_GETREST 0x00002000
  ------------------
  196|    543|				  &channel, &nick, &reason);
  197|       |	recoded = recode_in(SERVER(server), reason, channel);
  ------------------
  |  |    9|    543|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|    543|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  198|    543|	signal_emit("message kick", 6,
  199|    543|		    server, get_visible_target(server, channel),
  200|    543|		    nick, kicker, addr, recoded);
  201|    543|	g_free(params);
  202|    543|	g_free(recoded);
  203|    543|}
fe-events.c:event_nick:
  239|  18.2k|{
  240|  18.2k|	char *params, *newnick;
  241|       |
  242|  18.2k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (242:2): [True: 18.2k, False: 0]
  |  Branch (242:2): [True: 18.2k, False: 0]
  |  Branch (242:2): [Folded, False: 18.2k]
  ------------------
  243|       |
  244|  18.2k|	params = event_get_params(data, 1, &newnick);
  245|       |
  246|       |	/* NOTE: server->nick was already changed in irc/core/irc-nicklist.c */
  247|  18.2k|	signal_emit(g_ascii_strcasecmp(newnick, server->nick) == 0 ?
  ------------------
  |  Branch (247:14): [True: 8.13k, False: 10.0k]
  ------------------
  248|  10.0k|		    "message own_nick" : "message nick", 4,
  249|  18.2k|		    server, newnick, sender, addr);
  250|       |
  251|  18.2k|	g_free(params);
  252|  18.2k|}
fe-events.c:event_mode:
  256|  35.9k|{
  257|  35.9k|	char *params, *channel, *mode;
  258|       |
  259|  35.9k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (259:2): [True: 35.9k, False: 0]
  |  Branch (259:2): [True: 35.9k, False: 0]
  |  Branch (259:2): [Folded, False: 35.9k]
  ------------------
  260|       |
  261|  35.9k|	params = event_get_params(data, 2 | PARAM_FLAG_GETREST,
  ------------------
  |  |  126|  35.9k|#define PARAM_FLAG_GETREST 0x00002000
  ------------------
  262|  35.9k|				  &channel, &mode);
  263|       |
  264|  35.9k|	signal_emit("message irc mode", 5,
  265|  35.9k|		    server, get_visible_target(server, channel),
  266|  35.9k|		    nick, addr, g_strchomp(mode));
  267|  35.9k|	g_free(params);
  268|  35.9k|}
fe-events.c:event_pong:
  286|     61|{
  287|     61|	char *params, *host, *reply;
  288|       |
  289|     61|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (289:2): [True: 61, False: 0]
  |  Branch (289:2): [True: 61, False: 0]
  |  Branch (289:2): [Folded, False: 61]
  ------------------
  290|     61|	if (nick == NULL) nick = server->real_address;
  ------------------
  |  Branch (290:6): [True: 61, False: 0]
  ------------------
  291|       |
  292|     61|	params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &host, &reply);
  ------------------
  |  |  126|     61|#define PARAM_FLAG_GETREST 0x00002000
  ------------------
  293|     61|	printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_PONG, host, reply);
  ------------------
  |  |   37|     61|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|     61|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  294|     61|	g_free(params);
  295|     61|}
fe-events.c:event_invite:
  299|  7.85k|{
  300|  7.85k|	char *params, *invited, *channel;
  301|       |
  302|  7.85k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (302:2): [True: 7.85k, False: 0]
  |  Branch (302:2): [True: 7.85k, False: 0]
  |  Branch (302:2): [Folded, False: 7.85k]
  ------------------
  303|       |
  304|  7.85k|	params = event_get_params(data, 2, &invited, &channel);
  305|  7.85k|	if (server->nick_comp_func(invited, server->nick) == 0) {
  ------------------
  |  Branch (305:6): [True: 5.30k, False: 2.54k]
  ------------------
  306|  5.30k|		signal_emit("message invite", 4,
  307|  5.30k|			    server, get_visible_target(server, channel), nick, addr);
  308|  5.30k|	} else {
  309|  2.54k|		signal_emit("message invite_other", 5,
  310|  2.54k|			    server, get_visible_target(server, channel), invited, nick, addr);
  311|  2.54k|	}
  312|  7.85k|	g_free(params);
  313|  7.85k|}
fe-events.c:event_error:
  332|    310|{
  333|    310|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (333:2): [True: 310, False: 0]
  |  Branch (333:2): [True: 310, False: 0]
  |  Branch (333:2): [Folded, False: 310]
  ------------------
  334|       |
  335|    310|	if (*data == ':') data++;
  ------------------
  |  Branch (335:6): [True: 292, False: 18]
  ------------------
  336|    310|	printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_ERROR, data);
  ------------------
  |  |   37|    310|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    310|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  337|    310|}
fe-events.c:event_wallops:
  340|    128|{
  341|    128|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (341:2): [True: 128, False: 0]
  |  Branch (341:2): [True: 128, False: 0]
  |  Branch (341:2): [Folded, False: 128]
  ------------------
  342|       |
  343|    128|	if (*data == ':') data++;
  ------------------
  |  Branch (343:6): [True: 126, False: 2]
  ------------------
  344|    128|	if (ignore_check(SERVER(server), nick, addr, NULL, data, MSGLEVEL_WALLOPS))
  ------------------
  |  |    9|    128|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|    128|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  |  Branch (344:6): [True: 0, False: 128]
  ------------------
  345|      0|		return;
  346|       |
  347|    128|	if (g_ascii_strncasecmp(data, "\001ACTION ", 8) != 0)
  ------------------
  |  Branch (347:6): [True: 26, False: 102]
  ------------------
  348|     26|		printformat(server, NULL, MSGLEVEL_WALLOPS, IRCTXT_WALLOPS, nick, data);
  ------------------
  |  |   37|     26|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|     26|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  349|    102|	else {
  350|       |		/* Action in WALLOP */
  351|    102|		int len;
  352|    102|		char *tmp;
  353|       |
  354|    102|		tmp = g_strdup(data+8);
  355|    102|		len = strlen(tmp);
  356|    102|		if (len >= 1 && tmp[len-1] == 1) tmp[len-1] = '\0';
  ------------------
  |  Branch (356:7): [True: 102, False: 0]
  |  Branch (356:19): [True: 0, False: 102]
  ------------------
  357|    102|		printformat(server, NULL, MSGLEVEL_WALLOPS, IRCTXT_ACTION_WALLOPS, nick, tmp);
  ------------------
  |  |   37|    102|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    102|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  358|    102|		g_free(tmp);
  359|    102|	}
  360|    128|}
fe-events.c:event_silence:
  363|  1.19k|{
  364|  1.19k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (364:2): [True: 1.19k, False: 0]
  |  Branch (364:2): [True: 1.19k, False: 0]
  |  Branch (364:2): [Folded, False: 1.19k]
  ------------------
  365|       |
  366|  1.19k|	g_return_if_fail(*data == '+' || *data == '-');
  ------------------
  |  Branch (366:2): [True: 0, False: 1.19k]
  |  Branch (366:2): [True: 758, False: 439]
  |  Branch (366:2): [True: 758, False: 439]
  |  Branch (366:2): [Folded, False: 758]
  ------------------
  367|       |
  368|    758|	printformat(server, NULL, MSGLEVEL_CRAP, *data == '+' ? IRCTXT_SILENCED : IRCTXT_UNSILENCED, data+1);
  ------------------
  |  |   37|  1.51k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    758|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |  |  Branch (37:57): [True: 0, False: 758]
  |  |  ------------------
  ------------------
  369|    758|}
fe-events.c:event_away_notify:
  272|    198|{
  273|    198|	char *params, *awaymsg;
  274|       |
  275|    198|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (275:2): [True: 198, False: 0]
  |  Branch (275:2): [True: 198, False: 0]
  |  Branch (275:2): [Folded, False: 198]
  ------------------
  276|       |
  277|    198|	params = event_get_params(data, 1 | PARAM_FLAG_GETREST,
  ------------------
  |  |  126|    198|#define PARAM_FLAG_GETREST 0x00002000
  ------------------
  278|    198|				  &awaymsg);
  279|       |
  280|    198|	signal_emit("message away_notify", 4,
  281|    198|		    server, nick, addr, awaymsg);
  282|    198|	g_free(params);
  283|    198|}
fe-events.c:event_received:
  478|   255k|{
  479|   255k|	if (!i_isdigit(*data)) {
  ------------------
  |  |   79|   255k|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (479:6): [True: 159k, False: 95.6k]
  ------------------
  480|   159k|		printtext(server, NULL, MSGLEVEL_CRAP, "%s", data);
  481|   159k|		return;
  482|   159k|	}
  483|       |
  484|       |	/* numeric event. */
  485|  95.6k|        signal_emit("default event numeric", 4, server, data, nick, addr);
  486|  95.6k|}
fe-events.c:event_connected:
  382|  21.8k|{
  383|  21.8k|	const char *nick;
  384|       |
  385|  21.8k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (385:2): [True: 21.8k, False: 0]
  |  Branch (385:2): [True: 21.8k, False: 0]
  |  Branch (385:2): [Folded, False: 21.8k]
  ------------------
  386|       |
  387|  21.8k|        nick = server->connrec->nick;
  388|  21.8k|	if (g_ascii_strcasecmp(server->nick, nick) == 0)
  ------------------
  |  Branch (388:6): [True: 1.80k, False: 19.9k]
  ------------------
  389|  1.80k|		return;
  390|       |
  391|       |	/* someone has our nick, find out who. */
  392|  19.9k|	server_redirect_event(server, "whois", 1, nick, TRUE, NULL,
  393|  19.9k|			      "event 311", "nickfind event whois",
  394|       |			      "", "event empty", NULL);
  395|  19.9k|	irc_send_cmdv(server, "WHOIS %s", nick);
  396|  19.9k|}
fe-events.c:event_nickfind_whois:
  399|  1.57k|{
  400|  1.57k|	char *params, *nick, *user, *host, *realname;
  401|       |
  402|  1.57k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (402:2): [True: 1.57k, False: 0]
  |  Branch (402:2): [True: 1.57k, False: 0]
  |  Branch (402:2): [Folded, False: 1.57k]
  ------------------
  403|       |
  404|  1.57k|	params = event_get_params(data, 6, NULL, &nick, &user, &host, NULL, &realname);
  405|  1.57k|	printformat(server, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_YOUR_NICK_OWNED, nick, user, host, realname);
  ------------------
  |  |   37|  1.57k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  1.57k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  406|  1.57k|	g_free(params);
  407|  1.57k|}

fe_channel_is_opchannel:
   35|  17.2k|{
   36|  17.2k|	const char *statusmsg;
   37|       |
   38|       |	/* Quick check */
   39|  17.2k|	if (server == NULL || server->prefix[(int)(unsigned char)*target] == 0)
  ------------------
  |  Branch (39:6): [True: 0, False: 17.2k]
  |  Branch (39:24): [True: 14.4k, False: 2.78k]
  ------------------
   40|  14.4k|		return FALSE;
   41|       |
   42|  2.78k|	statusmsg = g_hash_table_lookup(server->isupport, "statusmsg");
   43|  2.78k|	if (statusmsg == NULL)
  ------------------
  |  Branch (43:6): [True: 2.78k, False: 0]
  ------------------
   44|  2.78k|		statusmsg = "@";
   45|       |
   46|       |	return strchr(statusmsg, *target) != NULL;
   47|  17.2k|}
fe_channel_skip_prefix:
   50|  11.7k|{
   51|  11.7k|	const char *statusmsg;
   52|       |
   53|       |	/* Quick check */
   54|  11.7k|	if (server == NULL || server->prefix[(int)(unsigned char)*target] == 0)
  ------------------
  |  Branch (54:6): [True: 0, False: 11.7k]
  |  Branch (54:24): [True: 6.47k, False: 5.28k]
  ------------------
   55|  6.47k|		return target;
   56|       |
   57|       |	/* Exit early if target doesn't name a channel */
   58|  5.28k|	if (server_ischannel(SERVER(server), target) == FALSE)
  ------------------
  |  |   22|  5.28k|	((server)->ischannel(server, channel))
  ------------------
  |  Branch (58:6): [True: 5.21k, False: 68]
  ------------------
   59|  5.21k|		return target;
   60|       |
   61|     68|	statusmsg = g_hash_table_lookup(server->isupport, "statusmsg");
   62|       |
   63|       |	/* Hack: for bahamut 1.4 which sends neither STATUSMSG nor
   64|       |	 * WALLCHOPS in 005 */
   65|     68|	if (statusmsg == NULL)
  ------------------
  |  Branch (65:6): [True: 68, False: 0]
  ------------------
   66|     68|		statusmsg = "@";
   67|       |
   68|       |	/* Strip the leading statusmsg prefixes */
   69|     68|	while (strchr(statusmsg, *target) != NULL) {
  ------------------
  |  Branch (69:9): [True: 0, False: 68]
  ------------------
   70|      0|		target++;
   71|      0|	}
   72|       |
   73|     68|	return target;
   74|  5.28k|}
time_ago:
   78|  3.87k|{
   79|  3.87k|	static char ret[128];
   80|  3.87k|	long unsigned years, weeks, days, hours, minutes;
   81|       |
   82|  3.87k|	seconds = time(NULL) - seconds;
   83|       |
   84|  3.87k|	years = seconds / (86400 * 365);
   85|  3.87k|	seconds %= (86400 * 365);
   86|  3.87k|	weeks = seconds / 604800;
   87|  3.87k|	days = (seconds / 86400) % 7;
   88|  3.87k|	hours = (seconds / 3600) % 24;
   89|  3.87k|	minutes = (seconds / 60) % 60;
   90|  3.87k|	seconds %= 60;
   91|       |
   92|  3.87k|	if (years)
  ------------------
  |  Branch (92:6): [True: 3.87k, False: 0]
  ------------------
   93|  3.87k|		snprintf(ret, sizeof(ret), "%luy %luw %lud", years, weeks, days);
   94|      0|	else if (weeks)
  ------------------
  |  Branch (94:11): [True: 0, False: 0]
  ------------------
   95|      0|		snprintf(ret, sizeof(ret), "%luw %lud %luh", weeks, days, hours);
   96|      0|	else if (days)
  ------------------
  |  Branch (96:11): [True: 0, False: 0]
  ------------------
   97|      0|		snprintf(ret, sizeof(ret), "%lud %luh %lum", days, hours, minutes);
   98|      0|	else if (hours)
  ------------------
  |  Branch (98:11): [True: 0, False: 0]
  ------------------
   99|      0|		snprintf(ret, sizeof(ret), "%luh %lum", hours, minutes);
  100|      0|	else if (minutes)
  ------------------
  |  Branch (100:11): [True: 0, False: 0]
  ------------------
  101|      0|		snprintf(ret, sizeof(ret), "%lum %lus", minutes, (long unsigned) seconds);
  102|      0|	else
  103|      0|		snprintf(ret, sizeof(ret), "%lus", (long unsigned) seconds);
  104|       |
  105|  3.87k|	return ret;
  106|  3.87k|}
fe_irc_channels_init:
  134|      2|{
  135|      2|	signal_add("channel rejoin new", (SIGNAL_FUNC) sig_channel_rejoin);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  136|       |	signal_add_first("event 470", (SIGNAL_FUNC) sig_event_forward);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  137|      2|}
fe-irc-channels.c:sig_event_forward:
  118|  14.1k|{
  119|  14.1k|	IRC_CHANNEL_REC *channel;
  120|  14.1k|	char *params, *from, *to;
  121|       |
  122|  14.1k|	params = event_get_params(data, 3, NULL, &from, &to);
  123|  14.1k|	if (from != NULL && to != NULL && server_ischannel(server, from) && server_ischannel(server, to)) {
  ------------------
  |  |   22|  28.2k|	((server)->ischannel(server, channel))
  |  |  ------------------
  |  |  |  Branch (22:2): [True: 9.08k, False: 5.05k]
  |  |  ------------------
  ------------------
              	if (from != NULL && to != NULL && server_ischannel(server, from) && server_ischannel(server, to)) {
  ------------------
  |  |   22|  9.08k|	((server)->ischannel(server, channel))
  |  |  ------------------
  |  |  |  Branch (22:2): [True: 8.44k, False: 640]
  |  |  ------------------
  ------------------
  |  Branch (123:6): [True: 14.1k, False: 0]
  |  Branch (123:22): [True: 14.1k, False: 0]
  ------------------
  124|  8.44k|		channel = irc_channel_find(server, from);
  ------------------
  |  |   57|  8.44k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|  8.44k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  8.44k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|  8.44k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  125|  8.44k|		if (channel != NULL && irc_channel_find(server, to) == NULL) {
  ------------------
  |  |   57|  4.27k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|  4.27k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  4.27k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|  4.27k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (125:7): [True: 4.27k, False: 4.17k]
  |  Branch (125:26): [True: 3.62k, False: 644]
  ------------------
  126|  3.62k|			window_bind_add(window_item_window(channel),
  ------------------
  |  |   15|  3.62k|	((WINDOW_REC *) ((WI_ITEM_REC *) (item))->window)
  ------------------
  127|  3.62k|					server->tag, to);
  128|  3.62k|		}
  129|  8.44k|	}
  130|  14.1k|	g_free(params);
  131|  14.1k|}

fe_irc_commands_init:
  421|      2|{
  422|      2|	command_bind_irc_last("me", NULL, (SIGNAL_FUNC) cmd_me);
  ------------------
  |  |   11|      2|        command_bind_proto_last(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   83|      2|#define command_bind_proto_last(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto_last(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  423|      2|	command_bind_irc_last("action", NULL, (SIGNAL_FUNC) cmd_action);
  ------------------
  |  |   11|      2|        command_bind_proto_last(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   83|      2|#define command_bind_proto_last(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto_last(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  424|      2|	command_bind_irc("notice", NULL, (SIGNAL_FUNC) cmd_notice);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  425|      2|	command_bind_irc("ctcp", NULL, (SIGNAL_FUNC) cmd_ctcp);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  426|      2|	command_bind_irc("nctcp", NULL, (SIGNAL_FUNC) cmd_nctcp);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  427|      2|	command_bind_irc("wall", NULL, (SIGNAL_FUNC) cmd_wall);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  428|      2|	command_bind_irc("ban", NULL, (SIGNAL_FUNC) cmd_ban);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  429|      2|	command_bind_irc("ver", NULL, (SIGNAL_FUNC) cmd_ver);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  430|      2|	command_bind_irc("topic", NULL, (SIGNAL_FUNC) cmd_topic);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  431|      2|	command_bind_irc("ts", NULL, (SIGNAL_FUNC) cmd_ts);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  432|      2|	command_bind_irc("oper", NULL, (SIGNAL_FUNC) cmd_oper);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  433|       |	command_bind_irc("sethost", NULL, (SIGNAL_FUNC) cmd_sethost);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  434|      2|}

fe_irc_messages_init:
  362|      2|{
  363|      2|	settings_add_bool("misc", "notice_channel_context", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  364|       |
  365|      2|        signal_add_last("message own_public", (SIGNAL_FUNC) sig_message_own_public);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  366|      2|        signal_add_last("message irc op_public", (SIGNAL_FUNC) sig_message_irc_op_public);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  367|      2|        signal_add_last("message irc own_wall", (SIGNAL_FUNC) sig_message_own_wall);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  368|      2|        signal_add_last("message irc own_action", (SIGNAL_FUNC) sig_message_own_action);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  369|      2|        signal_add_last("message irc action", (SIGNAL_FUNC) sig_message_irc_action);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  370|      2|        signal_add_last("message irc own_notice", (SIGNAL_FUNC) sig_message_own_notice);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  371|      2|        signal_add_last("message irc notice", (SIGNAL_FUNC) sig_message_irc_notice);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  372|      2|        signal_add_last("message irc own_ctcp", (SIGNAL_FUNC) sig_message_own_ctcp);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  373|       |        signal_add_last("message irc ctcp", (SIGNAL_FUNC) sig_message_irc_ctcp);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  374|      2|}
fe-irc-messages.c:sig_message_irc_op_public:
   75|  2.60k|{
   76|  2.60k|	CHANNEL_REC *chanrec;
   77|  2.60k|	char *nickmode, *optarget, *prefix, *color, *freemsg = NULL;
   78|  2.60k|	const char *cleantarget;
   79|  2.60k|	int for_me, level;
   80|  2.60k|	HILIGHT_REC *hilight;
   81|  2.60k|	TEXT_DEST_REC dest;
   82|       |
   83|       |	/* only skip here so the difference can be stored in prefix */
   84|  2.60k|	cleantarget = fe_channel_skip_prefix(IRC_SERVER(server), target);
  ------------------
  |  |   34|  2.60k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  ------------------
  |  |  |  |   30|  2.60k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |   31|  2.60k|				offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
   85|  2.60k|	prefix = g_strndup(target, cleantarget - target);
   86|       |
   87|       |	/* and clean the rest here */
   88|  2.60k|	cleantarget = get_visible_target(IRC_SERVER(server), cleantarget);
  ------------------
  |  |   34|  2.60k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  ------------------
  |  |  |  |   30|  2.60k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |   31|  2.60k|				offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
   89|       |
   90|  2.60k|	chanrec = channel_find(server, cleantarget);
   91|       |
   92|  2.60k|	nickmode = channel_get_nickmode(chanrec, nick);
   93|       |
   94|  2.60k|	optarget = g_strconcat(prefix, cleantarget, NULL);
   95|       |
   96|       |	/* Check for hilights */
   97|  2.60k|	for_me = !settings_get_bool("hilight_nick_matches") ? FALSE :
  ------------------
  |  Branch (97:11): [True: 0, False: 2.60k]
  ------------------
   98|  2.60k|		!settings_get_bool("hilight_nick_matches_everywhere") ?
  ------------------
  |  Branch (98:3): [True: 2.60k, False: 0]
  ------------------
   99|  2.60k|		nick_match_msg(chanrec, msg, server->nick) :
  100|  2.60k|		nick_match_msg_everywhere(chanrec, msg, server->nick);
  101|  2.60k|	hilight = for_me ? NULL :
  ------------------
  |  Branch (101:12): [True: 0, False: 2.60k]
  ------------------
  102|  2.60k|		hilight_match_nick(server, cleantarget, nick, address, MSGLEVEL_PUBLIC, msg);
  103|  2.60k|	color = (hilight == NULL) ? NULL : hilight_get_color(hilight);
  ------------------
  |  Branch (103:10): [True: 2.60k, False: 0]
  ------------------
  104|       |
  105|  2.60k|	level = MSGLEVEL_PUBLIC;
  106|  2.60k|	if (for_me)
  ------------------
  |  Branch (106:6): [True: 0, False: 2.60k]
  ------------------
  107|      0|		level |= MSGLEVEL_HILIGHT;
  108|       |
  109|  2.60k|	if (ignore_check_plus(server, nick, address, cleantarget, msg, &level, TRUE)) {
  ------------------
  |  Branch (109:6): [True: 0, False: 2.60k]
  ------------------
  110|      0|		g_free(nickmode);
  111|      0|		g_free(color);
  112|      0|		g_free(optarget);
  113|      0|		g_free(prefix);
  114|      0|		return;
  115|      0|	}
  116|       |
  117|  2.60k|	if (level & MSGLEVEL_NOHILIGHT) {
  ------------------
  |  Branch (117:6): [True: 0, False: 2.60k]
  ------------------
  118|      0|		for_me = FALSE;
  119|      0|		g_free_and_null(color);
  ------------------
  |  |   67|      0|	G_STMT_START { \
  |  |   68|      0|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   69|      0|	} G_STMT_END
  ------------------
  |  Branch (119:3): [Folded, False: 0]
  ------------------
  120|      0|		level &= ~MSGLEVEL_HILIGHT;
  121|      0|	}
  122|       |
  123|  2.60k|	if (settings_get_bool("emphasis"))
  ------------------
  |  Branch (123:6): [True: 2.60k, False: 0]
  ------------------
  124|  2.60k|		msg = freemsg = expand_emphasis((WI_ITEM_REC *) chanrec, msg);
  125|       |
  126|  2.60k|	if (color != NULL) {
  ------------------
  |  Branch (126:6): [True: 0, False: 2.60k]
  ------------------
  127|      0|		format_create_dest(&dest, server, cleantarget, level, NULL);
  128|      0|		dest.address = address;
  129|      0|		dest.nick = nick;
  130|      0|		hilight_update_text_dest(&dest,hilight);
  131|      0|		printformat_module_dest("fe-common/core", &dest,
  132|      0|			TXT_PUBMSG_HILIGHT_CHANNEL,
  133|      0|			color, nick, optarget, msg, nickmode);
  134|  2.60k|	} else {
  135|  2.60k|		printformat_module("fe-common/core", server, cleantarget, level,
  136|  2.60k|			for_me ? TXT_PUBMSG_ME_CHANNEL : TXT_PUBMSG_CHANNEL,
  ------------------
  |  Branch (136:4): [True: 0, False: 2.60k]
  ------------------
  137|  2.60k|			nick, optarget, msg, nickmode);
  138|  2.60k|	}
  139|       |
  140|  2.60k|	g_free(nickmode);
  141|  2.60k|	g_free(freemsg);
  142|  2.60k|	g_free(color);
  143|  2.60k|	g_free(optarget);
  144|  2.60k|	g_free(prefix);
  145|  2.60k|}
fe-irc-messages.c:sig_message_irc_action:
  194|  3.77k|{
  195|  3.77k|	void *item;
  196|  3.77k|	const char *oldtarget;
  197|  3.77k|        char *freemsg = NULL;
  198|  3.77k|	int level;
  199|  3.77k|	int own = FALSE;
  200|       |
  201|  3.77k|	oldtarget = target;
  202|  3.77k|	target = fe_channel_skip_prefix(IRC_SERVER(server), target);
  ------------------
  |  |   34|  3.77k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  ------------------
  |  |  |  |   30|  3.77k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |   31|  3.77k|				offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  203|       |
  204|  3.77k|	level = MSGLEVEL_ACTIONS |
  205|  3.77k|		(server_ischannel(SERVER(server), target) ? MSGLEVEL_PUBLIC : MSGLEVEL_MSGS);
  ------------------
  |  |   22|  3.77k|	((server)->ischannel(server, channel))
  |  |  ------------------
  |  |  |  Branch (22:2): [True: 1.11k, False: 2.66k]
  |  |  ------------------
  ------------------
  206|       |
  207|  3.77k|	if (ignore_check_plus(SERVER(server), nick, address, target, msg, &level, TRUE))
  ------------------
  |  |    9|  3.77k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  3.77k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  |  Branch (207:6): [True: 0, False: 3.77k]
  ------------------
  208|      0|		return;
  209|       |
  210|  3.77k|	if (server_ischannel(SERVER(server), target)) {
  ------------------
  |  |   22|  3.77k|	((server)->ischannel(server, channel))
  |  |  ------------------
  |  |  |  Branch (22:2): [True: 1.11k, False: 2.66k]
  |  |  ------------------
  ------------------
  211|  1.11k|		item = channel_find(SERVER(server), target);
  ------------------
  |  |    9|  1.11k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  1.11k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  212|  2.66k|	} else {
  213|  2.66k|		own = (!g_strcmp0(nick, server->nick));
  214|  2.66k|		item = privmsg_get_query(SERVER(server), own ? target : nick, FALSE, level);
  ------------------
  |  |    9|  2.66k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  2.66k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  |  Branch (214:44): [True: 12, False: 2.65k]
  ------------------
  215|  2.66k|	}
  216|       |
  217|  3.77k|	if (settings_get_bool("emphasis"))
  ------------------
  |  Branch (217:6): [True: 3.77k, False: 0]
  ------------------
  218|  3.77k|		msg = freemsg = expand_emphasis(item, msg);
  219|       |
  220|  3.77k|	if (server_ischannel(SERVER(server), target)) {
  ------------------
  |  |   22|  3.77k|	((server)->ischannel(server, channel))
  |  |  ------------------
  |  |  |  Branch (22:2): [True: 1.11k, False: 2.66k]
  |  |  ------------------
  ------------------
  221|       |		/* channel action */
  222|  1.11k|		if (window_item_is_active(item) && target == oldtarget) {
  ------------------
  |  Branch (222:7): [True: 7, False: 1.10k]
  |  Branch (222:38): [True: 7, False: 0]
  ------------------
  223|       |			/* message to active channel in window */
  224|      7|			printformat(server, target, level,
  ------------------
  |  |   37|      7|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|      7|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  225|      7|				    IRCTXT_ACTION_PUBLIC, nick, msg);
  226|  1.10k|		} else {
  227|       |			/* message to not existing/active channel, or to @/+ */
  228|  1.10k|			printformat(server, target, level,
  ------------------
  |  |   37|  1.10k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  1.10k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  229|  1.10k|				    IRCTXT_ACTION_PUBLIC_CHANNEL,
  230|  1.10k|				    nick, oldtarget, msg);
  231|  1.10k|		}
  232|  2.66k|	} else {
  233|  2.66k|		if (own) {
  ------------------
  |  Branch (233:7): [True: 12, False: 2.65k]
  ------------------
  234|       |			/* own action bounced */
  235|     12|			printformat(server, target,
  ------------------
  |  |   37|     48|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|     12|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |  |  Branch (37:57): [True: 12, False: 0]
  |  |  |  Branch (37:57): [True: 12, False: 0]
  |  |  ------------------
  ------------------
  236|     12|				    MSGLEVEL_ACTIONS | MSGLEVEL_MSGS,
  237|     12|				    item != NULL && oldtarget == target ? IRCTXT_OWN_ACTION : IRCTXT_OWN_ACTION_TARGET,
  238|     12|				    server->nick, msg, oldtarget);
  239|  2.65k|		} else {
  240|       |			/* private action */
  241|  2.65k|			printformat(server, nick, MSGLEVEL_ACTIONS | MSGLEVEL_MSGS,
  ------------------
  |  |   37|  5.30k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  2.65k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  244|  2.65k|				    nick, address == NULL ? "" : address, msg);
  |  |  ------------------
  |  |  |  Branch (37:57): [True: 1.10k, False: 1.54k]
  |  |  ------------------
  ------------------
  242|  2.65k|				    item == NULL ? IRCTXT_ACTION_PRIVATE :
  243|  2.65k|				    IRCTXT_ACTION_PRIVATE_QUERY,
  244|  2.65k|				    nick, address == NULL ? "" : address, msg);
  245|  2.65k|		}
  246|  2.66k|	}
  247|       |
  248|  3.77k|	g_free_not_null(freemsg);
  ------------------
  |  |   64|  3.77k|#define g_free_not_null(a) g_free(a)
  ------------------
  249|  3.77k|}
fe-irc-messages.c:notice_channel_context:
  252|    935|{
  253|    935|	if (!settings_get_bool("notice_channel_context"))
  ------------------
  |  Branch (253:6): [True: 0, False: 935]
  ------------------
  254|      0|		return NULL;
  255|       |
  256|    935|	if (*msg == '[') {
  ------------------
  |  Branch (256:6): [True: 518, False: 417]
  ------------------
  257|    518|		char *end, *channel;
  258|    518|		end = strpbrk(msg, " ,]");
  259|    518|		if (end != NULL && *end == ']') {
  ------------------
  |  Branch (259:7): [True: 29, False: 489]
  |  Branch (259:22): [True: 0, False: 29]
  ------------------
  260|      0|			channel = g_strndup(msg + 1, end - msg - 1);
  261|      0|			if (server_ischannel(server, channel)) {
  ------------------
  |  |   22|      0|	((server)->ischannel(server, channel))
  |  |  ------------------
  |  |  |  Branch (22:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  262|      0|				return channel;
  263|      0|			}
  264|      0|			g_free(channel);
  265|      0|		}
  266|    518|	}
  267|    935|	return NULL;
  268|    935|}
fe-irc-messages.c:sig_message_irc_notice:
  293|  1.12k|{
  294|  1.12k|	const char *oldtarget;
  295|  1.12k|	char *context_channel;
  296|  1.12k|	int level;
  297|  1.12k|	gboolean is_public;
  298|       |
  299|  1.12k|	oldtarget = target;
  300|  1.12k|	target = fe_channel_skip_prefix(IRC_SERVER(server), target);
  ------------------
  |  |   34|  1.12k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  ------------------
  |  |  |  |   30|  1.12k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |   31|  1.12k|				offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  301|       |
  302|  1.12k|	if (address == NULL || *address == '\0') {
  ------------------
  |  Branch (302:6): [True: 189, False: 935]
  |  Branch (302:25): [True: 0, False: 935]
  ------------------
  303|    189|		level = MSGLEVEL_SNOTES;
  304|       |		/* notice from server */
  305|    189|		if (!ignore_check_plus(server, nick, "",
  ------------------
  |  Branch (305:7): [True: 189, False: 0]
  ------------------
  306|    189|				       target, msg, &level, TRUE)) {
  307|    189|			printformat(server, target, level,
  ------------------
  |  |   37|    189|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    189|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  308|    189|				    IRCTXT_NOTICE_SERVER, nick, msg);
  309|    189|		}
  310|    189|                return;
  311|    189|	}
  312|       |
  313|    935|	is_public = server_ischannel(SERVER(server), target);
  ------------------
  |  |   22|    935|	((server)->ischannel(server, channel))
  ------------------
  314|       |	/* check if this is a cnotice */
  315|    935|	context_channel = is_public ? NULL : notice_channel_context(server, msg);
  ------------------
  |  Branch (315:20): [True: 0, False: 935]
  ------------------
  316|    935|	level = (is_public || context_channel != NULL) ? MSGLEVEL_PUBNOTICES : MSGLEVEL_NOTICES;
  ------------------
  |  Branch (316:11): [True: 0, False: 935]
  |  Branch (316:24): [True: 0, False: 935]
  ------------------
  317|       |
  318|    935|	if (ignore_check_plus(server, nick, address, is_public ? target : context_channel, msg,
  ------------------
  |  Branch (318:6): [True: 0, False: 935]
  |  Branch (318:47): [True: 0, False: 935]
  ------------------
  319|    935|	                      &level, TRUE)) {
  320|      0|		g_free(context_channel);
  321|      0|		return;
  322|      0|	}
  323|       |
  324|    935|	if (is_public) {
  ------------------
  |  Branch (324:6): [True: 0, False: 935]
  ------------------
  325|       |		/* notice in some channel */
  326|      0|		char *nickmode;
  327|      0|		nickmode = channel_get_nickmode(channel_find(server, target), nick);
  328|      0|		printformat(server, target, level, IRCTXT_NOTICE_PUBLIC, nick, oldtarget, msg,
  ------------------
  |  |   37|      0|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|      0|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  329|      0|		            nickmode);
  330|    935|	} else {
  331|    935|		if (context_channel == NULL) {
  ------------------
  |  Branch (331:7): [True: 935, False: 0]
  ------------------
  332|       |			/* private notice */
  333|    935|			privmsg_get_query(SERVER(server), nick, FALSE, MSGLEVEL_NOTICES);
  ------------------
  |  |    9|    935|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|    935|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  334|    935|		}
  335|    935|		printformat(server, context_channel == NULL ? nick : context_channel, level,
  ------------------
  |  |   37|  1.87k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    935|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |  |  Branch (37:42): [True: 935, False: 0]
  |  |  ------------------
  ------------------
  336|    935|		            IRCTXT_NOTICE_PRIVATE, nick, address, msg);
  337|    935|	}
  338|    935|	g_free(context_channel);
  339|    935|}
fe-irc-messages.c:sig_message_irc_ctcp:
  352|  1.64k|{
  353|  1.64k|	const char *oldtarget;
  354|       |
  355|  1.64k|	oldtarget = target;
  356|  1.64k|	target = fe_channel_skip_prefix(server, target);
  357|  1.64k|	printformat(server, server_ischannel(SERVER(server), target) ? target : nick, MSGLEVEL_CTCPS,
  ------------------
  |  |   37|  3.28k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  1.64k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |  |  Branch (37:42): [True: 90, False: 1.55k]
  |  |  ------------------
  ------------------
  358|  1.64k|		    IRCTXT_CTCP_REQUESTED, nick, addr, cmd, data, oldtarget);
  359|  1.64k|}

fe_irc_queries_init:
  121|      2|{
  122|      2|	query_type = module_get_uniq_id_str("WINDOW ITEM TYPE", "QUERY");
  123|       |
  124|      2|	settings_add_bool("lookandfeel", "query_track_nick_changes", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  125|       |
  126|      2|	signal_add("server connected", sig_window_bound_query);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  127|       |	signal_add_first("event privmsg", (SIGNAL_FUNC) event_privmsg);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  128|      2|}
fe-irc-queries.c:sig_window_bound_query:
   97|  29.4k|{
   98|  29.4k|	GSList *wtmp, *btmp, *bounds;
   99|       |
  100|  29.4k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (100:6): [True: 0, False: 29.4k]
  ------------------
  101|      0|		return;
  102|       |
  103|   183M|	for (wtmp = windows; wtmp != NULL; wtmp = wtmp->next) {
  ------------------
  |  Branch (103:23): [True: 183M, False: 29.4k]
  ------------------
  104|   183M|		WINDOW_REC *win = wtmp->data;
  105|   183M|		bounds = g_slist_copy(win->bound_items);
  106|       |
  107|   381M|		for (btmp = bounds; btmp != NULL; btmp = btmp->next) {
  ------------------
  |  Branch (107:23): [True: 198M, False: 183M]
  ------------------
  108|   198M|			WINDOW_BIND_REC *bound = btmp->data;
  109|       |
  110|   198M|			if (bound->type == query_type &&
  ------------------
  |  Branch (110:8): [True: 0, False: 198M]
  ------------------
  111|      0|			    g_strcmp0(server->tag, bound->servertag) == 0) {
  ------------------
  |  Branch (111:8): [True: 0, False: 0]
  ------------------
  112|      0|				irc_query_create(bound->servertag, bound->name, TRUE);
  113|      0|			}
  114|   198M|		}
  115|       |
  116|   183M|		g_slist_free(bounds);
  117|   183M|	}
  118|  29.4k|}
fe-irc-queries.c:event_privmsg:
   66|  26.5k|{
   67|  26.5k|	QUERY_REC *query;
   68|       |
   69|  26.5k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (69:2): [True: 26.5k, False: 0]
  |  Branch (69:2): [True: 26.5k, False: 0]
  |  Branch (69:2): [Folded, False: 26.5k]
  ------------------
   70|       |
   71|  26.5k|	if (nick == NULL || address == NULL || server_ischannel(server, data) ||
  ------------------
  |  |   22|  35.1k|	((server)->ischannel(server, channel))
  |  |  ------------------
  |  |  |  Branch (22:2): [True: 17, False: 8.57k]
  |  |  ------------------
  ------------------
  |  Branch (71:6): [True: 9.20k, False: 17.3k]
  |  Branch (71:22): [True: 8.72k, False: 8.59k]
  ------------------
   72|  8.57k|	    !settings_get_bool("query_track_nick_changes"))
  ------------------
  |  Branch (72:6): [True: 0, False: 8.57k]
  ------------------
   73|  17.9k|                return;
   74|       |
   75|  8.57k|	query = query_find(server, nick);
   76|  8.57k|	if (query == NULL) {
  ------------------
  |  Branch (76:6): [True: 1.93k, False: 6.64k]
  ------------------
   77|       |		/* check if there's query with another nick from the same
   78|       |		   address. it was probably a nick change or reconnect to
   79|       |		   server, so rename the query. */
   80|  1.93k|		query = query_find_address(server, address);
   81|  1.93k|		if (query != NULL) {
  ------------------
  |  Branch (81:7): [True: 1.87k, False: 65]
  ------------------
   82|       |			/* make sure the old nick doesn't exist anymore */
   83|  1.87k|			if (!server_has_nick(server, query->name))
  ------------------
  |  Branch (83:8): [True: 1.65k, False: 217]
  ------------------
   84|  1.65k|				query_change_nick(query, nick);
   85|  1.87k|		}
   86|  6.64k|	} else {
   87|       |		/* process the changes to the query structure now, before the
   88|       |		 * privmsg is dispatched. */
   89|  6.64k|		if (g_strcmp0(query->name, nick) != 0)
  ------------------
  |  Branch (89:7): [True: 348, False: 6.29k]
  ------------------
   90|    348|			query_change_nick(query, nick);
   91|  6.64k|		if (address != NULL && g_strcmp0(query->address, address) != 0)
  ------------------
  |  Branch (91:7): [True: 6.64k, False: 0]
  |  Branch (91:26): [True: 1.87k, False: 4.76k]
  ------------------
   92|  1.87k|			query_change_address(query, address);
   93|  6.64k|	}
   94|  8.57k|}
fe-irc-queries.c:query_find_address:
   34|  1.93k|{
   35|  1.93k|	GSList *tmp;
   36|       |
   37|  1.93k|	g_return_val_if_fail(IS_SERVER(server), NULL);
  ------------------
  |  Branch (37:2): [True: 1.93k, False: 0]
  |  Branch (37:2): [True: 1.93k, False: 0]
  |  Branch (37:2): [True: 1.93k, False: 0]
  |  Branch (37:2): [Folded, False: 1.93k]
  ------------------
   38|       |
   39|  26.6k|	for (tmp = server->queries; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (39:30): [True: 26.5k, False: 65]
  ------------------
   40|  26.5k|		QUERY_REC *rec = tmp->data;
   41|       |
   42|  26.5k|		if (*rec->name != '=' && rec->address != NULL &&
  ------------------
  |  Branch (42:7): [True: 26.5k, False: 0]
  |  Branch (42:28): [True: 8.20k, False: 18.3k]
  ------------------
   43|  8.20k|		    g_ascii_strcasecmp(address, rec->address) == 0)
  ------------------
  |  Branch (43:7): [True: 1.87k, False: 6.33k]
  ------------------
   44|  1.87k|			return rec;
   45|  26.5k|	}
   46|       |
   47|     65|	return NULL;
   48|  1.93k|}
fe-irc-queries.c:server_has_nick:
   51|  1.87k|{
   52|  1.87k|	GSList *tmp;
   53|       |
   54|  10.9k|	for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (54:31): [True: 9.33k, False: 1.65k]
  ------------------
   55|  9.33k|		CHANNEL_REC *channel = tmp->data;
   56|       |
   57|  9.33k|		if (nicklist_find(channel, nick) != NULL)
  ------------------
  |  Branch (57:7): [True: 217, False: 9.12k]
  ------------------
   58|    217|			return TRUE;
   59|  9.33k|	}
   60|       |
   61|  1.65k|	return FALSE;
   62|  1.87k|}

get_visible_target:
   40|   232k|{
   41|   232k|	IRC_CHANNEL_REC *channel;
   42|       |
   43|   232k|	if (*target == '!') {
  ------------------
  |  Branch (43:6): [True: 116k, False: 115k]
  ------------------
   44|       |		/* visible_name of !channels is different - don't bother
   45|       |		   checking other types for now, they'll just slow up */
   46|   116k|		channel = irc_channel_find(server, target);
  ------------------
  |  |   57|   116k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|   116k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|   116k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|   116k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   47|   116k|		if (channel != NULL)
  ------------------
  |  Branch (47:7): [True: 90.4k, False: 25.9k]
  ------------------
   48|  90.4k|			return channel->visible_name;
   49|   116k|	}
   50|       |
   51|   141k|	return target;
   52|   232k|}
fe_irc_server_init:
  183|      2|{
  184|      2|	signal_add("server add fill", (SIGNAL_FUNC) sig_server_add_fill);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  185|      2|	signal_add("server waiting cap ls", (SIGNAL_FUNC) sig_server_waiting_info);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  186|      2|	command_bind("server list", NULL, (SIGNAL_FUNC) cmd_server_list);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  187|       |
  188|      2|	command_set_options("server add",
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  189|      2|	                    "-ircnet -network -cmdspeed -cmdmax -querychans starttls "
  190|      2|	                    "nostarttls disallow_starttls nodisallow_starttls cap nocap");
  191|      2|	command_set_options("server modify",
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  192|      2|	                    "-ircnet -network -cmdspeed -cmdmax -querychans starttls nostarttls "
  193|      2|	                    "disallow_starttls nodisallow_starttls cap nocap");
  194|      2|}

fe_ircnet_init:
  227|      2|{
  228|      2|	command_bind("ircnet", NULL, (SIGNAL_FUNC) cmd_network);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  229|      2|	command_bind("network", NULL, (SIGNAL_FUNC) cmd_network);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  230|      2|	command_bind("network list", NULL, (SIGNAL_FUNC) cmd_network_list);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  231|      2|	command_bind("network add", NULL, (SIGNAL_FUNC) cmd_network_add);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  232|      2|	command_bind("network modify", NULL, (SIGNAL_FUNC) cmd_network_modify);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  233|      2|	command_bind("network remove", NULL, (SIGNAL_FUNC) cmd_network_remove);
  ------------------
  |  |   73|      2|#define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               #define command_bind(a, b, c) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, -1, b, c, NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  234|       |
  235|      2|	command_set_options("network add", "-kicks -msgs -modes -whois -cmdspeed "
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  236|      2|			    "-cmdmax -nick -alternate_nick -user -realname -host -autosendcmd -querychans -usermode -sasl_mechanism -sasl_username -sasl_password");
  237|      2|	command_set_options("network modify", "-kicks -msgs -modes -whois -cmdspeed "
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  238|      2|			    "-cmdmax -nick -alternate_nick -user -realname -host -autosendcmd -querychans -usermode -sasl_mechanism -sasl_username -sasl_password");
  239|      2|}

fe_modes_init:
  218|      2|{
  219|      2|	settings_add_bool("misc", "group_multi_mode", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  220|      2|        mode_tag = -1;
  221|       |
  222|      2|	read_settings();
  223|      2|	signal_add("message irc mode", (SIGNAL_FUNC) sig_message_mode);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  224|       |	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  225|      2|}
fe-modes.c:read_settings:
  203|      2|{
  204|      2|	int old_group;
  205|       |
  206|      2|        old_group = group_multi_mode;
  207|      2|	group_multi_mode = settings_get_bool("group_multi_mode");
  208|       |
  209|      2|	if (old_group && !group_multi_mode) {
  ------------------
  |  Branch (209:6): [True: 0, False: 2]
  |  Branch (209:19): [True: 0, False: 0]
  ------------------
  210|      0|		g_source_remove(mode_tag);
  211|      0|		mode_tag = -1;
  212|      2|	} else if (!old_group && group_multi_mode) {
  ------------------
  |  Branch (212:13): [True: 2, False: 0]
  |  Branch (212:27): [True: 2, False: 0]
  ------------------
  213|       |		mode_tag = g_timeout_add(1000, (GSourceFunc) sig_check_modes, NULL);
  214|      2|	}
  215|      2|}
fe-modes.c:print_mode:
   76|  2.96k|{
   77|  2.96k|	GSList *tmp;
   78|  2.96k|	char *nicks;
   79|       |
   80|  2.96k|	if (g_slist_find(channels, rec->channel) == NULL) {
  ------------------
  |  Branch (80:6): [True: 0, False: 2.96k]
  ------------------
   81|       |		/* channel was destroyed while we were waiting.. */
   82|      0|		return;
   83|      0|	}
   84|       |
   85|  2.96k|	tmp = modes; modes = NULL;
   86|       |
   87|  2.96k|	nicks = i_slist_to_string(rec->nicks, ", ");
   88|  2.96k|	printformat(rec->channel->server, rec->channel->visible_name, rec->level,
  ------------------
  |  |   37|  2.96k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  2.96k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
   89|  2.96k|	            IRCTXT_CHANMODE_CHANGE, rec->channel->visible_name, rec->mode, nicks, "");
   90|  2.96k|	g_free(nicks);
   91|       |
   92|  2.96k|	modes = tmp;
   93|  2.96k|}
fe-modes.c:mode_destroy:
   65|  2.96k|{
   66|  2.96k|	g_return_if_fail(mode != NULL);
  ------------------
  |  Branch (66:2): [True: 2.96k, False: 0]
  |  Branch (66:2): [True: 2.96k, False: 0]
  |  Branch (66:2): [Folded, False: 2.96k]
  ------------------
   67|       |
   68|  2.96k|	modes = g_slist_remove(modes, mode);
   69|       |	g_slist_foreach(mode->nicks, (GFunc) g_free, NULL);
   70|  2.96k|	g_slist_free(mode->nicks);
   71|  2.96k|	g_free(mode->mode);
   72|  2.96k|	g_free(mode);
   73|  2.96k|}
fe-modes.c:sig_message_mode:
  167|  34.5k|{
  168|  34.5k|	int level = MSGLEVEL_MODES;
  169|       |
  170|  34.5k|	if (nick == NULL) nick = server->real_address;
  ------------------
  |  Branch (170:6): [True: 13.9k, False: 20.6k]
  ------------------
  171|       |
  172|  34.5k|	if (ignore_check_plus(SERVER(server), nick, addr, channel,
  ------------------
  |  |    9|  34.5k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  34.5k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  |  Branch (172:6): [True: 0, False: 34.5k]
  ------------------
  173|  34.5k|			      mode, &level, TRUE))
  174|      0|		return;
  175|       |
  176|  34.5k|	if (!server_ischannel(SERVER(server), channel)) {
  ------------------
  |  |   22|  34.5k|	((server)->ischannel(server, channel))
  ------------------
  |  Branch (176:6): [True: 1.64k, False: 32.9k]
  ------------------
  177|       |		/* user mode change */
  178|  1.64k|		printformat(server, NULL, level,
  ------------------
  |  |   37|  1.64k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  1.64k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  179|  1.64k|			    IRCTXT_USERMODE_CHANGE, mode, channel);
  180|  32.9k|	} else if (addr == NULL) {
  ------------------
  |  Branch (180:13): [True: 27.0k, False: 5.91k]
  ------------------
  181|       |		/* channel mode changed by server */
  182|  27.0k|		printformat(server, channel, level,
  ------------------
  |  |   37|  27.0k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  27.0k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  183|  27.0k|			    IRCTXT_SERVER_CHANMODE_CHANGE,
  184|  27.0k|			    channel, mode, nick);
  185|  27.0k|	} else {
  186|       |		/* channel mode changed by normal user */
  187|  5.91k|		IRC_CHANNEL_REC *chanrec;
  188|       |
  189|  5.91k|		chanrec = !group_multi_mode ? NULL :
  ------------------
  |  Branch (189:13): [True: 0, False: 5.91k]
  ------------------
  190|  5.91k|			irc_channel_find(server, channel);
  ------------------
  |  |   57|  5.91k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|  5.91k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  11.8k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|  11.8k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|       |
  192|  5.91k|		if (chanrec != NULL && g_ascii_strcasecmp(nick, server->nick) != 0)
  ------------------
  |  Branch (192:7): [True: 5.79k, False: 113]
  |  Branch (192:26): [True: 4.87k, False: 927]
  ------------------
  193|  4.87k|			msg_multi_mode(chanrec, level, nick, addr, mode);
  194|  1.04k|		else {
  195|  1.04k|			printformat(server, channel, level,
  ------------------
  |  |   37|  1.04k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  1.04k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  196|  1.04k|				    IRCTXT_CHANMODE_CHANGE,
  197|  1.04k|				    channel, mode, nick, addr);
  198|  1.04k|		}
  199|  5.91k|	}
  200|  34.5k|}
fe-modes.c:msg_multi_mode:
  131|  4.87k|{
  132|  4.87k|	MODE_REC *rec;
  133|       |
  134|  4.87k|	if (modes == NULL)
  ------------------
  |  Branch (134:6): [True: 5, False: 4.86k]
  ------------------
  135|      5|		signal_add("print starting", (SIGNAL_FUNC) sig_print_starting);
  ------------------
  |  |   21|      5|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      5|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      5|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  136|       |
  137|  4.87k|	rec = mode_find_channel(channel);
  138|  4.87k|	if (rec != NULL && g_strcmp0(rec->mode, mode) != 0) {
  ------------------
  |  Branch (138:6): [True: 4.54k, False: 323]
  |  Branch (138:21): [True: 2.96k, False: 1.58k]
  ------------------
  139|       |		/* different mode than last time, show and remove the old */
  140|  2.96k|		print_mode(rec);
  141|  2.96k|		mode_destroy(rec);
  142|  2.96k|		rec = NULL;
  143|  2.96k|	}
  144|       |
  145|  4.87k|	if (rec == NULL) {
  ------------------
  |  Branch (145:6): [True: 3.28k, False: 1.58k]
  ------------------
  146|       |                /* no previous mode, create new */
  147|  3.28k|		rec = g_new0(MODE_REC, 1);
  ------------------
  |  Branch (147:9): [True: 3.28k, False: 0]
  |  Branch (147:9): [True: 0, False: 3.28k]
  ------------------
  148|  3.28k|		modes = g_slist_append(modes, rec);
  149|       |
  150|  3.28k|		rec->level = level;
  151|  3.28k|		rec->channel = channel;
  152|  3.28k|		rec->mode = g_strdup(mode);
  153|  3.28k|	}
  154|       |	/* the levels (everything below MSGLEVEL_ALL) are combined (|)
  155|       |	    whereas the flags (anything above) must all match (&) */
  156|  4.87k|	rec->level = ((rec->level | level) & MSGLEVEL_ALL) | (rec->level & level);
  157|  4.87k|	rec->nicks = g_slist_append(rec->nicks, g_strdup(sender));
  158|  4.87k|	rec->last_mode = time(NULL);
  159|       |
  160|  4.87k|	signal_stop();
  161|  4.87k|}
fe-modes.c:mode_find_channel:
   49|  4.87k|{
   50|  4.87k|	GSList *tmp;
   51|       |
   52|  4.87k|	g_return_val_if_fail(channel != NULL, NULL);
  ------------------
  |  Branch (52:2): [True: 4.87k, False: 0]
  |  Branch (52:2): [True: 4.87k, False: 0]
  |  Branch (52:2): [Folded, False: 4.87k]
  ------------------
   53|       |
   54|   835k|	for (tmp = modes; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (54:20): [True: 834k, False: 323]
  ------------------
   55|   834k|		MODE_REC *rec = tmp->data;
   56|       |
   57|   834k|		if (rec->channel == channel)
  ------------------
  |  Branch (57:7): [True: 4.54k, False: 830k]
  ------------------
   58|  4.54k|                        return rec;
   59|   834k|	}
   60|       |
   61|    323|	return NULL;
   62|  4.87k|}
fe-modes.c:sig_print_starting:
   98|      5|{
   99|      9|	while (modes != NULL) {
  ------------------
  |  Branch (99:9): [True: 4, False: 5]
  ------------------
  100|      4|		print_mode(modes->data);
  101|      4|                mode_destroy(modes->data);
  102|      4|	}
  103|       |
  104|       |	signal_remove("print starting", sig_print_starting);
  ------------------
  |  |   37|      5|        signal_remove_full((signal), (SIGNAL_FUNC) (func), NULL)
  ------------------
  105|      5|}

fe_netjoin_init:
  488|      2|{
  489|      2|	settings_add_bool("misc", "hide_netsplit_quits", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  490|      2|	settings_add_int("misc", "netjoin_max_nicks", 10);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  491|       |
  492|      2|	join_tag = -1;
  493|      2|	printing_joins = FALSE;
  494|       |
  495|      2|	read_settings();
  496|      2|	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  497|       |	signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  498|      2|}
fe-netjoin.c:read_settings:
  455|      2|{
  456|      2|	int old_hide;
  457|       |
  458|      2|        old_hide = hide_netsplit_quits;
  459|      2|	hide_netsplit_quits = settings_get_bool("hide_netsplit_quits");
  460|      2|	netjoin_max_nicks = settings_get_int("netjoin_max_nicks");
  461|       |
  462|      2|	if (old_hide && !hide_netsplit_quits) {
  ------------------
  |  Branch (462:6): [True: 0, False: 2]
  |  Branch (462:18): [True: 0, False: 0]
  ------------------
  463|      0|		signal_remove("message quit", (SIGNAL_FUNC) msg_quit);
  ------------------
  |  |   37|      0|        signal_remove_full((signal), (SIGNAL_FUNC) (func), NULL)
  ------------------
  464|      0|		signal_remove("message join", (SIGNAL_FUNC) msg_join);
  ------------------
  |  |   37|      0|        signal_remove_full((signal), (SIGNAL_FUNC) (func), NULL)
  ------------------
  465|      0|		signal_remove("message irc mode", (SIGNAL_FUNC) msg_mode);
  ------------------
  |  |   37|      0|        signal_remove_full((signal), (SIGNAL_FUNC) (func), NULL)
  ------------------
  466|      2|	} else if (!old_hide && hide_netsplit_quits) {
  ------------------
  |  Branch (466:13): [True: 2, False: 0]
  |  Branch (466:26): [True: 2, False: 0]
  ------------------
  467|      2|		signal_add("message quit", (SIGNAL_FUNC) msg_quit);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  468|      2|		signal_add("message join", (SIGNAL_FUNC) msg_join);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  469|       |		signal_add("message irc mode", (SIGNAL_FUNC) msg_mode);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  470|      2|	}
  471|      2|}
fe-netjoin.c:sig_server_disconnected:
  474|  29.4k|{
  475|  29.4k|	NETJOIN_SERVER_REC *netjoin_server;
  476|       |
  477|  29.4k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (477:2): [True: 29.4k, False: 0]
  |  Branch (477:2): [True: 29.4k, False: 0]
  |  Branch (477:2): [Folded, False: 29.4k]
  ------------------
  478|       |
  479|  29.4k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (479:6): [True: 0, False: 29.4k]
  ------------------
  480|      0|		return;
  481|       |
  482|  29.4k|	if ((netjoin_server = netjoin_find_server(server))) {
  ------------------
  |  Branch (482:6): [True: 0, False: 29.4k]
  ------------------
  483|      0|		netjoin_server_remove(netjoin_server);
  484|      0|	}
  485|  29.4k|}
fe-netjoin.c:netjoin_find_server:
   62|  82.2k|{
   63|  82.2k|	GSList *tmp;
   64|       |
   65|  82.2k|	g_return_val_if_fail(server != NULL, NULL);
  ------------------
  |  Branch (65:2): [True: 82.2k, False: 0]
  |  Branch (65:2): [True: 82.2k, False: 0]
  |  Branch (65:2): [Folded, False: 82.2k]
  ------------------
   66|       |
   67|  82.2k|	for (tmp = joinservers; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (67:26): [True: 0, False: 82.2k]
  ------------------
   68|      0|		NETJOIN_SERVER_REC *rec = tmp->data;
   69|       |
   70|      0|		if (rec->server == server)
  ------------------
  |  Branch (70:7): [True: 0, False: 0]
  ------------------
   71|      0|                        return rec;
   72|      0|	}
   73|       |
   74|  82.2k|	return NULL;
   75|  82.2k|}
fe-netjoin.c:msg_quit:
  315|  2.99k|{
  316|  2.99k|	if (IS_IRC_SERVER(server) && quitmsg_is_split(reason))
  ------------------
  |  |   41|  5.98k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  2.99k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  2.99k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 2.99k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  2.99k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (41:2): [True: 2.99k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (316:31): [True: 0, False: 2.99k]
  ------------------
  317|      0|		signal_stop();
  318|  2.99k|}
fe-netjoin.c:msg_join:
  322|   153k|{
  323|   153k|	NETSPLIT_REC *split;
  324|   153k|	NETJOIN_REC *netjoin;
  325|   153k|	GSList *channels;
  326|   153k|	int rejoin = 1;
  327|       |
  328|   153k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|   153k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|   153k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|   153k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 153k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|   153k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (328:6): [True: 0, False: 153k]
  ------------------
  329|      0|		return;
  330|       |
  331|   153k|	if (ignore_check(SERVER(server), nick, address,
  ------------------
  |  |    9|   153k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|   153k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  |  Branch (331:6): [True: 0, False: 153k]
  ------------------
  332|   153k|			 channel, NULL, MSGLEVEL_JOINS))
  333|      0|		return;
  334|       |
  335|   153k|	split = netsplit_find(server, nick, address);
  336|   153k|	netjoin = netjoin_find(server, nick);
  337|   153k|	if (split == NULL && netjoin == NULL)
  ------------------
  |  Branch (337:6): [True: 153k, False: 0]
  |  Branch (337:23): [True: 153k, False: 0]
  ------------------
  338|   153k|                return;
  339|       |
  340|       |	/* if this was not a channel they split from, treat it normally */
  341|      0|	if (netjoin != NULL) {
  ------------------
  |  Branch (341:6): [True: 0, False: 0]
  ------------------
  342|      0|		if (!i_slist_find_icase_string(netjoin->old_channels, channel))
  ------------------
  |  Branch (342:7): [True: 0, False: 0]
  ------------------
  343|      0|			return;
  344|      0|	} else {
  345|      0|		channels = split->channels;
  346|      0|		while (channels != NULL) {
  ------------------
  |  Branch (346:10): [True: 0, False: 0]
  ------------------
  347|      0|			NETSPLIT_CHAN_REC *schannel = channels->data;
  348|       |
  349|      0|			if (!strcasecmp(schannel->name, channel))
  ------------------
  |  Branch (349:8): [True: 0, False: 0]
  ------------------
  350|      0|				break;
  351|      0|			channels = channels->next;
  352|      0|		}
  353|       |		/* we still need to create a NETJOIN_REC now as the
  354|       |		 * NETSPLIT_REC will be destroyed */
  355|      0|		if (channels == NULL)
  ------------------
  |  Branch (355:7): [True: 0, False: 0]
  ------------------
  356|      0|			rejoin = 0;
  357|      0|	}
  358|       |
  359|      0|	if (join_tag == -1) {
  ------------------
  |  Branch (359:6): [True: 0, False: 0]
  ------------------
  360|      0|		join_tag = g_timeout_add(1000, (GSourceFunc)
  361|      0|					 sig_check_netjoins, NULL);
  362|      0|		signal_add("print starting", (SIGNAL_FUNC) sig_print_starting);
  ------------------
  |  |   21|      0|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      0|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      0|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  363|      0|	}
  364|       |
  365|      0|	if (netjoin == NULL)
  ------------------
  |  Branch (365:6): [True: 0, False: 0]
  ------------------
  366|      0|		netjoin = netjoin_add(server, nick, split->channels);
  367|       |
  368|      0|	if (rejoin)
  ------------------
  |  Branch (368:6): [True: 0, False: 0]
  ------------------
  369|      0|	{
  370|      0|		netjoin->now_channels = g_slist_append(netjoin->now_channels,
  371|       |						       g_strconcat(" ", channel, NULL));
  372|      0|		signal_stop();
  373|      0|	}
  374|      0|}
fe-netjoin.c:netjoin_find:
  109|   158k|{
  110|   158k|	NETJOIN_SERVER_REC *srec;
  111|   158k|	GSList *tmp;
  112|       |
  113|   158k|	g_return_val_if_fail(server != NULL, NULL);
  ------------------
  |  Branch (113:2): [True: 158k, False: 0]
  |  Branch (113:2): [True: 158k, False: 0]
  |  Branch (113:2): [Folded, False: 158k]
  ------------------
  114|   158k|	g_return_val_if_fail(nick != NULL, NULL);
  ------------------
  |  Branch (114:2): [True: 52.8k, False: 105k]
  |  Branch (114:2): [True: 52.8k, False: 105k]
  |  Branch (114:2): [Folded, False: 52.8k]
  ------------------
  115|       |
  116|  52.8k|	srec = netjoin_find_server(server);
  117|  52.8k|        if (srec == NULL) return NULL;
  ------------------
  |  Branch (117:13): [True: 52.8k, False: 0]
  ------------------
  118|       |
  119|      0|	for (tmp = srec->netjoins; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (119:29): [True: 0, False: 0]
  ------------------
  120|      0|		NETJOIN_REC *rec = tmp->data;
  121|       |
  122|      0|		if (g_ascii_strcasecmp(rec->nick, nick) == 0)
  ------------------
  |  Branch (122:7): [True: 0, False: 0]
  ------------------
  123|      0|			return rec;
  124|      0|	}
  125|       |
  126|      0|	return NULL;
  127|      0|}
fe-netjoin.c:msg_mode:
  409|  35.9k|{
  410|  35.9k|	NETJOIN_REC *rec;
  411|  35.9k|	char *params, *mode, *nicks;
  412|  35.9k|	char **nicklist, **nick, type, prefix;
  413|  35.9k|	int show;
  414|       |
  415|  35.9k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (415:2): [True: 35.9k, False: 0]
  |  Branch (415:2): [True: 35.9k, False: 0]
  |  Branch (415:2): [Folded, False: 35.9k]
  ------------------
  416|  35.9k|	if (!server_ischannel(SERVER(server), channel) || addr != NULL)
  ------------------
  |  |   22|  71.8k|	((server)->ischannel(server, channel))
  ------------------
  |  Branch (416:6): [True: 1.64k, False: 34.2k]
  |  Branch (416:52): [True: 5.91k, False: 28.3k]
  ------------------
  417|  7.55k|		return;
  418|       |
  419|  28.3k|	params = event_get_params(data, 2 | PARAM_FLAG_GETREST,
  ------------------
  |  |  126|  28.3k|#define PARAM_FLAG_GETREST 0x00002000
  ------------------
  420|  28.3k|				  &mode, &nicks);
  421|       |
  422|       |	/* parse server mode changes - hide operator status changes and
  423|       |	   show them in the netjoin message instead as @ before the nick */
  424|  28.3k|	nick = nicklist = g_strsplit(nicks, " ", -1);
  425|       |
  426|  28.3k|	type = '+'; show = FALSE;
  427|   954k|	for (; *mode != '\0'; mode++) {
  ------------------
  |  Branch (427:9): [True: 925k, False: 28.3k]
  ------------------
  428|   925k|		if (*mode == '+' || *mode == '-') {
  ------------------
  |  Branch (428:7): [True: 7.92k, False: 917k]
  |  Branch (428:23): [True: 17.7k, False: 900k]
  ------------------
  429|  25.6k|			type = *mode;
  430|  25.6k|			continue;
  431|  25.6k|		}
  432|       |
  433|   900k|		if (*nick != NULL && GET_MODE_PREFIX(server, *mode)) {
  ------------------
  |  |   35|   149k|	((server)->modes[(int)(unsigned char)c].prefix)
  |  |  ------------------
  |  |  |  Branch (35:2): [True: 5.63k, False: 143k]
  |  |  ------------------
  ------------------
  |  Branch (433:7): [True: 149k, False: 750k]
  ------------------
  434|       |                        /* give/remove ops */
  435|  5.63k|			rec = netjoin_find(server, *nick);
  436|  5.63k|			prefix = GET_MODE_PREFIX(server, *mode);
  ------------------
  |  |   35|  5.63k|	((server)->modes[(int)(unsigned char)c].prefix)
  ------------------
  437|  5.63k|			if (rec == NULL || type != '+' || prefix == '\0' ||
  ------------------
  |  Branch (437:8): [True: 5.63k, False: 0]
  |  Branch (437:23): [True: 0, False: 0]
  |  Branch (437:38): [True: 0, False: 0]
  ------------------
  438|      0|			    !netjoin_set_nickmode(server, rec, channel, prefix))
  ------------------
  |  Branch (438:8): [True: 0, False: 0]
  ------------------
  439|  5.63k|				show = TRUE;
  440|  5.63k|                        nick++;
  441|   894k|		} else {
  442|   894k|			if (HAS_MODE_ARG(server, type, *mode) && *nick != NULL)
  ------------------
  |  |   31|  1.78M|	((type) == '+' ? HAS_MODE_ARG_SET(server,mode) : \
  |  |  ------------------
  |  |  |  |   23|   524k|	(HAS_MODE_ARG_ALWAYS(server, mode) || \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|  1.04M|   (server->modes[(int)(unsigned char) mode].func == modes_type_a || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (17:5): [True: 8.04k, False: 516k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   18|   524k|    server->modes[(int)(unsigned char) mode].func == modes_type_b || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (18:5): [True: 34.0k, False: 482k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   19|  1.04M|    server->modes[(int)(unsigned char) mode].func == modes_type_prefix)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (19:5): [True: 16.0k, False: 466k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   24|   524k|	  server->modes[(int)(unsigned char) mode].func == modes_type_c)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:4): [True: 7.20k, False: 459k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (31:2): [True: 79.9k, False: 814k]
  |  |  |  Branch (31:3): [True: 524k, False: 369k]
  |  |  ------------------
  |  |   32|  1.78M|	  HAS_MODE_ARG_UNSET(server, mode))
  |  |  ------------------
  |  |  |  |   28|   369k|	HAS_MODE_ARG_ALWAYS(server, mode)
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|   369k|   (server->modes[(int)(unsigned char) mode].func == modes_type_a || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (17:5): [True: 4.94k, False: 364k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   18|   369k|    server->modes[(int)(unsigned char) mode].func == modes_type_b || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (18:5): [True: 2.04k, False: 362k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   19|   369k|    server->modes[(int)(unsigned char) mode].func == modes_type_prefix)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (19:5): [True: 7.64k, False: 354k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (442:45): [True: 7.50k, False: 72.4k]
  ------------------
  443|  7.50k|				nick++;
  444|   894k|			show = TRUE;
  445|   894k|		}
  446|   900k|	}
  447|       |
  448|  28.3k|	if (!show) signal_stop();
  ------------------
  |  Branch (448:6): [True: 1.34k, False: 27.0k]
  ------------------
  449|       |
  450|  28.3k|	g_strfreev(nicklist);
  451|  28.3k|	g_free(params);
  452|  28.3k|}

fe_netsplit_init:
  367|      2|{
  368|      2|	settings_add_int("misc", "netsplit_max_nicks", 10);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  369|      2|	settings_add_int("misc", "netsplit_nicks_hide_threshold", 15);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  370|      2|	split_tag = -1;
  371|      2|	printing_splits = FALSE;
  372|       |
  373|      2|	read_settings();
  374|      2|	signal_add("netsplit new", (SIGNAL_FUNC) sig_netsplit_servers);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  375|      2|	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  376|       |	command_bind_irc("netsplit", NULL, (SIGNAL_FUNC) cmd_netsplit);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  377|      2|}
fe-netsplit.c:read_settings:
  358|      2|{
  359|      2|        netsplit_max_nicks = settings_get_int("netsplit_max_nicks");
  360|      2|	netsplit_nicks_hide_threshold =
  361|      2|		settings_get_int("netsplit_nicks_hide_threshold");
  362|      2|	if (netsplit_nicks_hide_threshold < netsplit_max_nicks)
  ------------------
  |  Branch (362:6): [True: 0, False: 2]
  ------------------
  363|      0|		netsplit_max_nicks = netsplit_nicks_hide_threshold;
  364|      2|}

fe_sasl_init:
   44|      2|{
   45|      2|	signal_add("server sasl success", (SIGNAL_FUNC) sig_sasl_success);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
   46|       |	signal_add("server sasl failure", (SIGNAL_FUNC) sig_sasl_failure);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
   47|      2|}
fe-sasl.c:sig_sasl_success:
   34|  3.56k|{
   35|  3.56k|	printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_SASL_SUCCESS);
  ------------------
  |  |   37|  3.56k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  3.56k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
   36|  3.56k|}
fe-sasl.c:sig_sasl_failure:
   39|  1.84k|{
   40|  1.84k|	printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_SASL_ERROR, reason);
  ------------------
  |  |   37|  1.84k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  1.84k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
   41|  1.84k|}

fe_whois_init:
  407|      2|{
  408|      2|	settings_add_bool("lookandfeel", "whois_hide_safe_channel_id", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  409|       |
  410|      2|	signal_add("event 311", (SIGNAL_FUNC) event_whois);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  411|      2|	signal_add("event 312", (SIGNAL_FUNC) event_whois_server);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  412|       |	/* readding this events fixes the printing of /whois -yes *
  413|       |	   Bug http://bugs.irssi.org/?do=details&task_id=123 */
  414|      2|	signal_add("event 317", (SIGNAL_FUNC) event_whois_idle);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  415|      2|	signal_add("event 319", (SIGNAL_FUNC) event_whois_channels);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  416|      2|	signal_add("event 313", (SIGNAL_FUNC) event_whois_oper);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  417|      2|	signal_add("event 330", (SIGNAL_FUNC) event_whois_auth);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  418|      2|	signal_add("whois account", (SIGNAL_FUNC) event_whois_auth);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  419|      2|	signal_add("event 377", (SIGNAL_FUNC) event_whois_usermode);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  420|      2|	signal_add("event 378", (SIGNAL_FUNC) event_whois_realhost);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  421|      2|	signal_add("event 379", (SIGNAL_FUNC) event_whois_modes);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  422|      2|	signal_add("event 327", (SIGNAL_FUNC) event_whois_realhost327);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  423|      2|	signal_add("event 326", (SIGNAL_FUNC) event_whois_usermode326);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  424|      2|	signal_add("event 338", (SIGNAL_FUNC) event_whois_realhost338);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  425|      2|	signal_add("whois away", (SIGNAL_FUNC) event_whois_away);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  426|      2|	signal_add("whois oper", (SIGNAL_FUNC) event_whois_oper);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  427|      2|	signal_add("whowas away", (SIGNAL_FUNC) event_whois_away);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  428|      2|	signal_add("whois default event", (SIGNAL_FUNC) event_whois_default);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  429|      2|	signal_add("event 318", (SIGNAL_FUNC) event_end_of_whois);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  430|      2|	signal_add("event 314", (SIGNAL_FUNC) event_whowas);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  431|       |	signal_add("event 369", (SIGNAL_FUNC) event_end_of_whowas);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  432|      2|}
fe-whois.c:event_whois:
   16|  1.32k|{
   17|  1.32k|	char *params, *nick, *user, *host, *realname, *recoded;
   18|       |
   19|  1.32k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (19:2): [True: 1.32k, False: 0]
  |  Branch (19:2): [True: 1.32k, False: 0]
  |  Branch (19:2): [Folded, False: 1.32k]
  ------------------
   20|       |
   21|  1.32k|	params = event_get_params(data, 6, NULL, &nick, &user,
   22|  1.32k|				  &host, NULL, &realname);
   23|  1.32k|	recoded = recode_in(SERVER(server), realname, nick);
  ------------------
  |  |    9|  1.32k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  1.32k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
   24|  1.32k|	printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|  1.32k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  1.32k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
   25|  1.32k|		    IRCTXT_WHOIS, nick, user, host, recoded);
   26|  1.32k|	g_free(params);
   27|  1.32k|	g_free(recoded);
   28|  1.32k|}
fe-whois.c:event_whois_server:
   76|    808|{
   77|    808|	char *params, *nick, *whoserver, *desc;
   78|       |
   79|    808|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (79:2): [True: 808, False: 0]
  |  Branch (79:2): [True: 808, False: 0]
  |  Branch (79:2): [Folded, False: 808]
  ------------------
   80|       |
   81|    808|	params = event_get_params(data, 4, NULL, &nick, &whoserver, &desc);
   82|    808|	printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|    808|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    808|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
   83|    808|		    IRCTXT_WHOIS_SERVER, nick, whoserver, desc);
   84|    808|	g_free(params);
   85|    808|}
fe-whois.c:event_whois_channels:
  280|     33|{
  281|     33|	char *params, *nick, *chans, *recoded;
  282|       |
  283|     33|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (283:2): [True: 33, False: 0]
  |  Branch (283:2): [True: 33, False: 0]
  |  Branch (283:2): [Folded, False: 33]
  ------------------
  284|       |
  285|     33|	params = event_get_params(data, 3, NULL, &nick, &chans);
  286|       |
  287|       |	/* sure - we COULD print the channel names as-is, but since the
  288|       |	   colors, bolds, etc. are mostly just to fool people, I think we
  289|       |	   should show the channel names as they REALLY are so they could
  290|       |	   even be joined without any extra tricks. */
  291|     33|	chans = show_lowascii(chans);
  292|     33|	if (settings_get_bool("whois_hide_safe_channel_id"))
  ------------------
  |  Branch (292:6): [True: 33, False: 0]
  ------------------
  293|     33|		hide_safe_channel_id(server, chans);
  294|     33|	recoded = recode_in(SERVER(server), chans, nick);
  ------------------
  |  |    9|     33|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|     33|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  295|     33|	printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|     33|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|     33|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  296|     33|		    IRCTXT_WHOIS_CHANNELS, nick, recoded);
  297|     33|	g_free(chans);
  298|       |
  299|     33|	g_free(params);
  300|     33|	g_free(recoded);
  301|     33|}
fe-whois.c:hide_safe_channel_id:
  233|     33|{
  234|     33|	const char *idchan, *nick_flags;
  235|     33|	char *p, *dest, *end, id;
  236|     33|	int count, length, chanstart;
  237|       |
  238|     33|	if (!server->isupport_sent)
  ------------------
  |  Branch (238:6): [True: 33, False: 0]
  ------------------
  239|     33|		idchan = "!:5";
  240|      0|	else {
  241|      0|		idchan = g_hash_table_lookup(server->isupport, "IDCHAN");
  242|      0|		if (idchan == NULL)
  ------------------
  |  Branch (242:7): [True: 0, False: 0]
  ------------------
  243|      0|			return;
  244|      0|	}
  245|     33|	nick_flags = server->get_nick_flags(SERVER(server));
  ------------------
  |  |    9|     33|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|     33|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  246|       |
  247|     66|	while (*idchan != '\0') {
  ------------------
  |  Branch (247:9): [True: 33, False: 33]
  ------------------
  248|     33|		id = *idchan;
  249|     33|		if (idchan[1] != ':')
  ------------------
  |  Branch (249:7): [True: 0, False: 33]
  ------------------
  250|      0|			return;
  251|       |
  252|     33|		length = strtoul(idchan+2, &end, 10);
  253|     33|		if (*end == ',')
  ------------------
  |  Branch (253:7): [True: 0, False: 33]
  ------------------
  254|      0|			end++;
  255|     33|		else if (*end != '\0')
  ------------------
  |  Branch (255:12): [True: 0, False: 33]
  ------------------
  256|      0|			return;
  257|     33|		idchan = end;
  258|       |
  259|     33|		count = 0;
  260|     33|		chanstart = TRUE;
  261|    187|		for (dest = p = chans; *p != '\0'; p++) {
  ------------------
  |  Branch (261:26): [True: 154, False: 33]
  ------------------
  262|    154|			if (count > 0)
  ------------------
  |  Branch (262:8): [True: 28, False: 126]
  ------------------
  263|     28|				count--;
  264|    126|			else {
  265|    126|				if (*p == ' ')
  ------------------
  |  Branch (265:9): [True: 0, False: 126]
  ------------------
  266|      0|					chanstart = TRUE;
  267|    126|				else {
  268|    126|					if (chanstart && *p == id)
  ------------------
  |  Branch (268:10): [True: 14, False: 112]
  |  Branch (268:23): [True: 8, False: 6]
  ------------------
  269|      8|						count = length;
  270|    126|					chanstart = chanstart && strchr(nick_flags, *p);
  ------------------
  |  Branch (270:18): [True: 14, False: 112]
  |  Branch (270:31): [True: 0, False: 14]
  ------------------
  271|    126|				}
  272|    126|				*dest++ = *p;
  273|    126|			}
  274|    154|		}
  275|     33|		*dest = '\0';
  276|     33|	}
  277|     33|}
fe-whois.c:event_whois_oper:
   88|    438|{
   89|    438|	char *params, *nick, *type;
   90|       |
   91|    438|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (91:2): [True: 438, False: 0]
  |  Branch (91:2): [True: 438, False: 0]
  |  Branch (91:2): [Folded, False: 438]
  ------------------
   92|       |
   93|    438|	params = event_get_params(data, 3, NULL, &nick, &type);
   94|       |
   95|       |	/* Bugfix: http://bugs.irssi.org/?do=details&task_id=99
   96|       |	 * Author: Geert Hauwaerts <geert@irssi.org>
   97|       |	 * Date:   Wed Sep 15 20:17:24 CEST 2004
   98|       |	 */
   99|       |
  100|    438|	if ((!strncmp(type, "is an ", 6)) || (!strncmp(type, "is a ", 5))) {
  ------------------
  |  Branch (100:6): [True: 329, False: 109]
  |  Branch (100:39): [True: 0, False: 109]
  ------------------
  101|    329|		type += 5;
  102|    329|		if (*type == ' ') type++;
  ------------------
  |  Branch (102:7): [True: 329, False: 0]
  ------------------
  103|    329|	}
  104|       |
  105|    438|	if (*type == '\0')
  ------------------
  |  Branch (105:6): [True: 18, False: 420]
  ------------------
  106|     18|		type = "IRC Operator";
  107|       |
  108|    438|	printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|    438|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    438|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  109|    438|		IRCTXT_WHOIS_OPER, nick, type);
  110|    438|	g_free(params);
  111|    438|}
fe-whois.c:event_whois_auth:
  332|     77|{
  333|     77|	char *params, *nick, *text;
  334|       |
  335|     77|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (335:2): [True: 77, False: 0]
  |  Branch (335:2): [True: 77, False: 0]
  |  Branch (335:2): [Folded, False: 77]
  ------------------
  336|       |
  337|     77|	params = event_get_params(data, 3, NULL, &nick, &text);
  338|     77|	printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|     77|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|     77|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  339|     77|		    IRCTXT_WHOIS_EXTRA, nick, text);
  340|     77|	g_free(params);
  341|     77|}
fe-whois.c:event_whois_usermode:
  214|     20|{
  215|     20|	char *params, *txt_usermodes, *nick, *usermode;
  216|       |
  217|     20|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (217:2): [True: 20, False: 0]
  |  Branch (217:2): [True: 20, False: 0]
  |  Branch (217:2): [Folded, False: 20]
  ------------------
  218|       |
  219|     20|	params = event_get_params(data, 4, NULL, &txt_usermodes,
  220|     20|				  &nick, &usermode);
  221|       |
  222|     20|	if (g_strcmp0(txt_usermodes, "usermodes") == 0) {
  ------------------
  |  Branch (222:6): [True: 6, False: 14]
  ------------------
  223|       |		/* <yournick> usermodes <nick> usermode */
  224|      6|		printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|      6|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|      6|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  225|      6|			    IRCTXT_WHOIS_USERMODE, nick, usermode);
  226|     14|	} else {
  227|     14|		event_whois_special(server, data);
  228|     14|	}
  229|     20|	g_free(params);
  230|     20|}
fe-whois.c:event_whois_special:
   31|  4.33k|{
   32|  4.33k|	char *params, *nick, *str;
   33|       |
   34|  4.33k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (34:2): [True: 4.33k, False: 0]
  |  Branch (34:2): [True: 4.33k, False: 0]
  |  Branch (34:2): [Folded, False: 4.33k]
  ------------------
   35|       |
   36|  4.33k|	params = event_get_params(data, 3 | PARAM_FLAG_GETREST, NULL, &nick, &str);
  ------------------
  |  |  126|  4.33k|#define PARAM_FLAG_GETREST 0x00002000
  ------------------
   37|  4.33k|	printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|  4.33k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  4.33k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
   38|  4.33k|		    IRCTXT_WHOIS_SPECIAL, nick, str);
   39|  4.33k|	g_free(params);
   40|  4.33k|}
fe-whois.c:event_whois_realhost:
  129|  6.52k|{
  130|  6.52k|	char *params, *nick, *txt_real, *txt_hostname, *hostname;
  131|       |
  132|  6.52k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (132:2): [True: 6.52k, False: 0]
  |  Branch (132:2): [True: 6.52k, False: 0]
  |  Branch (132:2): [Folded, False: 6.52k]
  ------------------
  133|       |
  134|       |        /* <yournick> real hostname <nick> <hostname> */
  135|  6.52k|	params = event_get_params(data, 5, NULL, &nick, &txt_real,
  136|  6.52k|				  &txt_hostname, &hostname);
  137|  6.52k|	if (g_strcmp0(txt_real, "real") != 0 ||
  ------------------
  |  Branch (137:6): [True: 4.27k, False: 2.24k]
  ------------------
  138|  4.72k|	    g_strcmp0(txt_hostname, "hostname") != 0) {
  ------------------
  |  Branch (138:6): [True: 447, False: 1.80k]
  ------------------
  139|       |		/* <yournick> <nick> :... from <hostname> */
  140|  4.72k|                g_free(params);
  141|  4.72k|		params = event_get_params(data, 3, NULL, &nick, &hostname);
  142|       |
  143|  4.72k|		hostname = strstr(hostname, "from ");
  144|  4.72k|                if (hostname != NULL) hostname += 5;
  ------------------
  |  Branch (144:21): [True: 590, False: 4.13k]
  ------------------
  145|  4.72k|	}
  146|       |
  147|  6.52k|	if (hostname != NULL) {
  ------------------
  |  Branch (147:6): [True: 2.39k, False: 4.13k]
  ------------------
  148|  2.39k|		if (!strncmp(hostname, "*@", 2))
  ------------------
  |  Branch (148:7): [True: 590, False: 1.80k]
  ------------------
  149|    590|			hostname += 2;
  150|  2.39k|		printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|  2.39k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  2.39k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  151|  2.39k|			    IRCTXT_WHOIS_REALHOST, nick, hostname, "");
  152|  4.13k|	} else {
  153|  4.13k|		event_whois_special(server, data);
  154|  4.13k|	}
  155|  6.52k|	g_free(params);
  156|  6.52k|}
fe-whois.c:event_whois_modes:
  114|    284|{
  115|    284|	char *params, *nick, *modes;
  116|       |
  117|    284|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (117:2): [True: 284, False: 0]
  |  Branch (117:2): [True: 284, False: 0]
  |  Branch (117:2): [Folded, False: 284]
  ------------------
  118|       |
  119|    284|	params = event_get_params(data, 3 | PARAM_FLAG_GETREST,
  ------------------
  |  |  126|    284|#define PARAM_FLAG_GETREST 0x00002000
  ------------------
  120|    284|			NULL, &nick, &modes);
  121|    284|	if (!strncmp(modes, "is using modes ", 15))
  ------------------
  |  Branch (121:6): [True: 25, False: 259]
  ------------------
  122|     25|		modes += 15;
  123|    284|	printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|    284|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    284|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  124|    284|		    IRCTXT_WHOIS_MODES, nick, modes);
  125|    284|	g_free(params);
  126|    284|}
fe-whois.c:event_whois_realhost327:
  172|    191|{
  173|    191|	char *params, *nick, *hostname, *ip, *text;
  174|       |
  175|    191|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (175:2): [True: 191, False: 0]
  |  Branch (175:2): [True: 191, False: 0]
  |  Branch (175:2): [Folded, False: 191]
  ------------------
  176|       |
  177|       |	/* <yournick> <hostname> <ip> :Real hostname/IP */
  178|    191|	params = event_get_params(data, 5, NULL, &nick, &hostname, &ip, &text);
  179|    191|	if (*text != '\0') {
  ------------------
  |  Branch (179:6): [True: 0, False: 191]
  ------------------
  180|      0|		printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|      0|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|      0|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  181|      0|			    IRCTXT_WHOIS_REALHOST, nick, hostname, ip);
  182|    191|	} else {
  183|    191|		event_whois_special(server, data);
  184|    191|	}
  185|    191|	g_free(params);
  186|    191|}
fe-whois.c:event_whois_realhost338:
  189|    146|{
  190|    146|	char *params, *nick, *arg1, *arg2, *arg3;
  191|       |
  192|    146|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (192:2): [True: 146, False: 0]
  |  Branch (192:2): [True: 146, False: 0]
  |  Branch (192:2): [Folded, False: 146]
  ------------------
  193|       |
  194|       |	/*
  195|       |	 * :<server> 338 <yournick> <nick> <user>@<host> <ip> :Actual user@host, actual IP
  196|       |	 * (ircu) or
  197|       |	 * :<server> 338 <yournick> <nick> <ip> :actually using host
  198|       |	 * (ratbox)
  199|       |	 */
  200|    146|	params = event_get_params(data, 5, NULL, &nick, &arg1, &arg2, &arg3);
  201|    146|	if (*arg3 != '\0') {
  ------------------
  |  Branch (201:6): [True: 21, False: 125]
  ------------------
  202|     21|		printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|     21|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|     21|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  203|     21|			    IRCTXT_WHOIS_REALHOST, nick, arg1, arg2);
  204|    125|	} else if (*arg2 != '\0') {
  ------------------
  |  Branch (204:13): [True: 125, False: 0]
  ------------------
  205|    125|		printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|    125|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|    125|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  206|    125|			    IRCTXT_WHOIS_REALHOST, nick, arg1, "");
  207|    125|	} else {
  208|      0|		event_whois_special(server, data);
  209|      0|	}
  210|    146|	g_free(params);
  211|    146|}
fe-whois.c:event_end_of_whois:
  318|    592|{
  319|    592|	char *params, *nick;
  320|       |
  321|    592|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (321:2): [True: 592, False: 0]
  |  Branch (321:2): [True: 592, False: 0]
  |  Branch (321:2): [Folded, False: 592]
  ------------------
  322|       |
  323|    592|	params = event_get_params(data, 2, NULL, &nick);
  324|    592|	if (server->whois_found) {
  ------------------
  |  Branch (324:6): [True: 0, False: 592]
  ------------------
  325|      0|		printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|      0|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|      0|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  326|      0|			    IRCTXT_END_OF_WHOIS, nick);
  327|      0|	}
  328|    592|	g_free(params);
  329|    592|}
fe-whois.c:event_whowas:
  344|  2.26k|{
  345|  2.26k|	char *params, *nick, *user, *host, *realname, *recoded;
  346|       |
  347|  2.26k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (347:2): [True: 2.26k, False: 0]
  |  Branch (347:2): [True: 2.26k, False: 0]
  |  Branch (347:2): [Folded, False: 2.26k]
  ------------------
  348|       |
  349|  2.26k|	params = event_get_params(data, 6, NULL, &nick, &user,
  350|  2.26k|				  &host, NULL, &realname);
  351|  2.26k|	recoded = recode_in(SERVER(server), realname, nick);
  ------------------
  |  |    9|  2.26k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  2.26k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  352|  2.26k|	printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|  2.26k|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|  2.26k|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  353|  2.26k|		    IRCTXT_WHOWAS, nick, user, host, recoded);
  354|  2.26k|	g_free(params);
  355|  2.26k|	g_free(recoded);
  356|  2.26k|}
fe-whois.c:event_end_of_whowas:
  359|     90|{
  360|     90|	char *params, *nick;
  361|       |
  362|     90|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (362:2): [True: 90, False: 0]
  |  Branch (362:2): [True: 90, False: 0]
  |  Branch (362:2): [Folded, False: 90]
  ------------------
  363|       |
  364|     90|	params = event_get_params(data, 2, NULL, &nick);
  365|     90|	if (server->whowas_found) {
  ------------------
  |  Branch (365:6): [True: 0, False: 90]
  ------------------
  366|      0|		printformat(server, nick, MSGLEVEL_CRAP,
  ------------------
  |  |   37|      0|	printformat_module(MODULE_NAME, server, target, level, formatnum, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |    4|      0|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  ------------------
  367|      0|			    IRCTXT_END_OF_WHOWAS, nick);
  368|      0|	}
  369|     90|	g_free(params);
  370|     90|}

irc_completion_init:
   34|      2|{
   35|       |	signal_add("complete command stats", (SIGNAL_FUNC) sig_complete_stats);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "fe-common/irc"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
   36|      2|}

g_log_set_null_logger:
   14|      2|{
   15|       |	g_log_set_default_handler(null_logger, NULL);
   16|      2|}
null-logger.c:null_logger:
    9|  1.35M|{
   10|  1.35M|	return;
   11|  1.35M|}

event_connected:
   62|  9.01k|{
   63|  9.01k|	char *params, *nick;
   64|       |
   65|  9.01k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (65:2): [True: 9.01k, False: 0]
  |  Branch (65:2): [True: 9.01k, False: 0]
  |  Branch (65:2): [Folded, False: 9.01k]
  ------------------
   66|       |
   67|  9.01k|	params = event_get_params(data, 1, &nick);
   68|       |
   69|  9.01k|	if (g_strcmp0(server->nick, nick) != 0) {
  ------------------
  |  Branch (69:6): [True: 6.52k, False: 2.48k]
  ------------------
   70|       |		/* nick changed unexpectedly .. connected via proxy, etc. */
   71|  6.52k|		g_free(server->nick);
   72|  6.52k|		server->nick = g_strdup(nick);
   73|  6.52k|	}
   74|       |
   75|       |	/* set the server address */
   76|  9.01k|	g_free(server->real_address);
   77|  9.01k|	server->real_address = from == NULL ?
  ------------------
  |  Branch (77:25): [True: 7.55k, False: 1.46k]
  ------------------
   78|  7.55k|		g_strdup(server->connrec->address) : /* shouldn't happen.. */
   79|  9.01k|		g_strdup(from);
   80|       |
   81|       |	/* last welcome message found - commands can be sent to server now. */
   82|  9.01k|	server->connected = 1;
   83|  9.01k|	server->real_connect_time = time(NULL);
   84|       |
   85|       |	/* let the queue send now that we are identified */
   86|  9.01k|	g_get_current_time(&server->wait_cmd);
   87|       |
   88|  9.01k|	if (server->connrec->usermode != NULL) {
  ------------------
  |  Branch (88:6): [True: 9.01k, False: 0]
  ------------------
   89|       |		/* Send the user mode, before the autosendcmd.
   90|       |		 * Do not pass this through cmd_mode because it
   91|       |		 * is not known whether the resulting MODE message
   92|       |		 * (if any) is the initial umode or a reply to this.
   93|       |		 */
   94|  9.01k|		irc_send_cmdv(server, "MODE %s %s", server->nick,
   95|  9.01k|				server->connrec->usermode);
   96|  9.01k|		g_free_not_null(server->wanted_usermode);
  ------------------
  |  |   64|  9.01k|#define g_free_not_null(a) g_free(a)
  ------------------
   97|  9.01k|		server->wanted_usermode = g_strdup(server->connrec->usermode);
   98|  9.01k|	}
   99|       |
  100|  9.01k|	signal_emit("event connected", 1, server);
  101|  9.01k|	g_free(params);
  102|  9.01k|}
irc_server_init_bare_minimum:
  104|  29.4k|void irc_server_init_bare_minimum(IRC_SERVER_REC *server) {
  105|  29.4k|	server->rawlog = rawlog_create();
  106|  29.4k|	server->isupport = g_hash_table_new((GHashFunc) i_istr_hash, (GCompareFunc) i_istr_equal);
  107|       |
  108|       |	/* set the standards */
  109|  29.4k|	g_hash_table_insert(server->isupport, g_strdup("CHANMODES"), g_strdup("beI,k,l,imnpst"));
  110|  29.4k|	g_hash_table_insert(server->isupport, g_strdup("PREFIX"), g_strdup("(ohv)@%+"));
  111|  29.4k|}
test_server:
  113|  29.4k|void test_server() {
  114|       |	//SERVER_REC *server; /* = g_new0(IRC_SERVER_REC, 1); */
  115|  29.4k|	CHAT_PROTOCOL_REC *proto;
  116|  29.4k|	SERVER_CONNECT_REC *conn;
  117|  29.4k|	GIOChannel *handle = g_io_channel_unix_new(open("/dev/null", O_RDWR));
  118|  29.4k|	g_io_channel_set_encoding(handle, NULL, NULL);
  119|  29.4k|	g_io_channel_set_close_on_unref(handle, TRUE);
  120|       |
  121|  29.4k|	proto = chat_protocol_find("IRC");
  122|  29.4k|	conn = server_create_conn(proto->id, "localhost", 0, "", "", "user");
  123|  29.4k|	server = proto->server_init_connect(conn);
  124|  29.4k|	server->session_reconnect = TRUE;
  125|  29.4k|	g_free(server->tag);
  126|  29.4k|	server->tag = g_strdup("testserver");
  127|  29.4k|	server->handle = net_sendbuffer_create(handle, 0);
  128|       |
  129|       |	/* we skip some initialisations that would try to send data */
  130|       |	/* irc_servers_deinit(); */
  131|  29.4k|	irc_session_deinit();
  132|  29.4k|	irc_irc_deinit();
  133|       |
  134|  29.4k|	server_connect_finished(server);
  135|       |
  136|       |	/* make up for the skipped session init */
  137|  29.4k|	irc_server_init_bare_minimum(IRC_SERVER(server));
  ------------------
  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  ------------------
  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  138|       |
  139|  29.4k|	irc_irc_init();
  140|  29.4k|	irc_session_init();
  141|       |	/* irc_servers_init(); */
  142|       |
  143|  29.4k|	server_connect_unref(conn);
  144|  29.4k|}
LLVMFuzzerInitialize:
  146|      2|int LLVMFuzzerInitialize(int *argc, char ***argv) {
  147|      2|#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
  148|      2|	g_log_set_null_logger();
  149|      2|#endif
  150|      2|	core_register_options();
  151|      2|	fe_common_core_register_options();
  152|       |	/* no args */
  153|      2|	args_execute(0, NULL);
  154|      2|	core_preinit((*argv)[0]);
  155|      2|	core_init();
  156|      2|	irssi_ssl_init();
  157|      2|	irc_core_init();
  158|      2|	fe_common_core_init();
  159|      2|	fe_common_irc_init();
  160|      2|	signal_add("event 001", (SIGNAL_FUNC) event_connected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  161|      2|	module_register("core", "fe-fuzz");
  ------------------
  |  |   59|      2|        module_register_full(name, submodule, MODULE_NAME)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  162|      2|	rawlog_set_size(1);
  163|      2|	return 0;
  164|      2|}
LLVMFuzzerTestOneInput:
  166|    427|int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
  167|    427|	gboolean prefixedChoice = (gboolean)*data;
  168|    427|	gchar *copy;
  169|    427|	gchar **lines;
  170|    427|	gchar **head;
  171|       |
  172|    427|	if (size < 1) return 0;
  ------------------
  |  Branch (172:6): [True: 0, False: 427]
  ------------------
  173|       |
  174|    427|	test_server();
  175|       |
  176|    427|	copy = g_strndup((const gchar *)data+1, size-1);
  177|    427|	lines = g_strsplit(copy, "\r\n", -1);
  178|    427|	head = lines;
  179|       |
  180|   767k|	for (; *lines != NULL; lines++) {
  ------------------
  |  Branch (180:9): [True: 767k, False: 427]
  ------------------
  181|   767k|		gchar *prefixedLine;
  182|   767k|		int disconnected;
  183|   767k|		if (prefixedChoice) {
  ------------------
  |  Branch (183:7): [True: 299k, False: 467k]
  ------------------
  184|   299k|			prefixedLine = g_strdup_printf(":user %s\n", *lines);
  185|   467k|		} else {
  186|   467k|			prefixedLine = g_strdup_printf("%s\n", *lines);
  187|   467k|		}
  188|   767k|		server_ref(server);
  189|   767k|		signal_emit("server incoming", 2, server, prefixedLine);
  190|   767k|		disconnected = server->disconnected;
  191|       |		/*
  192|       |		if (disconnected) {
  193|       |		        server_connect_unref(server->connrec);
  194|       |		}
  195|       |		*/
  196|   767k|		server_unref(server);
  197|   767k|		if (disconnected) {
  ------------------
  |  Branch (197:7): [True: 28.9k, False: 738k]
  ------------------
  198|       |			/* reconnect */
  199|  28.9k|			test_server();
  200|  28.9k|		}
  201|   767k|		g_free(prefixedLine);
  202|   767k|	}
  203|       |
  204|    427|	g_strfreev(head);
  205|    427|	g_free(copy);
  206|    427|	server_disconnect(server);
  207|    427|	return 0;
  208|    427|}

bans_init:
  337|      2|{
  338|      2|        default_ban_type_str = NULL;
  339|      2|	settings_add_str("misc", "ban_type", "normal");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  340|       |
  341|      2|	command_bind_irc("ban", NULL, (SIGNAL_FUNC) cmd_ban);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  342|      2|	command_bind_irc("unban", NULL, (SIGNAL_FUNC) cmd_unban);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  343|      2|	command_set_options("ban", "normal user host domain +custom");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  344|      2|	command_set_options("unban", "first last");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  345|       |
  346|      2|        read_settings();
  347|       |        signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  348|      2|}
bans.c:read_settings:
  318|      2|{
  319|      2|	if (default_ban_type_str != NULL &&
  ------------------
  |  Branch (319:6): [True: 0, False: 2]
  ------------------
  320|      0|	    g_strcmp0(default_ban_type_str, settings_get_str("ban_type")) == 0)
  ------------------
  |  Branch (320:6): [True: 0, False: 0]
  ------------------
  321|      0|		return;
  322|       |
  323|      2|	g_free_not_null(default_ban_type_str);
  ------------------
  |  |   64|      2|#define g_free_not_null(a) g_free(a)
  ------------------
  324|      2|	default_ban_type = parse_ban_type(settings_get_str("ban_type"));
  325|      2|	if (default_ban_type <= 0 || default_ban_type_str != NULL) {
  ------------------
  |  Branch (325:6): [True: 0, False: 2]
  |  Branch (325:31): [True: 0, False: 2]
  ------------------
  326|      0|		signal_emit("ban type changed", 1,
  327|      0|			    GINT_TO_POINTER(default_ban_type));
  328|      0|	}
  329|       |
  330|      2|	if (default_ban_type <= 0)
  ------------------
  |  Branch (330:6): [True: 0, False: 2]
  ------------------
  331|      0|                default_ban_type = IRC_MASK_USER|IRC_MASK_DOMAIN;
  ------------------
  |  |    7|      0|#define IRC_MASK_USER   0x02
  ------------------
                              default_ban_type = IRC_MASK_USER|IRC_MASK_DOMAIN;
  ------------------
  |  |    9|      0|#define IRC_MASK_DOMAIN 0x08
  ------------------
  332|       |
  333|      2|	default_ban_type_str = g_strdup(settings_get_str("ban_type"));
  334|      2|}
bans.c:parse_ban_type:
  231|      2|{
  232|      2|	const char *pos;
  233|       |
  234|      2|	g_return_val_if_fail(type != NULL, 0);
  ------------------
  |  Branch (234:2): [True: 2, False: 0]
  |  Branch (234:2): [True: 2, False: 0]
  |  Branch (234:2): [Folded, False: 2]
  ------------------
  235|       |
  236|      2|	if (i_toupper(type[0]) == 'N')
  ------------------
  |  |   72|      2|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
  |  Branch (236:6): [True: 0, False: 0]
  |  Branch (236:6): [True: 0, False: 2]
  |  Branch (236:6): [True: 2, Folded]
  |  Branch (236:6): [True: 2, False: 0]
  ------------------
  237|      2|		return BAN_TYPE_NORMAL;
  ------------------
  |  |   34|      2|#define BAN_TYPE_NORMAL (IRC_MASK_USER | IRC_MASK_DOMAIN)
  |  |  ------------------
  |  |  |  |    7|      2|#define IRC_MASK_USER   0x02
  |  |  ------------------
  |  |               #define BAN_TYPE_NORMAL (IRC_MASK_USER | IRC_MASK_DOMAIN)
  |  |  ------------------
  |  |  |  |    9|      2|#define IRC_MASK_DOMAIN 0x08
  |  |  ------------------
  ------------------
  238|      0|	if (i_toupper(type[0]) == 'U')
  ------------------
  |  |   72|      0|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
  |  Branch (238:6): [True: 0, False: 0]
  |  Branch (238:6): [True: 0, False: 0]
  |  Branch (238:6): [True: 0, Folded]
  |  Branch (238:6): [True: 0, False: 0]
  ------------------
  239|      0|		return BAN_TYPE_USER;
  ------------------
  |  |   35|      0|#define BAN_TYPE_USER (IRC_MASK_USER)
  |  |  ------------------
  |  |  |  |    7|      0|#define IRC_MASK_USER   0x02
  |  |  ------------------
  ------------------
  240|      0|	if (i_toupper(type[0]) == 'H')
  ------------------
  |  |   72|      0|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
  |  Branch (240:6): [True: 0, False: 0]
  |  Branch (240:6): [True: 0, False: 0]
  |  Branch (240:6): [True: 0, Folded]
  |  Branch (240:6): [True: 0, False: 0]
  ------------------
  241|      0|		return BAN_TYPE_HOST;
  ------------------
  |  |   36|      0|#define BAN_TYPE_HOST (IRC_MASK_HOST | IRC_MASK_DOMAIN)
  |  |  ------------------
  |  |  |  |    8|      0|#define IRC_MASK_HOST   0x04
  |  |  ------------------
  |  |               #define BAN_TYPE_HOST (IRC_MASK_HOST | IRC_MASK_DOMAIN)
  |  |  ------------------
  |  |  |  |    9|      0|#define IRC_MASK_DOMAIN 0x08
  |  |  ------------------
  ------------------
  242|      0|	if (i_toupper(type[0]) == 'D')
  ------------------
  |  |   72|      0|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
  |  Branch (242:6): [True: 0, False: 0]
  |  Branch (242:6): [True: 0, False: 0]
  |  Branch (242:6): [True: 0, Folded]
  |  Branch (242:6): [True: 0, False: 0]
  ------------------
  243|      0|		return BAN_TYPE_DOMAIN;
  ------------------
  |  |   37|      0|#define BAN_TYPE_DOMAIN (IRC_MASK_DOMAIN)
  |  |  ------------------
  |  |  |  |    9|      0|#define IRC_MASK_DOMAIN 0x08
  |  |  ------------------
  ------------------
  244|      0|	if (i_toupper(type[0]) == 'C') {
  ------------------
  |  |   72|      0|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
  |  Branch (244:6): [True: 0, False: 0]
  |  Branch (244:6): [True: 0, False: 0]
  |  Branch (244:6): [True: 0, Folded]
  |  Branch (244:6): [True: 0, False: 0]
  ------------------
  245|      0|		pos = strchr(type, ' ');
  246|      0|                if (pos != NULL)
  ------------------
  |  Branch (246:21): [True: 0, False: 0]
  ------------------
  247|      0|			return parse_custom_ban(pos+1);
  248|      0|	}
  249|       |
  250|      0|        return 0;
  251|      0|}

channel_events_init:
  373|      2|{
  374|      2|	settings_add_bool("misc", "join_auto_chans_on_invite", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  375|       |
  376|      2|	signal_add_last("server event", (SIGNAL_FUNC) irc_server_event);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  377|      2|	signal_add_first("event 403", (SIGNAL_FUNC) event_no_such_channel); /* no such channel */
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  378|      2|	signal_add_first("event 407", (SIGNAL_FUNC) event_duplicate_channel); /* duplicate channel */
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  379|       |
  380|      2|	signal_add("event topic", (SIGNAL_FUNC) event_topic);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  381|      2|	signal_add_first("event join", (SIGNAL_FUNC) event_join);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  382|      2|	signal_add("event part", (SIGNAL_FUNC) event_part);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  383|      2|	signal_add("event kick", (SIGNAL_FUNC) event_kick);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  384|      2|	signal_add("event invite", (SIGNAL_FUNC) event_invite);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  385|      2|	signal_add("event 332", (SIGNAL_FUNC) event_topic_get);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  386|       |	signal_add("event 333", (SIGNAL_FUNC) event_topic_info);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  387|      2|}
channel-events.c:irc_server_event:
   56|   762k|{
   57|   762k|	char *params, *numeric, *channel;
   58|       |
   59|       |	/* We'll be checking "4xx <your nick> <channel>" for channels
   60|       |	   which we haven't joined yet. 4xx are error codes and should
   61|       |	   indicate that the join failed. */
   62|   762k|	params = event_get_params(line, 3, &numeric, NULL, &channel);
   63|       |
   64|   762k|	if (numeric[0] == '4')
  ------------------
  |  Branch (64:6): [True: 101k, False: 661k]
  ------------------
   65|   101k|		check_join_failure(server, channel);
   66|       |
   67|   762k|	g_free(params);
   68|   762k|}
channel-events.c:check_join_failure:
   33|   101k|{
   34|   101k|	CHANNEL_REC *chanrec;
   35|   101k|	char *chan2;
   36|       |
   37|   101k|	if (channel[0] == '!' && channel[1] == '!')
  ------------------
  |  Branch (37:6): [True: 4.58k, False: 97.1k]
  |  Branch (37:27): [True: 644, False: 3.94k]
  ------------------
   38|    644|		channel++; /* server didn't understand !channels */
   39|       |
   40|   101k|	chanrec = channel_find(SERVER(server), channel);
  ------------------
  |  |    9|   101k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|   101k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
   41|   101k|	if (chanrec == NULL && channel[0] == '!' && strlen(channel) > 6) {
  ------------------
  |  Branch (41:6): [True: 82.3k, False: 19.3k]
  |  Branch (41:25): [True: 4.07k, False: 78.2k]
  |  Branch (41:46): [True: 1, False: 4.07k]
  ------------------
   42|       |		/* it probably replied with the full !channel name,
   43|       |		   find the channel with the short name.. */
   44|      1|		chan2 = g_strdup_printf("!%s", channel+6);
   45|      1|		chanrec = channel_find(SERVER(server), chan2);
  ------------------
  |  |    9|      1|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|      1|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
   46|      1|		g_free(chan2);
   47|      1|	}
   48|       |
   49|   101k|	if (chanrec != NULL && !chanrec->joined) {
  ------------------
  |  Branch (49:6): [True: 19.3k, False: 82.3k]
  |  Branch (49:25): [True: 0, False: 19.3k]
  ------------------
   50|       |		chanrec->left = TRUE;
   51|      0|		channel_destroy(chanrec);
   52|      0|	}
   53|   101k|}
channel-events.c:event_no_such_channel:
   71|    376|{
   72|    376|	CHANNEL_REC *chanrec;
   73|    376|	CHANNEL_SETUP_REC *setup;
   74|    376|	char *params, *channel;
   75|       |
   76|    376|	params = event_get_params(data, 2, NULL, &channel);
   77|    376|	chanrec = *channel == '!' && channel[1] != '\0' ?
  ------------------
  |  Branch (77:12): [True: 113, False: 263]
  |  Branch (77:31): [True: 113, False: 0]
  ------------------
   78|    376|		channel_find(SERVER(server), channel) : NULL;
  ------------------
  |  |    9|    113|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|    113|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
   79|       |
   80|    376|	if (chanrec != NULL) {
  ------------------
  |  Branch (80:6): [True: 0, False: 376]
  ------------------
   81|       |                /* !channel didn't exist, so join failed */
   82|      0|		setup = channel_setup_find(chanrec->name,
   83|      0|					   chanrec->server->connrec->chatnet);
   84|      0|		if (setup != NULL && setup->autojoin) {
  ------------------
  |  Branch (84:7): [True: 0, False: 0]
  |  Branch (84:24): [True: 0, False: 0]
  ------------------
   85|       |			/* it's autojoin channel though, so create it */
   86|      0|			irc_send_cmdv(server, "JOIN !%s", chanrec->name);
   87|      0|			g_free(params);
   88|      0|                        return;
   89|      0|		}
   90|      0|	}
   91|       |
   92|    376|	check_join_failure(server, channel);
   93|    376|	g_free(params);
   94|    376|}
channel-events.c:event_duplicate_channel:
   97|  2.15k|{
   98|  2.15k|	CHANNEL_REC *chanrec;
   99|  2.15k|	char *params, *channel, *p;
  100|       |
  101|  2.15k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (101:2): [True: 2.15k, False: 0]
  |  Branch (101:2): [True: 2.15k, False: 0]
  |  Branch (101:2): [Folded, False: 2.15k]
  ------------------
  102|       |
  103|       |	/* this new addition to ircd breaks completely with older
  104|       |	   "standards", "nick Duplicate ::!!channel ...." */
  105|  2.15k|	params = event_get_params(data, 3, NULL, NULL, &channel);
  106|  2.15k|	p = strchr(channel, ' ');
  107|  2.15k|	if (p != NULL) *p = '\0';
  ------------------
  |  Branch (107:6): [True: 0, False: 2.15k]
  ------------------
  108|       |
  109|  2.15k|	if (channel[0] == '!') {
  ------------------
  |  Branch (109:6): [True: 1.24k, False: 913]
  ------------------
  110|  1.24k|		chanrec = channel_find(SERVER(server),
  ------------------
  |  |    9|  1.24k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  1.24k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  111|  1.24k|				       channel+(channel[1] == '!'));
  112|  1.24k|		if (chanrec != NULL && !chanrec->names_got) {
  ------------------
  |  Branch (112:7): [True: 269, False: 974]
  |  Branch (112:26): [True: 269, False: 0]
  ------------------
  113|    269|			chanrec->left = TRUE;
  114|    269|			channel_destroy(chanrec);
  115|    269|		}
  116|  1.24k|	}
  117|       |
  118|  2.15k|	g_free(params);
  119|  2.15k|}
channel-events.c:channel_change_topic:
  124|  2.57k|{
  125|  2.57k|	CHANNEL_REC *chanrec;
  126|  2.57k|	char *recoded = NULL;
  127|       |
  128|  2.57k|	chanrec = channel_find(SERVER(server), channel);
  ------------------
  |  |    9|  2.57k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  2.57k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  129|  2.57k|	if (chanrec == NULL) return;
  ------------------
  |  Branch (129:6): [True: 1.12k, False: 1.44k]
  ------------------
  130|       |	/* the topic may be send out encoded, so we need to
  131|       |	   recode it back or /topic <tab> will not work properly */
  132|  1.44k|	recoded = recode_in(SERVER(server), topic, channel);
  ------------------
  |  |    9|  1.44k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  1.44k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  133|  1.44k|	if (topic != NULL) {
  ------------------
  |  Branch (133:6): [True: 1.36k, False: 81]
  ------------------
  134|  1.36k|		g_free_not_null(chanrec->topic);
  ------------------
  |  |   64|  1.36k|#define g_free_not_null(a) g_free(a)
  ------------------
  135|  1.36k|		chanrec->topic = recoded == NULL ? NULL : g_strdup(recoded);
  ------------------
  |  Branch (135:20): [True: 0, False: 1.36k]
  ------------------
  136|  1.36k|	}
  137|  1.44k|	g_free(recoded);
  138|       |
  139|  1.44k|	g_free_not_null(chanrec->topic_by);
  ------------------
  |  |   64|  1.44k|#define g_free_not_null(a) g_free(a)
  ------------------
  140|  1.44k|	chanrec->topic_by = g_strdup(setby);
  141|       |
  142|  1.44k|	if (chanrec->topic_by == NULL) {
  ------------------
  |  Branch (142:6): [True: 1.36k, False: 81]
  ------------------
  143|       |		/* ensure invariant topic_time > 0 <=> topic_by != NULL.
  144|       |		   this could be triggered by a topic command without sender */
  145|  1.36k|		chanrec->topic_time = 0;
  146|  1.36k|	} else {
  147|     81|		chanrec->topic_time = settime;
  148|     81|	}
  149|       |
  150|  1.44k|	signal_emit("channel topic changed", 1, chanrec);
  151|  1.44k|}
channel-events.c:event_join:
  218|   153k|{
  219|   153k|	char *params, *channel, *tmp, *shortchan;
  220|   153k|	IRC_CHANNEL_REC *chanrec;
  221|       |
  222|   153k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (222:2): [True: 153k, False: 0]
  |  Branch (222:2): [True: 153k, False: 0]
  |  Branch (222:2): [Folded, False: 153k]
  ------------------
  223|       |
  224|   153k|	if (g_ascii_strcasecmp(nick, server->nick) != 0) {
  ------------------
  |  Branch (224:6): [True: 35.7k, False: 117k]
  ------------------
  225|       |		/* someone else joined channel, no need to do anything */
  226|  35.7k|		return;
  227|  35.7k|	}
  228|       |
  229|   117k|	if (server->userhost == NULL)
  ------------------
  |  Branch (229:6): [True: 115k, False: 1.79k]
  ------------------
  230|   115k|		server->userhost = g_strdup(address);
  231|       |
  232|   117k|	params = event_get_params(data, 1, &channel);
  233|   117k|	tmp = strchr(channel, 7); /* ^G does something weird.. */
  234|   117k|	if (tmp != NULL) *tmp = '\0';
  ------------------
  |  Branch (234:6): [True: 287, False: 116k]
  ------------------
  235|       |
  236|   117k|	if (*channel != '!' || strlen(channel) < 7)
  ------------------
  |  Branch (236:6): [True: 38.4k, False: 78.7k]
  |  Branch (236:25): [True: 74.1k, False: 4.67k]
  ------------------
  237|   112k|		shortchan = NULL;
  238|  4.67k|	else {
  239|       |		/* !channels have 5 chars long identification string before
  240|       |		   it's name, it's not known when /join is called so rename
  241|       |		   !channel here to !ABCDEchannel */
  242|  4.67k|		shortchan = g_strdup_printf("!%s", channel+6);
  243|  4.67k|		chanrec = channel_find_unjoined(server, shortchan);
  244|  4.67k|		if (chanrec != NULL) {
  ------------------
  |  Branch (244:7): [True: 0, False: 4.67k]
  ------------------
  245|      0|			channel_change_name(CHANNEL(chanrec), channel);
  ------------------
  |  |    8|      0|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|      0|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|      0|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|      0|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  246|      0|			g_free(chanrec->name);
  247|      0|			chanrec->name = g_strdup(channel);
  248|  4.67k|		} else {
  249|       |			/* well, did we join it with full name? if so, and if
  250|       |			   this was the first short one, change it's name. */
  251|  4.67k|			chanrec = channel_find_unjoined(server, channel);
  252|  4.67k|			if (chanrec != NULL &&
  ------------------
  |  Branch (252:8): [True: 0, False: 4.67k]
  ------------------
  253|      0|			    irc_channel_find(server, shortchan) == NULL) {
  ------------------
  |  |   57|      0|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|      0|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|      0|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|      0|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (253:8): [True: 0, False: 0]
  ------------------
  254|      0|				channel_change_visible_name(CHANNEL(chanrec),
  ------------------
  |  |    8|      0|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|      0|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|      0|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|      0|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  255|      0|							    shortchan);
  256|      0|			}
  257|  4.67k|		}
  258|  4.67k|	}
  259|       |
  260|   117k|	chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|   117k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|   117k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|   117k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|   117k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  261|   117k|	if (chanrec != NULL && chanrec->joined) {
  ------------------
  |  Branch (261:6): [True: 90.0k, False: 27.1k]
  |  Branch (261:25): [True: 90.0k, False: 0]
  ------------------
  262|       |		/* already joined this channel - probably a broken proxy that
  263|       |		   forgot to send PART between */
  264|  90.0k|		chanrec->left = TRUE;
  265|  90.0k|		channel_destroy(CHANNEL(chanrec));
  ------------------
  |  |    8|  90.0k|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|  90.0k|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|  90.0k|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|  90.0k|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  266|  90.0k|		chanrec = NULL;
  267|  90.0k|	}
  268|       |
  269|   117k|	if (chanrec == NULL) {
  ------------------
  |  Branch (269:6): [True: 117k, False: 0]
  ------------------
  270|       |		/* look again, because of the channel name cut issues. */
  271|   117k|		chanrec = channel_find_unjoined(server, channel);
  272|   117k|	}
  273|       |
  274|   117k|	if (chanrec == NULL) {
  ------------------
  |  Branch (274:6): [True: 117k, False: 0]
  ------------------
  275|       |		/* didn't get here with /join command.. */
  276|   117k|		chanrec = irc_channel_create(server, channel, shortchan, TRUE);
  277|   117k|	}
  278|       |
  279|   117k|	chanrec->joined = TRUE;
  280|   117k|	if (g_strcmp0(chanrec->name, channel) != 0) {
  ------------------
  |  Branch (280:6): [True: 0, False: 117k]
  ------------------
  281|      0|                g_free(chanrec->name);
  282|      0|		chanrec->name = g_strdup(channel);
  283|      0|	}
  284|       |
  285|   117k|	g_free(shortchan);
  286|   117k|	g_free(params);
  287|   117k|}
channel-events.c:channel_find_unjoined:
  198|   126k|{
  199|   126k|	GSList *tmp;
  200|   126k|	int len;
  201|       |
  202|   126k|	len = strlen(channel);
  203|  17.4M|	for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (203:31): [True: 17.3M, False: 126k]
  ------------------
  204|  17.3M|		IRC_CHANNEL_REC *rec = tmp->data;
  205|       |
  206|  17.3M|		if (!IS_IRC_CHANNEL(rec) || rec->joined)
  ------------------
  |  |   12|  34.6M|	(IRC_CHANNEL(channel) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |    9|  17.3M|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  17.3M|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 17.3M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  17.3M|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (206:7): [True: 0, False: 17.3M]
  |  Branch (206:31): [True: 17.3M, False: 0]
  ------------------
  207|  17.3M|			continue;
  208|       |
  209|      0|		if (g_ascii_strncasecmp(channel, rec->name, len) == 0 &&
  ------------------
  |  Branch (209:7): [True: 0, False: 0]
  ------------------
  210|      0|		    (len > 20 || rec->name[len] == '\0'))
  ------------------
  |  Branch (210:8): [True: 0, False: 0]
  |  Branch (210:20): [True: 0, False: 0]
  ------------------
  211|      0|			return rec;
  212|      0|	}
  213|       |
  214|   126k|	return NULL;
  215|   126k|}
channel-events.c:event_part:
  290|  4.13k|{
  291|  4.13k|	char *params, *channel, *reason;
  292|  4.13k|	CHANNEL_REC *chanrec;
  293|       |
  294|  4.13k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (294:2): [True: 4.13k, False: 0]
  |  Branch (294:2): [True: 4.13k, False: 0]
  |  Branch (294:2): [Folded, False: 4.13k]
  ------------------
  295|       |
  296|  4.13k|	if (g_ascii_strcasecmp(nick, server->nick) != 0) {
  ------------------
  |  Branch (296:6): [True: 363, False: 3.77k]
  ------------------
  297|       |		/* someone else part, no need to do anything here */
  298|    363|		return;
  299|    363|	}
  300|       |
  301|  3.77k|	params = event_get_params(data, 2, &channel, &reason);
  302|       |
  303|  3.77k|	chanrec = channel_find(SERVER(server), channel);
  ------------------
  |  |    9|  3.77k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  3.77k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  304|  3.77k|	if (chanrec != NULL && chanrec->joined) {
  ------------------
  |  Branch (304:6): [True: 2.30k, False: 1.46k]
  |  Branch (304:25): [True: 2.30k, False: 0]
  ------------------
  305|  2.30k|		chanrec->left = TRUE;
  306|  2.30k|		channel_destroy(chanrec);
  307|  2.30k|	}
  308|       |
  309|  3.77k|	g_free(params);
  310|  3.77k|}
channel-events.c:event_kick:
  313|    543|{
  314|    543|	CHANNEL_REC *chanrec;
  315|    543|	char *params, *channel, *nick, *reason;
  316|       |
  317|    543|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (317:2): [True: 543, False: 0]
  |  Branch (317:2): [True: 543, False: 0]
  |  Branch (317:2): [Folded, False: 543]
  ------------------
  318|       |
  319|    543|	params = event_get_params(data, 3, &channel, &nick, &reason);
  320|       |
  321|    543|	if (g_ascii_strcasecmp(nick, server->nick) != 0) {
  ------------------
  |  Branch (321:6): [True: 350, False: 193]
  ------------------
  322|       |		/* someone else was kicked, no need to do anything */
  323|    350|		g_free(params);
  324|    350|		return;
  325|    350|	}
  326|       |
  327|    193|	chanrec = channel_find(SERVER(server), channel);
  ------------------
  |  |    9|    193|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|    193|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  328|    193|	if (chanrec != NULL) {
  ------------------
  |  Branch (328:6): [True: 160, False: 33]
  ------------------
  329|    160|		irc_server_purge_output(server, channel);
  330|    160|		chanrec->kicked = TRUE;
  331|    160|		channel_destroy(chanrec);
  332|    160|	}
  333|       |
  334|    193|	g_free(params);
  335|    193|}
channel-events.c:event_invite:
  338|  7.85k|{
  339|  7.85k|	char *params, *nick, *channel, *shortchan;
  340|       |
  341|  7.85k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (341:2): [True: 7.85k, False: 0]
  |  Branch (341:2): [True: 7.85k, False: 0]
  |  Branch (341:2): [Folded, False: 7.85k]
  ------------------
  342|       |
  343|  7.85k|	params = event_get_params(data, 2, &nick, &channel);
  344|       |
  345|  7.85k|	if (server->nick_comp_func(nick, server->nick) != 0) {
  ------------------
  |  Branch (345:6): [True: 2.54k, False: 5.30k]
  ------------------
  346|       |		/* someone else was invited, no need to do anything */
  347|  2.54k|		g_free(params);
  348|  2.54k|		return;
  349|  2.54k|	}
  350|       |
  351|  5.30k|	if (irc_channel_find(server, channel) == NULL) {
  ------------------
  |  |   57|  5.30k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|  5.30k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  5.30k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|  5.30k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (351:6): [True: 5.30k, False: 0]
  ------------------
  352|       |                /* check if we're supposed to autojoin this channel */
  353|  5.30k|		CHANNEL_SETUP_REC *setup;
  354|       |
  355|  5.30k|		setup = channel_setup_find(channel, server->connrec->chatnet);
  356|  5.30k|		if (setup == NULL && channel[0] == '!' &&
  ------------------
  |  Branch (356:7): [True: 5.30k, False: 0]
  |  Branch (356:24): [True: 2.89k, False: 2.41k]
  ------------------
  357|  2.89k|		    strlen(channel) > 6) {
  ------------------
  |  Branch (357:7): [True: 1.38k, False: 1.51k]
  ------------------
  358|  1.38k|			shortchan = g_strdup_printf("!%s", channel+6);
  359|  1.38k|			setup = channel_setup_find(shortchan,
  360|  1.38k|						   server->connrec->chatnet);
  361|  1.38k|			g_free(shortchan);
  362|  1.38k|		}
  363|  5.30k|		if (setup != NULL && setup->autojoin && settings_get_bool("join_auto_chans_on_invite"))
  ------------------
  |  Branch (363:7): [True: 0, False: 5.30k]
  |  Branch (363:24): [True: 0, False: 0]
  |  Branch (363:43): [True: 0, False: 0]
  ------------------
  364|      0|			server->channels_join(SERVER(server), channel, TRUE);
  ------------------
  |  |    9|      0|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|      0|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  365|  5.30k|	}
  366|       |
  367|  5.30k|	g_free_not_null(server->last_invite);
  ------------------
  |  |   64|  5.30k|#define g_free_not_null(a) g_free(a)
  ------------------
  368|  5.30k|	server->last_invite = g_strdup(channel);
  369|  5.30k|	g_free(params);
  370|  5.30k|}
channel-events.c:event_topic_get:
  154|  1.36k|{
  155|  1.36k|	char *params, *channel, *topic;
  156|       |
  157|  1.36k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (157:2): [True: 1.36k, False: 0]
  |  Branch (157:2): [True: 1.36k, False: 0]
  |  Branch (157:2): [Folded, False: 1.36k]
  ------------------
  158|       |
  159|  1.36k|	params = event_get_params(data, 3, NULL, &channel, &topic);
  160|       |	channel_change_topic(server, channel, topic, NULL, 0);
  161|  1.36k|	g_free(params);
  162|  1.36k|}
channel-events.c:event_topic_info:
  180|  1.20k|{
  181|  1.20k|	char *params, *channel, *topicby, *topictime;
  182|  1.20k|	time_t t;
  183|       |
  184|  1.20k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (184:2): [True: 1.20k, False: 0]
  |  Branch (184:2): [True: 1.20k, False: 0]
  |  Branch (184:2): [Folded, False: 1.20k]
  ------------------
  185|       |
  186|  1.20k|	params = event_get_params(data, 4, NULL, &channel,
  187|  1.20k|				  &topicby, &topictime);
  188|       |
  189|  1.20k|	t = (time_t) atol(topictime);
  190|       |	channel_change_topic(server, channel, NULL, topicby, t);
  191|  1.20k|	g_free(params);
  192|  1.20k|}

channel_rejoin_init:
  262|      2|{
  263|      2|	settings_add_bool("servers", "channels_rejoin_unavailable", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  264|       |
  265|      2|	rejoin_tag = g_timeout_add(REJOIN_TIMEOUT,
  ------------------
  |  |   32|      2|#define REJOIN_TIMEOUT (1000*60*5) /* try to rejoin every 5 minutes */
  ------------------
  266|      2|				   (GSourceFunc) sig_rejoin, NULL);
  267|       |
  268|      2|	command_bind_irc("rmrejoins", NULL, (SIGNAL_FUNC) cmd_rmrejoins);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|      2|	signal_add_first("event 407", (SIGNAL_FUNC) event_duplicate_channel);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  270|      2|	signal_add_first("event 437", (SIGNAL_FUNC) event_target_unavailable);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  271|      2|	signal_add_first("channel joined", (SIGNAL_FUNC) sig_remove_rejoin);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  272|      2|	signal_add_first("channel destroyed", (SIGNAL_FUNC) sig_remove_rejoin);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  273|       |	signal_add("server disconnected", (SIGNAL_FUNC) sig_disconnected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  274|      2|}
channel-rejoin.c:event_duplicate_channel:
  115|  2.15k|{
  116|  2.15k|	CHANNEL_REC *chanrec;
  117|  2.15k|	char *params, *channel, *p;
  118|       |
  119|  2.15k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (119:2): [True: 2.15k, False: 0]
  |  Branch (119:2): [True: 2.15k, False: 0]
  |  Branch (119:2): [Folded, False: 2.15k]
  ------------------
  120|       |
  121|  2.15k|	params = event_get_params(data, 3, NULL, NULL, &channel);
  122|  2.15k|	p = strchr(channel, ' ');
  123|  2.15k|	if (p != NULL) *p = '\0';
  ------------------
  |  Branch (123:6): [True: 0, False: 2.15k]
  ------------------
  124|       |
  125|  2.15k|	if (channel[0] == '!' && channel[1] != '!') {
  ------------------
  |  Branch (125:6): [True: 1.24k, False: 913]
  |  Branch (125:27): [True: 979, False: 264]
  ------------------
  126|    979|		chanrec = channel_find(SERVER(server), channel);
  ------------------
  |  |    9|    979|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|    979|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  127|    979|		if (chanrec != NULL && !chanrec->names_got) {
  ------------------
  |  Branch (127:7): [True: 269, False: 710]
  |  Branch (127:26): [True: 269, False: 0]
  ------------------
  128|       |			/* duplicate channel - this should only happen when
  129|       |			   there's some sync problem with servers, rejoining
  130|       |			   after a while should help.
  131|       |
  132|       |			   note that this same 407 is sent when trying to
  133|       |			   create !!channel that already exists so we don't
  134|       |			   want to try rejoining then. */
  135|    269|			if (channel_rejoin(server, channel)) {
  ------------------
  |  Branch (135:8): [True: 0, False: 269]
  ------------------
  136|      0|				signal_stop();
  137|      0|			}
  138|    269|		}
  139|    979|	}
  140|       |
  141|  2.15k|	g_free(params);
  142|  2.15k|}
channel-rejoin.c:channel_rejoin:
   72|  2.21k|{
   73|  2.21k|	IRC_CHANNEL_REC *chanrec;
   74|  2.21k|	REJOIN_REC *rec;
   75|       |
   76|  2.21k|	g_return_val_if_fail(IS_IRC_SERVER(server), 0);
  ------------------
  |  Branch (76:2): [True: 2.21k, False: 0]
  |  Branch (76:2): [True: 2.21k, False: 0]
  |  Branch (76:2): [True: 2.21k, False: 0]
  |  Branch (76:2): [Folded, False: 2.21k]
  ------------------
   77|  2.21k|	g_return_val_if_fail(channel != NULL, 0);
  ------------------
  |  Branch (77:2): [True: 2.21k, False: 0]
  |  Branch (77:2): [True: 2.21k, False: 0]
  |  Branch (77:2): [Folded, False: 2.21k]
  ------------------
   78|       |
   79|  2.21k|	chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|  2.21k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|  2.21k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  2.21k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|  2.21k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|  2.21k|	if (chanrec == NULL || chanrec->joined) return 0;
  ------------------
  |  Branch (80:6): [True: 1.94k, False: 269]
  |  Branch (80:25): [True: 269, False: 0]
  ------------------
   81|       |
   82|      0|	if (!settings_get_bool("channels_rejoin_unavailable")) {
  ------------------
  |  Branch (82:6): [True: 0, False: 0]
  ------------------
   83|      0|		chanrec->left = TRUE;
   84|      0|		channel_destroy(CHANNEL(chanrec));
  ------------------
  |  |    8|      0|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|      0|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|      0|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|      0|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
   85|      0|		return 0;
   86|      0|	}
   87|       |
   88|      0|	rec = rejoin_find(server, channel);
   89|      0|	if (rec != NULL) {
  ------------------
  |  Branch (89:6): [True: 0, False: 0]
  ------------------
   90|       |		/* already exists */
   91|      0|		rec->joining = FALSE;
   92|       |
   93|       |		/* update channel key */
   94|      0|		g_free_and_null(rec->key);
  ------------------
  |  |   67|      0|	G_STMT_START { \
  |  |   68|      0|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   69|      0|	} G_STMT_END
  ------------------
  |  Branch (94:3): [Folded, False: 0]
  ------------------
   95|      0|		if (channel_have_key(chanrec))
  ------------------
  |  |   69|      0|	((chan) != NULL && (chan)->key != NULL && (chan)->key[0] != '\0')
  |  |  ------------------
  |  |  |  Branch (69:3): [True: 0, False: 0]
  |  |  |  Branch (69:21): [True: 0, False: 0]
  |  |  |  Branch (69:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   96|      0|			rec->key = g_strdup(chanrec->key);
   97|      0|	} else {
   98|       |		/* new rejoin */
   99|      0|		rec = g_new0(REJOIN_REC, 1);
  ------------------
  |  Branch (99:9): [True: 0, False: 0]
  |  Branch (99:9): [True: 0, False: 0]
  ------------------
  100|      0|		rec->channel = g_strdup(channel);
  101|      0|		if (channel_have_key(chanrec))
  ------------------
  |  |   69|      0|	((chan) != NULL && (chan)->key != NULL && (chan)->key[0] != '\0')
  |  |  ------------------
  |  |  |  Branch (69:3): [True: 0, False: 0]
  |  |  |  Branch (69:21): [True: 0, False: 0]
  |  |  |  Branch (69:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  102|      0|			rec->key = g_strdup(chanrec->key);
  103|       |
  104|      0|		server->rejoin_channels =
  105|      0|			g_slist_append(server->rejoin_channels, rec);
  106|      0|		signal_emit("channel rejoin new", 2, server, rec);
  107|      0|	}
  108|       |
  109|      0|	chanrec->left = TRUE;
  110|       |	channel_destroy(CHANNEL(chanrec));
  ------------------
  |  |    8|      0|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|      0|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|      0|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|      0|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  111|      0|	return 1;
  112|      0|}
channel-rejoin.c:rejoin_find:
   52|   122k|{
   53|   122k|	GSList *tmp;
   54|       |
   55|   122k|	g_return_val_if_fail(IS_IRC_SERVER(server), NULL);
  ------------------
  |  Branch (55:2): [True: 122k, False: 0]
  |  Branch (55:2): [True: 122k, False: 0]
  |  Branch (55:2): [True: 122k, False: 0]
  |  Branch (55:2): [Folded, False: 122k]
  ------------------
   56|   122k|	g_return_val_if_fail(channel != NULL, NULL);
  ------------------
  |  Branch (56:2): [True: 122k, False: 0]
  |  Branch (56:2): [True: 122k, False: 0]
  |  Branch (56:2): [Folded, False: 122k]
  ------------------
   57|       |
   58|   122k|	for (tmp = server->rejoin_channels; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (58:38): [True: 0, False: 122k]
  ------------------
   59|      0|                REJOIN_REC *rec = tmp->data;
   60|       |
   61|      0|		if (g_ascii_strcasecmp(rec->channel, channel) == 0)
  ------------------
  |  Branch (61:7): [True: 0, False: 0]
  ------------------
   62|      0|                        return rec;
   63|      0|	}
   64|       |
   65|   122k|	return NULL;
   66|   122k|}
channel-rejoin.c:event_target_unavailable:
  145|  8.73k|{
  146|  8.73k|	char *params, *channel;
  147|  8.73k|	IRC_CHANNEL_REC *chanrec;
  148|       |
  149|  8.73k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (149:2): [True: 8.73k, False: 0]
  |  Branch (149:2): [True: 8.73k, False: 0]
  |  Branch (149:2): [Folded, False: 8.73k]
  ------------------
  150|       |
  151|  8.73k|	params = event_get_params(data, 2, NULL, &channel);
  152|  8.73k|	if (server_ischannel(SERVER(server), channel)) {
  ------------------
  |  |   22|  8.73k|	((server)->ischannel(server, channel))
  |  |  ------------------
  |  |  |  Branch (22:2): [True: 5.04k, False: 3.69k]
  |  |  ------------------
  ------------------
  153|  5.04k|		chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|  5.04k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|  5.04k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  5.04k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|  5.04k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  154|  5.04k|		if (chanrec != NULL && chanrec->joined) {
  ------------------
  |  Branch (154:7): [True: 3.10k, False: 1.94k]
  |  Branch (154:26): [True: 3.10k, False: 0]
  ------------------
  155|       |			/* dalnet event - can't change nick while
  156|       |			   banned in channel */
  157|  3.10k|		} else {
  158|       |			/* channel is unavailable - try to join again
  159|       |			   a bit later */
  160|  1.94k|			if (channel_rejoin(server, channel)) {
  ------------------
  |  Branch (160:8): [True: 0, False: 1.94k]
  ------------------
  161|      0|				signal_stop();
  162|      0|			}
  163|  1.94k|		}
  164|  5.04k|	}
  165|       |
  166|  8.73k|	g_free(params);
  167|  8.73k|}
channel-rejoin.c:sig_remove_rejoin:
  172|   122k|{
  173|   122k|	REJOIN_REC *rec;
  174|       |
  175|   122k|	if (!IS_IRC_CHANNEL(channel))
  ------------------
  |  |   12|   122k|	(IRC_CHANNEL(channel) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |    9|   122k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|   122k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 122k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|   122k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (175:6): [True: 0, False: 122k]
  ------------------
  176|      0|		return;
  177|       |
  178|   122k|	rec = rejoin_find(channel->server, channel->name);
  179|   122k|	if (rec != NULL && rec->joining) {
  ------------------
  |  Branch (179:6): [True: 0, False: 122k]
  |  Branch (179:21): [True: 0, False: 0]
  ------------------
  180|       |		/* join failed, remove the rejoin */
  181|      0|		rejoin_destroy(channel->server, rec);
  182|      0|	}
  183|   122k|}
channel-rejoin.c:sig_disconnected:
  186|  29.4k|{
  187|  29.4k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (187:6): [True: 0, False: 29.4k]
  ------------------
  188|      0|		return;
  189|       |
  190|  29.4k|	while (server->rejoin_channels != NULL)
  ------------------
  |  Branch (190:9): [True: 0, False: 29.4k]
  ------------------
  191|      0|		rejoin_destroy(server, server->rejoin_channels->data);
  192|  29.4k|}

irc_channels_query_purge_accountquery:
  407|  11.8k|{
  408|  11.8k|	GSList *tmp, *next, *prev;
  409|  11.8k|	REDIRECT_REC *redirect;
  410|  11.8k|	char *cmd, *target_cmd;
  411|  11.8k|	gboolean was_removed;
  412|       |
  413|       |	/* remove the marker */
  414|  11.8k|	was_removed = g_hash_table_remove(server->chanqueries->accountqueries, nick);
  415|       |
  416|       |	/* if it was removed we may have an outstanding query */
  417|  11.8k|	if (was_removed) {
  ------------------
  |  Branch (417:6): [True: 0, False: 11.8k]
  ------------------
  418|      0|		target_cmd = g_strdup_printf(WHOX_USERACCOUNT_CMD "\r\n", nick);
  ------------------
  |  |   67|      0|#define WHOX_USERACCOUNT_CMD "WHO %s %%tna," WHOX_USERACCOUNT_ID
  ------------------
  419|       |
  420|       |		/* remove queued WHO command */
  421|      0|		prev = NULL;
  422|      0|		for (tmp = server->cmdqueue; tmp != NULL; tmp = next) {
  ------------------
  |  Branch (422:32): [True: 0, False: 0]
  ------------------
  423|      0|			next = tmp->next->next;
  424|      0|			cmd = tmp->data;
  425|      0|			redirect = tmp->next->data;
  426|       |
  427|      0|			if (g_strcmp0(cmd, target_cmd) == 0) {
  ------------------
  |  Branch (427:8): [True: 0, False: 0]
  ------------------
  428|      0|				if (prev != NULL)
  ------------------
  |  Branch (428:9): [True: 0, False: 0]
  ------------------
  429|      0|					prev->next = next;
  430|      0|				else
  431|      0|					server->cmdqueue = next;
  432|       |
  433|       |				/* remove the redirection */
  434|      0|				g_slist_free_1(tmp->next);
  435|      0|				if (redirect != NULL)
  ------------------
  |  Branch (435:9): [True: 0, False: 0]
  ------------------
  436|      0|					server_redirect_destroy(redirect);
  437|       |
  438|       |				/* remove the command */
  439|      0|				g_slist_free_1(tmp);
  440|      0|				g_free(cmd);
  441|       |
  442|      0|				server->cmdcount--;
  443|      0|				server->cmdlater--;
  444|      0|			} else {
  445|      0|				prev = tmp->next;
  446|      0|			}
  447|      0|		}
  448|       |
  449|      0|		g_free(target_cmd);
  450|      0|	}
  451|  11.8k|}
channels_query_init:
  639|      2|{
  640|      2|	settings_add_bool("misc", "channel_sync", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  641|      2|	settings_add_int("misc", "channel_max_who_sync", 1000);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  642|      2|	settings_add_int("misc", "account_max_chase", 10);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  643|       |
  644|      2|	signal_add("server connected", (SIGNAL_FUNC) sig_connected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  645|      2|	signal_add("server disconnected", (SIGNAL_FUNC) sig_disconnected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  646|      2|	signal_add("channel joined", (SIGNAL_FUNC) sig_channel_joined);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  647|      2|	signal_add("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  648|       |
  649|      2|	signal_add("event join", (SIGNAL_FUNC) sig_event_join);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  650|       |
  651|      2|	signal_add("chanquery mode", (SIGNAL_FUNC) event_channel_mode);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  652|      2|	signal_add("chanquery who end", (SIGNAL_FUNC) event_end_of_who);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  653|       |
  654|      2|	signal_add("chanquery ban end", (SIGNAL_FUNC) event_end_of_banlist);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  655|      2|	signal_add("chanquery abort", (SIGNAL_FUNC) query_current_error);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  656|       |	signal_add("chanquery useraccount abort", (SIGNAL_FUNC) query_useraccount_error);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  657|      2|}
channels-query.c:sig_connected:
   70|  29.4k|{
   71|  29.4k|	SERVER_QUERY_REC *rec;
   72|       |
   73|  29.4k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (73:2): [True: 29.4k, False: 0]
  |  Branch (73:2): [True: 29.4k, False: 0]
  |  Branch (73:2): [Folded, False: 29.4k]
  ------------------
   74|  29.4k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (74:6): [True: 0, False: 29.4k]
  ------------------
   75|      0|		return;
   76|       |
   77|  29.4k|	rec = g_new0(SERVER_QUERY_REC, 1);
  ------------------
  |  Branch (77:8): [True: 29.4k, False: 0]
  |  Branch (77:8): [True: 0, False: 29.4k]
  ------------------
   78|  29.4k|	rec->accountqueries = g_hash_table_new_full(
   79|       |	    (GHashFunc) i_istr_hash, (GCompareFunc) i_istr_equal, (GDestroyNotify) g_free, NULL);
   80|  29.4k|	server->chanqueries = rec;
   81|  29.4k|}
channels-query.c:sig_disconnected:
   84|  29.4k|{
   85|  29.4k|	SERVER_QUERY_REC *rec;
   86|  29.4k|	int n;
   87|       |
   88|  29.4k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (88:2): [True: 29.4k, False: 0]
  |  Branch (88:2): [True: 29.4k, False: 0]
  |  Branch (88:2): [Folded, False: 29.4k]
  ------------------
   89|  29.4k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (89:6): [True: 0, False: 29.4k]
  ------------------
   90|      0|		return;
   91|       |
   92|  29.4k|	rec = server->chanqueries;
   93|  29.4k|	if (rec == NULL)
  ------------------
  |  Branch (93:6): [True: 0, False: 29.4k]
  ------------------
   94|      0|		return;
   95|  29.4k|	g_return_if_fail(rec != NULL);
  ------------------
  |  Branch (95:2): [True: 29.4k, False: 0]
  |  Branch (95:2): [True: 29.4k, False: 0]
  |  Branch (95:2): [Folded, False: 29.4k]
  ------------------
   96|       |
   97|  29.4k|	g_hash_table_destroy(rec->accountqueries);
   98|   117k|	for (n = 0; n < CHANNEL_QUERIES; n++)
  ------------------
  |  Branch (98:14): [True: 88.2k, False: 29.4k]
  ------------------
   99|  88.2k|		g_slist_free(rec->queries[n]);
  100|  29.4k|        g_slist_free(rec->current_queries);
  101|  29.4k|	g_free(rec);
  102|       |
  103|       |        server->chanqueries = NULL;
  104|  29.4k|}
channels-query.c:sig_channel_joined:
  368|  5.26k|{
  369|  5.26k|	if (!IS_IRC_CHANNEL(channel))
  ------------------
  |  |   12|  5.26k|	(IRC_CHANNEL(channel) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |    9|  5.26k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  5.26k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 5.26k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  5.26k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (369:6): [True: 0, False: 5.26k]
  ------------------
  370|      0|		return;
  371|       |
  372|  5.26k|	if (!settings_get_bool("channel_sync"))
  ------------------
  |  Branch (372:6): [True: 0, False: 5.26k]
  ------------------
  373|      0|		return;
  374|       |
  375|       |	/* Add channel to query lists */
  376|  5.26k|	if (!channel->no_modes)
  ------------------
  |  Branch (376:6): [True: 4.75k, False: 516]
  ------------------
  377|  4.75k|		query_add_channel(channel, CHANNEL_QUERY_MODE);
  378|  5.26k|	if (g_hash_table_size(channel->nicks) <
  ------------------
  |  Branch (378:6): [True: 5.24k, False: 20]
  ------------------
  379|  5.26k|	    settings_get_int("channel_max_who_sync"))
  380|  5.24k|		query_add_channel(channel, CHANNEL_QUERY_WHO);
  381|  5.26k|	if (!channel->no_modes)
  ------------------
  |  Branch (381:6): [True: 4.75k, False: 516]
  ------------------
  382|  4.75k|		query_add_channel(channel, CHANNEL_QUERY_BMODE);
  383|       |
  384|  5.26k|	query_check(channel->server);
  385|  5.26k|}
channels-query.c:query_add_channel:
  108|  14.7k|{
  109|  14.7k|	SERVER_QUERY_REC *rec;
  110|       |
  111|  14.7k|	g_return_if_fail(channel != NULL);
  ------------------
  |  Branch (111:2): [True: 14.7k, False: 0]
  |  Branch (111:2): [True: 14.7k, False: 0]
  |  Branch (111:2): [Folded, False: 14.7k]
  ------------------
  112|       |
  113|  14.7k|	rec = channel->server->chanqueries;
  114|  14.7k|	rec->queries[query_type] =
  115|  14.7k|		g_slist_append(rec->queries[query_type], channel);
  116|  14.7k|}
channels-query.c:query_check:
  276|  98.0k|{
  277|  98.0k|	SERVER_QUERY_REC *rec;
  278|  98.0k|        int query;
  279|       |
  280|  98.0k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (280:2): [True: 98.0k, False: 0]
  |  Branch (280:2): [True: 98.0k, False: 0]
  |  Branch (280:2): [Folded, False: 98.0k]
  ------------------
  281|       |
  282|  98.0k|	rec = server->chanqueries;
  283|  98.0k|	if (rec->current_queries != NULL)
  ------------------
  |  Branch (283:6): [True: 19.7k, False: 78.3k]
  ------------------
  284|  19.7k|                return; /* old queries haven't been answered yet */
  285|       |
  286|  78.3k|	if (server->max_query_chans > 1 && !server->no_multi_who && !server->no_multi_mode && !channels_have_all_names(server)) {
  ------------------
  |  Branch (286:6): [True: 0, False: 78.3k]
  |  Branch (286:37): [True: 0, False: 0]
  |  Branch (286:62): [True: 0, False: 0]
  |  Branch (286:88): [True: 0, False: 0]
  ------------------
  287|       |		/* all channels haven't sent /NAMES list yet */
  288|       |		/* only do this if there would be a benefit in combining
  289|       |		 * queries -- jilles */
  290|      0|		return;
  291|      0|	}
  292|       |
  293|  78.3k|	query = query_find_next(rec);
  294|  78.3k|	if (query == -1) {
  ------------------
  |  Branch (294:6): [True: 74.6k, False: 3.70k]
  ------------------
  295|       |		/* no queries left */
  296|  74.6k|		return;
  297|  74.6k|	}
  298|       |
  299|  3.70k|        query_send(server, query);
  300|  3.70k|}
channels-query.c:query_find_next:
  160|  78.3k|{
  161|  78.3k|	int n;
  162|       |
  163|   302k|	for (n = 0; n < CHANNEL_QUERIES; n++) {
  ------------------
  |  Branch (163:14): [True: 227k, False: 74.6k]
  ------------------
  164|   227k|		if (server->queries[n] != NULL)
  ------------------
  |  Branch (164:7): [True: 3.70k, False: 224k]
  ------------------
  165|  3.70k|			return n;
  166|   227k|	}
  167|       |
  168|  74.6k|	return -1;
  169|  78.3k|}
channels-query.c:query_send:
  172|  3.70k|{
  173|  3.70k|	SERVER_QUERY_REC *rec;
  174|  3.70k|	IRC_CHANNEL_REC *chanrec;
  175|  3.70k|	GSList *chans;
  176|  3.70k|	char *cmd, *chanstr_commas, *chanstr;
  177|  3.70k|	int onlyone, count;
  178|       |
  179|  3.70k|	rec = server->chanqueries;
  180|       |
  181|       |        /* get the list of channels to query */
  182|  3.70k|	onlyone = (server->no_multi_who && query == CHANNEL_QUERY_WHO) ||
  ------------------
  |  Branch (182:13): [True: 0, False: 3.70k]
  |  Branch (182:37): [True: 0, False: 0]
  ------------------
  183|  3.70k|		(server->no_multi_mode && CHANNEL_IS_MODE_QUERY(query));
  ------------------
  |  |   26|      0|#define CHANNEL_IS_MODE_QUERY(a) ((a) != CHANNEL_QUERY_WHO)
  |  |  ------------------
  |  |  |  Branch (26:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (183:4): [True: 0, False: 3.70k]
  ------------------
  184|       |
  185|  3.70k|	if (onlyone) {
  ------------------
  |  Branch (185:6): [True: 0, False: 3.70k]
  ------------------
  186|      0|                chans = rec->queries[query];
  187|      0|		rec->queries[query] =
  188|      0|			g_slist_remove_link(rec->queries[query], chans);
  189|       |
  190|      0|		chanrec = chans->data;
  191|      0|		chanstr_commas = g_strdup(chanrec->name);
  192|      0|		chanstr = g_strdup(chanrec->name);
  193|      0|                count = 1;
  194|  3.70k|	} else {
  195|  3.70k|		char *chanstr_spaces;
  196|       |
  197|  3.70k|		chans = rec->queries[query];
  198|  3.70k|                count = g_slist_length(chans);
  199|       |
  200|  3.70k|		if (count > server->max_query_chans) {
  ------------------
  |  Branch (200:7): [True: 283, False: 3.41k]
  ------------------
  201|    283|			GSList *lastchan;
  202|       |
  203|    283|			lastchan = g_slist_nth(rec->queries[query],
  204|    283|					       server->max_query_chans-1);
  205|    283|                        count = server->max_query_chans;
  206|    283|			rec->queries[query] = lastchan->next;
  207|    283|			lastchan->next = NULL;
  208|  3.41k|		} else {
  209|  3.41k|                        rec->queries[query] = NULL;
  210|  3.41k|		}
  211|       |
  212|  3.70k|		chanstr_commas = gslistptr_to_string(chans, G_STRUCT_OFFSET(IRC_CHANNEL_REC, name), ",");
  213|  3.70k|		chanstr_spaces = gslistptr_to_string(chans, G_STRUCT_OFFSET(IRC_CHANNEL_REC, name), " ");
  214|       |
  215|  3.70k|		chanstr = g_strconcat(chanstr_commas, " ", chanstr_spaces, NULL);
  216|  3.70k|		g_free(chanstr_spaces);
  217|  3.70k|	}
  218|       |
  219|  3.70k|	rec->current_query_type = query;
  220|  3.70k|        rec->current_queries = chans;
  221|       |
  222|  3.70k|	switch (query) {
  223|  3.47k|	case CHANNEL_QUERY_MODE:
  ------------------
  |  Branch (223:2): [True: 3.47k, False: 225]
  ------------------
  224|  3.47k|		cmd = g_strdup_printf("MODE %s", chanstr_commas);
  225|       |
  226|       |		/* the stop-event is received once for each channel,
  227|       |		   and we want to print 329 event (channel created). */
  228|  3.47k|		server_redirect_event(server, "mode channel", count,
  229|  3.47k|				      chanstr, -1, "chanquery abort",
  230|  3.47k|				      "event 324", "chanquery mode",
  231|  3.47k|                                      "event 329", "event 329",
  232|  3.47k|				      "", "chanquery abort", NULL);
  233|  3.47k|		break;
  234|       |
  235|    225|	case CHANNEL_QUERY_WHO:
  ------------------
  |  Branch (235:2): [True: 225, False: 3.47k]
  ------------------
  236|    225|		if (server->isupport != NULL &&
  ------------------
  |  Branch (236:7): [True: 225, False: 0]
  ------------------
  237|    225|		    g_hash_table_lookup(server->isupport, "whox") != NULL) {
  ------------------
  |  Branch (237:7): [True: 0, False: 225]
  ------------------
  238|      0|			cmd = g_strdup_printf(WHOX_CHANNEL_FULL_CMD, chanstr_commas);
  ------------------
  |  |   66|      0|#define WHOX_CHANNEL_FULL_CMD "WHO %s %%tcuhnfdar," WHOX_CHANNEL_FULL_ID
  |  |  ------------------
  |  |  |  |   23|      0|#define WHOX_CHANNEL_FULL_ID "743"
  |  |  ------------------
  ------------------
  239|    225|		} else {
  240|    225|			cmd = g_strdup_printf("WHO %s", chanstr_commas);
  241|    225|		}
  242|       |
  243|    225|		server_redirect_event(server, "who", server->one_endofwho ? 1 : count, chanstr, -1,
  ------------------
  |  Branch (243:40): [True: 0, False: 225]
  ------------------
  244|    225|		                      "chanquery abort",                /* failure signal */
  245|    225|		                      "event 315", "chanquery who end", /* */
  246|    225|		                      "event 352", "silent event who",  /* */
  247|    225|		                      "event 354", "silent event whox", /* */
  248|    225|		                      "", "chanquery abort", NULL);
  249|    225|		break;
  250|       |
  251|      0|	case CHANNEL_QUERY_BMODE:
  ------------------
  |  Branch (251:2): [True: 0, False: 3.70k]
  ------------------
  252|      0|		cmd = g_strdup_printf("MODE %s b", chanstr_commas);
  253|       |		/* check all the multichannel problems with all
  254|       |		   mode requests - if channels are joined manually
  255|       |		   irssi could ask modes separately but afterwards
  256|       |		   join the two b/e/I modes together */
  257|      0|		server_redirect_event(server, "mode b", count, chanstr, -1,
  258|      0|				      "chanquery abort",
  259|      0|				      "event 367", "chanquery ban",
  260|      0|				      "event 368", "chanquery ban end",
  261|      0|				      "", "chanquery abort", NULL);
  262|      0|		break;
  263|       |
  264|      0|	default:
  ------------------
  |  Branch (264:2): [True: 0, False: 3.70k]
  ------------------
  265|      0|                cmd = NULL;
  266|  3.70k|	}
  267|       |
  268|  3.70k|	irc_send_cmd_later(server, cmd);
  269|       |
  270|  3.70k|	g_free(chanstr);
  271|  3.70k|	g_free(chanstr_commas);
  272|  3.70k|	g_free(cmd);
  273|  3.70k|}
channels-query.c:sig_channel_destroyed:
  138|   117k|{
  139|   117k|	g_return_if_fail(channel != NULL);
  ------------------
  |  Branch (139:2): [True: 117k, False: 0]
  |  Branch (139:2): [True: 117k, False: 0]
  |  Branch (139:2): [Folded, False: 117k]
  ------------------
  140|       |
  141|   117k|	if (IS_IRC_CHANNEL(channel))
  ------------------
  |  |   12|   117k|	(IRC_CHANNEL(channel) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |    9|   117k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|   117k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 117k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|   117k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (12:2): [True: 117k, False: 0]
  |  |  ------------------
  ------------------
  142|   117k|		query_remove_all(channel);
  143|   117k|}
channels-query.c:query_remove_all:
  121|   117k|{
  122|   117k|	SERVER_QUERY_REC *rec;
  123|   117k|	int n;
  124|       |
  125|   117k|	rec = channel->server->chanqueries;
  126|   117k|	if (rec == NULL) return;
  ------------------
  |  Branch (126:6): [True: 24.4k, False: 92.8k]
  ------------------
  127|       |
  128|       |	/* remove channel from query lists */
  129|   371k|	for (n = 0; n < CHANNEL_QUERIES; n++)
  ------------------
  |  Branch (129:14): [True: 278k, False: 92.8k]
  ------------------
  130|   278k|		rec->queries[n] = g_slist_remove(rec->queries[n], channel);
  131|  92.8k|	rec->current_queries = g_slist_remove(rec->current_queries, channel);
  132|       |
  133|  92.8k|	if (!channel->server->disconnected)
  ------------------
  |  Branch (133:6): [True: 92.8k, False: 0]
  ------------------
  134|  92.8k|		query_check(channel->server);
  135|  92.8k|}
channels-query.c:sig_event_join:
  461|   153k|{
  462|   153k|	char *params, *channel, *ptr, *account;
  463|   153k|	GSList *nicks, *tmp;
  464|   153k|	IRC_CHANNEL_REC *chanrec;
  465|   153k|	NICK_REC *nickrec;
  466|       |
  467|   153k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (467:2): [True: 153k, False: 0]
  |  Branch (467:2): [True: 153k, False: 0]
  |  Branch (467:2): [Folded, False: 153k]
  ------------------
  468|       |
  469|   153k|	if (i_slist_find_string(server->cap_active, CAP_EXTENDED_JOIN)) {
  ------------------
  |  |   22|   153k|#define CAP_EXTENDED_JOIN "extended-join"
  ------------------
  |  Branch (469:6): [True: 0, False: 153k]
  ------------------
  470|       |		/* no need to chase accounts */
  471|      0|		return;
  472|      0|	}
  473|       |
  474|   153k|	if (g_ascii_strcasecmp(nick, server->nick) == 0) {
  ------------------
  |  Branch (474:6): [True: 117k, False: 35.7k]
  ------------------
  475|       |		/* You joined, do nothing */
  476|   117k|		return;
  477|   117k|	}
  478|       |
  479|  35.7k|	params = event_get_params(data, 3, &channel, NULL, NULL);
  480|       |
  481|  35.7k|	ptr = strchr(channel, 7); /* ^G does something weird.. */
  482|  35.7k|	if (ptr != NULL)
  ------------------
  |  Branch (482:6): [True: 260, False: 35.5k]
  ------------------
  483|    260|		*ptr = '\0';
  484|       |
  485|       |	/* find channel */
  486|  35.7k|	chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|  35.7k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|  35.7k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  35.7k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|  35.7k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  487|  35.7k|	if (chanrec == NULL) {
  ------------------
  |  Branch (487:6): [True: 23.5k, False: 12.2k]
  ------------------
  488|  23.5k|		g_free(params);
  489|  23.5k|		return;
  490|  23.5k|	}
  491|       |
  492|  12.2k|	g_free(params);
  493|       |
  494|  12.2k|	if (!chanrec->wholist) {
  ------------------
  |  Branch (494:6): [True: 12.2k, False: 0]
  ------------------
  495|  12.2k|		return;
  496|  12.2k|	}
  497|       |
  498|       |	/* find nick */
  499|      0|	nickrec = nicklist_find(CHANNEL(chanrec), nick);
  ------------------
  |  |    8|      0|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|      0|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|      0|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|      0|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  500|      0|	if (nickrec == NULL) {
  ------------------
  |  Branch (500:6): [True: 0, False: 0]
  ------------------
  501|      0|		return;
  502|      0|	}
  503|       |
  504|      0|	if (nickrec->account != NULL) {
  ------------------
  |  Branch (504:6): [True: 0, False: 0]
  ------------------
  505|      0|		return;
  506|      0|	}
  507|       |
  508|      0|	if (g_hash_table_contains(server->chanqueries->accountqueries, nick)) {
  ------------------
  |  Branch (508:6): [True: 0, False: 0]
  ------------------
  509|       |		/* query already sent */
  510|      0|		return;
  511|      0|	}
  512|      0|	account = NULL;
  513|       |
  514|       |	/* Check if user is already in some other channel, get the account from there */
  515|      0|	nicks = nicklist_get_same(SERVER(server), nick);
  ------------------
  |  |    9|      0|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|      0|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  516|      0|	for (tmp = nicks; tmp != NULL; tmp = tmp->next->next) {
  ------------------
  |  Branch (516:20): [True: 0, False: 0]
  ------------------
  517|      0|		NICK_REC *rec = tmp->next->data;
  518|       |
  519|      0|		if (rec->account != NULL) {
  ------------------
  |  Branch (519:7): [True: 0, False: 0]
  ------------------
  520|      0|			account = rec->account;
  521|      0|			break;
  522|      0|		}
  523|      0|	}
  524|      0|	g_slist_free(nicks);
  525|       |
  526|      0|	if (account != NULL) {
  ------------------
  |  Branch (526:6): [True: 0, False: 0]
  ------------------
  527|      0|		nicklist_set_account(CHANNEL(chanrec), nickrec, account);
  ------------------
  |  |    8|      0|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|      0|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|      0|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|      0|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  528|      0|		return;
  529|      0|	}
  530|       |
  531|      0|	if (g_hash_table_size(chanrec->nicks) < settings_get_int("channel_max_who_sync") &&
  ------------------
  |  Branch (531:6): [True: 0, False: 0]
  ------------------
  532|      0|	    server->isupport != NULL && g_hash_table_lookup(server->isupport, "whox") != NULL &&
  ------------------
  |  Branch (532:6): [True: 0, False: 0]
  |  Branch (532:34): [True: 0, False: 0]
  ------------------
  533|      0|	    server->split_servers == NULL &&
  ------------------
  |  Branch (533:6): [True: 0, False: 0]
  ------------------
  534|      0|	    g_hash_table_size(server->chanqueries->accountqueries) <
  ------------------
  |  Branch (534:6): [True: 0, False: 0]
  ------------------
  535|      0|	        settings_get_int("account_max_chase")) {
  536|      0|		char *cmd;
  537|      0|		server_redirect_event(server, "who user", 1, nick, -1,
  538|      0|		                      "chanquery useraccount abort", /* failure signal */
  539|      0|		                      "event 354", "silent event whox useraccount", /* */
  540|      0|		                      "", "event empty",                            /* */
  541|      0|		                      NULL);
  542|      0|		cmd = g_strdup_printf(WHOX_USERACCOUNT_CMD, nick);
  ------------------
  |  |   67|      0|#define WHOX_USERACCOUNT_CMD "WHO %s %%tna," WHOX_USERACCOUNT_ID
  |  |  ------------------
  |  |  |  |   24|      0|#define WHOX_USERACCOUNT_ID "745"
  |  |  ------------------
  ------------------
  543|      0|		g_hash_table_add(server->chanqueries->accountqueries, g_strdup(nick));
  544|       |		/* queue the command */
  545|      0|		irc_send_cmd_later(server, cmd);
  546|      0|		g_free(cmd);
  547|      0|	}
  548|      0|}

ctcp_register:
   55|     10|{
   56|     10|	CTCP_CMD_REC *rec;
   57|       |
   58|     10|	rec = ctcp_cmd_find(name);
   59|     10|	if (rec == NULL) {
  ------------------
  |  Branch (59:6): [True: 10, False: 0]
  ------------------
   60|     10|		rec = g_new0(CTCP_CMD_REC, 1);
  ------------------
  |  Branch (60:9): [True: 10, False: 0]
  |  Branch (60:9): [True: 0, False: 10]
  ------------------
   61|     10|		rec->name = g_ascii_strup(name, -1);
   62|       |
   63|     10|		ctcp_cmds = g_slist_append(ctcp_cmds, rec);
   64|     10|	}
   65|       |
   66|     10|	rec->refcount++;
   67|     10|}
ctcp_send_reply:
  100|  1.28k|{
  101|  1.28k|	int tag;
  102|       |
  103|  1.28k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (103:2): [True: 1.28k, False: 0]
  |  Branch (103:2): [True: 1.28k, False: 0]
  |  Branch (103:2): [Folded, False: 1.28k]
  ------------------
  104|  1.28k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (104:2): [True: 1.28k, False: 0]
  |  Branch (104:2): [True: 1.28k, False: 0]
  |  Branch (104:2): [Folded, False: 1.28k]
  ------------------
  105|       |
  106|  1.28k|	ctcp_queue_clean(server);
  107|       |
  108|  1.28k|	if ((int)g_slist_length(server->ctcpqueue) >=
  ------------------
  |  Branch (108:6): [True: 589, False: 693]
  ------------------
  109|  1.28k|	    settings_get_int("max_ctcp_queue"))
  110|    589|		return;
  111|       |
  112|       |	/* Add to first in idle queue */
  113|    693|	tag = server_idle_add(server, data);
  ------------------
  |  |   10|    693|        server_idle_add_redir(server, cmd, NULL, 0, NULL, 0, NULL, NULL)
  ------------------
  114|    693|	server->ctcpqueue =
  115|       |		g_slist_append(server->ctcpqueue, GINT_TO_POINTER(tag));
  116|    693|}
ctcp_init:
  327|      2|{
  328|      2|	ctcp_cmds = NULL;
  329|       |
  330|      2|	settings_add_str("misc", "ctcp_version_reply",
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  331|      2|			 PACKAGE_TARNAME" v$J - running on $sysname $sysarch");
  332|      2|	settings_add_str("misc", "ctcp_userinfo_reply", "$Y");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  333|      2|	settings_add_int("flood", "max_ctcp_queue", 5);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  334|       |
  335|      2|	signal_add("server disconnected", (SIGNAL_FUNC) sig_disconnected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  336|      2|	signal_add_first("event privmsg", (SIGNAL_FUNC) event_privmsg);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  337|      2|	signal_add_first("event notice", (SIGNAL_FUNC) event_notice);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  338|      2|	signal_add("ctcp msg", (SIGNAL_FUNC) ctcp_msg);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  339|      2|	signal_add("ctcp reply", (SIGNAL_FUNC) ctcp_reply);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  340|      2|	signal_add("ctcp msg ping", (SIGNAL_FUNC) ctcp_ping);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  341|      2|	signal_add("ctcp msg version", (SIGNAL_FUNC) ctcp_version);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  342|      2|	signal_add("ctcp msg time", (SIGNAL_FUNC) ctcp_time);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  343|      2|	signal_add("ctcp msg userinfo", (SIGNAL_FUNC) ctcp_userinfo);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  344|      2|	signal_add("ctcp msg clientinfo", (SIGNAL_FUNC) ctcp_clientinfo);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  345|       |
  346|      2|        ctcp_register("ping");
  347|      2|        ctcp_register("version");
  348|      2|        ctcp_register("time");
  349|      2|        ctcp_register("userinfo");
  350|      2|        ctcp_register("clientinfo");
  351|      2|}
ctcp.c:ctcp_cmd_find:
   41|     10|{
   42|     10|	GSList *tmp;
   43|       |
   44|     30|	for (tmp = ctcp_cmds; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (44:24): [True: 20, False: 10]
  ------------------
   45|     20|		CTCP_CMD_REC *rec = tmp->data;
   46|       |
   47|     20|		if (g_ascii_strcasecmp(rec->name, name) == 0)
  ------------------
  |  Branch (47:7): [True: 0, False: 20]
  ------------------
   48|      0|                        return rec;
   49|     20|	}
   50|       |
   51|     10|        return NULL;
   52|     10|}
ctcp.c:ctcp_queue_clean:
   86|  1.28k|{
   87|  1.28k|	GSList *tmp, *next;
   88|       |
   89|  5.58k|	for (tmp = server->ctcpqueue; tmp != NULL; tmp = next) {
  ------------------
  |  Branch (89:32): [True: 4.30k, False: 1.28k]
  ------------------
   90|  4.30k|		next = tmp->next;
   91|  4.30k|		if (!server_idle_find(server, GPOINTER_TO_INT(tmp->data))) {
  ------------------
  |  Branch (91:7): [True: 0, False: 4.30k]
  ------------------
   92|      0|			server->ctcpqueue =
   93|      0|				g_slist_remove(server->ctcpqueue, tmp->data);
   94|      0|		}
   95|  4.30k|	}
   96|  1.28k|}
ctcp.c:sig_disconnected:
  316|  29.4k|{
  317|  29.4k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (317:2): [True: 29.4k, False: 0]
  |  Branch (317:2): [True: 29.4k, False: 0]
  |  Branch (317:2): [Folded, False: 29.4k]
  ------------------
  318|       |
  319|  29.4k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (319:6): [True: 0, False: 29.4k]
  ------------------
  320|      0|		return;
  321|       |
  322|  29.4k|	g_slist_free(server->ctcpqueue);
  323|       |        server->ctcpqueue = NULL;
  324|  29.4k|}
ctcp.c:event_privmsg:
  271|  26.5k|{
  272|  26.5k|	char *params, *target, *msg;
  273|  26.5k|	int len;
  274|       |
  275|  26.5k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (275:2): [True: 26.5k, False: 0]
  |  Branch (275:2): [True: 26.5k, False: 0]
  |  Branch (275:2): [Folded, False: 26.5k]
  ------------------
  276|       |
  277|  26.5k|	params = event_get_params(data, 2, &target, &msg);
  278|       |
  279|       |	/* handle only ctcp messages.. */
  280|  26.5k|	if (*msg == 1) {
  ------------------
  |  Branch (280:6): [True: 9.24k, False: 17.2k]
  ------------------
  281|       |		/* remove the \001 at beginning and end */
  282|  9.24k|		msg++;
  283|  9.24k|		len = strlen(msg);
  284|  9.24k|		if (msg[len-1] == '\001')
  ------------------
  |  Branch (284:7): [True: 506, False: 8.73k]
  ------------------
  285|    506|			msg[len-1] = '\0';
  286|       |
  287|  9.24k|		signal_emit("ctcp msg", 5, server, msg, nick, addr, target);
  288|  9.24k|		signal_stop();
  289|  9.24k|	}
  290|       |
  291|  26.5k|	g_free(params);
  292|  26.5k|}
ctcp.c:event_notice:
  296|  1.56k|{
  297|  1.56k|	char *params, *target, *ptr, *msg;
  298|       |
  299|  1.56k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (299:2): [True: 1.56k, False: 0]
  |  Branch (299:2): [True: 1.56k, False: 0]
  |  Branch (299:2): [Folded, False: 1.56k]
  ------------------
  300|       |
  301|  1.56k|	params = event_get_params(data, 2, &target, &msg);
  302|       |
  303|       |	/* handle only ctcp replies */
  304|  1.56k|	if (*msg == 1) {
  ------------------
  |  Branch (304:6): [True: 439, False: 1.12k]
  ------------------
  305|    439|		ptr = strrchr(++msg, 1);
  306|    439|		if (ptr != NULL) *ptr = '\0';
  ------------------
  |  Branch (306:7): [True: 337, False: 102]
  ------------------
  307|       |
  308|    439|		signal_emit("ctcp reply", 5, server, msg, nick, addr, target);
  309|    439|		signal_stop();
  310|    439|	}
  311|       |
  312|  1.56k|	g_free(params);
  313|  1.56k|}
ctcp.c:ctcp_msg:
  224|  9.24k|{
  225|  9.24k|	char *args, *str;
  226|       |
  227|  9.24k|	if (g_ascii_strncasecmp(data, "ACTION ", 7) == 0) {
  ------------------
  |  Branch (227:6): [True: 3.77k, False: 5.46k]
  ------------------
  228|       |                /* special treatment for actions */
  229|  3.77k|		signal_emit("ctcp action", 5, server, data+7,
  230|  3.77k|			    nick, addr, target);
  231|  3.77k|                return;
  232|  3.77k|	}
  233|       |
  234|  5.46k|	if (ignore_check(SERVER(server), nick, addr, target, data, MSGLEVEL_CTCPS))
  ------------------
  |  |    9|  5.46k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  5.46k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  |  Branch (234:6): [True: 0, False: 5.46k]
  ------------------
  235|      0|		return;
  236|       |
  237|  5.46k|	str = g_strconcat("ctcp msg ", data, NULL);
  238|  5.46k|	args = strchr(str+9, ' ');
  239|  5.46k|	if (args != NULL) *args++ = '\0'; else args = "";
  ------------------
  |  Branch (239:6): [True: 4.10k, False: 1.36k]
  ------------------
  240|       |
  241|  5.46k|	ascii_strdown(str+9);
  242|  5.46k|	if (!signal_emit(str, 5, server, args, nick, addr, target)) {
  ------------------
  |  Branch (242:6): [True: 3.82k, False: 1.64k]
  ------------------
  243|  3.82k|		signal_emit("default ctcp msg", 5,
  244|  3.82k|			    server, data, nick, addr, target);
  245|  3.82k|	}
  246|  5.46k|	g_free(str);
  247|  5.46k|}
ctcp.c:ctcp_reply:
  251|    439|{
  252|    439|	char *args, *str;
  253|       |
  254|    439|	if (ignore_check(SERVER(server), nick, addr, target, data, MSGLEVEL_CTCPS))
  ------------------
  |  |    9|    439|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|    439|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  |  Branch (254:6): [True: 0, False: 439]
  ------------------
  255|      0|		return;
  256|       |
  257|    439|	str = g_strconcat("ctcp reply ", data, NULL);
  258|    439|	args = strchr(str+11, ' ');
  259|    439|	if (args != NULL) *args++ = '\0'; else args = "";
  ------------------
  |  Branch (259:6): [True: 423, False: 16]
  ------------------
  260|       |
  261|    439|	ascii_strdown(str+11);
  262|    439|	if (!signal_emit(str, 5, server, args, nick, addr, target)) {
  ------------------
  |  Branch (262:6): [True: 419, False: 20]
  ------------------
  263|    419|		signal_emit("default ctcp reply", 5,
  264|    419|			    server, data, nick, addr, target);
  265|    419|	}
  266|    439|	g_free(str);
  267|    439|}
ctcp.c:ctcp_ping:
  121|  1.54k|{
  122|  1.54k|	char *str;
  123|       |
  124|  1.54k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (124:2): [True: 1.54k, False: 0]
  |  Branch (124:2): [True: 1.54k, False: 0]
  |  Branch (124:2): [Folded, False: 1.54k]
  ------------------
  125|  1.54k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (125:2): [True: 1.54k, False: 0]
  |  Branch (125:2): [True: 1.54k, False: 0]
  |  Branch (125:2): [Folded, False: 1.54k]
  ------------------
  126|  1.54k|	g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (126:2): [True: 1.51k, False: 31]
  |  Branch (126:2): [True: 1.51k, False: 31]
  |  Branch (126:2): [Folded, False: 1.51k]
  ------------------
  127|       |
  128|  1.51k|	if (strlen(data) > 100) {
  ------------------
  |  Branch (128:6): [True: 247, False: 1.27k]
  ------------------
  129|       |		/* Yes, this is kind of a kludge, but people who PING you
  130|       |		   with messages this long deserve not to get the reply.
  131|       |
  132|       |		   The problem with long messages is that when you send lots
  133|       |		   of data to server, it's input buffer gets full and you get
  134|       |		   killed from server because of "excess flood".
  135|       |
  136|       |		   Irssi's current flood protection doesn't count the message
  137|       |		   length, but even if it did, the CTCP flooder would still
  138|       |		   be able to at least slow down your possibility to send
  139|       |		   messages to server. */
  140|    247|                return;
  141|    247|	}
  142|       |
  143|  1.27k|	str = g_strdup_printf("NOTICE %s :\001PING %s\001", nick, data);
  144|  1.27k|	ctcp_send_reply(server, str);
  145|  1.27k|	g_free(str);
  146|  1.27k|}
ctcp.c:ctcp_version:
  169|     11|{
  170|     11|	ctcp_send_parsed_reply(server, nick, "VERSION",
  171|     11|			       settings_get_str("ctcp_version_reply"));
  172|     11|}
ctcp.c:ctcp_send_parsed_reply:
  150|     11|{
  151|     11|	char *str, *pstr;
  152|       |
  153|     11|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (153:2): [True: 11, False: 0]
  |  Branch (153:2): [True: 11, False: 0]
  |  Branch (153:2): [Folded, False: 11]
  ------------------
  154|     11|	g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (154:2): [True: 11, False: 0]
  |  Branch (154:2): [True: 11, False: 0]
  |  Branch (154:2): [Folded, False: 11]
  ------------------
  155|       |
  156|     11|	if (*args == '\0')
  ------------------
  |  Branch (156:6): [True: 0, False: 11]
  ------------------
  157|      0|                return;
  158|       |
  159|     11|	pstr = parse_special_string(args, SERVER(server), NULL, "", NULL, 0);
  ------------------
  |  |    9|     11|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|     11|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  160|     11|	str = g_strdup_printf("NOTICE %s :\001%s %s\001", nick, cmd, pstr);
  161|     11|	ctcp_send_reply(server, str);
  162|     11|	g_free(str);
  163|     11|	g_free(pstr);
  164|     11|}
ctcp.c:ctcp_time:
  177|     80|{
  178|     80|	char *str, *reply;
  179|       |
  180|     80|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (180:2): [True: 80, False: 0]
  |  Branch (180:2): [True: 80, False: 0]
  |  Branch (180:2): [Folded, False: 80]
  ------------------
  181|     80|	g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (181:2): [True: 0, False: 80]
  |  Branch (181:2): [True: 0, False: 80]
  |  Branch (181:2): [Folded, False: 0]
  ------------------
  182|       |
  183|      0|        reply = my_asctime(time(NULL));
  184|      0|	str = g_strdup_printf("NOTICE %s :\001TIME %s\001", nick, reply);
  185|      0|	ctcp_send_reply(server, str);
  186|      0|	g_free(str);
  187|      0|	g_free(reply);
  188|      0|}

irc_cap_finish_negotiation:
   67|  9.45k|{
   68|  9.45k|	if (server->cap_complete)
  ------------------
  |  Branch (68:6): [True: 6.75k, False: 2.70k]
  ------------------
   69|  6.75k|		return;
   70|       |
   71|  2.70k|	server->cap_complete = TRUE;
   72|  2.70k|	irc_send_cmd_now(server, "CAP END");
   73|       |
   74|  2.70k|	signal_emit("server cap end", 1, server);
   75|  2.70k|}
irc_cap_init:
  323|      2|{
  324|      2|	signal_add_last("server cap continue", (SIGNAL_FUNC) cap_process_request_queue);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  325|      2|	signal_add_first("event cap", (SIGNAL_FUNC) event_cap);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  326|       |	signal_add_first("event 410", (SIGNAL_FUNC) event_invalid_cap);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  327|      2|}
irc-cap.c:cap_process_request_queue:
  108|    373|{
  109|       |	/* No CAP has been requested */
  110|    373|	if (server->cap_queue == NULL) {
  ------------------
  |  Branch (110:6): [True: 373, False: 0]
  ------------------
  111|    373|		irc_cap_finish_negotiation(server);
  112|    373|	} else {
  113|      0|		GSList *tmp;
  114|      0|		GString *cmd;
  115|      0|		int avail_caps = 0;
  116|       |
  117|      0|		cmd = g_string_new("CAP REQ :");
  118|       |
  119|       |		/* To process the queue in order, we need to reverse the stack once */
  120|      0|		server->cap_queue = g_slist_reverse(server->cap_queue);
  121|       |
  122|       |		/* Check whether the cap is supported by the server */
  123|      0|		for (tmp = server->cap_queue; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (123:33): [True: 0, False: 0]
  ------------------
  124|      0|			if (g_hash_table_lookup_extended(server->cap_supported, tmp->data, NULL,
  ------------------
  |  Branch (124:8): [True: 0, False: 0]
  ------------------
  125|      0|			                                 NULL)) {
  126|      0|				if (avail_caps > 0)
  ------------------
  |  Branch (126:9): [True: 0, False: 0]
  ------------------
  127|      0|					g_string_append_c(cmd, ' ');
  128|      0|				g_string_append(cmd, tmp->data);
  129|       |
  130|      0|				avail_caps++;
  131|      0|			}
  132|      0|		}
  133|       |
  134|       |		/* Clear the queue here */
  135|      0|		i_slist_free_full(server->cap_queue, (GDestroyNotify) g_free);
  136|      0|		server->cap_queue = NULL;
  137|       |
  138|       |		/* If the server doesn't support any cap we requested close the negotiation here */
  139|      0|		if (avail_caps > 0) {
  ------------------
  |  Branch (139:7): [True: 0, False: 0]
  ------------------
  140|      0|			signal_emit("server cap req", 2, server,
  141|      0|			            cmd->str + sizeof("CAP REQ :") - 1);
  142|      0|			irc_send_cmd_now(server, cmd->str);
  143|      0|		} else {
  144|      0|			irc_cap_finish_negotiation(server);
  145|      0|		}
  146|       |
  147|       |		g_string_free(cmd, TRUE);
  148|      0|	}
  149|    373|}
irc-cap.c:event_cap:
  152|  7.28k|{
  153|  7.28k|	char *params, *evt, *list, *star, **caps;
  154|  7.28k|	int i, caps_length, disable, multiline;
  155|       |
  156|  7.28k|	params = event_get_params(args, 4, NULL, &evt, &star, &list);
  157|  7.28k|	if (params == NULL)
  ------------------
  |  Branch (157:6): [True: 0, False: 7.28k]
  ------------------
  158|      0|		return;
  159|       |
  160|       |	/* Multiline responses have an additional parameter and we have to do
  161|       |	 * this stupid dance to parse them */
  162|  7.28k|	if (!g_ascii_strcasecmp(evt, "LS") && !strcmp(star, "*")) {
  ------------------
  |  Branch (162:6): [True: 604, False: 6.68k]
  |  Branch (162:40): [True: 217, False: 387]
  ------------------
  163|    217|		multiline = TRUE;
  164|    217|	}
  165|       |	/* This branch covers the '*' parameter isn't present, adjust the
  166|       |	 * parameter pointer to compensate for this */
  167|  7.07k|	else if (list[0] == '\0') {
  ------------------
  |  Branch (167:11): [True: 6.11k, False: 959]
  ------------------
  168|  6.11k|		multiline = FALSE;
  169|  6.11k|		list = star;
  170|  6.11k|	}
  171|       |	/* Malformed request, terminate the negotiation */
  172|    959|	else {
  173|    959|		irc_cap_finish_negotiation(server);
  174|    959|		g_free(params);
  175|    959|		g_warn_if_reached();
  ------------------
  |  Branch (175:3): [Folded, False: 959]
  ------------------
  176|    959|		return;
  177|    959|	}
  178|       |
  179|       |	/* The table is created only when needed */
  180|  6.32k|	if (server->cap_supported == NULL) {
  ------------------
  |  Branch (180:6): [True: 2.88k, False: 3.44k]
  ------------------
  181|  2.88k|		server->cap_supported = g_hash_table_new_full(g_str_hash,
  182|  2.88k|							      g_str_equal,
  183|  2.88k|							      g_free, g_free);
  184|  2.88k|	}
  185|       |
  186|       |	/* Strip the trailing whitespaces before splitting the string, some servers send responses with
  187|       |	 * superfluous whitespaces that g_strsplit the interprets as tokens */
  188|  6.32k|	caps = g_strsplit(g_strchomp(list), " ", -1);
  189|  6.32k|	caps_length = g_strv_length(caps);
  190|       |
  191|  6.32k|	if (!g_ascii_strcasecmp(evt, "LS")) {
  ------------------
  |  Branch (191:6): [True: 590, False: 5.73k]
  ------------------
  192|    590|		if (!server->cap_in_multiline) {
  ------------------
  |  Branch (192:7): [True: 386, False: 204]
  ------------------
  193|       |			/* Throw away everything and start from scratch */
  194|    386|			g_hash_table_remove_all(server->cap_supported);
  195|    386|		}
  196|       |
  197|    590|		server->cap_in_multiline = multiline;
  198|       |
  199|       |		/* Create a list of the supported caps */
  200|  6.51k|		for (i = 0; i < caps_length; i++) {
  ------------------
  |  Branch (200:15): [True: 5.92k, False: 590]
  ------------------
  201|  5.92k|			char *key, *val;
  202|       |
  203|  5.92k|			if (!parse_cap_name(caps[i], &key, &val)) {
  ------------------
  |  Branch (203:8): [True: 424, False: 5.50k]
  ------------------
  204|    424|				g_warning("Invalid CAP %s key/value pair", evt);
  205|    424|				continue;
  206|    424|			}
  207|       |
  208|  5.50k|			if (g_hash_table_lookup_extended(server->cap_supported, key, NULL, NULL)) {
  ------------------
  |  Branch (208:8): [True: 985, False: 4.51k]
  ------------------
  209|       |				/* The specification doesn't say anything about
  210|       |				 * duplicated values, let's just warn the user */
  211|    985|				g_warning("The server sent the %s capability twice", key);
  212|    985|			}
  213|  5.50k|			g_hash_table_replace(server->cap_supported, key, val);
  214|  5.50k|		}
  215|       |
  216|       |		/* A multiline response is always terminated by a normal one,
  217|       |		 * wait until we receive that one to require any CAP */
  218|    590|		if (multiline == FALSE) {
  ------------------
  |  Branch (218:7): [True: 373, False: 217]
  ------------------
  219|    373|			gboolean want_starttls =
  220|    373|			    i_slist_find_string(server->cap_queue, CAP_STARTTLS) != NULL;
  ------------------
  |  |   30|    373|#define CAP_STARTTLS "tls"
  ------------------
  221|    373|			server->cap_queue =
  222|    373|			    i_slist_delete_string(server->cap_queue, CAP_STARTTLS, g_free);
  ------------------
  |  |   30|    373|#define CAP_STARTTLS "tls"
  ------------------
  223|    373|			if (server->connrec->starttls) {
  ------------------
  |  Branch (223:8): [True: 0, False: 373]
  ------------------
  224|       |				/* the connection has requested starttls,
  225|       |				   no more data must be sent now */
  226|    373|			} else if (want_starttls &&
  ------------------
  |  Branch (226:15): [True: 0, False: 373]
  ------------------
  227|      0|			           g_hash_table_lookup_extended(server->cap_supported, CAP_STARTTLS,
  ------------------
  |  |   30|      0|#define CAP_STARTTLS "tls"
  ------------------
  |  Branch (227:15): [True: 0, False: 0]
  ------------------
  228|      0|			                                        NULL, NULL)) {
  229|      0|				irc_server_send_starttls(server);
  230|       |				/* no more data must be sent now */
  231|    373|			} else {
  232|    373|				cap_process_request_queue(server);
  233|    373|			}
  234|    373|		}
  235|    590|	}
  236|  5.73k|	else if (!g_ascii_strcasecmp(evt, "ACK")) {
  ------------------
  |  Branch (236:11): [True: 2.95k, False: 2.78k]
  ------------------
  237|  2.95k|		int got_sasl = (i_slist_find_string(server->cap_active, "sasl") != NULL);
  238|       |
  239|       |		/* Emit a signal for every ack'd cap */
  240|  9.90k|		for (i = 0; i < caps_length; i++) {
  ------------------
  |  Branch (240:15): [True: 6.95k, False: 2.95k]
  ------------------
  241|  6.95k|			disable = (*caps[i] == '-');
  242|       |
  243|  6.95k|			if (disable)
  ------------------
  |  Branch (243:8): [True: 1.72k, False: 5.22k]
  ------------------
  244|  1.72k|				server->cap_active =
  245|  1.72k|				    i_slist_delete_string(server->cap_active, caps[i] + 1, g_free);
  246|  5.22k|			else if (!i_slist_find_string(server->cap_active, caps[i]))
  ------------------
  |  Branch (246:13): [True: 2.22k, False: 3.00k]
  ------------------
  247|  2.22k|				server->cap_active = g_slist_prepend(server->cap_active, g_strdup(caps[i]));
  248|       |
  249|  6.95k|			if (!strcmp(caps[i], "sasl"))
  ------------------
  |  Branch (249:8): [True: 357, False: 6.59k]
  ------------------
  250|    357|				got_sasl = TRUE;
  251|       |
  252|  6.95k|			cap_emit_signal(server, "ack", caps[i]);
  253|  6.95k|		}
  254|       |
  255|       |		/* Hopefully the server has ack'd all the caps requested and we're ready to terminate the
  256|       |		 * negotiation, unless sasl was requested. In this case we must not terminate the negotiation
  257|       |		 * until the sasl handshake is over. */
  258|  2.95k|		if (got_sasl == FALSE)
  ------------------
  |  Branch (258:7): [True: 2.71k, False: 239]
  ------------------
  259|  2.71k|			irc_cap_finish_negotiation(server);
  260|  2.95k|	}
  261|  2.78k|	else if (!g_ascii_strcasecmp(evt, "NAK")) {
  ------------------
  |  Branch (261:11): [True: 146, False: 2.64k]
  ------------------
  262|    146|		g_warning("The server answered with a NAK to our CAP request, this should not happen");
  263|       |
  264|       |		/* A NAK'd request means that a required cap can't be enabled or disabled, don't update the
  265|       |		 * list of active caps and notify the listeners. */
  266|    343|		for (i = 0; i < caps_length; i++)
  ------------------
  |  Branch (266:15): [True: 197, False: 146]
  ------------------
  267|    197|			cap_emit_signal(server, "nak", caps[i]);
  268|    146|	}
  269|  2.64k|	else if (!g_ascii_strcasecmp(evt, "NEW")) {
  ------------------
  |  Branch (269:11): [True: 89, False: 2.55k]
  ------------------
  270|    673|		for (i = 0; i < caps_length; i++) {
  ------------------
  |  Branch (270:15): [True: 584, False: 89]
  ------------------
  271|    584|			char *key, *val;
  272|       |
  273|    584|			if (!parse_cap_name(caps[i], &key, &val)) {
  ------------------
  |  Branch (273:8): [True: 539, False: 45]
  ------------------
  274|    539|				g_warning("Invalid CAP %s key/value pair", evt);
  275|    539|				continue;
  276|    539|			}
  277|       |
  278|     45|			g_hash_table_replace(server->cap_supported, key, val);
  279|     45|			cap_emit_signal(server, "new", key);
  280|     45|		}
  281|     89|	}
  282|  2.55k|	else if (!g_ascii_strcasecmp(evt, "DEL")) {
  ------------------
  |  Branch (282:11): [True: 215, False: 2.33k]
  ------------------
  283|  65.4k|		for (i = 0; i < caps_length; i++) {
  ------------------
  |  Branch (283:15): [True: 65.2k, False: 215]
  ------------------
  284|  65.2k|			char *key, *val;
  285|       |
  286|  65.2k|			if (!parse_cap_name(caps[i], &key, &val)) {
  ------------------
  |  Branch (286:8): [True: 65.0k, False: 207]
  ------------------
  287|  65.0k|				g_warning("Invalid CAP %s key/value pair", evt);
  288|  65.0k|				continue;
  289|  65.0k|			}
  290|       |
  291|    207|			g_hash_table_remove(server->cap_supported, key);
  292|    207|			cap_emit_signal(server, "delete", key);
  293|       |			/* The server removed this CAP, remove it from the list
  294|       |			 * of the active ones if we had requested it */
  295|    207|			server->cap_active = i_slist_delete_string(server->cap_active, key, g_free);
  296|       |			/* We don't transfer the ownership of those two
  297|       |			 * variables this time, just free them when we're done. */
  298|    207|			g_free(key);
  299|    207|			g_free(val);
  300|    207|		}
  301|    215|	}
  302|  2.33k|	else if (!g_ascii_strcasecmp(evt, "LIST")) {
  ------------------
  |  Branch (302:11): [True: 0, False: 2.33k]
  ------------------
  303|       |		/* do nothing, fe-cap will handle it */
  304|      0|	}
  305|  2.33k|	else {
  306|  2.33k|		g_warning("Unhandled CAP subcommand %s", evt);
  307|  2.33k|	}
  308|       |
  309|  6.32k|	g_strfreev(caps);
  310|  6.32k|	g_free(params);
  311|  6.32k|}
irc-cap.c:parse_cap_name:
   87|  71.7k|{
   88|  71.7k|	const char *eq;
   89|       |
   90|  71.7k|	g_return_val_if_fail(name != NULL, FALSE);
  ------------------
  |  Branch (90:2): [True: 71.7k, False: 0]
  |  Branch (90:2): [True: 71.7k, False: 0]
  |  Branch (90:2): [Folded, False: 71.7k]
  ------------------
   91|  71.7k|	g_return_val_if_fail(name[0] != '\0', FALSE);
  ------------------
  |  Branch (91:2): [True: 5.75k, False: 65.9k]
  |  Branch (91:2): [True: 5.75k, False: 65.9k]
  |  Branch (91:2): [Folded, False: 5.75k]
  ------------------
   92|       |
   93|  5.75k|	eq = strchr(name, '=');
   94|       |	/* KEY only value */
   95|  5.75k|	if (eq == NULL) {
  ------------------
  |  Branch (95:6): [True: 5.67k, False: 78]
  ------------------
   96|  5.67k|		*key = g_strdup(name);
   97|  5.67k|		*val = NULL;
   98|       |	/* Some values are in a KEY=VALUE form, parse them */
   99|  5.67k|	} else {
  100|     78|		*key = g_strndup(name, (gsize)(eq - name));
  101|     78|		*val = g_strdup(eq + 1);
  102|     78|	}
  103|       |
  104|       |	return TRUE;
  105|  71.7k|}
irc-cap.c:cap_emit_signal:
   78|  7.40k|{
   79|  7.40k|	char *signal_name;
   80|       |
   81|  7.40k|	signal_name = g_strdup_printf("server cap %s %s", cmd, args? args: "");
  ------------------
  |  Branch (81:57): [True: 7.40k, False: 0]
  ------------------
   82|  7.40k|	signal_emit(signal_name, 1, server);
   83|  7.40k|	g_free(signal_name);
   84|  7.40k|}
irc-cap.c:event_invalid_cap:
  314|    307|{
  315|       |	/* The server didn't understand one (or more) requested caps, terminate the negotiation.
  316|       |	 * This could be handled in a graceful way but since it shouldn't really ever happen this seems a
  317|       |	 * good way to deal with 410 errors. */
  318|       |	server->cap_complete = FALSE;
  319|    307|	irc_send_cmd_now(server, "CAP END");
  320|    307|}

irc_channels_setup_init:
   26|      2|{
   27|      2|	signal_add("channel wholist", (SIGNAL_FUNC) channel_send_botcommands);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
   28|       |	signal_add("channel joined", (SIGNAL_FUNC) channel_send_autocommands);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
   29|      2|}

irc_channel_create:
   49|   117k|{
   50|   117k|	IRC_CHANNEL_REC *rec;
   51|       |
   52|   117k|	g_return_val_if_fail(server == NULL || IS_IRC_SERVER(server), NULL);
  ------------------
  |  Branch (52:2): [True: 117k, False: 0]
  |  Branch (52:2): [True: 0, False: 117k]
  |  Branch (52:2): [True: 117k, False: 0]
  |  Branch (52:2): [True: 117k, False: 0]
  |  Branch (52:2): [Folded, False: 117k]
  ------------------
   53|   117k|	g_return_val_if_fail(name != NULL, NULL);
  ------------------
  |  Branch (53:2): [True: 117k, False: 0]
  |  Branch (53:2): [True: 117k, False: 0]
  |  Branch (53:2): [Folded, False: 117k]
  ------------------
   54|       |
   55|   117k|	rec = g_new0(IRC_CHANNEL_REC, 1);
  ------------------
  |  Branch (55:8): [True: 117k, False: 0]
  |  Branch (55:8): [True: 0, False: 117k]
  ------------------
   56|   117k|	if (*name == '+') rec->no_modes = TRUE;
  ------------------
  |  Branch (56:6): [True: 6.17k, False: 111k]
  ------------------
   57|       |
   58|   117k|	channel_init((CHANNEL_REC *) rec, (SERVER_REC *) server,
   59|   117k|		     name, visible_name, automatic);
   60|   117k|	return rec;
   61|   117k|}
irc_channels_init:
  256|      2|{
  257|      2|	signal_add_first("server connected", (SIGNAL_FUNC) sig_server_connected);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  258|      2|	signal_add("channel created", (SIGNAL_FUNC) sig_channel_created);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  259|      2|	signal_add("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  260|       |
  261|      2|	channel_events_init();
  262|      2|	channel_rejoin_init(); /* after channel_events_init() */
  263|      2|        channels_query_init();
  264|      2|	irc_channels_setup_init();
  265|       |
  266|      2|	bans_init();
  267|      2|        modes_init();
  268|      2|	mode_lists_init();
  269|      2|	massjoin_init();
  270|      2|	irc_nicklist_init();
  271|      2|}
irc-channels.c:sig_server_connected:
  219|  29.4k|{
  220|  29.4k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (220:6): [True: 0, False: 29.4k]
  ------------------
  221|      0|		return;
  222|       |
  223|  29.4k|	server->channel_find_func =
  224|  29.4k|	    (CHANNEL_REC * (*) (SERVER_REC *, const char *) ) irc_channel_find_server;
  225|  29.4k|	server->channels_join = (void (*) (SERVER_REC *, const char *, int))
  226|  29.4k|		irc_channels_join;
  227|  29.4k|}
irc-channels.c:irc_channel_find_server:
  187|  1.82M|{
  188|  1.82M|	GSList *tmp;
  189|  1.82M|	char *fmt_channel;
  190|       |
  191|       |	/* if 'channel' has no leading # this lookup is going to fail, add a
  192|       |	 * octothorpe in front of it to handle this case. */
  193|  1.82M|	fmt_channel = force_channel_name(server, channel);
  194|       |
  195|   136M|	for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (195:31): [True: 135M, False: 644k]
  ------------------
  196|   135M|		CHANNEL_REC *rec = tmp->data;
  197|       |
  198|   135M|		if (rec->chat_type != server->chat_type)
  ------------------
  |  Branch (198:7): [True: 0, False: 135M]
  ------------------
  199|      0|                        continue;
  200|       |
  201|       |		/* check both !ABCDEchannel and !channel */
  202|   135M|		if (server->nick_comp_func(fmt_channel, rec->name) == 0) {
  ------------------
  |  Branch (202:7): [True: 1.15M, False: 134M]
  ------------------
  203|  1.15M|			g_free(fmt_channel);
  204|  1.15M|			return rec;
  205|  1.15M|		}
  206|       |
  207|   134M|		if (server->nick_comp_func(fmt_channel, rec->visible_name) == 0) {
  ------------------
  |  Branch (207:7): [True: 27.4k, False: 134M]
  ------------------
  208|  27.4k|			g_free(fmt_channel);
  209|  27.4k|			return rec;
  210|  27.4k|		}
  211|   134M|	}
  212|       |
  213|   644k|	g_free(fmt_channel);
  214|       |
  215|       |	return NULL;
  216|  1.82M|}
irc-channels.c:force_channel_name:
   67|  1.82M|{
   68|  1.82M|	char *chantypes;
   69|       |
   70|  1.82M|	if (server_ischannel(SERVER(server), name))
  ------------------
  |  |   22|  1.82M|	((server)->ischannel(server, channel))
  |  |  ------------------
  |  |  |  Branch (22:2): [True: 1.49M, False: 328k]
  |  |  ------------------
  ------------------
   71|  1.49M|		return g_strdup(name);
   72|       |
   73|   328k|	chantypes = g_hash_table_lookup(server->isupport, "chantypes");
   74|   328k|	if (chantypes == NULL || *chantypes == '\0' || strchr(chantypes, '#') != NULL)
  ------------------
  |  Branch (74:6): [True: 328k, False: 0]
  |  Branch (74:27): [True: 0, False: 0]
  |  Branch (74:49): [True: 0, False: 0]
  ------------------
   75|   328k|		chantypes = "#";
   76|       |
   77|   328k|	return g_strdup_printf("%c%s", *chantypes, name);
   78|  1.82M|}
irc-channels.c:sig_channel_created:
  238|   117k|{
  239|   117k|	if (IS_IRC_CHANNEL(channel))
  ------------------
  |  |   12|   117k|	(IRC_CHANNEL(channel) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |    9|   117k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|   117k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 117k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|   117k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (12:2): [True: 117k, False: 0]
  |  |  ------------------
  ------------------
  240|   117k|                channel->get_join_data = irc_get_join_data;
  241|   117k|}
irc-channels.c:sig_channel_destroyed:
  244|   117k|{
  245|   117k|	if (!IS_IRC_CHANNEL(channel))
  ------------------
  |  |   12|   117k|	(IRC_CHANNEL(channel) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |    9|   117k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|   117k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 117k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|   117k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (245:6): [True: 0, False: 117k]
  ------------------
  246|      0|                return;
  247|       |
  248|   117k|	if (!channel->server->disconnected && !channel->left && !channel->kicked) {
  ------------------
  |  Branch (248:6): [True: 92.8k, False: 24.4k]
  |  Branch (248:40): [True: 160, False: 92.6k]
  |  Branch (248:58): [True: 0, False: 160]
  ------------------
  249|       |		/* destroying channel record without actually
  250|       |		   having left the channel yet */
  251|      0|		signal_emit("command part", 3, "", channel->server, channel);
  252|      0|	}
  253|   117k|}

irc_chatnets_init:
  111|      2|{
  112|      2|	signal_add("chatnet read", (SIGNAL_FUNC) sig_chatnet_read);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  113|      2|	signal_add("chatnet saved", (SIGNAL_FUNC) sig_chatnet_saved);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  114|       |	signal_add("chatnet destroyed", (SIGNAL_FUNC) sig_chatnet_destroyed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  115|      2|}
irc-chatnets.c:sig_chatnet_read:
   37|     24|{
   38|     24|	char *value;
   39|       |
   40|     24|	if (!IS_IRC_CHATNET(rec))
  ------------------
  |  |   12|     24|	(IRC_CHATNET(chatnet) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |    9|     24|	PROTO_CHECK_CAST(CHATNET(chatnet), IRC_CHATNET_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|     24|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 24, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|     24|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (40:6): [True: 0, False: 24]
  ------------------
   41|      0|		return;
   42|       |
   43|     24|	value = config_node_get_str(node, "usermode", NULL);
   44|     24|	rec->usermode = (value != NULL && *value != '\0') ? g_strdup(value) : NULL;
  ------------------
  |  Branch (44:19): [True: 0, False: 24]
  |  Branch (44:36): [True: 0, False: 0]
  ------------------
   45|       |
   46|     24|	value = config_node_get_str(node, "alternate_nick", NULL);
   47|     24|	rec->alternate_nick = (value != NULL && *value != '\0') ? g_strdup(value) : NULL;
  ------------------
  |  Branch (47:25): [True: 0, False: 24]
  |  Branch (47:42): [True: 0, False: 0]
  ------------------
   48|       |
   49|     24|	rec->max_cmds_at_once = config_node_get_int(node, "cmdmax", 0);
   50|     24|	rec->cmd_queue_speed = config_node_get_int(node, "cmdspeed", 0);
   51|     24|	rec->max_query_chans = config_node_get_int(node, "max_query_chans", 0);
   52|       |
   53|     24|	rec->max_kicks = config_node_get_int(node, "max_kicks", 0);
   54|     24|	rec->max_msgs = config_node_get_int(node, "max_msgs", 0);
   55|     24|	rec->max_modes = config_node_get_int(node, "max_modes", 0);
   56|     24|	rec->max_whois = config_node_get_int(node, "max_whois", 0);
   57|       |
   58|     24|	rec->sasl_mechanism = g_strdup(config_node_get_str(node, "sasl_mechanism", NULL));
   59|     24|	rec->sasl_username = g_strdup(config_node_get_str(node, "sasl_username", NULL));
   60|       |	rec->sasl_password = g_strdup(config_node_get_str(node, "sasl_password", NULL));
   61|     24|}

irc_commands_init:
  967|      2|{
  968|      2|	tmpstr = g_string_new(NULL);
  969|       |
  970|      2|	settings_add_str("misc", "part_message", "");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  971|      2|	settings_add_time("misc", "knockout_time", "5min");
  ------------------
  |  |   99|      2|	settings_add_time_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  972|      2|	settings_add_str("misc", "wall_format", "[Wall/$0] $1-");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  973|      2|	settings_add_bool("misc", "kick_first_on_kickban", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  974|      2|	settings_add_bool("misc", "auto_whowas", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  975|       |
  976|      2|	knockout_tag = g_timeout_add(KNOCKOUT_TIMECHECK, (GSourceFunc) knockout_timeout, NULL);
  ------------------
  |  |   40|      2|#define KNOCKOUT_TIMECHECK 10000
  ------------------
  977|       |
  978|      2|	command_bind_irc("notice", NULL, (SIGNAL_FUNC) cmd_notice);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  979|      2|	command_bind_irc("ctcp", NULL, (SIGNAL_FUNC) cmd_ctcp);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  980|      2|	command_bind_irc("nctcp", NULL, (SIGNAL_FUNC) cmd_nctcp);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  981|      2|	command_bind_irc("part", NULL, (SIGNAL_FUNC) cmd_part);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  982|      2|	command_bind_irc("kick", NULL, (SIGNAL_FUNC) cmd_kick);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  983|      2|	command_bind_irc("topic", NULL, (SIGNAL_FUNC) cmd_topic);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  984|      2|	command_bind_irc("invite", NULL, (SIGNAL_FUNC) cmd_invite);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  985|      2|	command_bind_irc("list", NULL, (SIGNAL_FUNC) cmd_list);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  986|      2|	command_bind_irc("who", NULL, (SIGNAL_FUNC) cmd_who);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  987|      2|	command_bind_irc("names", NULL, (SIGNAL_FUNC) cmd_names);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  988|      2|	command_bind_irc("nick", NULL, (SIGNAL_FUNC) cmd_nick);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  989|      2|	command_bind_irc("whois", NULL, (SIGNAL_FUNC) cmd_whois);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  990|      2|	command_bind_irc("whowas", NULL, (SIGNAL_FUNC) cmd_whowas);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  991|      2|	command_bind_irc("ping", NULL, (SIGNAL_FUNC) cmd_ping);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  992|       |	/* SYNTAX: KILL <nick> <reason> */
  993|      2|	command_bind_irc("kill", NULL, (SIGNAL_FUNC) command_2self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  994|      2|	command_bind_irc("away", NULL, (SIGNAL_FUNC) cmd_away);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  995|       |	/* SYNTAX: ISON <nicks> */
  996|      2|	command_bind_irc("ison", NULL, (SIGNAL_FUNC) command_1self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  997|      2|	command_bind_irc("accept", NULL, (SIGNAL_FUNC) cmd_accept);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  998|       |	/* SYNTAX: ADMIN [<server>|<nickname>] */
  999|      2|	command_bind_irc("admin", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1000|       |	/* SYNTAX: INFO [<server>] */
 1001|      2|	command_bind_irc("info", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1002|       |	/* SYNTAX: KNOCK <channel> */
 1003|      2|	command_bind_irc("knock", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1004|       |	/* SYNTAX: LINKS [[<server>] <mask>] */
 1005|      2|	command_bind_irc("links", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1006|       |	/* SYNTAX: LUSERS [<server mask> [<remote server>]] */
 1007|      2|	command_bind_irc("lusers", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1008|       |	/* SYNTAX: MAP */
 1009|      2|	command_bind_irc("map", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1010|       |	/* SYNTAX: MOTD [<server>|<nick>] */
 1011|      2|	command_bind_irc("motd", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1012|       |	/* SYNTAX: REHASH [<option>] */
 1013|      2|	command_bind_irc("rehash", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1014|       |	/* SYNTAX: STATS <type> [<server>] */
 1015|      2|	command_bind_irc("stats", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1016|       |	/* SYNTAX: TIME [<server>|<nick>] */
 1017|      2|	command_bind_irc("time", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1018|       |	/* SYNTAX: TRACE [<server>|<nick>] */
 1019|      2|	command_bind_irc("trace", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1020|       |	/* SYNTAX: VERSION [<server>|<nick>] */
 1021|      2|	command_bind_irc("version", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1022|       |	/* SYNTAX: SERVLIST [<mask> [<type>]] */
 1023|      2|	command_bind_irc("servlist", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1024|       |	/* SYNTAX: SILENCE [[+|-]<nick!user@host>]
 1025|       |	           SILENCE [<nick>] */
 1026|      2|	command_bind_irc("silence", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1027|      2|	command_bind_irc("unsilence", NULL, (SIGNAL_FUNC) cmd_unsilence);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1028|      2|	command_bind_irc("sconnect", NULL, (SIGNAL_FUNC) cmd_sconnect);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1029|       |	/* SYNTAX: SQUERY <service> [<message>] */
 1030|      2|	command_bind_irc("squery", NULL, (SIGNAL_FUNC) command_2self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1031|       |	/* SYNTAX: DIE */
 1032|      2|	command_bind_irc("die", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1033|       |	/* SYNTAX: HASH */
 1034|      2|	command_bind_irc("hash", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1035|      2|	command_bind_irc("oper", NULL, (SIGNAL_FUNC) cmd_oper);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1036|       |	/* SYNTAX: RESTART */
 1037|      2|	command_bind_irc("restart", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1038|       |	/* SYNTAX: SQUIT <server>|<mask> <reason> */
 1039|      2|	command_bind_irc("squit", NULL, (SIGNAL_FUNC) command_2self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1040|       |	/* SYNTAX: USERHOST <nicks> */
 1041|      2|	command_bind_irc("userhost", NULL, (SIGNAL_FUNC) command_self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1042|      2|	command_bind_irc("quote", NULL, (SIGNAL_FUNC) cmd_quote);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1043|      2|	command_bind_irc("wall", NULL, (SIGNAL_FUNC) cmd_wall);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1044|      2|	command_bind_irc("wait", NULL, (SIGNAL_FUNC) cmd_wait);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1045|       |	/* SYNTAX: WALLOPS <message> */
 1046|      2|	command_bind_irc("wallops", NULL, (SIGNAL_FUNC) command_1self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1047|      2|	command_bind_irc("kickban", NULL, (SIGNAL_FUNC) cmd_kickban);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1048|      2|	command_bind_irc("knockout", NULL, (SIGNAL_FUNC) cmd_knockout);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1049|      2|	command_bind_irc("setname", NULL, (SIGNAL_FUNC) command_1self);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1050|      2|	command_bind_irc("server purge", NULL, (SIGNAL_FUNC) cmd_server_purge);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1051|       |
 1052|      2|	signal_add("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1053|      2|	signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1054|      2|	signal_add("whois try whowas", (SIGNAL_FUNC) sig_whois_try_whowas);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1055|      2|	signal_add("whois event", (SIGNAL_FUNC) event_whois);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1056|      2|	signal_add("whois end", (SIGNAL_FUNC) event_end_of_whois);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1057|      2|	signal_add("whowas event", (SIGNAL_FUNC) event_whowas);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1058|       |
 1059|      2|	command_set_options("connect", "+ircnet starttls disallow_starttls nocap");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
 1060|      2|	command_set_options("topic", "delete");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
 1061|      2|	command_set_options("list", "yes");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
 1062|      2|	command_set_options("away", "one all");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
 1063|      2|	command_set_options("whois", "yes");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
 1064|      2|}
irc-commands.c:sig_channel_destroyed:
  878|   117k|{
  879|   117k|	GSList *tmp, *next;
  880|       |
  881|   117k|	if (!IS_IRC_CHANNEL(channel) || !IS_IRC_SERVER(channel->server))
  ------------------
  |  |   12|   234k|	(IRC_CHANNEL(channel) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |    9|   117k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|   117k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 117k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|   117k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              	if (!IS_IRC_CHANNEL(channel) || !IS_IRC_SERVER(channel->server))
  ------------------
  |  |   41|   117k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|   117k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|   117k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 117k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|   117k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (881:6): [True: 0, False: 117k]
  |  Branch (881:34): [True: 0, False: 117k]
  ------------------
  882|      0|		return;
  883|       |
  884|   117k|	for (tmp = channel->server->knockoutlist; tmp != NULL; tmp = next) {
  ------------------
  |  Branch (884:44): [True: 0, False: 117k]
  ------------------
  885|      0|		KNOCKOUT_REC *rec = tmp->data;
  886|       |
  887|      0|		next = tmp->next;
  888|      0|		if (rec->channel == channel)
  ------------------
  |  Branch (888:7): [True: 0, False: 0]
  ------------------
  889|      0|			knockout_destroy(channel->server, rec);
  890|      0|	}
  891|   117k|}
irc-commands.c:sig_server_disconnected:
  864|  29.4k|{
  865|  29.4k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (865:2): [True: 29.4k, False: 0]
  |  Branch (865:2): [True: 29.4k, False: 0]
  |  Branch (865:2): [Folded, False: 29.4k]
  ------------------
  866|       |
  867|  29.4k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (867:6): [True: 0, False: 29.4k]
  ------------------
  868|      0|		return;
  869|       |
  870|  29.4k|	g_free(server->last_nick);
  871|       |
  872|  29.4k|	while (server->knockoutlist != NULL)
  ------------------
  |  Branch (872:9): [True: 0, False: 29.4k]
  ------------------
  873|      0|		knockout_destroy(server, server->knockoutlist->data);
  874|  29.4k|}

irc_core_init:
   87|      2|{
   88|      2|	CHAT_PROTOCOL_REC *rec;
   89|       |
   90|      2|	rec = g_new0(CHAT_PROTOCOL_REC, 1);
  ------------------
  |  Branch (90:8): [True: 2, False: 0]
  |  Branch (90:8): [True: 0, False: 2]
  ------------------
   91|      2|	rec->name = "IRC";
   92|      2|	rec->fullname = "Internet Relay Chat";
   93|      2|	rec->chatnet = "ircnet";
   94|       |
   95|      2|        rec->case_insensitive = TRUE;
   96|       |
   97|      2|	rec->create_chatnet = create_chatnet;
   98|      2|        rec->create_server_setup = create_server_setup;
   99|      2|        rec->create_channel_setup = create_channel_setup;
  100|      2|	rec->create_server_connect = create_server_connect;
  101|      2|	rec->destroy_server_connect = destroy_server_connect;
  102|       |
  103|      2|	rec->server_init_connect = irc_server_init_connect;
  104|      2|	rec->server_connect = irc_server_connect;
  105|      2|	rec->channel_create =
  106|      2|		(CHANNEL_REC *(*) (SERVER_REC *, const char *,
  107|      2|				   const char *, int))
  108|      2|                irc_channel_create;
  109|      2|	rec->query_create =
  110|      2|		(QUERY_REC *(*) (const char *, const char *, int))
  111|      2|                irc_query_create;
  112|       |
  113|      2|        irc_session_init();
  114|      2|	irc_chatnets_init();
  115|      2|	irc_servers_init();
  116|      2|	irc_channels_init();
  117|      2|	irc_queries_init();
  118|       |
  119|      2|	ctcp_init();
  120|      2|	irc_commands_init();
  121|      2|	irc_irc_init();
  122|      2|	lag_init();
  123|      2|	netsplit_init();
  124|      2|	irc_expandos_init();
  125|      2|	irc_cap_init();
  126|      2|	sasl_init();
  127|       |
  128|      2|	settings_check();
  ------------------
  |  |  125|      2|#define settings_check() settings_check_module(MODULE_NAME)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  129|       |
  130|      2|	chat_protocol_register(rec);
  131|      2|	g_free(rec);
  132|       |
  133|      2|	module_register("irc", "core");
  ------------------
  |  |   59|      2|        module_register_full(name, submodule, MODULE_NAME)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  134|      2|}
irc-core.c:create_chatnet:
   49|     24|{
   50|     24|        return g_malloc0(sizeof(IRC_CHATNET_REC));
   51|     24|}
irc-core.c:create_server_setup:
   54|     26|{
   55|     26|        return g_malloc0(sizeof(IRC_SERVER_SETUP_REC));
   56|     26|}
irc-core.c:create_channel_setup:
   59|     16|{
   60|     16|        return g_malloc0(sizeof(CHANNEL_SETUP_REC));
   61|     16|}
irc-core.c:create_server_connect:
   64|  29.4k|{
   65|  29.4k|        return g_malloc0(sizeof(IRC_SERVER_CONNECT_REC));
   66|  29.4k|}
irc-core.c:destroy_server_connect:
   69|  29.4k|{
   70|  29.4k|	IRC_SERVER_CONNECT_REC *ircconn;
   71|       |
   72|  29.4k|        ircconn = IRC_SERVER_CONNECT(conn);
  ------------------
  |  |   37|  29.4k|	PROTO_CHECK_CAST(SERVER_CONNECT(conn), IRC_SERVER_CONNECT_REC, \
  |  |  ------------------
  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  ------------------
  |  |   38|  29.4k|			 chat_type, "IRC")
  ------------------
   73|  29.4k|	if (ircconn == NULL)
  ------------------
  |  Branch (73:6): [True: 0, False: 29.4k]
  ------------------
   74|      0|		return;
   75|       |
   76|  29.4k|	g_free_not_null(ircconn->usermode);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
   77|  29.4k|	g_free_not_null(ircconn->alternate_nick);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
   78|  29.4k|	g_free_not_null(ircconn->sasl_username);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
   79|  29.4k|	g_free_not_null(ircconn->sasl_password);
  ------------------
  |  |   64|  29.4k|#define g_free_not_null(a) g_free(a)
  ------------------
   80|       |
   81|  29.4k|	if (ircconn->scram_session != NULL) {
  ------------------
  |  Branch (81:6): [True: 0, False: 29.4k]
  ------------------
   82|      0|		scram_session_free(ircconn->scram_session);
   83|      0|	}
   84|  29.4k|}

irc_expandos_init:
  156|      2|{
  157|      2|	last_join = NULL;
  158|       |
  159|      2|	expando_create(":", expando_lastjoin,
  160|      2|		       "event join", EXPANDO_ARG_SERVER, NULL);
  161|      2|	expando_create("H", expando_server_numeric,
  162|      2|		       "server event", EXPANDO_ARG_SERVER, NULL);
  163|      2|	expando_create("S", expando_servername,
  164|      2|		       "window changed", EXPANDO_ARG_NONE,
  165|      2|		       "window server changed", EXPANDO_ARG_WINDOW, NULL);
  166|      2|	expando_create("X", expando_userhost,
  167|      2|		       "window changed", EXPANDO_ARG_NONE,
  168|      2|		       "window server changed", EXPANDO_ARG_WINDOW, NULL);
  169|      2|	expando_create("x", expando_hostname,
  170|      2|		       "window changed", EXPANDO_ARG_NONE,
  171|      2|		       "window server changed", EXPANDO_ARG_WINDOW, NULL);
  172|      2|	expando_create("usermode", expando_usermode,
  173|      2|		       "window changed", EXPANDO_ARG_NONE,
  174|      2|		       "window server changed", EXPANDO_ARG_WINDOW,
  175|      2|		       "user mode changed", EXPANDO_ARG_SERVER, NULL);
  176|      2|	expando_create("cumode", expando_cumode,
  177|      2|		       "window changed", EXPANDO_ARG_NONE,
  178|      2|		       "window item changed", EXPANDO_ARG_WINDOW,
  179|      2|		       "nick mode changed", EXPANDO_ARG_WINDOW_ITEM,
  180|      2|		       "channel joined", EXPANDO_ARG_WINDOW_ITEM, NULL);
  181|      2|	expando_create("cumode_space", expando_cumode_space,
  182|      2|		       "window changed", EXPANDO_ARG_NONE,
  183|      2|		       "window item changed", EXPANDO_ARG_WINDOW,
  184|      2|		       "nick mode changed", EXPANDO_ARG_WINDOW_ITEM,
  185|      2|		       "channel joined", EXPANDO_ARG_WINDOW_ITEM, NULL);
  186|       |
  187|      2|        expando_add_signal("I", "event invite", EXPANDO_ARG_SERVER);
  188|       |
  189|       |	signal_add("event join", (SIGNAL_FUNC) event_join);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  190|      2|}
irc-expandos.c:event_join:
  146|   153k|{
  147|   153k|	g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (147:2): [True: 47.2k, False: 105k]
  |  Branch (147:2): [True: 47.2k, False: 105k]
  |  Branch (147:2): [Folded, False: 47.2k]
  ------------------
  148|       |
  149|  47.2k|	if (g_ascii_strcasecmp(nick, server->nick) != 0) {
  ------------------
  |  Branch (149:6): [True: 35.7k, False: 11.4k]
  ------------------
  150|  35.7k|		g_free_not_null(last_join);
  ------------------
  |  |   64|  35.7k|#define g_free_not_null(a) g_free(a)
  ------------------
  151|  35.7k|		last_join = g_strdup(nick);
  152|  35.7k|	}
  153|  47.2k|}

irc_nicklist_insert:
   64|   175k|{
   65|   175k|	NICK_REC *rec;
   66|       |
   67|   175k|	g_return_val_if_fail(IS_IRC_CHANNEL(channel), NULL);
  ------------------
  |  Branch (67:2): [True: 175k, False: 0]
  |  Branch (67:2): [True: 175k, False: 0]
  |  Branch (67:2): [True: 175k, False: 0]
  |  Branch (67:2): [Folded, False: 175k]
  ------------------
   68|   175k|	g_return_val_if_fail(nick != NULL, NULL);
  ------------------
  |  Branch (68:2): [True: 88.1k, False: 86.9k]
  |  Branch (68:2): [True: 88.1k, False: 86.9k]
  |  Branch (68:2): [Folded, False: 88.1k]
  ------------------
   69|       |
   70|  88.1k|	rec = g_new0(NICK_REC, 1);
  ------------------
  |  Branch (70:8): [True: 88.1k, False: 0]
  |  Branch (70:8): [True: 0, False: 88.1k]
  ------------------
   71|  88.1k|	rec->nick = g_strdup(nick);
   72|       |
   73|  88.1k|	rec->send_massjoin = send_massjoin;
   74|  88.1k|	nicklist_set_modes(channel, rec, op, halfop, voice, prefixes, FALSE);
   75|       |
   76|       |	nicklist_insert(CHANNEL(channel), rec);
  ------------------
  |  |    8|  88.1k|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|  88.1k|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|  88.1k|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|  88.1k|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
   77|  88.1k|	return rec;
   78|   175k|}
irc_nickcmp_rfc1459:
   81|   275M|{
   82|   464M|	while (*m != '\0' && *n != '\0') {
  ------------------
  |  Branch (82:9): [True: 461M, False: 2.24M]
  |  Branch (82:23): [True: 461M, False: 476k]
  ------------------
   83|   461M|		if (to_rfc1459(*m) != to_rfc1459(*n))
  ------------------
  |  |   17|   461M|#define to_rfc1459(x) ((x) >= 65 && (x) <= 94 ? (x) + 32 : (x))
  |  |  ------------------
  |  |  |  Branch (17:24): [True: 56.5M, False: 404M]
  |  |  |  Branch (17:37): [True: 2.35M, False: 54.2M]
  |  |  ------------------
  ------------------
              		if (to_rfc1459(*m) != to_rfc1459(*n))
  ------------------
  |  |   17|   461M|#define to_rfc1459(x) ((x) >= 65 && (x) <= 94 ? (x) + 32 : (x))
  |  |  ------------------
  |  |  |  Branch (17:24): [True: 84.1M, False: 377M]
  |  |  |  Branch (17:37): [True: 5.83M, False: 78.3M]
  |  |  ------------------
  ------------------
  |  Branch (83:7): [True: 273M, False: 188M]
  ------------------
   84|   273M|			return -1;
   85|   188M|		m++; n++;
   86|   188M|	}
   87|  2.72M|	return *m == *n ? 0 : 1;
  ------------------
  |  Branch (87:9): [True: 1.21M, False: 1.50M]
  ------------------
   88|   275M|}
irc_nicklist_init:
  601|      2|{
  602|      2|	signal_add_first("event nick", (SIGNAL_FUNC) event_nick);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  603|      2|	signal_add_first("event 352", (SIGNAL_FUNC) event_who);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  604|      2|	signal_add_first("event 354", (SIGNAL_FUNC) event_whox_channel_full);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  605|      2|	signal_add("silent event who", (SIGNAL_FUNC) event_who);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  606|      2|	signal_add("silent event whox", (SIGNAL_FUNC) event_whox_channel_full);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  607|      2|	signal_add("silent event whox useraccount", (SIGNAL_FUNC) event_whox_useraccount);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  608|      2|	signal_add("silent event whois", (SIGNAL_FUNC) event_whois);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  609|      2|	signal_add_first("event 311", (SIGNAL_FUNC) event_whois);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  610|      2|	signal_add_first("whois away", (SIGNAL_FUNC) event_whois_away);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  611|      2|	signal_add_first("whois oper", (SIGNAL_FUNC) event_whois_ircop);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  612|      2|	signal_add_first("event 306", (SIGNAL_FUNC) event_own_away);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  613|      2|	signal_add_first("event 305", (SIGNAL_FUNC) event_own_unaway);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  614|      2|	signal_add_first("event 353", (SIGNAL_FUNC) event_names_list);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  615|      2|	signal_add_first("event 366", (SIGNAL_FUNC) event_end_of_names);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  616|      2|	signal_add_first("event 432", (SIGNAL_FUNC) event_nick_invalid);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  617|      2|	signal_add_first("event 433", (SIGNAL_FUNC) event_nick_in_use);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  618|      2|	signal_add_first("event 437", (SIGNAL_FUNC) event_target_unavailable);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  619|      2|	signal_add_first("event 302", (SIGNAL_FUNC) event_userhost);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  620|      2|	signal_add_first("event away", (SIGNAL_FUNC) event_away_notify);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  621|      2|	signal_add("userhost event", (SIGNAL_FUNC) event_userhost);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  622|      2|	signal_add("event setname", (SIGNAL_FUNC) event_setname);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  623|      2|	signal_add("user mode changed", (SIGNAL_FUNC) sig_usermode);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  624|       |	signal_add("server connected", (SIGNAL_FUNC) sig_connected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  625|      2|}
irc-nicklist.c:nicklist_set_modes:
   35|   183k|{
   36|   183k|	gboolean changed = FALSE;
   37|   183k|	if (rec->op != op) {
  ------------------
  |  Branch (37:6): [True: 6.24k, False: 177k]
  ------------------
   38|  6.24k|		rec->op = op;
   39|  6.24k|		changed = TRUE;
   40|  6.24k|	}
   41|   183k|	if (rec->halfop != halfop) {
  ------------------
  |  Branch (41:6): [True: 3.67k, False: 180k]
  ------------------
   42|  3.67k|		rec->halfop = halfop;
   43|  3.67k|		changed = TRUE;
   44|  3.67k|	}
   45|   183k|	if (rec->voice != voice) {
  ------------------
  |  Branch (45:6): [True: 3.08k, False: 180k]
  ------------------
   46|  3.08k|		rec->voice = voice;
   47|  3.08k|		changed = TRUE;
   48|  3.08k|	}
   49|       |
   50|   183k|	if (prefixes != NULL && g_strcmp0(rec->prefixes, prefixes) != 0) {
  ------------------
  |  Branch (50:6): [True: 163k, False: 20.3k]
  |  Branch (50:26): [True: 8.96k, False: 154k]
  ------------------
   51|  8.96k|		g_strlcpy(rec->prefixes, prefixes, sizeof(rec->prefixes));
   52|  8.96k|		changed = TRUE;
   53|  8.96k|	}
   54|       |
   55|   183k|	if (changed && send_changed) {
  ------------------
  |  Branch (55:6): [True: 12.7k, False: 171k]
  |  Branch (55:17): [True: 551, False: 12.1k]
  ------------------
   56|    551|		signal_emit("nicklist changed", 3, channel, rec, rec->nick);
   57|    551|	}
   58|   183k|}
irc-nicklist.c:event_nick:
  487|  18.2k|{
  488|  18.2k|	char *params, *nick;
  489|       |
  490|  18.2k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (490:2): [True: 18.2k, False: 0]
  |  Branch (490:2): [True: 18.2k, False: 0]
  |  Branch (490:2): [Folded, False: 18.2k]
  ------------------
  491|  18.2k|	g_return_if_fail(orignick != NULL);
  ------------------
  |  Branch (491:2): [True: 10.4k, False: 7.74k]
  |  Branch (491:2): [True: 10.4k, False: 7.74k]
  |  Branch (491:2): [Folded, False: 10.4k]
  ------------------
  492|       |
  493|  10.4k|	params = event_get_params(data, 1, &nick);
  494|       |
  495|  10.4k|	if (g_ascii_strcasecmp(orignick, server->nick) == 0) {
  ------------------
  |  Branch (495:6): [True: 2.06k, False: 8.42k]
  ------------------
  496|       |		/* You changed your nick */
  497|  2.06k|		if (server->last_nick != NULL &&
  ------------------
  |  Branch (497:7): [True: 0, False: 2.06k]
  ------------------
  498|      0|		    g_ascii_strcasecmp(server->last_nick, nick) == 0) {
  ------------------
  |  Branch (498:7): [True: 0, False: 0]
  ------------------
  499|       |                        /* changed with /NICK - keep it as wanted nick */
  500|      0|			g_free(server->connrec->nick);
  501|      0|			server->connrec->nick = g_strdup(nick);
  502|      0|		}
  503|       |
  504|  2.06k|		server_change_nick(SERVER(server), nick);
  ------------------
  |  |    9|  2.06k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  2.06k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  505|  2.06k|	}
  506|       |
  507|       |	/* invalidate any outstanding accountqueries for the old nick */
  508|  10.4k|	irc_channels_query_purge_accountquery(server, orignick);
  509|       |	nicklist_rename(SERVER(server), orignick, nick);
  ------------------
  |  |    9|  10.4k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  10.4k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  510|  10.4k|	g_free(params);
  511|  10.4k|}
irc-nicklist.c:event_who:
  257|  15.3k|{
  258|  15.3k|	char *params, *nick, *channel, *user, *host, *stat, *realname, *hops;
  259|       |
  260|  15.3k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (260:2): [True: 15.3k, False: 0]
  |  Branch (260:2): [True: 15.3k, False: 0]
  |  Branch (260:2): [Folded, False: 15.3k]
  ------------------
  261|       |
  262|  15.3k|	params =
  263|  15.3k|	    event_get_params(data, 8, NULL, &channel, &user, &host, NULL, &nick, &stat, &realname);
  264|       |
  265|       |	/* get hop count */
  266|  15.3k|	hops = realname;
  267|   102k|	while (*realname != '\0' && *realname != ' ')
  ------------------
  |  Branch (267:9): [True: 87.4k, False: 15.3k]
  |  Branch (267:30): [True: 87.4k, False: 0]
  ------------------
  268|  87.4k|		realname++;
  269|  15.3k|	if (*realname == ' ')
  ------------------
  |  Branch (269:6): [True: 0, False: 15.3k]
  ------------------
  270|      0|		*realname++ = '\0';
  271|       |
  272|  15.3k|	fill_who(server, channel, user, host, nick, stat, hops, NULL, realname);
  273|       |
  274|  15.3k|	g_free(params);
  275|  15.3k|}
irc-nicklist.c:fill_who:
  227|  15.9k|{
  228|  15.9k|	CHANNEL_REC *chanrec;
  229|  15.9k|	NICK_REC *nickrec;
  230|       |
  231|       |	/* update host, realname, hopcount */
  232|  15.9k|	chanrec = channel_find(server, channel);
  233|  15.9k|	nickrec = chanrec == NULL ? NULL :
  ------------------
  |  Branch (233:12): [True: 10.4k, False: 5.50k]
  ------------------
  234|  15.9k|		nicklist_find(chanrec, nick);
  235|  15.9k|	if (nickrec != NULL) {
  ------------------
  |  Branch (235:6): [True: 1.89k, False: 14.0k]
  ------------------
  236|  1.89k|		if (nickrec->host == NULL) {
  ------------------
  |  Branch (236:7): [True: 487, False: 1.40k]
  ------------------
  237|    487|                        char *str = g_strdup_printf("%s@%s", user, host);
  238|    487|			nicklist_set_host(chanrec, nickrec, str);
  239|    487|                        g_free(str);
  240|    487|		}
  241|  1.89k|		if (nickrec->realname == NULL) {
  ------------------
  |  Branch (241:7): [True: 365, False: 1.52k]
  ------------------
  242|    365|			nickrec->realname = g_strdup(realname);
  243|    365|		}
  244|  1.89k|		if (nickrec->account == NULL && account != NULL) {
  ------------------
  |  Branch (244:7): [True: 1.24k, False: 653]
  |  Branch (244:35): [True: 53, False: 1.18k]
  ------------------
  245|     53|			nicklist_set_account(chanrec, nickrec,
  246|     53|			                     strcmp(account, "0") == 0 ? "*" : account);
  ------------------
  |  Branch (246:25): [True: 4, False: 49]
  ------------------
  247|     53|		}
  248|  1.89k|		sscanf(hops, "%d", &nickrec->hops);
  249|  1.89k|	}
  250|       |
  251|  15.9k|	nicklist_update_flags(server, nick,
  252|  15.9k|			      strchr(stat, 'G') != NULL, /* gone */
  253|       |			      strchr(stat, '*') != NULL); /* ircop */
  254|  15.9k|}
irc-nicklist.c:event_whox_channel_full:
  278|  1.50k|{
  279|  1.50k|	char *params, *id, *nick, *channel, *user, *host, *stat, *hops, *account, *realname;
  280|       |
  281|  1.50k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (281:2): [True: 1.50k, False: 0]
  |  Branch (281:2): [True: 1.50k, False: 0]
  |  Branch (281:2): [Folded, False: 1.50k]
  ------------------
  282|       |
  283|  1.50k|	params = event_get_params(data, 10, NULL, &id, &channel, &user, &host, &nick, &stat, &hops,
  284|  1.50k|	                          &account, &realname);
  285|       |
  286|  1.50k|	if (g_strcmp0(id, WHOX_CHANNEL_FULL_ID) != 0) {
  ------------------
  |  |   23|  1.50k|#define WHOX_CHANNEL_FULL_ID "743"
  ------------------
  |  Branch (286:6): [True: 930, False: 575]
  ------------------
  287|    930|		g_free(params);
  288|    930|		return;
  289|    930|	}
  290|       |
  291|    575|	fill_who(server, channel, user, host, nick, stat, hops, account, realname);
  292|       |
  293|    575|	g_free(params);
  294|    575|}
irc-nicklist.c:event_whois:
  328|  1.32k|{
  329|  1.32k|	char *params, *nick, *realname;
  330|  1.32k|	GSList *nicks, *tmp;
  331|  1.32k|	NICK_REC *rec;
  332|       |
  333|  1.32k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (333:2): [True: 1.32k, False: 0]
  |  Branch (333:2): [True: 1.32k, False: 0]
  |  Branch (333:2): [Folded, False: 1.32k]
  ------------------
  334|       |
  335|       |	/* first remove the gone-flag, if user is gone
  336|       |	   it will be set later.. */
  337|  1.32k|	params = event_get_params(data, 6, NULL, &nick, NULL,
  338|  1.32k|				  NULL, NULL, &realname);
  339|       |
  340|  1.32k|	nicks = nicklist_get_same(SERVER(server), nick);
  ------------------
  |  |    9|  1.32k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  1.32k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  341|  1.68k|	for (tmp = nicks; tmp != NULL; tmp = tmp->next->next) {
  ------------------
  |  Branch (341:20): [True: 365, False: 1.32k]
  ------------------
  342|    365|		rec = tmp->next->data;
  343|       |
  344|    365|		if (rec->realname == NULL)
  ------------------
  |  Branch (344:7): [True: 345, False: 20]
  ------------------
  345|    345|			rec->realname = g_strdup(realname);
  346|    365|	}
  347|  1.32k|	g_slist_free(nicks);
  348|       |
  349|       |	/* reset gone and ircop status, we'll handle them in the following
  350|       |	   WHOIS replies */
  351|  1.32k|	nicklist_update_flags(SERVER(server), nick, FALSE, FALSE);
  ------------------
  |  |    9|  1.32k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  1.32k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  352|  1.32k|	g_free(params);
  353|  1.32k|}
irc-nicklist.c:event_own_away:
  368|  10.3k|{
  369|  10.3k|	char *params, *nick;
  370|       |
  371|  10.3k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (371:2): [True: 10.3k, False: 0]
  |  Branch (371:2): [True: 10.3k, False: 0]
  |  Branch (371:2): [Folded, False: 10.3k]
  ------------------
  372|       |
  373|       |	/* set user's gone flag.. */
  374|  10.3k|	params = event_get_params(data, 2, &nick, NULL);
  375|       |	nicklist_update_flags(server, nick, TRUE, -1);
  376|  10.3k|	g_free(params);
  377|  10.3k|}
irc-nicklist.c:event_own_unaway:
  380|  11.8k|{
  381|  11.8k|	char *params, *nick;
  382|       |
  383|  11.8k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (383:2): [True: 11.8k, False: 0]
  |  Branch (383:2): [True: 11.8k, False: 0]
  |  Branch (383:2): [Folded, False: 11.8k]
  ------------------
  384|       |
  385|       |	/* set user's gone flag.. */
  386|  11.8k|	params = event_get_params(data, 2, &nick, NULL);
  387|       |	nicklist_update_flags(server, nick, FALSE, -1);
  388|  11.8k|	g_free(params);
  389|  11.8k|}
irc-nicklist.c:event_names_list:
  101|  17.0k|{
  102|  17.0k|	IRC_CHANNEL_REC *chanrec;
  103|  17.0k|	NICK_REC *rec;
  104|  17.0k|	char *params, *type, *channel, *names, *ptr, *host;
  105|  17.0k|        int op, halfop, voice;
  106|  17.0k|	char prefixes[MAX_USER_PREFIXES+1];
  107|  17.0k|	const char *nick_flags, *nick_flag_cur, *nick_flag_op;
  108|       |
  109|  17.0k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (109:2): [True: 17.0k, False: 0]
  |  Branch (109:2): [True: 17.0k, False: 0]
  |  Branch (109:2): [Folded, False: 17.0k]
  ------------------
  110|       |
  111|  17.0k|	params = event_get_params(data, 4, NULL, &type, &channel, &names);
  112|       |
  113|  17.0k|	chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|  17.0k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|  17.0k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  17.0k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|  17.0k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  114|  17.0k|	if (chanrec == NULL || chanrec->names_got) {
  ------------------
  |  Branch (114:6): [True: 7.50k, False: 9.53k]
  |  Branch (114:25): [True: 1.43k, False: 8.09k]
  ------------------
  115|       |		/* unknown channel / names list already read */
  116|  8.93k|		g_free(params);
  117|  8.93k|		return;
  118|  8.93k|	}
  119|  8.09k|	nick_flags = server->get_nick_flags(SERVER(server));
  ------------------
  |  |    9|  8.09k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  8.09k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  120|  8.09k|	nick_flag_op = strchr(nick_flags, '@');
  121|       |
  122|       |	/* type = '=' = public, '*' = private, '@' = secret.
  123|       |
  124|       |	   This is actually pretty useless to check here, but at least we
  125|       |	   get to know if the channel is +p or +s a few seconds before
  126|       |	   we receive the MODE reply...
  127|       |
  128|       |	   If the channel key is set, assume the channel is +k also until
  129|       |           we know better, so parse_channel_modes() won't clear the key */
  130|  8.09k|	if (*type == '*') {
  ------------------
  |  Branch (130:6): [True: 1.54k, False: 6.55k]
  ------------------
  131|  1.54k|		parse_channel_modes(chanrec, NULL,
  132|  1.54k|				    chanrec->key ? "+kp" : "+p", FALSE);
  ------------------
  |  Branch (132:9): [True: 30, False: 1.51k]
  ------------------
  133|  6.55k|	} else if (*type == '@') {
  ------------------
  |  Branch (133:13): [True: 371, False: 6.18k]
  ------------------
  134|    371|		parse_channel_modes(chanrec, NULL,
  135|    371|				    chanrec->key ? "+ks" : "+s", FALSE);
  ------------------
  |  Branch (135:9): [True: 273, False: 98]
  ------------------
  136|    371|	}
  137|       |
  138|   171k|	while (*names != '\0') {
  ------------------
  |  Branch (138:9): [True: 163k, False: 8.09k]
  ------------------
  139|   171k|		while (*names == ' ') names++;
  ------------------
  |  Branch (139:10): [True: 8.21k, False: 163k]
  ------------------
  140|   163k|		ptr = names;
  141|  2.35M|		while (*names != '\0' && *names != ' ') names++;
  ------------------
  |  Branch (141:10): [True: 2.35M, False: 5.51k]
  |  Branch (141:28): [True: 2.19M, False: 157k]
  ------------------
  142|   163k|		if (*names != '\0') *names++ = '\0';
  ------------------
  |  Branch (142:7): [True: 157k, False: 5.51k]
  ------------------
  143|       |
  144|       |		/* some servers show ".@nick", there's also been talk about
  145|       |		   showing "@+nick" and since none of these chars are valid
  146|       |		   nick chars, just check them until a non-nickflag char is
  147|       |		   found. */
  148|   163k|		op = halfop = voice = FALSE;
  149|   163k|		prefixes[0] = '\0';
  150|   178k|		while (isnickflag(server, *ptr)) {
  ------------------
  |  |   23|   178k|	(server->prefix[(int)(unsigned char) a] != '\0')
  |  |  ------------------
  |  |  |  Branch (23:2): [True: 15.2k, False: 163k]
  |  |  ------------------
  ------------------
  151|  15.2k|			prefix_add(prefixes, *ptr, (SERVER_REC *) server);
  152|  15.2k|			switch (*ptr) {
  153|  3.10k|			case '@':
  ------------------
  |  Branch (153:4): [True: 3.10k, False: 12.1k]
  ------------------
  154|  3.10k|                                op = TRUE;
  155|  3.10k|                                break;
  156|  8.02k|			case '%':
  ------------------
  |  Branch (156:4): [True: 8.02k, False: 7.21k]
  ------------------
  157|  8.02k|                                halfop = TRUE;
  158|  8.02k|                                break;
  159|  3.43k|			case '+':
  ------------------
  |  Branch (159:4): [True: 3.43k, False: 11.8k]
  ------------------
  160|  3.43k|                                voice = TRUE;
  161|  3.43k|                                break;
  162|    684|			default:
  ------------------
  |  Branch (162:4): [True: 684, False: 14.5k]
  ------------------
  163|       |				/* If this flag is listed higher than op (in the
  164|       |				 * isupport PREFIX reply), then count this user
  165|       |				 * as an op. */
  166|    684|				nick_flag_cur = strchr(nick_flags, *ptr);
  167|    684|				if (nick_flag_cur && nick_flag_op && nick_flag_cur < nick_flag_op) {
  ------------------
  |  Branch (167:9): [True: 684, False: 0]
  |  Branch (167:26): [True: 0, False: 684]
  |  Branch (167:42): [True: 0, False: 0]
  ------------------
  168|      0|					op = TRUE;
  169|      0|				}
  170|    684|				break;
  171|  15.2k|			}
  172|  15.2k|                        ptr++;
  173|  15.2k|		}
  174|       |
  175|   163k|		host = strchr(ptr, '!');
  176|   163k|		if (host != NULL)
  ------------------
  |  Branch (176:7): [True: 2.59k, False: 160k]
  ------------------
  177|  2.59k|			*host++ = '\0';
  178|       |
  179|   163k|		rec = nicklist_find((CHANNEL_REC *) chanrec, ptr);
  180|   163k|		if (rec == NULL) {
  ------------------
  |  Branch (180:7): [True: 67.7k, False: 95.6k]
  ------------------
  181|  67.7k|			rec = irc_nicklist_insert(chanrec, ptr, op, halfop,
  182|  67.7k|						  voice, FALSE, prefixes);
  183|  67.7k|			if (host != NULL)
  ------------------
  |  Branch (183:8): [True: 1.46k, False: 66.3k]
  ------------------
  184|  1.46k|				nicklist_set_host(CHANNEL(chanrec), rec, host);
  ------------------
  |  |    8|  1.46k|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|  1.46k|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|  1.46k|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|  1.46k|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  185|  95.6k|		} else {
  186|  95.6k|			nicklist_set_modes(chanrec, rec, op, halfop, voice, prefixes, TRUE);
  187|  95.6k|		}
  188|   163k|	}
  189|       |
  190|  8.09k|	g_free(params);
  191|  8.09k|}
irc-nicklist.c:event_end_of_names:
  194|  13.3k|{
  195|  13.3k|	char *params, *channel;
  196|  13.3k|	IRC_CHANNEL_REC *chanrec;
  197|  13.3k|	NICK_REC *ownnick;
  198|  13.3k|	int nicks;
  199|       |
  200|  13.3k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (200:2): [True: 13.3k, False: 0]
  |  Branch (200:2): [True: 13.3k, False: 0]
  |  Branch (200:2): [Folded, False: 13.3k]
  ------------------
  201|       |
  202|  13.3k|	params = event_get_params(data, 2, NULL, &channel);
  203|       |
  204|  13.3k|	chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|  13.3k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|  13.3k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  13.3k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|  13.3k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|  13.3k|	if (chanrec != NULL && !chanrec->names_got) {
  ------------------
  |  Branch (205:6): [True: 7.57k, False: 5.74k]
  |  Branch (205:25): [True: 5.26k, False: 2.30k]
  ------------------
  206|  5.26k|		ownnick = nicklist_find(CHANNEL(chanrec), server->nick);
  ------------------
  |  |    8|  5.26k|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|  5.26k|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|  5.26k|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|  5.26k|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  207|  5.26k|		if (ownnick == NULL) {
  ------------------
  |  Branch (207:7): [True: 4.96k, False: 304]
  ------------------
  208|       |			/* stupid server - assume we have ops
  209|       |			   if channel is empty */
  210|  4.96k|			nicks = g_hash_table_size(chanrec->nicks);
  211|  4.96k|			ownnick = irc_nicklist_insert(chanrec, server->nick,
  212|  4.96k|						      nicks == 0, FALSE,
  213|  4.96k|						      FALSE, FALSE, NULL);
  214|  4.96k|		}
  215|  5.26k|		nicklist_set_own(CHANNEL(chanrec), ownnick);
  ------------------
  |  |    8|  5.26k|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|  5.26k|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|  5.26k|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|  5.26k|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  216|  5.26k|                chanrec->chanop = chanrec->ownnick->op;
  217|  5.26k|		chanrec->names_got = TRUE;
  218|  5.26k|		signal_emit("channel joined", 1, chanrec);
  219|  5.26k|	}
  220|       |
  221|  13.3k|	g_free(params);
  222|  13.3k|}
irc-nicklist.c:event_nick_invalid:
  404|    788|{
  405|    788|	if (!server->connected)
  ------------------
  |  Branch (405:6): [True: 690, False: 98]
  ------------------
  406|       |		/* we used to call server_disconnect but that crashes
  407|       |		   irssi because of undefined memory access. instead,
  408|       |		   indicate that the connection should be dropped and
  409|       |		   let the irc method to the clean-up. */
  410|    690|		server->connection_lost = server->no_reconnect = TRUE;
  411|    788|}
irc-nicklist.c:event_nick_in_use:
  414|  4.98k|{
  415|  4.98k|	char *str, *cmd, *params, *nick;
  416|  4.98k|	int n;
  417|  4.98k|	gboolean try_alternate_nick;
  418|       |
  419|  4.98k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (419:2): [True: 4.98k, False: 0]
  |  Branch (419:2): [True: 4.98k, False: 0]
  |  Branch (419:2): [Folded, False: 4.98k]
  ------------------
  420|       |
  421|  4.98k|	if (server->connected) {
  ------------------
  |  Branch (421:6): [True: 536, False: 4.45k]
  ------------------
  422|       |		/* Already connected, no need to handle this anymore. */
  423|    536|		return;
  424|    536|	}
  425|       |	
  426|  4.45k|	try_alternate_nick = g_ascii_strcasecmp(server->nick, server->connrec->nick) == 0 &&
  ------------------
  |  Branch (426:23): [True: 517, False: 3.93k]
  ------------------
  427|    517|	    server->connrec->alternate_nick != NULL &&
  ------------------
  |  Branch (427:6): [True: 0, False: 517]
  ------------------
  428|      0|	    g_ascii_strcasecmp(server->connrec->alternate_nick, server->nick) != 0;
  ------------------
  |  Branch (428:6): [True: 0, False: 0]
  ------------------
  429|       |
  430|  4.45k|	params = event_get_params(data, 2, NULL, &nick);
  431|  4.45k|	if (g_ascii_strcasecmp(server->nick, nick) != 0) {
  ------------------
  |  Branch (431:6): [True: 4.45k, False: 0]
  ------------------
  432|       |		/* the server uses a nick different from the one we send */
  433|  4.45k|		g_free(server->nick);
  434|  4.45k|		server->nick = g_strdup(nick);
  435|  4.45k|	}
  436|  4.45k|	g_free(params);
  437|       |
  438|       |	/* nick already in use - need to change it .. */
  439|  4.45k|	if (try_alternate_nick) {
  ------------------
  |  Branch (439:6): [True: 0, False: 4.45k]
  ------------------
  440|       |		/* first try, so try the alternative nick.. */
  441|      0|		g_free(server->nick);
  442|      0|		server->nick = g_strdup(server->connrec->alternate_nick);
  443|      0|	}
  444|  4.45k|	else if (strlen(server->nick) < 9) {
  ------------------
  |  Branch (444:11): [True: 3.16k, False: 1.28k]
  ------------------
  445|       |		/* keep adding '_' to end of nick.. */
  446|  3.16k|		str = g_strdup_printf("%s_", server->nick);
  447|  3.16k|		g_free(server->nick);
  448|  3.16k|		server->nick = str;
  449|  3.16k|	} else {
  450|       |		/* nick full, keep adding number at the end */
  451|  1.36k|		for (n = 8; n > 0; n--) {
  ------------------
  |  Branch (451:15): [True: 1.36k, False: 0]
  ------------------
  452|  1.36k|			if (server->nick[n] < '0' || server->nick[n] > '9') {
  ------------------
  |  Branch (452:8): [True: 491, False: 876]
  |  Branch (452:33): [True: 788, False: 88]
  ------------------
  453|  1.27k|				server->nick[n] = '1';
  454|  1.27k|				break;
  455|  1.27k|			}
  456|       |
  457|     88|			if (server->nick[n] < '9') {
  ------------------
  |  Branch (457:8): [True: 4, False: 84]
  ------------------
  458|      4|				server->nick[n]++;
  459|      4|				break;
  460|      4|			}
  461|     84|			server->nick[n] = '0';
  462|     84|		}
  463|  1.28k|	}
  464|       |
  465|  4.45k|	cmd = g_strdup_printf("NICK %s", server->nick);
  466|  4.45k|	irc_send_cmd_now(server, cmd);
  467|  4.45k|	g_free(cmd);
  468|  4.45k|}
irc-nicklist.c:event_target_unavailable:
  471|  8.73k|{
  472|  8.73k|	char *params, *channel;
  473|       |
  474|  8.73k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (474:2): [True: 8.73k, False: 0]
  |  Branch (474:2): [True: 8.73k, False: 0]
  |  Branch (474:2): [Folded, False: 8.73k]
  ------------------
  475|       |
  476|  8.73k|	params = event_get_params(data, 2, NULL, &channel);
  477|  8.73k|	if (!server_ischannel(SERVER(server), channel)) {
  ------------------
  |  |   22|  8.73k|	((server)->ischannel(server, channel))
  ------------------
  |  Branch (477:6): [True: 3.69k, False: 5.04k]
  ------------------
  478|       |		/* nick is unavailable. */
  479|  3.69k|		event_nick_in_use(server, data);
  480|  3.69k|	}
  481|       |
  482|  8.73k|	g_free(params);
  483|  8.73k|}
irc-nicklist.c:event_away_notify:
  563|    198|{
  564|    198|	char *params, *awaymsg;
  565|       |
  566|    198|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|    198|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|    198|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    198|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 198, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|    198|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (566:6): [True: 0, False: 198]
  ------------------
  567|      0|		return;
  568|       |
  569|    198|	g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (569:2): [True: 110, False: 88]
  |  Branch (569:2): [True: 110, False: 88]
  |  Branch (569:2): [Folded, False: 110]
  ------------------
  570|    198|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (570:2): [True: 110, False: 0]
  |  Branch (570:2): [True: 110, False: 0]
  |  Branch (570:2): [Folded, False: 110]
  ------------------
  571|       |
  572|    110|	params = event_get_params(data, 1 | PARAM_FLAG_GETREST, &awaymsg);
  ------------------
  |  |  126|    110|#define PARAM_FLAG_GETREST 0x00002000
  ------------------
  573|       |	nicklist_update_flags(SERVER(server), nick, *awaymsg != '\0', -1);
  ------------------
  |  |    9|    110|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|    110|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  574|    110|	g_free(params);
  575|    110|}
irc-nicklist.c:event_setname:
  541|    224|{
  542|    224|	GSList *nicks, *tmp;
  543|    224|	NICK_REC *rec;
  544|       |
  545|    224|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|    224|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|    224|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    224|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 224, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|    224|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (545:6): [True: 0, False: 224]
  ------------------
  546|      0|		return;
  547|       |
  548|    224|	g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (548:2): [True: 36, False: 188]
  |  Branch (548:2): [True: 36, False: 188]
  |  Branch (548:2): [Folded, False: 36]
  ------------------
  549|    224|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (549:2): [True: 36, False: 0]
  |  Branch (549:2): [True: 36, False: 0]
  |  Branch (549:2): [Folded, False: 36]
  ------------------
  550|     36|	if (*data == ':') data++;
  ------------------
  |  Branch (550:6): [True: 0, False: 36]
  ------------------
  551|       |
  552|     36|	nicks = nicklist_get_same(server, nick);
  553|     36|	for (tmp = nicks; tmp != NULL; tmp = tmp->next->next) {
  ------------------
  |  Branch (553:20): [True: 0, False: 36]
  ------------------
  554|      0|		rec = tmp->next->data;
  555|       |
  556|      0|		g_free(rec->realname);
  557|      0|		rec->realname = g_strdup(data);
  558|      0|	}
  559|     36|	g_slist_free(nicks);
  560|     36|}
irc-nicklist.c:sig_usermode:
  578|  2.33k|{
  579|  2.33k|	g_return_if_fail(IS_SERVER(server));
  ------------------
  |  Branch (579:2): [True: 2.33k, False: 0]
  |  Branch (579:2): [True: 2.33k, False: 0]
  |  Branch (579:2): [True: 2.33k, False: 0]
  |  Branch (579:2): [Folded, False: 2.33k]
  ------------------
  580|       |
  581|  2.33k|	nicklist_update_flags(server, server->nick, server->usermode_away, -1);
  582|  2.33k|}
irc-nicklist.c:sig_connected:
  595|  29.4k|{
  596|  29.4k|	if (IS_IRC_SERVER(server))
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (41:2): [True: 29.4k, False: 0]
  |  |  ------------------
  ------------------
  597|  29.4k|		server->get_nick_flags = get_nick_flags;
  598|  29.4k|}
irc-nicklist.c:get_nick_flags:
  585|  31.3k|{
  586|  31.3k|	IRC_SERVER_REC *irc_server = (IRC_SERVER_REC *) server;
  587|  31.3k|	const char *prefix =
  588|  31.3k|		g_hash_table_lookup(irc_server->isupport, "PREFIX");
  589|       |
  590|  31.3k|	prefix = prefix == NULL ? NULL : strchr(prefix, ')');
  ------------------
  |  Branch (590:11): [True: 0, False: 31.3k]
  ------------------
  591|  31.3k|	return prefix == NULL ? "" : prefix+1;
  ------------------
  |  Branch (591:9): [True: 422, False: 30.8k]
  ------------------
  592|  31.3k|}

irc_query_create:
   31|    285|{
   32|    285|	QUERY_REC *rec;
   33|       |
   34|    285|	g_return_val_if_fail(nick != NULL, NULL);
  ------------------
  |  Branch (34:2): [True: 285, False: 0]
  |  Branch (34:2): [True: 285, False: 0]
  |  Branch (34:2): [Folded, False: 285]
  ------------------
   35|       |
   36|    285|	rec = g_new0(QUERY_REC, 1);
  ------------------
  |  Branch (36:8): [True: 285, False: 0]
  |  Branch (36:8): [True: 0, False: 285]
  ------------------
   37|    285|	rec->chat_type = IRC_PROTOCOL;
  ------------------
  |  |   26|    285|#define IRC_PROTOCOL (chat_protocol_lookup("IRC"))
  ------------------
   38|    285|	rec->name = g_strdup(nick);
   39|    285|        rec->server_tag = g_strdup(server_tag);
   40|    285|	query_init(rec, automatic);
   41|    285|	return rec;
   42|    285|}
irc_query_find:
   45|  45.1k|{
   46|  45.1k|	GSList *tmp;
   47|       |
   48|  45.1k|	g_return_val_if_fail(nick != NULL, NULL);
  ------------------
  |  Branch (48:2): [True: 44.0k, False: 1.10k]
  |  Branch (48:2): [True: 44.0k, False: 1.10k]
  |  Branch (48:2): [Folded, False: 44.0k]
  ------------------
   49|       |
   50|  5.52M|	for (tmp = server->queries; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (50:30): [True: 5.50M, False: 16.7k]
  ------------------
   51|  5.50M|		QUERY_REC *rec = tmp->data;
   52|       |
   53|  5.50M|		if (server->nick_comp_func(rec->name, nick) == 0)
  ------------------
  |  Branch (53:7): [True: 27.3k, False: 5.47M]
  ------------------
   54|  27.3k|			return rec;
   55|  5.50M|	}
   56|       |
   57|  16.7k|	return NULL;
   58|  44.0k|}
irc_queries_init:
  107|      2|{
  108|      2|	signal_add_last("ctcp action", (SIGNAL_FUNC) ctcp_action);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  109|       |	signal_add("event nick", (SIGNAL_FUNC) event_nick);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  110|      2|}
irc-queries.c:ctcp_action:
   87|  3.77k|{
   88|  3.77k|        check_query_changes(server, nick, address, target);
   89|  3.77k|}
irc-queries.c:check_query_changes:
   62|  3.77k|{
   63|  3.77k|	QUERY_REC *query;
   64|       |
   65|  3.77k|	if (server_ischannel(SERVER(server), target))
  ------------------
  |  |   22|  3.77k|	((server)->ischannel(server, channel))
  |  |  ------------------
  |  |  |  Branch (22:2): [True: 1.11k, False: 2.66k]
  |  |  ------------------
  ------------------
   66|  1.11k|		return;
   67|       |
   68|  2.66k|	query = irc_query_find(server, nick);
   69|  2.66k|	if (query == NULL)
  ------------------
  |  Branch (69:6): [True: 1.11k, False: 1.55k]
  ------------------
   70|  1.11k|		return;
   71|       |
   72|  1.55k|	if (g_strcmp0(query->name, nick) != 0) {
  ------------------
  |  Branch (72:6): [True: 0, False: 1.55k]
  ------------------
   73|       |		/* upper/lowercase chars in nick changed */
   74|      0|		query_change_nick(query, nick);
   75|      0|	}
   76|       |
   77|  1.55k|	if (address != NULL && (query->address == NULL ||
  ------------------
  |  Branch (77:6): [True: 1.34k, False: 205]
  |  Branch (77:26): [True: 4, False: 1.34k]
  ------------------
   78|  1.34k|				g_strcmp0(query->address, address) != 0)) {
  ------------------
  |  Branch (78:5): [True: 119, False: 1.22k]
  ------------------
   79|       |                /* host changed */
   80|    123|		query_change_address(query, address);
   81|    123|	}
   82|  1.55k|}
irc-queries.c:event_nick:
   93|  18.2k|{
   94|  18.2k|        QUERY_REC *query;
   95|  18.2k|	char *params, *nick;
   96|       |
   97|  18.2k|	query = query_find(server, orignick);
   98|  18.2k|	if (query != NULL) {
  ------------------
  |  Branch (98:6): [True: 631, False: 17.6k]
  ------------------
   99|    631|		params = event_get_params(data, 1, &nick);
  100|    631|		if (g_strcmp0(query->name, nick) != 0)
  ------------------
  |  Branch (100:7): [True: 219, False: 412]
  ------------------
  101|    219|			query_change_nick(query, nick);
  102|    631|		g_free(params);
  103|    631|	}
  104|  18.2k|}

irc_servers_reconnect_init:
  113|      2|{
  114|      2|	signal_add("server connect copy", (SIGNAL_FUNC) sig_server_connect_copy);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  115|      2|	signal_add("server reconnect save status", (SIGNAL_FUNC) sig_server_reconnect_save_status);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  116|      2|	signal_add("event connected", (SIGNAL_FUNC) sig_connected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  117|      2|	signal_add("event 436", (SIGNAL_FUNC) event_nick_collision);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  118|       |	signal_add("event kill", (SIGNAL_FUNC) event_kill);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  119|      2|}
irc-servers-reconnect.c:sig_server_connect_copy:
   33|  27.2k|{
   34|  27.2k|	IRC_SERVER_CONNECT_REC *rec;
   35|       |
   36|  27.2k|	g_return_if_fail(dest != NULL);
  ------------------
  |  Branch (36:2): [True: 27.2k, False: 0]
  |  Branch (36:2): [True: 27.2k, False: 0]
  |  Branch (36:2): [Folded, False: 27.2k]
  ------------------
   37|  27.2k|	if (!IS_IRC_SERVER_CONNECT(src))
  ------------------
  |  |   44|  27.2k|	(IRC_SERVER_CONNECT(conn) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   37|  27.2k|	PROTO_CHECK_CAST(SERVER_CONNECT(conn), IRC_SERVER_CONNECT_REC, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  27.2k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 27.2k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  27.2k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  |  |   38|  27.2k|			 chat_type, "IRC")
  |  |  ------------------
  ------------------
  |  Branch (37:6): [True: 0, False: 27.2k]
  ------------------
   38|      0|		return;
   39|       |
   40|  27.2k|	rec = g_new0(IRC_SERVER_CONNECT_REC, 1);
  ------------------
  |  Branch (40:8): [True: 27.2k, False: 0]
  |  Branch (40:8): [True: 0, False: 27.2k]
  ------------------
   41|  27.2k|	rec->chat_type = IRC_PROTOCOL;
  ------------------
  |  |   26|  27.2k|#define IRC_PROTOCOL (chat_protocol_lookup("IRC"))
  ------------------
   42|  27.2k|	rec->max_cmds_at_once = src->max_cmds_at_once;
   43|  27.2k|	rec->cmd_queue_speed = src->cmd_queue_speed;
   44|  27.2k|        rec->max_query_chans = src->max_query_chans;
   45|  27.2k|	rec->max_kicks = src->max_kicks;
   46|  27.2k|	rec->max_modes = src->max_modes;
   47|  27.2k|	rec->max_msgs = src->max_msgs;
   48|  27.2k|	rec->max_whois = src->max_whois;
   49|  27.2k|	rec->usermode = g_strdup(src->usermode);
   50|  27.2k|	rec->alternate_nick = g_strdup(src->alternate_nick);
   51|  27.2k|	rec->sasl_mechanism = src->sasl_mechanism;
   52|  27.2k|	rec->sasl_username = g_strdup(src->sasl_username);
   53|  27.2k|	rec->sasl_password = g_strdup(src->sasl_password);
   54|  27.2k|	rec->disallow_starttls = src->disallow_starttls;
   55|  27.2k|	rec->starttls = src->starttls;
   56|  27.2k|	rec->no_cap = src->no_cap;
   57|  27.2k|	*dest = (SERVER_CONNECT_REC *) rec;
   58|  27.2k|}
irc-servers-reconnect.c:sig_server_reconnect_save_status:
   62|  3.66k|{
   63|  3.66k|	if (!IS_IRC_SERVER_CONNECT(conn) || !IS_IRC_SERVER(server) ||
  ------------------
  |  |   44|  7.33k|	(IRC_SERVER_CONNECT(conn) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   37|  3.66k|	PROTO_CHECK_CAST(SERVER_CONNECT(conn), IRC_SERVER_CONNECT_REC, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  3.66k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 3.66k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  3.66k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  |  |   38|  3.66k|			 chat_type, "IRC")
  |  |  ------------------
  ------------------
              	if (!IS_IRC_SERVER_CONNECT(conn) || !IS_IRC_SERVER(server) ||
  ------------------
  |  |   41|  7.33k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  3.66k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  3.66k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 3.66k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  3.66k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (63:6): [True: 0, False: 3.66k]
  |  Branch (63:38): [True: 0, False: 3.66k]
  ------------------
   64|  3.66k|	    !server->connected)
  ------------------
  |  Branch (64:6): [True: 0, False: 3.66k]
  ------------------
   65|      0|		return;
   66|       |
   67|  3.66k|	g_free_not_null(conn->channels);
  ------------------
  |  |   64|  3.66k|#define g_free_not_null(a) g_free(a)
  ------------------
   68|  3.66k|	conn->channels =
   69|  3.66k|	    irc_server_get_channels(server, settings_get_choice("rejoin_channels_on_reconnect"));
   70|       |
   71|  3.66k|	g_free_not_null(conn->usermode);
  ------------------
  |  |   64|  3.66k|#define g_free_not_null(a) g_free(a)
  ------------------
   72|  3.66k|	conn->usermode = g_strdup(server->wanted_usermode);
   73|  3.66k|}
irc-servers-reconnect.c:sig_connected:
   76|  21.8k|{
   77|  21.8k|	if (!IS_IRC_SERVER(server) || !server->connrec->reconnection)
  ------------------
  |  |   41|  43.6k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  21.8k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  21.8k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 21.8k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  21.8k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (77:6): [True: 0, False: 21.8k]
  |  Branch (77:32): [True: 21.8k, False: 0]
  ------------------
   78|  21.8k|		return;
   79|       |
   80|      0|	if (server->connrec->away_reason != NULL)
  ------------------
  |  Branch (80:6): [True: 0, False: 0]
  ------------------
   81|      0|		irc_server_send_away(server, server->connrec->away_reason);
   82|      0|}
irc-servers-reconnect.c:event_nick_collision:
   85|  7.68k|{
   86|  7.68k|	time_t new_connect;
   87|       |
   88|  7.68k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  7.68k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  7.68k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  7.68k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 7.68k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  7.68k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (88:6): [True: 0, False: 7.68k]
  ------------------
   89|      0|		return;
   90|       |
   91|       |	/* after server kills us because of nick collision, we want to
   92|       |	   connect back immediately. but no matter how hard they kill us,
   93|       |	   don't connect to the server more than once in every 10 seconds. */
   94|       |
   95|  7.68k|	new_connect = server->connect_time+10 -
   96|  7.68k|		settings_get_time("server_reconnect_time")/1000;
   97|  7.68k|	if (server->connect_time > new_connect)
  ------------------
  |  Branch (97:6): [True: 7.68k, False: 0]
  ------------------
   98|  7.68k|		server->connect_time = new_connect;
   99|       |
  100|       |        server->nick_collision = TRUE;
  101|  7.68k|}

irc_servers_setup_init:
  253|      2|{
  254|      2|	settings_add_bool("server", "skip_motd", FALSE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  255|      2|	settings_add_str("server", "alternate_nick", "");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  256|       |
  257|      2|	init_userinfo();
  258|      2|	signal_add("server setup fill reconn", (SIGNAL_FUNC) sig_server_setup_fill_reconn);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  259|      2|	signal_add("server setup fill connect", (SIGNAL_FUNC) sig_server_setup_fill_connect);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  260|      2|	signal_add("server setup fill chatnet", (SIGNAL_FUNC) sig_server_setup_fill_chatnet);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  261|      2|	signal_add("server setup fill optlist", (SIGNAL_FUNC) sig_server_setup_fill_optlist);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  262|      2|	signal_add("server setup read", (SIGNAL_FUNC) sig_server_setup_read);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  263|       |	signal_add("server setup saved", (SIGNAL_FUNC) sig_server_setup_saved);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  264|      2|}
irc-servers-setup.c:init_userinfo:
  160|      2|{
  161|      2|	unsigned int changed;
  162|      2|	const char *set, *nick, *user_name, *str;
  163|       |
  164|      2|	changed = 0;
  165|       |	/* check if nick/username/realname wasn't read from setup.. */
  166|      2|        set = settings_get_str("real_name");
  167|      2|	if (set == NULL || *set == '\0') {
  ------------------
  |  Branch (167:6): [True: 2, False: 0]
  |  Branch (167:21): [True: 0, False: 0]
  ------------------
  168|      2|		str = g_getenv("IRCNAME");
  169|      2|		settings_set_str("real_name",
  170|      2|				 str != NULL ? str : g_get_real_name());
  ------------------
  |  Branch (170:6): [True: 0, False: 2]
  ------------------
  171|      2|		changed |= USER_SETTINGS_REAL_NAME;
  172|      2|	}
  173|       |
  174|       |	/* username */
  175|      2|        user_name = settings_get_str("user_name");
  176|      2|	if (user_name == NULL || *user_name == '\0') {
  ------------------
  |  Branch (176:6): [True: 2, False: 0]
  |  Branch (176:27): [True: 0, False: 0]
  ------------------
  177|      2|		str = g_getenv("IRCUSER");
  178|      2|		settings_set_str("user_name",
  179|      2|				 str != NULL ? str : g_get_user_name());
  ------------------
  |  Branch (179:6): [True: 0, False: 2]
  ------------------
  180|       |
  181|      2|		user_name = settings_get_str("user_name");
  182|      2|		changed |= USER_SETTINGS_USER_NAME;
  183|      2|	}
  184|       |
  185|       |	/* nick */
  186|      2|        nick = settings_get_str("nick");
  187|      2|	if (nick == NULL || *nick == '\0') {
  ------------------
  |  Branch (187:6): [True: 2, False: 0]
  |  Branch (187:22): [True: 0, False: 0]
  ------------------
  188|      2|		str = g_getenv("IRCNICK");
  189|      2|		settings_set_str("nick", str != NULL ? str : user_name);
  ------------------
  |  Branch (189:28): [True: 0, False: 2]
  ------------------
  190|       |
  191|      2|		nick = settings_get_str("nick");
  192|      2|		changed |= USER_SETTINGS_NICK;
  193|      2|	}
  194|       |
  195|       |	/* host name */
  196|      2|        set = settings_get_str("hostname");
  197|      2|	if (set == NULL || *set == '\0') {
  ------------------
  |  Branch (197:6): [True: 0, False: 2]
  |  Branch (197:21): [True: 2, False: 0]
  ------------------
  198|      2|		str = g_getenv("IRCHOST");
  199|      2|		if (str != NULL) {
  ------------------
  |  Branch (199:7): [True: 0, False: 2]
  ------------------
  200|      0|			settings_set_str("hostname", str);
  201|      0|			changed |= USER_SETTINGS_HOSTNAME;
  202|      0|		}
  203|      2|	}
  204|       |
  205|       |	signal_emit("irssi init userinfo changed", 1, GUINT_TO_POINTER(changed));
  206|      2|}
irc-servers-setup.c:sig_server_setup_fill_connect:
   56|  29.4k|{
   57|  29.4k|	const char *value;
   58|       |
   59|  29.4k|	if (!IS_IRC_SERVER_CONNECT(conn))
  ------------------
  |  |   44|  29.4k|	(IRC_SERVER_CONNECT(conn) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   37|  29.4k|	PROTO_CHECK_CAST(SERVER_CONNECT(conn), IRC_SERVER_CONNECT_REC, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  |  |   38|  29.4k|			 chat_type, "IRC")
  |  |  ------------------
  ------------------
  |  Branch (59:6): [True: 0, False: 29.4k]
  ------------------
   60|      0|		return;
   61|       |
   62|  29.4k|	value = settings_get_str("alternate_nick");
   63|  29.4k|	conn->alternate_nick = (value != NULL && *value != '\0') ?
  ------------------
  |  Branch (63:26): [True: 29.4k, False: 0]
  |  Branch (63:43): [True: 0, False: 29.4k]
  ------------------
   64|  29.4k|		g_strdup(value) : NULL;
   65|       |
   66|  29.4k|	value = settings_get_str("usermode");
   67|  29.4k|	conn->usermode = (value != NULL && *value != '\0') ?
  ------------------
  |  Branch (67:20): [True: 29.4k, False: 0]
  |  Branch (67:37): [True: 29.4k, False: 0]
  ------------------
   68|  29.4k|		g_strdup(value) : NULL;
   69|  29.4k|}
irc-servers-setup.c:sig_server_setup_read:
  209|     26|{
  210|     26|	int starttls;
  211|     26|	g_return_if_fail(rec != NULL);
  ------------------
  |  Branch (211:2): [True: 26, False: 0]
  |  Branch (211:2): [True: 26, False: 0]
  |  Branch (211:2): [Folded, False: 26]
  ------------------
  212|     26|	g_return_if_fail(node != NULL);
  ------------------
  |  Branch (212:2): [True: 26, False: 0]
  |  Branch (212:2): [True: 26, False: 0]
  |  Branch (212:2): [Folded, False: 26]
  ------------------
  213|       |
  214|     26|	if (!IS_IRC_SERVER_SETUP(rec))
  ------------------
  |  |   12|     26|	(IRC_SERVER_SETUP(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |    8|     26|	PROTO_CHECK_CAST(SERVER_SETUP(server), IRC_SERVER_SETUP_REC, \
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|     26|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 26, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|     26|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  |  |    9|     26|			 chat_type, "IRC")
  |  |  ------------------
  ------------------
  |  Branch (214:6): [True: 0, False: 26]
  ------------------
  215|      0|		return;
  216|       |
  217|     26|	rec->max_cmds_at_once = config_node_get_int(node, "cmds_max_at_once", 0);
  218|     26|	rec->cmd_queue_speed = config_node_get_int(node, "cmd_queue_speed", 0);
  219|     26|	rec->max_query_chans = config_node_get_int(node, "max_query_chans", 0);
  220|     26|	starttls = config_node_get_bool(node, "starttls", -1);
  221|     26|	rec->starttls = starttls == -1 ? STARTTLS_NOTSET :
  ------------------
  |  Branch (221:18): [True: 26, False: 0]
  ------------------
  222|     26|	                starttls == 0  ? STARTTLS_DISALLOW :
  ------------------
  |  Branch (222:18): [True: 0, False: 0]
  ------------------
  223|      0|                                         STARTTLS_ENABLED;
  224|     26|	if (rec->starttls == STARTTLS_ENABLED) {
  ------------------
  |  Branch (224:6): [True: 0, False: 26]
  ------------------
  225|      0|		rec->use_tls = 0;
  226|      0|	}
  227|       |	rec->no_cap = config_node_get_bool(node, "no_cap", FALSE);
  228|     26|}

irc_server_init_connect:
  429|  29.4k|{
  430|  29.4k|	IRC_SERVER_CONNECT_REC *ircconn;
  431|  29.4k|	IRC_SERVER_REC *server;
  432|       |
  433|  29.4k|	g_return_val_if_fail(IS_IRC_SERVER_CONNECT(conn), NULL);
  ------------------
  |  Branch (433:2): [True: 29.4k, False: 0]
  |  Branch (433:2): [True: 29.4k, False: 0]
  |  Branch (433:2): [True: 29.4k, False: 0]
  |  Branch (433:2): [Folded, False: 29.4k]
  ------------------
  434|  29.4k|	if (conn->address == NULL || *conn->address == '\0') return NULL;
  ------------------
  |  Branch (434:6): [True: 0, False: 29.4k]
  |  Branch (434:31): [True: 0, False: 29.4k]
  ------------------
  435|  29.4k|	if (conn->nick == NULL || *conn->nick == '\0') return NULL;
  ------------------
  |  Branch (435:6): [True: 0, False: 29.4k]
  |  Branch (435:28): [True: 0, False: 29.4k]
  ------------------
  436|       |
  437|  29.4k|	server = g_new0(IRC_SERVER_REC, 1);
  ------------------
  |  Branch (437:11): [True: 29.4k, False: 0]
  |  Branch (437:11): [True: 0, False: 29.4k]
  ------------------
  438|  29.4k|	server->chat_type = IRC_PROTOCOL;
  ------------------
  |  |   26|  29.4k|#define IRC_PROTOCOL (chat_protocol_lookup("IRC"))
  ------------------
  439|       |
  440|  29.4k|	ircconn = (IRC_SERVER_CONNECT_REC *) conn;
  441|  29.4k|	server->connrec = ircconn;
  442|  29.4k|        server_connect_ref(conn);
  443|       |
  444|  29.4k|	if (server->connrec->port <= 0) {
  ------------------
  |  Branch (444:6): [True: 29.4k, False: 0]
  ------------------
  445|  29.4k|		server->connrec->port =
  446|  29.4k|			server->connrec->use_tls ? 6697 : 6667;
  ------------------
  |  Branch (446:4): [True: 0, False: 29.4k]
  ------------------
  447|  29.4k|	}
  448|       |
  449|  29.4k|	server->max_message_len = MAX_IRC_MESSAGE_LEN;
  ------------------
  |  |   14|  29.4k|#define MAX_IRC_MESSAGE_LEN (512 - 2) /* (2 bytes for CR+LF) */
  ------------------
  450|       |
  451|  29.4k|	server->cmd_queue_speed = ircconn->cmd_queue_speed > 0 ?
  ------------------
  |  Branch (451:28): [True: 0, False: 29.4k]
  ------------------
  452|  29.4k|		ircconn->cmd_queue_speed : settings_get_time("cmd_queue_speed");
  453|  29.4k|	server->max_cmds_at_once = ircconn->max_cmds_at_once > 0 ?
  ------------------
  |  Branch (453:29): [True: 0, False: 29.4k]
  ------------------
  454|  29.4k|		ircconn->max_cmds_at_once : settings_get_int("cmds_max_at_once");
  455|  29.4k|	server->max_query_chans = ircconn->max_query_chans > 0 ?
  ------------------
  |  Branch (455:28): [True: 0, False: 29.4k]
  ------------------
  456|  29.4k|		ircconn->max_query_chans : DEFAULT_MAX_QUERY_CHANS;
  ------------------
  |  |   57|  58.8k|#define DEFAULT_MAX_QUERY_CHANS 1 /* more and more IRC networks are using stupid ircds.. */
  ------------------
  457|       |
  458|  29.4k|	server->max_kicks_in_cmd = ircconn->max_kicks > 0 ?
  ------------------
  |  Branch (458:29): [True: 0, False: 29.4k]
  ------------------
  459|  29.4k|		ircconn->max_kicks : DEFAULT_MAX_KICKS;
  ------------------
  |  |   49|  58.8k|#define DEFAULT_MAX_KICKS 1
  ------------------
  460|  29.4k|	server->max_modes_in_cmd = ircconn->max_modes > 0 ?
  ------------------
  |  Branch (460:29): [True: 0, False: 29.4k]
  ------------------
  461|  29.4k|		ircconn->max_modes : DEFAULT_MAX_MODES;
  ------------------
  |  |   50|  58.8k|#define DEFAULT_MAX_MODES 3
  ------------------
  462|  29.4k|	server->max_whois_in_cmd = ircconn->max_whois > 0 ?
  ------------------
  |  Branch (462:29): [True: 0, False: 29.4k]
  ------------------
  463|  29.4k|		ircconn->max_whois : DEFAULT_MAX_WHOIS;
  ------------------
  |  |   51|  58.8k|#define DEFAULT_MAX_WHOIS 4
  ------------------
  464|  29.4k|	server->max_msgs_in_cmd = ircconn->max_msgs > 0 ?
  ------------------
  |  Branch (464:28): [True: 0, False: 29.4k]
  ------------------
  465|  29.4k|		ircconn->max_msgs : DEFAULT_MAX_MSGS;
  ------------------
  |  |   52|  58.8k|#define DEFAULT_MAX_MSGS 1
  ------------------
  466|  29.4k|	server->connrec->use_tls = conn->use_tls;
  467|       |
  468|  29.4k|	modes_server_init(server);
  469|       |
  470|  29.4k|	server->isupport = g_hash_table_new((GHashFunc) i_istr_hash, (GCompareFunc) i_istr_equal);
  471|       |
  472|  29.4k|	server->isnickflag = isnickflag_func;
  473|  29.4k|	server->ischannel = ischannel_func;
  474|  29.4k|	server->split_message = split_message;
  475|  29.4k|	server->send_message = send_message;
  476|  29.4k|	server->query_find_func = (QUERY_REC * (*) (SERVER_REC *, const char *) ) irc_query_find;
  477|  29.4k|	server->nick_comp_func = irc_nickcmp_rfc1459;
  478|  29.4k|	server->sasl_success = FALSE;
  479|       |
  480|  29.4k|	server_connect_init((SERVER_REC *) server);
  481|  29.4k|	return (SERVER_REC *) server;
  482|  29.4k|}
irc_server_purge_output:
  532|    160|{
  533|    160|	GSList *tmp, *next, *link;
  534|    160|        REDIRECT_REC *redirect;
  535|    160|	char *cmd;
  536|       |
  537|    160|	if (target != NULL && *target == '\0')
  ------------------
  |  Branch (537:6): [True: 160, False: 0]
  |  Branch (537:24): [True: 0, False: 160]
  ------------------
  538|      0|                target = NULL;
  539|       |
  540|  3.35k|	for (tmp = server->cmdqueue; tmp != NULL; tmp = next) {
  ------------------
  |  Branch (540:31): [True: 3.19k, False: 160]
  ------------------
  541|  3.19k|		next = tmp->next->next;
  542|  3.19k|		cmd = tmp->data;
  543|  3.19k|                redirect = tmp->next->data;
  544|       |
  545|  3.19k|		if ((target == NULL || command_has_target(cmd, target)) &&
  ------------------
  |  Branch (545:8): [True: 0, False: 3.19k]
  |  Branch (545:26): [True: 4, False: 3.18k]
  ------------------
  546|      4|		    g_ascii_strncasecmp(cmd, "PONG ", 5) != 0) {
  ------------------
  |  Branch (546:7): [True: 4, False: 0]
  ------------------
  547|       |                        /* remove the redirection */
  548|      4|                        link = tmp->next;
  549|      4|			server->cmdqueue =
  550|      4|				g_slist_remove_link(server->cmdqueue, link);
  551|      4|                        g_slist_free_1(link);
  552|       |
  553|      4|			if (redirect != NULL)
  ------------------
  |  Branch (553:8): [True: 0, False: 4]
  ------------------
  554|      0|                                server_redirect_destroy(redirect);
  555|       |
  556|       |                        /* remove the command */
  557|      4|			server->cmdqueue =
  558|      4|				g_slist_remove(server->cmdqueue, cmd);
  559|      4|                        g_free(cmd);
  560|      4|                        server->cmdcount--;
  561|      4|		}
  562|  3.19k|	}
  563|    160|}
irc_server_send_data:
  697|  62.7k|{
  698|  62.7k|	if (net_sendbuffer_send(server->handle, data, len) == -1) {
  ------------------
  |  Branch (698:6): [True: 0, False: 62.7k]
  ------------------
  699|       |		/* something bad happened */
  700|      0|		server->connection_lost = TRUE;
  701|      0|		return;
  702|      0|	}
  703|       |
  704|  62.7k|	server->last_cmd = g_get_real_time();
  705|       |
  706|       |	/* A bit kludgy way to do the flood protection. In ircnet, there
  707|       |	   actually is 1sec / 100 bytes penalty, but we rather want to deal
  708|       |	   with the max. 1000 bytes input buffer problem. If we send more
  709|       |	   than that with the burst, we'll get excess flooded. */
  710|  62.7k|	if (len < 100 || server->cmd_queue_speed <= 10)
  ------------------
  |  Branch (710:6): [True: 62.5k, False: 228]
  |  Branch (710:19): [True: 0, False: 228]
  ------------------
  711|  62.5k|		server->wait_cmd = 0;
  712|    228|	else {
  713|    228|		server->wait_cmd = server->last_cmd;
  714|       |		server->wait_cmd += (2 + len / 100) * G_USEC_PER_SEC;
  715|    228|	}
  716|  62.7k|}
irc_server_send_and_redirect:
  719|  62.7k|{
  720|  62.7k|	int crlf;
  721|       |
  722|  62.7k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (722:2): [True: 62.7k, False: 0]
  |  Branch (722:2): [True: 62.7k, False: 0]
  |  Branch (722:2): [Folded, False: 62.7k]
  ------------------
  723|  62.7k|	g_return_if_fail(str != NULL);
  ------------------
  |  Branch (723:2): [True: 62.7k, False: 0]
  |  Branch (723:2): [True: 62.7k, False: 0]
  |  Branch (723:2): [Folded, False: 62.7k]
  ------------------
  724|       |
  725|  62.7k|	if (str->len > 2 && str->str[str->len - 2] == '\r')
  ------------------
  |  Branch (725:6): [True: 62.7k, False: 0]
  |  Branch (725:22): [True: 62.7k, False: 0]
  ------------------
  726|  62.7k|		crlf = 2;
  727|      0|	else if (str->len > 1 && str->str[str->len - 1] == '\n')
  ------------------
  |  Branch (727:11): [True: 0, False: 0]
  |  Branch (727:27): [True: 0, False: 0]
  ------------------
  728|      0|		crlf = 1;
  729|      0|	else
  730|      0|		crlf = 0;
  731|       |
  732|  62.7k|	if (crlf)
  ------------------
  |  Branch (732:6): [True: 62.7k, False: 0]
  ------------------
  733|  62.7k|		g_string_truncate(str, str->len - crlf);
  734|       |
  735|  62.7k|	signal_emit("server outgoing modify", 3, server, str, crlf);
  736|  62.7k|	if (str->len) {
  ------------------
  |  Branch (736:6): [True: 62.7k, False: 0]
  ------------------
  737|  62.7k|		if (crlf == 2)
  ------------------
  |  Branch (737:7): [True: 62.7k, False: 0]
  ------------------
  738|  62.7k|			g_string_append(str, "\r\n");
  739|      0|		else if (crlf == 1)
  ------------------
  |  Branch (739:12): [True: 0, False: 0]
  ------------------
  740|      0|			g_string_append(str, "\n");
  741|       |
  742|  62.7k|		irc_server_send_data(server, str->str, str->len);
  743|       |
  744|       |		/* add to rawlog without [CR+]LF */
  745|  62.7k|		if (crlf)
  ------------------
  |  Branch (745:7): [True: 62.7k, False: 0]
  ------------------
  746|  62.7k|			g_string_truncate(str, str->len - crlf);
  747|  62.7k|		rawlog_output(server->rawlog, str->str);
  748|  62.7k|		server_redirect_command(server, str->str, redirect);
  749|  62.7k|	}
  750|  62.7k|}
irc_servers_start_cmd_timeout:
  817|  7.17k|{
  818|  7.17k|	if (cmd_tag == -1)
  ------------------
  |  Branch (818:6): [True: 1, False: 7.17k]
  ------------------
  819|      1|		cmd_tag = g_timeout_add(500, (GSourceFunc) servers_cmd_timeout, NULL);
  820|  7.17k|}
irc_server_get_channels:
  825|  3.66k|{
  826|  3.66k|	GSList *tmp;
  827|  3.66k|	GString *chans, *keys;
  828|  3.66k|	char *ret;
  829|  3.66k|	int use_keys;
  830|       |
  831|  3.66k|	g_return_val_if_fail(server != NULL, FALSE);
  ------------------
  |  Branch (831:2): [True: 3.66k, False: 0]
  |  Branch (831:2): [True: 3.66k, False: 0]
  |  Branch (831:2): [Folded, False: 3.66k]
  ------------------
  832|       |
  833|       |	/* do we want to rejoin channels in the first place? */
  834|  3.66k|	if (rejoin_channels_mode == REJOIN_CHANNELS_MODE_OFF)
  ------------------
  |  Branch (834:6): [True: 0, False: 3.66k]
  ------------------
  835|      0|		return g_strdup("");
  836|       |
  837|  3.66k|	chans = g_string_new(NULL);
  838|  3.66k|	keys = g_string_new(NULL);
  839|  3.66k|	use_keys = FALSE;
  840|       |
  841|       |	/* get currently joined channels */
  842|  10.7k|	for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (842:31): [True: 7.10k, False: 3.66k]
  ------------------
  843|  7.10k|		CHANNEL_REC *channel = tmp->data;
  844|  7.10k|		CHANNEL_SETUP_REC *setup = channel_setup_find(channel->name, channel->server->connrec->chatnet);
  845|  7.10k|		if ((setup != NULL && setup->autojoin &&
  ------------------
  |  Branch (845:8): [True: 0, False: 7.10k]
  |  Branch (845:25): [True: 0, False: 0]
  ------------------
  846|      0|		     rejoin_channels_mode == REJOIN_CHANNELS_MODE_AUTO) ||
  ------------------
  |  Branch (846:8): [True: 0, False: 0]
  ------------------
  847|  7.10k|		    rejoin_channels_mode == REJOIN_CHANNELS_MODE_ON) {
  ------------------
  |  Branch (847:7): [True: 7.10k, False: 0]
  ------------------
  848|  7.10k|			g_string_append_printf(chans, "%s,", channel->name);
  849|  7.10k|			g_string_append_printf(keys, "%s,", channel->key == NULL ? "x" : channel->key);
  ------------------
  |  Branch (849:40): [True: 6.96k, False: 146]
  ------------------
  850|  7.10k|			if (channel->key != NULL)
  ------------------
  |  Branch (850:8): [True: 146, False: 6.96k]
  ------------------
  851|    146|				use_keys = TRUE;
  852|  7.10k|		}
  853|  7.10k|	}
  854|       |
  855|       |	/* get also the channels that are in rejoin list */
  856|  3.66k|	for (tmp = server->rejoin_channels; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (856:38): [True: 0, False: 3.66k]
  ------------------
  857|      0|		REJOIN_REC *rec = tmp->data;
  858|      0|		CHANNEL_SETUP_REC *setup = channel_setup_find(rec->channel, server->tag);
  859|       |
  860|      0|		if ((setup != NULL && setup->autojoin &&
  ------------------
  |  Branch (860:8): [True: 0, False: 0]
  |  Branch (860:25): [True: 0, False: 0]
  ------------------
  861|      0|		     rejoin_channels_mode == REJOIN_CHANNELS_MODE_AUTO) ||
  ------------------
  |  Branch (861:8): [True: 0, False: 0]
  ------------------
  862|      0|		    rejoin_channels_mode == REJOIN_CHANNELS_MODE_ON) {
  ------------------
  |  Branch (862:7): [True: 0, False: 0]
  ------------------
  863|      0|			g_string_append_printf(chans, "%s,", rec->channel);
  864|      0|			g_string_append_printf(keys, "%s,", rec->key == NULL ? "x" :
  ------------------
  |  Branch (864:40): [True: 0, False: 0]
  ------------------
  865|      0|									rec->key);
  866|       |
  867|      0|			if (rec->key != NULL) use_keys = TRUE;
  ------------------
  |  Branch (867:8): [True: 0, False: 0]
  ------------------
  868|      0|		}
  869|      0|	}
  870|       |
  871|  3.66k|	if (chans->len > 0) {
  ------------------
  |  Branch (871:6): [True: 1.76k, False: 1.90k]
  ------------------
  872|  1.76k|		g_string_truncate(chans, chans->len-1);
  873|  1.76k|		g_string_truncate(keys, keys->len-1);
  874|  1.76k|		if (use_keys) g_string_append_printf(chans, " %s", keys->str);
  ------------------
  |  Branch (874:7): [True: 146, False: 1.61k]
  ------------------
  875|  1.76k|	}
  876|       |
  877|  3.66k|	ret = g_string_free_and_steal(chans);
  878|  3.66k|	g_string_free(keys, TRUE);
  879|       |
  880|  3.66k|	return ret;
  881|  3.66k|}
irc_server_init_isupport:
 1149|  1.32k|{
 1150|  1.32k|	char *sptr;
 1151|  1.32k|	gpointer key, value;
 1152|       |	/* chanmodes/prefix will fully override defaults */
 1153|  1.32k|	memset(server->modes, 0, sizeof(server->modes));
 1154|  1.32k|	memset(server->prefix, 0, sizeof(server->prefix));
 1155|       |
 1156|  1.32k|	if ((sptr = g_hash_table_lookup(server->isupport, "CHANMODES")))
  ------------------
  |  Branch (1156:6): [True: 991, False: 333]
  ------------------
 1157|    991|		parse_chanmodes(server, sptr);
 1158|       |
 1159|       |	/* This is after chanmode because some servers define modes in both */
 1160|  1.32k|	if (g_hash_table_lookup_extended(server->isupport, "PREFIX",
  ------------------
  |  Branch (1160:6): [True: 1.30k, False: 21]
  ------------------
 1161|  1.32k|					 &key, &value)) {
 1162|  1.30k|		sptr = value;
 1163|  1.30k|		if (*sptr != '(') {
  ------------------
  |  Branch (1163:7): [True: 2, False: 1.30k]
  ------------------
 1164|       |			/* server incompatible with isupport draft */
 1165|      2|			g_hash_table_remove(server->isupport, key);
 1166|      2|			g_free(key);
 1167|      2|			g_free(value);
 1168|      2|			sptr = NULL;
 1169|      2|		}
 1170|  1.30k|	} else {
 1171|     21|		sptr = NULL;
 1172|     21|	}
 1173|       |
 1174|  1.32k|	if (sptr == NULL) {
  ------------------
  |  Branch (1174:6): [True: 23, False: 1.30k]
  ------------------
 1175|     23|		sptr = g_strdup("(ohv)@%+");
 1176|     23|		g_hash_table_insert(server->isupport, g_strdup("PREFIX"), sptr);
 1177|     23|	}
 1178|  1.32k|	parse_prefix(server, sptr);
 1179|       |
 1180|  1.32k|	if ((sptr = g_hash_table_lookup(server->isupport, "MODES"))) {
  ------------------
  |  Branch (1180:6): [True: 664, False: 660]
  ------------------
 1181|    664|		server->max_modes_in_cmd = atoi(sptr);
 1182|    664|		if (server->max_modes_in_cmd < 1)
  ------------------
  |  Branch (1182:7): [True: 592, False: 72]
  ------------------
 1183|    592|			server->max_modes_in_cmd = DEFAULT_MAX_MODES;
  ------------------
  |  |   50|    592|#define DEFAULT_MAX_MODES 3
  ------------------
 1184|    664|	}
 1185|       |
 1186|  1.32k|	if ((sptr = g_hash_table_lookup(server->isupport, "CASEMAPPING"))) {
  ------------------
  |  Branch (1186:6): [True: 0, False: 1.32k]
  ------------------
 1187|      0|		if (strstr(sptr, "rfc1459") != NULL)
  ------------------
  |  Branch (1187:7): [True: 0, False: 0]
  ------------------
 1188|      0|			server->nick_comp_func = irc_nickcmp_rfc1459;
 1189|      0|		else
 1190|      0|			server->nick_comp_func = irc_nickcmp_ascii;
 1191|      0|	}
 1192|       |
 1193|  1.32k|	if ((sptr = g_hash_table_lookup(server->isupport, "TARGMAX"))) {
  ------------------
  |  Branch (1193:6): [True: 0, False: 1.32k]
  ------------------
 1194|      0|		char *p = sptr;
 1195|      0|		server->max_kicks_in_cmd = 1;
 1196|      0|		server->max_msgs_in_cmd = 1;
 1197|       |		/* Not doing WHOIS here until it is clear what it means. */
 1198|      0|		while (*p != '\0') {
  ------------------
  |  Branch (1198:10): [True: 0, False: 0]
  ------------------
 1199|      0|			if (!g_ascii_strncasecmp(p, "KICK:", 5)) {
  ------------------
  |  Branch (1199:8): [True: 0, False: 0]
  ------------------
 1200|      0|				server->max_kicks_in_cmd = atoi(p + 5);
 1201|      0|				if (server->max_kicks_in_cmd <= 0)
  ------------------
  |  Branch (1201:9): [True: 0, False: 0]
  ------------------
 1202|      0|					server->max_kicks_in_cmd = 30;
 1203|      0|			} else if (!g_ascii_strncasecmp(p, "PRIVMSG:", 8)) {
  ------------------
  |  Branch (1203:15): [True: 0, False: 0]
  ------------------
 1204|      0|				server->max_msgs_in_cmd = atoi(p + 8);
 1205|      0|				if (server->max_msgs_in_cmd <= 0)
  ------------------
  |  Branch (1205:9): [True: 0, False: 0]
  ------------------
 1206|      0|					server->max_msgs_in_cmd = 30;
 1207|      0|			}
 1208|      0|			p = strchr(p, ',');
 1209|      0|			if (p == NULL)
  ------------------
  |  Branch (1209:8): [True: 0, False: 0]
  ------------------
 1210|      0|				break;
 1211|      0|			p++;
 1212|      0|		}
 1213|  1.32k|	} else if ((sptr = g_hash_table_lookup(server->isupport, "MAXTARGETS"))) {
  ------------------
  |  Branch (1213:13): [True: 0, False: 1.32k]
  ------------------
 1214|      0|		server->max_msgs_in_cmd = atoi(sptr);
 1215|      0|		if (server->max_msgs_in_cmd <= 0)
  ------------------
  |  Branch (1215:7): [True: 0, False: 0]
  ------------------
 1216|      0|			server->max_msgs_in_cmd = 1;
 1217|      0|	}
 1218|  1.32k|}
irc_servers_init:
 1221|      2|{
 1222|      2|	settings_add_bool("servers", "starttls_sts", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
 1223|      2|	settings_add_choice("servers", "rejoin_channels_on_reconnect", 1, "off;on;auto");
  ------------------
  |  |  105|      2|	settings_add_choice_module(MODULE_NAME, section, key, def, choices)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
 1224|      2|	settings_add_str("misc", "usermode", DEFAULT_USER_MODE);
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
 1225|      2|	settings_add_str("misc", "split_line_start", "");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
 1226|      2|	settings_add_str("misc", "split_line_end", "");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
 1227|      2|	settings_add_bool("misc", "split_line_on_space", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
 1228|      2|	settings_add_time("flood", "cmd_queue_speed", DEFAULT_CMD_QUEUE_SPEED);
  ------------------
  |  |   99|      2|	settings_add_time_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
 1229|      2|	settings_add_int("flood", "cmds_max_at_once", DEFAULT_CMDS_MAX_AT_ONCE);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
 1230|       |
 1231|      2|	cmd_tag = -1;
 1232|       |
 1233|      2|	signal_add_first("server connected", (SIGNAL_FUNC) sig_connected);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
 1234|      2|	signal_add_first("server disconnected", (SIGNAL_FUNC) sig_disconnected);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
 1235|      2|	signal_add_last("server destroyed", (SIGNAL_FUNC) sig_destroyed);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
 1236|      2|	signal_add_last("server quit", (SIGNAL_FUNC) sig_server_quit);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
 1237|      2|	signal_add("event 670", (SIGNAL_FUNC) event_starttls);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1238|      2|	signal_add("event 451", (SIGNAL_FUNC) event_registerfirst);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1239|      2|	signal_add("server cap end", (SIGNAL_FUNC) event_capend);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1240|      2|	signal_add("event 001", (SIGNAL_FUNC) event_connected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1241|      2|	signal_add("event 004", (SIGNAL_FUNC) event_server_info);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1242|      2|	signal_add("event 005", (SIGNAL_FUNC) event_isupport);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1243|      2|	signal_add("event 375", (SIGNAL_FUNC) event_motd);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1244|      2|	signal_add_last("event 376", (SIGNAL_FUNC) event_end_of_motd);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
 1245|      2|	signal_add_last("event 422", (SIGNAL_FUNC) event_end_of_motd); /* no motd */
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
 1246|      2|	signal_add("event 254", (SIGNAL_FUNC) event_channels_formed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1247|      2|	signal_add("event 396", (SIGNAL_FUNC) event_hosthidden);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1248|      2|	signal_add("event 465", (SIGNAL_FUNC) event_server_banned);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1249|      2|	signal_add("event error", (SIGNAL_FUNC) event_error);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1250|      2|	signal_add("event ping", (SIGNAL_FUNC) event_ping);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1251|      2|	signal_add("event empty", (SIGNAL_FUNC) event_empty);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
 1252|       |
 1253|      2|	irc_servers_setup_init();
 1254|      2|	irc_servers_reconnect_init();
 1255|      2|	servers_redirect_init();
 1256|      2|	servers_idle_init();
 1257|      2|}
irc-servers.c:ischannel_func:
   72|  2.13M|{
   73|  2.13M|	IRC_SERVER_REC *irc_server = (IRC_SERVER_REC *) server;
   74|  2.13M|	char *chantypes, *statusmsg;
   75|       |
   76|  2.13M|	g_return_val_if_fail(data != NULL, FALSE);
  ------------------
  |  Branch (76:2): [True: 2.13M, False: 0]
  |  Branch (76:2): [True: 2.13M, False: 0]
  |  Branch (76:2): [Folded, False: 2.13M]
  ------------------
   77|       |
   78|       |	/* empty string is no channel */
   79|  2.13M|	if (*data == '\0')
  ------------------
  |  Branch (79:6): [True: 129k, False: 2.00M]
  ------------------
   80|   129k|		return FALSE;
   81|       |
   82|  2.00M|	chantypes = g_hash_table_lookup(irc_server->isupport, "CHANTYPES");
   83|  2.00M|	if (chantypes == NULL)
  ------------------
  |  Branch (83:6): [True: 2.00M, False: 0]
  ------------------
   84|  2.00M|		chantypes = "#&!+"; /* normal, local, secure, modeless */
   85|       |
   86|  2.00M|	statusmsg = g_hash_table_lookup(irc_server->isupport, "STATUSMSG");
   87|  2.00M|	if (statusmsg == NULL && strchr(chantypes, '@') == NULL)
  ------------------
  |  Branch (87:6): [True: 2.00M, False: 0]
  |  Branch (87:27): [True: 2.00M, False: 0]
  ------------------
   88|  2.00M|		statusmsg = "@";
   89|       |
   90|  2.00M|	if (statusmsg != NULL)
  ------------------
  |  Branch (90:6): [True: 2.00M, False: 0]
  ------------------
   91|  2.00M|		data += strspn(data, statusmsg);
   92|       |
   93|       |	/* strchr(3) considers the trailing NUL as part of the string, make sure
   94|       |	 * we didn't advance too much. */
   95|  2.00M|	return *data != '\0' && strchr(chantypes, *data) != NULL;
  ------------------
  |  Branch (95:9): [True: 2.00M, False: 4]
  |  Branch (95:26): [True: 1.65M, False: 357k]
  ------------------
   96|  2.13M|}
irc-servers.c:command_has_target:
  517|  3.19k|{
  518|  3.19k|	const char *p;
  519|  3.19k|        int len;
  520|       |
  521|       |        /* just assume the command is in form "<command> <target> <data>" */
  522|  3.19k|        p = strchr(cmd, ' ');
  523|  3.19k|	if (p == NULL) return FALSE;
  ------------------
  |  Branch (523:6): [True: 0, False: 3.19k]
  ------------------
  524|  3.19k|	p++;
  525|       |
  526|  3.19k|        len = strlen(target);
  527|  3.19k|	return strncmp(p, target, len) == 0 && p[len] == ' ';
  ------------------
  |  Branch (527:9): [True: 4, False: 3.18k]
  |  Branch (527:41): [True: 4, False: 0]
  ------------------
  528|  3.19k|}
irc-servers.c:parse_chanmodes:
  946|    991|{
  947|    991|	mode_func_t *modefuncs[] = {
  948|    991|		modes_type_a,
  949|    991|		modes_type_b,
  950|    991|		modes_type_c,
  951|    991|		modes_type_d
  952|    991|	};
  953|    991|	char **item, **chanmodes;
  954|    991|	int i;
  955|       |
  956|    991|	chanmodes = g_strsplit(sptr, ",", 5); /* ignore extras */
  957|       |
  958|  4.86k|	for (i = 0, item = chanmodes; *item != NULL && i < 4; item++, i++) {
  ------------------
  |  Branch (958:32): [True: 3.97k, False: 883]
  |  Branch (958:49): [True: 3.87k, False: 108]
  ------------------
  959|  3.87k|		unsigned char *p = (unsigned char*) *item;
  960|  15.1k|		while (*p != '\0') {
  ------------------
  |  Branch (960:10): [True: 11.2k, False: 3.87k]
  ------------------
  961|  11.2k|			server->modes[(int)*p].func = modefuncs[i];
  962|  11.2k|			p++;
  963|  11.2k|		}
  964|  3.87k|	}
  965|       |
  966|    991|	g_strfreev(chanmodes);
  967|    991|}
irc-servers.c:parse_prefix:
  970|  1.32k|{
  971|  1.32k|	const char *eptr;
  972|       |
  973|  1.32k|	if (*sptr++ != '(')
  ------------------
  |  Branch (973:6): [True: 0, False: 1.32k]
  ------------------
  974|      0|		return; /* Unknown prefix format */
  975|       |
  976|  1.32k|	eptr = strchr(sptr, ')');
  977|  1.32k|	if (eptr == NULL)
  ------------------
  |  Branch (977:6): [True: 234, False: 1.09k]
  ------------------
  978|    234|		return;
  979|       |
  980|  1.09k|	eptr++;
  981|  15.9k|	while (*sptr != '\0' && *eptr != '\0' && *sptr != ')' && *eptr != ' ') {
  ------------------
  |  Branch (981:9): [True: 15.9k, False: 0]
  |  Branch (981:26): [True: 14.8k, False: 1.08k]
  |  Branch (981:43): [True: 14.8k, False: 10]
  |  Branch (981:59): [True: 14.8k, False: 0]
  ------------------
  982|  14.8k|		server->modes[(int)(unsigned char) *sptr].func =
  983|  14.8k|			modes_type_prefix;
  984|  14.8k|		server->modes[(int)(unsigned char) *sptr].prefix = *eptr;
  985|  14.8k|		server->prefix[(int)(unsigned char) *eptr] = *sptr;
  986|  14.8k|		sptr++; eptr++;
  987|  14.8k|	}
  988|  1.09k|}
irc-servers.c:sig_connected:
  566|  29.4k|{
  567|  29.4k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (567:6): [True: 0, False: 29.4k]
  ------------------
  568|      0|		return;
  569|       |
  570|  29.4k|	server->splits = g_hash_table_new((GHashFunc) i_istr_hash, (GCompareFunc) i_istr_equal);
  571|       |
  572|  29.4k|	if (!server->session_reconnect)
  ------------------
  |  Branch (572:6): [True: 0, False: 29.4k]
  ------------------
  573|      0|		server_init_1(server);
  574|  29.4k|}
irc-servers.c:server_init_2:
  213|  20.4k|{
  214|  20.4k|	IRC_SERVER_CONNECT_REC *conn;
  215|  20.4k|	char *address, *ptr, *username, *cmd;
  216|       |
  217|  20.4k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (217:2): [True: 20.4k, False: 0]
  |  Branch (217:2): [True: 20.4k, False: 0]
  |  Branch (217:2): [Folded, False: 20.4k]
  ------------------
  218|       |
  219|  20.4k|	conn = server->connrec;
  220|       |
  221|  20.4k|	if (conn->password != NULL && *conn->password != '\0') {
  ------------------
  |  Branch (221:6): [True: 0, False: 20.4k]
  |  Branch (221:32): [True: 0, False: 0]
  ------------------
  222|       |		/* send password */
  223|      0|		cmd = g_strdup_printf("PASS %s", conn->password);
  224|      0|		irc_send_cmd_now(server, cmd);
  225|      0|		g_free(cmd);
  226|      0|	}
  227|       |
  228|       |	/* send nick */
  229|  20.4k|	cmd = g_strdup_printf("NICK %s", conn->nick);
  230|  20.4k|	irc_send_cmd_now(server, cmd);
  231|  20.4k|	g_free(cmd);
  232|       |
  233|       |	/* send user/realname */
  234|  20.4k|	address = server->connrec->address;
  235|  20.4k|	ptr = strrchr(address, ':');
  236|  20.4k|	if (ptr != NULL) {
  ------------------
  |  Branch (236:6): [True: 0, False: 20.4k]
  ------------------
  237|       |		/* IPv6 address .. doesn't work here, use the string after
  238|       |		   the last : char */
  239|      0|		address = ptr + 1;
  240|      0|		if (*address == '\0')
  ------------------
  |  Branch (240:7): [True: 0, False: 0]
  ------------------
  241|      0|			address = "x";
  242|      0|	}
  243|       |
  244|  20.4k|	username = g_strdup(conn->username);
  245|  20.4k|	ptr = strchr(username, ' ');
  246|  20.4k|	if (ptr != NULL)
  ------------------
  |  Branch (246:6): [True: 0, False: 20.4k]
  ------------------
  247|      0|		*ptr = '\0';
  248|       |
  249|  20.4k|	cmd = g_strdup_printf("USER %s %s %s :%s", username, username, address, conn->realname);
  250|  20.4k|	irc_send_cmd_now(server, cmd);
  251|  20.4k|	g_free(cmd);
  252|  20.4k|	g_free(username);
  253|       |
  254|  20.4k|	if (conn->proxy != NULL && conn->proxy_string_after != NULL) {
  ------------------
  |  Branch (254:6): [True: 0, False: 20.4k]
  |  Branch (254:29): [True: 0, False: 0]
  ------------------
  255|      0|		cmd = g_strdup_printf(conn->proxy_string_after, conn->address, conn->port);
  256|      0|		irc_send_cmd_now(server, cmd);
  257|      0|		g_free(cmd);
  258|      0|	}
  259|  20.4k|}
irc-servers.c:sig_disconnected:
  583|  29.4k|{
  584|  29.4k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (584:6): [True: 0, False: 29.4k]
  ------------------
  585|      0|		return;
  586|       |
  587|  29.4k|	if (server->starttls_tag) {
  ------------------
  |  Branch (587:6): [True: 0, False: 29.4k]
  ------------------
  588|      0|		g_source_remove(server->starttls_tag);
  589|      0|		server->starttls_tag = 0;
  590|      0|	}
  591|  29.4k|}
irc-servers.c:sig_destroyed:
  594|  29.4k|{
  595|  29.4k|	GSList *tmp;
  596|       |
  597|  29.4k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (597:6): [True: 0, False: 29.4k]
  ------------------
  598|      0|		return;
  599|       |
  600|  57.9k|	for (tmp = server->cmdqueue; tmp != NULL; tmp = tmp->next->next) {
  ------------------
  |  Branch (600:31): [True: 28.5k, False: 29.4k]
  ------------------
  601|  28.5k|		g_free(tmp->data);
  602|  28.5k|		if (tmp->next->data != NULL)
  ------------------
  |  Branch (602:7): [True: 16.8k, False: 11.7k]
  ------------------
  603|  16.8k|                        server_redirect_destroy(tmp->next->data);
  604|  28.5k|	}
  605|  29.4k|	g_slist_free(server->cmdqueue);
  606|  29.4k|	server->cmdqueue = NULL;
  607|       |
  608|  29.4k|	i_slist_free_full(server->cap_active, (GDestroyNotify) g_free);
  609|  29.4k|	server->cap_active = NULL;
  610|       |
  611|  29.4k|	if (server->cap_supported) {
  ------------------
  |  Branch (611:6): [True: 2.88k, False: 26.5k]
  ------------------
  612|  2.88k|		g_hash_table_destroy(server->cap_supported);
  613|  2.88k|		server->cap_supported = NULL;
  614|  2.88k|	}
  615|       |
  616|  29.4k|	i_slist_free_full(server->cap_queue, (GDestroyNotify) g_free);
  617|  29.4k|	server->cap_queue = NULL;
  618|       |
  619|       |	/* was g_free_and_null, but can't use on a GString */
  620|  29.4k|	if (server->sasl_buffer != NULL) {
  ------------------
  |  Branch (620:6): [True: 658, False: 28.7k]
  ------------------
  621|    658|		g_string_free(server->sasl_buffer, TRUE);
  622|    658|		server->sasl_buffer = NULL;
  623|    658|	}
  624|       |
  625|       |	/* these are dynamically allocated only if isupport was sent */
  626|  29.4k|	g_hash_table_foreach(server->isupport,
  627|  29.4k|			     (GHFunc) isupport_destroy_hash, server);
  628|  29.4k|	g_hash_table_destroy(server->isupport);
  629|  29.4k|	server->isupport = NULL;
  630|       |
  631|  29.4k|	g_free_and_null(server->wanted_usermode);
  ------------------
  |  |   67|  29.4k|	G_STMT_START { \
  |  |   68|  29.4k|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 4.17k, False: 25.2k]
  |  |  ------------------
  |  |   69|  29.4k|	} G_STMT_END
  ------------------
  |  Branch (631:2): [Folded, False: 29.4k]
  ------------------
  632|  29.4k|	g_free_and_null(server->real_address);
  ------------------
  |  |   67|  29.4k|	G_STMT_START { \
  |  |   68|  29.4k|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 4.17k, False: 25.2k]
  |  |  ------------------
  |  |   69|  29.4k|	} G_STMT_END
  ------------------
  |  Branch (632:2): [Folded, False: 29.4k]
  ------------------
  633|  29.4k|	g_free_and_null(server->usermode);
  ------------------
  |  |   67|  29.4k|	G_STMT_START { \
  |  |   68|  29.4k|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 877, False: 28.5k]
  |  |  ------------------
  |  |   69|  29.4k|	} G_STMT_END
  ------------------
  |  Branch (633:2): [Folded, False: 29.4k]
  ------------------
  634|  29.4k|	g_free_and_null(server->userhost);
  ------------------
  |  |   67|  29.4k|	G_STMT_START { \
  |  |   68|  29.4k|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 363, False: 29.0k]
  |  |  ------------------
  |  |   69|  29.4k|	} G_STMT_END
  ------------------
  |  Branch (634:2): [Folded, False: 29.4k]
  ------------------
  635|       |	g_free_and_null(server->last_invite);
  ------------------
  |  |   67|  29.4k|	G_STMT_START { \
  |  |   68|  29.4k|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 763, False: 28.6k]
  |  |  ------------------
  |  |   69|  29.4k|	} G_STMT_END
  ------------------
  |  Branch (635:2): [Folded, False: 29.4k]
  ------------------
  636|  29.4k|}
irc-servers.c:isupport_destroy_hash:
  577|  61.6k|{
  578|  61.6k|	g_free(key);
  579|  61.6k|	g_free(value);
  580|  61.6k|}
irc-servers.c:event_starttls:
  377|  28.9k|{
  378|  28.9k|	GIOChannel *ssl_handle;
  379|       |
  380|  28.9k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (380:2): [True: 28.9k, False: 0]
  |  Branch (380:2): [True: 28.9k, False: 0]
  |  Branch (380:2): [Folded, False: 28.9k]
  ------------------
  381|       |
  382|  28.9k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  28.9k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  28.9k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  28.9k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 28.9k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  28.9k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (382:6): [True: 0, False: 28.9k]
  ------------------
  383|      0|		return;
  384|       |
  385|  28.9k|	if (server->handle->readbuffer != NULL &&
  ------------------
  |  Branch (385:6): [True: 0, False: 28.9k]
  ------------------
  386|      0|	    !line_split_is_empty(server->handle->readbuffer)) {
  ------------------
  |  Branch (386:6): [True: 0, False: 0]
  ------------------
  387|      0|		char *str;
  388|      0|		line_split("", -1, &str, &server->handle->readbuffer);
  389|      0|	}
  390|  28.9k|	ssl_handle = net_start_ssl((SERVER_REC *) server);
  391|  28.9k|	if (ssl_handle != NULL) {
  ------------------
  |  Branch (391:6): [True: 28.9k, False: 0]
  ------------------
  392|  28.9k|		g_source_remove(server->readtag);
  393|  28.9k|		server->readtag = -1;
  394|  28.9k|		server->handle->handle = ssl_handle;
  395|  28.9k|		init_ssl_loop(server, server->handle->handle);
  396|  28.9k|	} else {
  397|       |		g_warning("net_start_ssl failed");
  398|      0|	}
  399|  28.9k|}
irc-servers.c:init_ssl_loop:
  327|  28.9k|{
  328|  28.9k|	int error;
  329|  28.9k|	server->connrec->starttls = 1;
  330|       |
  331|  28.9k|	if (server->starttls_tag) {
  ------------------
  |  Branch (331:6): [True: 0, False: 28.9k]
  ------------------
  332|      0|		g_source_remove(server->starttls_tag);
  333|      0|		server->starttls_tag = 0;
  334|      0|	}
  335|       |
  336|  28.9k|	error = irssi_ssl_handshake(handle);
  337|  28.9k|	if (error == -1) {
  ------------------
  |  Branch (337:6): [True: 28.9k, False: 0]
  ------------------
  338|  28.9k|		server->connection_lost = TRUE;
  339|  28.9k|		server_disconnect((SERVER_REC *) server);
  340|  28.9k|		return;
  341|  28.9k|	}
  342|      0|	if (error & 1) { /* wait */
  ------------------
  |  Branch (342:6): [True: 0, False: 0]
  ------------------
  343|      0|		server->starttls_tag =
  344|      0|		    i_input_add(handle, error == 1 ? I_INPUT_READ : I_INPUT_WRITE,
  ------------------
  |  |   47|      0|#define I_INPUT_READ (1 << 0)
  ------------------
              		    i_input_add(handle, error == 1 ? I_INPUT_READ : I_INPUT_WRITE,
  ------------------
  |  |   48|      0|#define I_INPUT_WRITE (1 << 1)
  ------------------
  |  Branch (344:27): [True: 0, False: 0]
  ------------------
  345|      0|		                (GInputFunction) init_ssl_loop, server);
  346|      0|		return;
  347|      0|	}
  348|       |	/* continue */
  349|      0|	rawlog_redirect(server->rawlog, "Now talking encrypted");
  350|      0|	signal_emit("server connection switched", 1, server);
  351|      0|	if (!server->cap_supported) {
  ------------------
  |  Branch (351:6): [True: 0, False: 0]
  ------------------
  352|      0|		server_init_2(server);
  353|      0|	} else {
  354|      0|		signal_emit("server cap continue", 1, server);
  355|      0|	}
  356|       |
  357|      0|	if (settings_get_bool("starttls_sts")) {
  ------------------
  |  Branch (357:6): [True: 0, False: 0]
  ------------------
  358|      0|		IRC_SERVER_SETUP_REC *ssetup = IRC_SERVER_SETUP(server_setup_find(
  ------------------
  |  |    8|      0|	PROTO_CHECK_CAST(SERVER_SETUP(server), IRC_SERVER_SETUP_REC, \
  |  |  ------------------
  |  |  |  |   30|      0|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |   31|      0|				offsetof(cast, type_field), id))
  |  |  ------------------
  |  |    9|      0|			 chat_type, "IRC")
  ------------------
  359|      0|		    server->connrec->address, server->connrec->port, server->connrec->chatnet));
  360|      0|		if (ssetup != NULL) {
  ------------------
  |  Branch (360:7): [True: 0, False: 0]
  ------------------
  361|      0|			ssetup->starttls = STARTTLS_ENABLED;
  362|      0|			server_setup_add((SERVER_SETUP_REC *) ssetup);
  363|      0|		}
  364|      0|	}
  365|      0|}
irc-servers.c:event_registerfirst:
  402|  27.5k|{
  403|  27.5k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (403:2): [True: 27.5k, False: 0]
  |  Branch (403:2): [True: 27.5k, False: 0]
  |  Branch (403:2): [Folded, False: 27.5k]
  ------------------
  404|       |
  405|  27.5k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  27.5k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  27.5k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  27.5k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 27.5k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  27.5k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (405:6): [True: 0, False: 27.5k]
  ------------------
  406|      0|		return;
  407|       |
  408|  27.5k|	if (server->connected)
  ------------------
  |  Branch (408:6): [True: 7.78k, False: 19.7k]
  ------------------
  409|  7.78k|		return;
  410|       |
  411|  19.7k|	if (!server->cap_supported && !server->connrec->starttls)
  ------------------
  |  Branch (411:6): [True: 18.4k, False: 1.27k]
  |  Branch (411:32): [True: 18.4k, False: 0]
  ------------------
  412|  18.4k|		server_init_2(server);
  413|  19.7k|}
irc-servers.c:event_capend:
  416|  2.70k|{
  417|  2.70k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (417:2): [True: 2.70k, False: 0]
  |  Branch (417:2): [True: 2.70k, False: 0]
  |  Branch (417:2): [Folded, False: 2.70k]
  ------------------
  418|       |
  419|  2.70k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  2.70k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  2.70k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  2.70k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 2.70k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  2.70k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (419:6): [True: 0, False: 2.70k]
  ------------------
  420|      0|		return;
  421|       |
  422|  2.70k|	if (server->connected)
  ------------------
  |  Branch (422:6): [True: 686, False: 2.02k]
  ------------------
  423|    686|		return;
  424|       |
  425|  2.02k|	server_init_2(server);
  426|  2.02k|}
irc-servers.c:event_connected:
  884|  10.3k|{
  885|  10.3k|	char *params, *nick;
  886|       |
  887|  10.3k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (887:2): [True: 10.3k, False: 0]
  |  Branch (887:2): [True: 10.3k, False: 0]
  |  Branch (887:2): [Folded, False: 10.3k]
  ------------------
  888|       |
  889|  10.3k|	params = event_get_params(data, 1, &nick);
  890|       |
  891|  10.3k|	if (g_strcmp0(server->nick, nick) != 0) {
  ------------------
  |  Branch (891:6): [True: 1.35k, False: 9.01k]
  ------------------
  892|       |		/* nick changed unexpectedly .. connected via proxy, etc. */
  893|  1.35k|		g_free(server->nick);
  894|  1.35k|		server->nick = g_strdup(nick);
  895|  1.35k|	}
  896|       |
  897|       |	/* set the server address */
  898|  10.3k|	g_free(server->real_address);
  899|  10.3k|	server->real_address = from == NULL ?
  ------------------
  |  Branch (899:25): [True: 8.03k, False: 2.33k]
  ------------------
  900|  8.03k|		g_strdup(server->connrec->address) : /* shouldn't happen.. */
  901|  10.3k|		g_strdup(from);
  902|       |
  903|       |	/* last welcome message found - commands can be sent to server now. */
  904|  10.3k|	server->connected = 1;
  905|  10.3k|	server->real_connect_time = time(NULL);
  906|       |
  907|       |	/* let the queue send now that we are identified */
  908|  10.3k|	server->wait_cmd = g_get_real_time();
  909|       |
  910|  10.3k|	if (server->connrec->usermode != NULL) {
  ------------------
  |  Branch (910:6): [True: 10.3k, False: 0]
  ------------------
  911|       |		/* Send the user mode, before the autosendcmd.
  912|       |		 * Do not pass this through cmd_mode because it
  913|       |		 * is not known whether the resulting MODE message
  914|       |		 * (if any) is the initial umode or a reply to this.
  915|       |		 */
  916|  10.3k|		irc_send_cmdv(server, "MODE %s %s", server->nick,
  917|  10.3k|				server->connrec->usermode);
  918|  10.3k|		g_free_not_null(server->wanted_usermode);
  ------------------
  |  |   64|  10.3k|#define g_free_not_null(a) g_free(a)
  ------------------
  919|  10.3k|		server->wanted_usermode = g_strdup(server->connrec->usermode);
  920|  10.3k|	}
  921|       |
  922|  10.3k|	signal_emit("event connected", 1, server);
  923|  10.3k|	g_free(params);
  924|  10.3k|}
irc-servers.c:event_server_info:
  927|     53|{
  928|     53|	char *params, *ircd_version, *usermodes, *chanmodes;
  929|       |
  930|     53|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (930:2): [True: 53, False: 0]
  |  Branch (930:2): [True: 53, False: 0]
  |  Branch (930:2): [Folded, False: 53]
  ------------------
  931|       |
  932|     53|	params = event_get_params(data, 5, NULL, NULL, &ircd_version, &usermodes, &chanmodes);
  933|       |
  934|       |	/* check if server understands I and e channel modes */
  935|     53|	if (strchr(chanmodes, 'I') && strchr(chanmodes, 'e'))
  ------------------
  |  Branch (935:6): [True: 12, False: 41]
  |  Branch (935:32): [True: 12, False: 0]
  ------------------
  936|     12|		server->emode_known = TRUE;
  937|       |
  938|       |	/* save server version */
  939|     53|	g_free_not_null(server->version);
  ------------------
  |  |   64|     53|#define g_free_not_null(a) g_free(a)
  ------------------
  940|     53|	server->version = g_strdup(ircd_version);
  941|       |
  942|     53|	g_free(params);
  943|     53|}
irc-servers.c:event_isupport:
  992|  2.23k|{
  993|  2.23k|	char **item, *sptr, *eptr;
  994|  2.23k|	char **isupport;
  995|  2.23k|	gpointer key, value;
  996|       |
  997|  2.23k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (997:2): [True: 2.23k, False: 0]
  |  Branch (997:2): [True: 2.23k, False: 0]
  |  Branch (997:2): [Folded, False: 2.23k]
  ------------------
  998|       |
  999|  2.23k|	server->isupport_sent = TRUE;
 1000|       |
 1001|  2.23k|	sptr = strchr(data, ' ');
 1002|  2.23k|	if (sptr == NULL)
  ------------------
  |  Branch (1002:6): [True: 914, False: 1.32k]
  ------------------
 1003|    914|		return;
 1004|  1.32k|	sptr++;
 1005|       |
 1006|  1.32k|	isupport = g_strsplit(sptr, " ", -1);
 1007|       |
 1008|  17.8k|	for(item = isupport; *item != NULL; item++) {
  ------------------
  |  Branch (1008:23): [True: 16.5k, False: 1.28k]
  ------------------
 1009|  16.5k|		int removed = FALSE;
 1010|       |
 1011|  16.5k|		if (**item == '\0')
  ------------------
  |  Branch (1011:7): [True: 9.32k, False: 7.20k]
  ------------------
 1012|  9.32k|			continue;
 1013|       |
 1014|  7.20k|		if (**item == ':')
  ------------------
  |  Branch (1014:7): [True: 39, False: 7.17k]
  ------------------
 1015|     39|			break;
 1016|       |
 1017|  7.17k|		sptr = strchr(*item, '=');
 1018|  7.17k|		if (sptr != NULL) {
  ------------------
  |  Branch (1018:7): [True: 726, False: 6.44k]
  ------------------
 1019|    726|			*sptr = '\0';
 1020|    726|			sptr++;
 1021|    726|		}
 1022|       |
 1023|  7.17k|		eptr = *item;
 1024|  7.17k|		if(*eptr == '-') {
  ------------------
  |  Branch (1024:6): [True: 325, False: 6.84k]
  ------------------
 1025|    325|			removed = TRUE;
 1026|    325|			eptr++;
 1027|    325|		}
 1028|       |
 1029|  7.17k|		key = value = NULL;
 1030|  7.17k|		if (!g_hash_table_lookup_extended(server->isupport, eptr,
  ------------------
  |  Branch (1030:7): [True: 3.10k, False: 4.06k]
  ------------------
 1031|  7.17k|						  &key, &value) && removed)
  ------------------
  |  Branch (1031:26): [True: 303, False: 2.80k]
  ------------------
 1032|    303|			continue;
 1033|       |
 1034|  6.86k|		g_hash_table_remove(server->isupport, eptr);
 1035|  6.86k|		if (!removed) {
  ------------------
  |  Branch (1035:7): [True: 6.84k, False: 22]
  ------------------
 1036|  6.84k|			g_hash_table_insert(server->isupport, g_strdup(eptr),
 1037|  6.84k|					    g_strdup(sptr != NULL ? sptr : ""));
  ------------------
  |  Branch (1037:19): [True: 726, False: 6.11k]
  ------------------
 1038|  6.84k|		}
 1039|       |
 1040|  6.86k|		g_free(key);
 1041|  6.86k|		g_free(value);
 1042|  6.86k|	}
 1043|  1.32k|	g_strfreev(isupport);
 1044|  1.32k|	irc_server_init_isupport(server);
 1045|       |
 1046|  1.32k|}
irc-servers.c:event_motd:
 1049|  1.63k|{
 1050|  1.63k|	if (server->connected)
  ------------------
  |  Branch (1050:6): [True: 276, False: 1.35k]
  ------------------
 1051|    276|		return;
 1052|       |
 1053|       |	/* Stupid broken piece of shit ircd didn't send us 001,
 1054|       |	   you'd think they could at least get that right??
 1055|       |	   But no, then I'll have to go and add these idiotic kludges
 1056|       |	   to make them work. Maybe I should instead get the users of these
 1057|       |	   servers to complain about it to their admins.
 1058|       |
 1059|       |	   Oh, and looks like it also doesn't answer anything to PINGs,
 1060|       |	   disable lag checking. */
 1061|  1.35k|        server->disable_lag = TRUE;
 1062|  1.35k|	event_connected(server, data, from);
 1063|  1.35k|}
irc-servers.c:event_end_of_motd:
 1066|     45|{
 1067|       |	server->motd_got = TRUE;
 1068|     45|}
irc-servers.c:event_channels_formed:
 1071|     96|{
 1072|     96|	char *params, *channels;
 1073|       |
 1074|     96|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (1074:2): [True: 96, False: 0]
  |  Branch (1074:2): [True: 96, False: 0]
  |  Branch (1074:2): [Folded, False: 96]
  ------------------
 1075|       |
 1076|     96|	params = event_get_params(data, 2, NULL, &channels);
 1077|     96|        server->channels_formed = atoi(channels);
 1078|     96|	g_free(params);
 1079|     96|}
irc-servers.c:event_hosthidden:
 1082|  7.55k|{
 1083|  7.55k|	char *params, *newhost, *p, *newuserhost;
 1084|       |
 1085|  7.55k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (1085:2): [True: 7.55k, False: 0]
  |  Branch (1085:2): [True: 7.55k, False: 0]
  |  Branch (1085:2): [Folded, False: 7.55k]
  ------------------
 1086|       |
 1087|  7.55k|	params = event_get_params(data, 2, NULL, &newhost);
 1088|       |	/* do a sanity check */
 1089|  7.55k|	if (!strchr(newhost, '*') && !strchr(newhost, '?') &&
  ------------------
  |  Branch (1089:6): [True: 7.55k, False: 0]
  |  Branch (1089:31): [True: 7.55k, False: 0]
  ------------------
 1090|  7.55k|			!strchr(newhost, '!') && !strchr(newhost, '#') &&
  ------------------
  |  Branch (1090:4): [True: 7.55k, False: 0]
  |  Branch (1090:29): [True: 7.55k, False: 0]
  ------------------
 1091|  7.55k|			!strchr(newhost, '&') && !strchr(newhost, ' ') &&
  ------------------
  |  Branch (1091:4): [True: 7.45k, False: 95]
  |  Branch (1091:29): [True: 7.31k, False: 141]
  ------------------
 1092|  7.31k|			*newhost != '\0' && *newhost != '@' &&
  ------------------
  |  Branch (1092:4): [True: 5.87k, False: 1.43k]
  |  Branch (1092:24): [True: 5.87k, False: 0]
  ------------------
 1093|  5.87k|			*newhost != ':' && *newhost != '-' &&
  ------------------
  |  Branch (1093:4): [True: 5.86k, False: 8]
  |  Branch (1093:23): [True: 5.72k, False: 144]
  ------------------
 1094|  5.72k|			newhost[strlen(newhost) - 1] != '-') {
  ------------------
  |  Branch (1094:4): [True: 5.72k, False: 0]
  ------------------
 1095|  5.72k|		if (strchr(newhost, '@')) {
  ------------------
  |  Branch (1095:7): [True: 466, False: 5.25k]
  ------------------
 1096|    466|			newuserhost = g_strdup(newhost);
 1097|    466|			g_free(server->userhost);
 1098|    466|			server->userhost = newuserhost;
 1099|  5.25k|		} else if (server->userhost != NULL) {
  ------------------
  |  Branch (1099:14): [True: 3.36k, False: 1.89k]
  ------------------
 1100|       |			/* no user@, only process if we know the user@
 1101|       |			 * already
 1102|       |			 */
 1103|  3.36k|			p = strchr(server->userhost, '@');
 1104|  3.36k|			if (p == NULL)
  ------------------
  |  Branch (1104:8): [True: 191, False: 3.17k]
  ------------------
 1105|    191|				p = server->userhost;
 1106|  3.36k|			newuserhost = g_strdup_printf("%.*s@%s", (int)(p - server->userhost), server->userhost, newhost);
 1107|  3.36k|			g_free(server->userhost);
 1108|  3.36k|			server->userhost = newuserhost;
 1109|  3.36k|		}
 1110|  5.72k|	}
 1111|  7.55k|	g_free(params);
 1112|  7.55k|}
irc-servers.c:event_server_banned:
 1115|  1.35k|{
 1116|  1.35k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (1116:2): [True: 1.35k, False: 0]
  |  Branch (1116:2): [True: 1.35k, False: 0]
  |  Branch (1116:2): [Folded, False: 1.35k]
  ------------------
 1117|       |
 1118|  1.35k|        server->banned = TRUE;
 1119|  1.35k|}
irc-servers.c:event_error:
 1122|    310|{
 1123|    310|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (1123:2): [True: 310, False: 0]
  |  Branch (1123:2): [True: 310, False: 0]
  |  Branch (1123:2): [Folded, False: 310]
  ------------------
 1124|       |
 1125|    310|	if (!server->connected && (stristr(data, "Unauthorized") != NULL ||
  ------------------
  |  Branch (1125:6): [True: 98, False: 212]
  |  Branch (1125:29): [True: 0, False: 98]
  ------------------
 1126|     98|				   stristr(data, "K-lined") != NULL ||
  ------------------
  |  Branch (1126:8): [True: 0, False: 98]
  ------------------
 1127|     98|				   stristr(data, "Banned") != NULL ||
  ------------------
  |  Branch (1127:8): [True: 0, False: 98]
  ------------------
 1128|     98|				   stristr(data, "Bad user info") != NULL))
  ------------------
  |  Branch (1128:8): [True: 0, False: 98]
  ------------------
 1129|      0|		server->banned = TRUE;
 1130|    310|}
irc-servers.c:event_ping:
 1133|  3.05k|{
 1134|  3.05k|	char *params, *origin, *target, *str;
 1135|       |
 1136|  3.05k|	params = event_get_params(data, 2, &origin, &target);
 1137|  3.05k|	str = *target == '\0' ? g_strconcat("PONG :", origin, NULL) :
  ------------------
  |  Branch (1137:8): [True: 2.54k, False: 512]
  ------------------
 1138|  3.05k|		g_strdup_printf("PONG %s :%s", target, origin);
 1139|  3.05k|	irc_send_cmd_now(server, str);
 1140|  3.05k|        g_free(str);
 1141|  3.05k|	g_free(params);
 1142|  3.05k|}
irc-servers.c:event_empty:
 1145|  1.88k|{
 1146|  1.88k|}

irc_session_init:
  236|  29.4k|{
  237|  29.4k|	signal_add("session save server", (SIGNAL_FUNC) sig_session_save_server);
  ------------------
  |  |   21|  29.4k|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|  29.4k|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|  29.4k|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  238|  29.4k|	signal_add("session restore server", (SIGNAL_FUNC) sig_session_restore_server);
  ------------------
  |  |   21|  29.4k|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|  29.4k|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|  29.4k|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  239|  29.4k|	signal_add("session restore nick", (SIGNAL_FUNC) sig_session_restore_nick);
  ------------------
  |  |   21|  29.4k|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|  29.4k|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|  29.4k|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  240|       |
  241|       |	signal_add("server connected", (SIGNAL_FUNC) sig_connected);
  ------------------
  |  |   21|  29.4k|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|  29.4k|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|  29.4k|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  242|  29.4k|}
irc_session_deinit:
  245|  29.4k|{
  246|  29.4k|	signal_remove("session save server", (SIGNAL_FUNC) sig_session_save_server);
  ------------------
  |  |   37|  29.4k|        signal_remove_full((signal), (SIGNAL_FUNC) (func), NULL)
  ------------------
  247|  29.4k|	signal_remove("session restore server", (SIGNAL_FUNC) sig_session_restore_server);
  ------------------
  |  |   37|  29.4k|        signal_remove_full((signal), (SIGNAL_FUNC) (func), NULL)
  ------------------
  248|  29.4k|	signal_remove("session restore nick", (SIGNAL_FUNC) sig_session_restore_nick);
  ------------------
  |  |   37|  29.4k|        signal_remove_full((signal), (SIGNAL_FUNC) (func), NULL)
  ------------------
  249|       |
  250|       |	signal_remove("server connected", (SIGNAL_FUNC) sig_connected);
  ------------------
  |  |   37|  29.4k|        signal_remove_full((signal), (SIGNAL_FUNC) (func), NULL)
  ------------------
  251|  29.4k|}

irc_send_cmd_full:
   51|  94.6k|{
   52|  94.6k|	GString *str;
   53|  94.6k|	int len;
   54|  94.6k|	guint pos;
   55|  94.6k|	gboolean server_supports_tag;
   56|       |
   57|  94.6k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (57:2): [True: 94.6k, False: 0]
  |  Branch (57:2): [True: 94.6k, False: 0]
  |  Branch (57:2): [Folded, False: 94.6k]
  ------------------
   58|  94.6k|	g_return_if_fail(cmd != NULL);
  ------------------
  |  Branch (58:2): [True: 94.6k, False: 0]
  |  Branch (58:2): [True: 94.6k, False: 0]
  |  Branch (58:2): [Folded, False: 94.6k]
  ------------------
   59|       |
   60|  94.6k|	if (server->connection_lost)
  ------------------
  |  Branch (60:6): [True: 3.30k, False: 91.3k]
  ------------------
   61|  3.30k|		return;
   62|       |
   63|  91.3k|	str = g_string_sized_new(MAX_IRC_USER_TAGS_LEN + 2 /* `@'+SPACE */ +
  ------------------
  |  |   16|  91.3k|#define MAX_IRC_USER_TAGS_LEN 4094
  ------------------
   64|  91.3k|				 server->max_message_len + 2 /* CR+LF */ + 1 /* `\0' */);
   65|       |
   66|  91.3k|	if (server->cmdcount == 0)
  ------------------
  |  Branch (66:6): [True: 7.17k, False: 84.1k]
  ------------------
   67|  7.17k|		irc_servers_start_cmd_timeout();
   68|  91.3k|	server->cmdcount++;
   69|       |
   70|  91.3k|	pos = g_slist_length(server->cmdqueue);
   71|  91.3k|	if (server->cmdlater > pos / 2) {
  ------------------
  |  Branch (71:6): [True: 0, False: 91.3k]
  ------------------
   72|      0|		server->cmdlater = pos / 2;
   73|      0|		pos = 0;
   74|  91.3k|	} else {
   75|  91.3k|		pos -= 2 * server->cmdlater;
   76|  91.3k|	}
   77|       |
   78|  91.3k|	if (!raw) {
  ------------------
  |  Branch (78:6): [True: 91.3k, False: 0]
  ------------------
   79|  91.3k|		const char *tmp = cmd;
   80|       |
   81|  91.3k|		server_supports_tag = server->cap_supported != NULL &&
  ------------------
  |  Branch (81:25): [True: 17.2k, False: 74.1k]
  ------------------
   82|  17.2k|			g_hash_table_lookup_extended(server->cap_supported, CAP_MESSAGE_TAGS, NULL, NULL);
  ------------------
  |  |   19|  17.2k|#define CAP_MESSAGE_TAGS "message-tags"
  ------------------
  |  Branch (82:4): [True: 0, False: 17.2k]
  ------------------
   83|       |
   84|  91.3k|		if (*cmd == '@' && server_supports_tag) {
  ------------------
  |  Branch (84:7): [True: 0, False: 91.3k]
  |  Branch (84:22): [True: 0, False: 0]
  ------------------
   85|      0|			const char *end;
   86|       |
   87|      0|			while (*tmp != ' ' && *tmp != '\0')
  ------------------
  |  Branch (87:11): [True: 0, False: 0]
  |  Branch (87:26): [True: 0, False: 0]
  ------------------
   88|      0|				tmp++;
   89|       |
   90|      0|			end = tmp;
   91|       |
   92|      0|			if (tmp - cmd > MAX_IRC_USER_TAGS_LEN) {
  ------------------
  |  |   16|      0|#define MAX_IRC_USER_TAGS_LEN 4094
  ------------------
  |  Branch (92:8): [True: 0, False: 0]
  ------------------
   93|      0|				g_warning("irc_send_cmd_full(); tags too long(%ld)", tmp - cmd);
   94|      0|				while (tmp - cmd > MAX_IRC_USER_TAGS_LEN && cmd != tmp - 1) tmp--;
  ------------------
  |  |   16|      0|#define MAX_IRC_USER_TAGS_LEN 4094
  ------------------
  |  Branch (94:12): [True: 0, False: 0]
  |  Branch (94:49): [True: 0, False: 0]
  ------------------
   95|      0|				while (*tmp != ',' && cmd != tmp - 1) tmp--;
  ------------------
  |  Branch (95:12): [True: 0, False: 0]
  |  Branch (95:27): [True: 0, False: 0]
  ------------------
   96|      0|			}
   97|      0|			if (cmd != tmp)
  ------------------
  |  Branch (97:8): [True: 0, False: 0]
  ------------------
   98|      0|				g_string_append_len(str, cmd, tmp - cmd);
   99|       |
  100|      0|			tmp = end;
  101|      0|			while (*tmp == ' ') tmp++;
  ------------------
  |  Branch (101:11): [True: 0, False: 0]
  ------------------
  102|       |
  103|      0|			if (*tmp != '\0' && str->len > 0)
  ------------------
  |  Branch (103:8): [True: 0, False: 0]
  |  Branch (103:24): [True: 0, False: 0]
  ------------------
  104|      0|				g_string_append_c(str, ' ');
  105|      0|		}
  106|  91.3k|		len = strlen(tmp);
  107|       |
  108|       |		/* check that we don't send any longer commands
  109|       |		   than 510 bytes (2 bytes for CR+LF) */
  110|  91.3k|		g_string_append_len(str, tmp, len > server->max_message_len ?
  ------------------
  |  Branch (110:33): [True: 216, False: 91.1k]
  ------------------
  111|  91.1k|				    server->max_message_len : len);
  112|  91.3k|	} else {
  113|      0|		g_string_append(str, cmd);
  114|      0|	}
  115|       |
  116|  91.3k|	if (!raw) {
  ------------------
  |  Branch (116:6): [True: 91.3k, False: 0]
  ------------------
  117|       |		/* Add CR+LF to command */
  118|  91.3k|		g_string_append(str, "\r\n");
  119|  91.3k|	}
  120|       |
  121|  91.3k|	if (irc_send_when == IRC_SEND_NOW) {
  ------------------
  |  Branch (121:6): [True: 62.7k, False: 28.5k]
  ------------------
  122|  62.7k|		irc_server_send_and_redirect(server, str, server->redirect_next);
  123|  62.7k|		g_string_free(str, TRUE);
  124|  62.7k|	} else if (irc_send_when == IRC_SEND_NEXT) {
  ------------------
  |  Branch (124:13): [True: 0, False: 28.5k]
  ------------------
  125|       |		/* add to queue */
  126|      0|		server->cmdqueue = g_slist_prepend(server->cmdqueue, server->redirect_next);
  127|      0|		server->cmdqueue = g_slist_prepend(server->cmdqueue, g_string_free(str, FALSE));
  128|  28.5k|	} else if (irc_send_when == IRC_SEND_NORMAL) {
  ------------------
  |  Branch (128:13): [True: 24.9k, False: 3.59k]
  ------------------
  129|  24.9k|		server->cmdqueue = g_slist_insert(server->cmdqueue, server->redirect_next, pos);
  130|  24.9k|		server->cmdqueue = g_slist_insert(server->cmdqueue, g_string_free(str, FALSE), pos);
  131|  24.9k|	} else if (irc_send_when == IRC_SEND_LATER) {
  ------------------
  |  Branch (131:13): [True: 3.59k, False: 0]
  ------------------
  132|  3.59k|		server->cmdqueue = g_slist_append(server->cmdqueue, g_string_free(str, FALSE));
  133|  3.59k|		server->cmdqueue = g_slist_append(server->cmdqueue, server->redirect_next);
  134|  3.59k|		server->cmdlater++;
  135|  3.59k|	} else {
  136|      0|		g_warn_if_reached();
  ------------------
  |  Branch (136:3): [Folded, False: 0]
  ------------------
  137|      0|	}
  138|       |
  139|       |	server->redirect_next = NULL;
  140|  91.3k|}
irc_send_cmd:
  144|  39.3k|{
  145|  39.3k|	gint64 now;
  146|  39.3k|	int send_now;
  147|       |
  148|  39.3k|	now = g_get_real_time();
  149|  39.3k|	send_now = now >= server->wait_cmd &&
  ------------------
  |  Branch (149:13): [True: 39.3k, False: 52]
  ------------------
  150|  39.3k|	           (server->cmdcount < server->max_cmds_at_once ||
  ------------------
  |  Branch (150:14): [True: 14.4k, False: 24.9k]
  ------------------
  151|  24.9k|		    server->cmd_queue_speed <= 0);
  ------------------
  |  Branch (151:7): [True: 0, False: 24.9k]
  ------------------
  152|       |
  153|  39.3k|	irc_send_cmd_full(server, cmd, send_now ? IRC_SEND_NOW : IRC_SEND_NORMAL, FALSE);
  ------------------
  |  Branch (153:33): [True: 14.4k, False: 24.9k]
  ------------------
  154|  39.3k|}
irc_send_cmdv:
  158|  39.3k|{
  159|  39.3k|	va_list args;
  160|  39.3k|	char *str;
  161|       |
  162|  39.3k|	va_start(args, cmd);
  163|       |
  164|  39.3k|	str = g_strdup_vprintf(cmd, args);
  165|  39.3k|	irc_send_cmd(server, str);
  166|  39.3k|	g_free(str);
  167|       |
  168|       |	va_end(args);
  169|  39.3k|}
irc_send_cmd_now:
  174|  51.5k|{
  175|  51.5k|	g_return_if_fail(cmd != NULL);
  ------------------
  |  Branch (175:2): [True: 51.5k, False: 0]
  |  Branch (175:2): [True: 51.5k, False: 0]
  |  Branch (175:2): [Folded, False: 51.5k]
  ------------------
  176|       |
  177|  51.5k|	irc_send_cmd_full(server, cmd, IRC_SEND_NOW, FALSE);
  178|  51.5k|}
irc_send_cmd_later:
  192|  3.70k|{
  193|  3.70k|	g_return_if_fail(cmd != NULL);
  ------------------
  |  Branch (193:2): [True: 3.70k, False: 0]
  |  Branch (193:2): [True: 3.70k, False: 0]
  |  Branch (193:2): [Folded, False: 3.70k]
  ------------------
  194|       |
  195|  3.70k|	irc_send_cmd_full(server, cmd, IRC_SEND_LATER, FALSE);
  196|  3.70k|}
event_get_param:
  287|  4.62M|{
  288|  4.62M|	char *pos;
  289|       |
  290|  4.62M|	g_return_val_if_fail(data != NULL, NULL);
  ------------------
  |  Branch (290:2): [True: 4.62M, False: 0]
  |  Branch (290:2): [True: 4.62M, False: 0]
  |  Branch (290:2): [Folded, False: 4.62M]
  ------------------
  291|  4.62M|	g_return_val_if_fail(*data != NULL, NULL);
  ------------------
  |  Branch (291:2): [True: 4.62M, False: 0]
  |  Branch (291:2): [True: 4.62M, False: 0]
  |  Branch (291:2): [Folded, False: 4.62M]
  ------------------
  292|       |
  293|  4.62M|	if (**data == ':') {
  ------------------
  |  Branch (293:6): [True: 49.8k, False: 4.57M]
  ------------------
  294|       |		/* last parameter */
  295|  49.8k|		pos = *data;
  296|  49.8k|		*data += strlen(*data);
  297|  49.8k|		return pos+1;
  298|  49.8k|	}
  299|       |
  300|  4.57M|	pos = *data;
  301|  91.6M|	while (**data != '\0' && **data != ' ') (*data)++;
  ------------------
  |  Branch (301:9): [True: 89.0M, False: 2.58M]
  |  Branch (301:27): [True: 87.0M, False: 1.98M]
  ------------------
  302|  4.57M|	if (**data == ' ') *(*data)++ = '\0';
  ------------------
  |  Branch (302:6): [True: 1.98M, False: 2.58M]
  ------------------
  303|       |
  304|  4.57M|	return pos;
  305|  4.62M|}
event_get_params:
  309|  1.71M|{
  310|  1.71M|	char **str, *tmp, *duprec, *datad;
  311|  1.71M|	gboolean rest;
  312|  1.71M|	va_list args;
  313|       |
  314|  1.71M|	g_return_val_if_fail(data != NULL, NULL);
  ------------------
  |  Branch (314:2): [True: 1.71M, False: 0]
  |  Branch (314:2): [True: 1.71M, False: 0]
  |  Branch (314:2): [Folded, False: 1.71M]
  ------------------
  315|       |
  316|  1.71M|	va_start(args, count);
  317|  1.71M|	duprec = datad = g_strdup(data);
  318|       |
  319|  1.71M|	rest = count & PARAM_FLAG_GETREST;
  ------------------
  |  |  126|  1.71M|#define PARAM_FLAG_GETREST 0x00002000
  ------------------
  320|  1.71M|	count = PARAM_WITHOUT_FLAGS(count);
  ------------------
  |  |  122|  1.71M|#define PARAM_WITHOUT_FLAGS(a) ((a) & 0x00000fff)
  ------------------
  321|       |
  322|  6.46M|	while (count-- > 0) {
  ------------------
  |  Branch (322:9): [True: 4.75M, False: 1.71M]
  ------------------
  323|  4.75M|		str = (char **) va_arg(args, char **);
  324|  4.75M|		if (count == 0 && rest) {
  ------------------
  |  Branch (324:7): [True: 1.71M, False: 3.03M]
  |  Branch (324:21): [True: 129k, False: 1.58M]
  ------------------
  325|       |			/* Put the rest into the last parameter. */
  326|   129k|			strip_params_colon(datad);
  327|   129k|			tmp = datad;
  328|  4.62M|		} else {
  329|  4.62M|			tmp = event_get_param(&datad);
  330|  4.62M|		}
  331|  4.75M|		if (str != NULL) *str = tmp;
  ------------------
  |  Branch (331:7): [True: 3.62M, False: 1.12M]
  ------------------
  332|  4.75M|	}
  333|  1.71M|	va_end(args);
  334|       |
  335|  1.71M|	return duprec;
  336|  1.71M|}
irc_parse_message_tags:
  439|  1.73k|{
  440|  1.73k|	char **split, **tmp, **kv;
  441|  1.73k|	GHashTable *hash;
  442|       |
  443|  1.73k|	hash = g_hash_table_new_full(g_str_hash, (GEqualFunc) i_str0_equal,
  444|  1.73k|	                             (GDestroyNotify) i_refstr_release, (GDestroyNotify) g_free);
  445|  1.73k|	split = g_strsplit(tags, ";", -1);
  446|  4.78k|	for (tmp = split; *tmp != NULL; tmp++) {
  ------------------
  |  Branch (446:20): [True: 3.04k, False: 1.73k]
  ------------------
  447|  3.04k|		if (*tmp[0] == '\0')
  ------------------
  |  Branch (447:7): [True: 54, False: 2.98k]
  ------------------
  448|     54|			continue;
  449|  2.98k|		kv = g_strsplit(*tmp, "=", 2);
  450|  2.98k|		unescape_tag(kv[1]);
  451|  2.98k|		g_hash_table_replace(hash, i_refstr_intern(kv[0]),
  452|  2.98k|		                     g_strdup(kv[1] == NULL ? "" : kv[1]));
  ------------------
  |  Branch (452:33): [True: 2.53k, False: 457]
  ------------------
  453|  2.98k|		g_strfreev(kv);
  454|  2.98k|	}
  455|  1.73k|	g_strfreev(split);
  456|  1.73k|	return hash;
  457|  1.73k|}
irc_irc_init:
  587|  29.4k|{
  588|  29.4k|	signal_add("server event", (SIGNAL_FUNC) irc_server_event);
  ------------------
  |  |   21|  29.4k|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|  29.4k|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|  29.4k|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  589|  29.4k|	signal_add("server event tags", (SIGNAL_FUNC) irc_server_event_tags);
  ------------------
  |  |   21|  29.4k|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|  29.4k|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|  29.4k|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  590|  29.4k|	signal_add("server connected", (SIGNAL_FUNC) irc_init_server);
  ------------------
  |  |   21|  29.4k|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|  29.4k|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|  29.4k|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  591|  29.4k|	signal_add("server connection switched", (SIGNAL_FUNC) irc_init_server);
  ------------------
  |  |   21|  29.4k|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|  29.4k|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|  29.4k|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  592|  29.4k|	signal_add("server incoming", (SIGNAL_FUNC) irc_parse_incoming_line);
  ------------------
  |  |   21|  29.4k|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|  29.4k|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|  29.4k|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  593|       |
  594|  29.4k|	current_server_event = NULL;
  595|  29.4k|	signal_default_event = signal_get_uniq_id("default event");
  ------------------
  |  |   68|  29.4k|        module_get_uniq_id_str("signals", signal)
  ------------------
  596|  29.4k|	signal_server_event = signal_get_uniq_id("server event");
  ------------------
  |  |   68|  29.4k|        module_get_uniq_id_str("signals", signal)
  ------------------
  597|  29.4k|	signal_server_event_tags = signal_get_uniq_id("server event tags");
  ------------------
  |  |   68|  29.4k|        module_get_uniq_id_str("signals", signal)
  ------------------
  598|  29.4k|	signal_server_incoming = signal_get_uniq_id("server incoming");
  ------------------
  |  |   68|  29.4k|        module_get_uniq_id_str("signals", signal)
  ------------------
  599|  29.4k|}
irc_irc_deinit:
  602|  29.4k|{
  603|  29.4k|	signal_remove("server event", (SIGNAL_FUNC) irc_server_event);
  ------------------
  |  |   37|  29.4k|        signal_remove_full((signal), (SIGNAL_FUNC) (func), NULL)
  ------------------
  604|  29.4k|	signal_remove("server event tags", (SIGNAL_FUNC) irc_server_event_tags);
  ------------------
  |  |   37|  29.4k|        signal_remove_full((signal), (SIGNAL_FUNC) (func), NULL)
  ------------------
  605|  29.4k|	signal_remove("server connected", (SIGNAL_FUNC) irc_init_server);
  ------------------
  |  |   37|  29.4k|        signal_remove_full((signal), (SIGNAL_FUNC) (func), NULL)
  ------------------
  606|  29.4k|	signal_remove("server connection switched", (SIGNAL_FUNC) irc_init_server);
  ------------------
  |  |   37|  29.4k|        signal_remove_full((signal), (SIGNAL_FUNC) (func), NULL)
  ------------------
  607|       |	signal_remove("server incoming", (SIGNAL_FUNC) irc_parse_incoming_line);
  ------------------
  |  |   37|  29.4k|        signal_remove_full((signal), (SIGNAL_FUNC) (func), NULL)
  ------------------
  608|  29.4k|}
irc.c:strip_params_colon:
  340|   129k|{
  341|   129k|	char *s;
  342|       |
  343|   129k|	if (params == NULL) {
  ------------------
  |  Branch (343:6): [True: 0, False: 129k]
  ------------------
  344|      0|		return;
  345|      0|	}
  346|       |
  347|   129k|	s = params;
  348|   724k|	while (*s != '\0') {
  ------------------
  |  Branch (348:9): [True: 689k, False: 34.9k]
  ------------------
  349|   689k|		if (*s == ':') {
  ------------------
  |  Branch (349:7): [True: 4.69k, False: 685k]
  ------------------
  350|  4.69k|			memmove(s, s+1, strlen(s+1)+1);
  351|  4.69k|			return;
  352|  4.69k|		}
  353|       |
  354|   685k|		s = strchr(s, ' ');
  355|   685k|		if (s == NULL) {
  ------------------
  |  Branch (355:7): [True: 89.7k, False: 595k]
  ------------------
  356|  89.7k|			return;
  357|  89.7k|		}
  358|       |
  359|  1.52M|		while (*s == ' ') {
  ------------------
  |  Branch (359:10): [True: 929k, False: 595k]
  ------------------
  360|   929k|			s++;
  361|   929k|		}
  362|   595k|	}
  363|   129k|}
irc.c:i_str0_equal:
  434|    409|{
  435|    409|	return g_strcmp0(s1, s2) == 0;
  436|    409|}
irc.c:unescape_tag:
  397|  2.98k|{
  398|  2.98k|	char *tmp;
  399|       |
  400|  2.98k|	if (tag == NULL)
  ------------------
  |  Branch (400:6): [True: 2.53k, False: 457]
  ------------------
  401|  2.53k|		return;
  402|       |
  403|    457|	tmp = tag;
  404|  2.90M|	for (; *tmp != '\0'; tmp++, tag++) {
  ------------------
  |  Branch (404:9): [True: 2.90M, False: 456]
  ------------------
  405|  2.90M|		if (*tmp == '\\') {
  ------------------
  |  Branch (405:7): [True: 198, False: 2.90M]
  ------------------
  406|    198|			tmp++;
  407|    198|			if (*tmp == '\0')
  ------------------
  |  Branch (407:8): [True: 1, False: 197]
  ------------------
  408|      1|				break;
  409|    197|			switch (*tmp) {
  410|      0|			case ':':
  ------------------
  |  Branch (410:4): [True: 0, False: 197]
  ------------------
  411|      0|				*tag = ';';
  412|      0|				break;
  413|      0|			case 'n':
  ------------------
  |  Branch (413:4): [True: 0, False: 197]
  ------------------
  414|      0|				*tag = '\n';
  415|      0|				break;
  416|      0|			case 'r':
  ------------------
  |  Branch (416:4): [True: 0, False: 197]
  ------------------
  417|      0|				*tag = '\r';
  418|      0|				break;
  419|      0|			case 's':
  ------------------
  |  Branch (419:4): [True: 0, False: 197]
  ------------------
  420|      0|				*tag = ' ';
  421|      0|				break;
  422|    197|			default:
  ------------------
  |  Branch (422:4): [True: 197, False: 0]
  ------------------
  423|    197|				*tag = *tmp;
  424|    197|				break;
  425|    197|			}
  426|  2.90M|		} else {
  427|  2.90M|			*tag = *tmp;
  428|  2.90M|		}
  429|  2.90M|	}
  430|    457|	*tag = '\0';
  431|    457|}
irc.c:irc_server_event:
  367|   762k|{
  368|   762k|        const char *signal;
  369|   762k|	char *event, *args;
  370|       |
  371|   762k|	g_return_if_fail(line != NULL);
  ------------------
  |  Branch (371:2): [True: 762k, False: 0]
  |  Branch (371:2): [True: 762k, False: 0]
  |  Branch (371:2): [Folded, False: 762k]
  ------------------
  372|       |
  373|       |	/* split event / args */
  374|   762k|	event = g_strconcat("event ", line, NULL);
  375|   762k|	args = strchr(event+6, ' ');
  376|   762k|	if (args != NULL) *args++ = '\0'; else args = "";
  ------------------
  |  Branch (376:6): [True: 669k, False: 93.4k]
  ------------------
  377|   838k|	while (*args == ' ') args++;
  ------------------
  |  Branch (377:9): [True: 75.8k, False: 762k]
  ------------------
  378|   762k|	ascii_strdown(event);
  379|       |
  380|       |        /* check if event needs to be redirected */
  381|   762k|	signal = server_redirect_get_signal(server, nick, event, args);
  382|   762k|	if (signal == NULL)
  ------------------
  |  Branch (382:6): [True: 759k, False: 3.45k]
  ------------------
  383|   759k|		signal = event;
  384|  3.45k|        else
  385|  3.45k|		rawlog_redirect(server->rawlog, signal);
  386|       |
  387|       |        /* emit it */
  388|   762k|	current_server_event = event+6;
  389|   762k|	if (!signal_emit(signal, 4, server, args, nick, address))
  ------------------
  |  Branch (389:6): [True: 255k, False: 507k]
  ------------------
  390|   255k|		signal_emit_id(signal_default_event, 4, server, line, nick, address);
  391|   762k|	current_server_event = NULL;
  392|       |
  393|   762k|	g_free(event);
  394|   762k|}
irc.c:irc_server_event_tags:
  461|   762k|{
  462|   762k|	char *timestr;
  463|   762k|	GHashTable *tags_hash = NULL;
  464|       |
  465|   762k|	if (tags != NULL && *tags != '\0') {
  ------------------
  |  Branch (465:6): [True: 1.73k, False: 761k]
  |  Branch (465:22): [True: 1.73k, False: 0]
  ------------------
  466|  1.73k|		tags_hash = irc_parse_message_tags(tags);
  467|  1.73k|		if ((timestr = g_hash_table_lookup(tags_hash, "time")) != NULL) {
  ------------------
  |  Branch (467:7): [True: 260, False: 1.47k]
  ------------------
  468|    260|			server_meta_stash(SERVER(server), "time", timestr);
  ------------------
  |  |    9|    260|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|    260|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  469|    260|		}
  470|  1.73k|	}
  471|       |
  472|   762k|	if (*line != '\0')
  ------------------
  |  Branch (472:6): [True: 762k, False: 470]
  ------------------
  473|   762k|		signal_emit_id(signal_server_event, 4, server, line, nick, address);
  474|       |
  475|   762k|	if (tags_hash != NULL)
  ------------------
  |  Branch (475:6): [True: 1.73k, False: 761k]
  ------------------
  476|  1.73k|		g_hash_table_destroy(tags_hash);
  477|   762k|}
irc.c:irc_parse_incoming_line:
  529|   767k|{
  530|   767k|	char *nick, *address, *tags;
  531|       |
  532|   767k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (532:2): [True: 767k, False: 0]
  |  Branch (532:2): [True: 767k, False: 0]
  |  Branch (532:2): [Folded, False: 767k]
  ------------------
  533|   767k|	g_return_if_fail(line != NULL);
  ------------------
  |  Branch (533:2): [True: 767k, False: 0]
  |  Branch (533:2): [True: 767k, False: 0]
  |  Branch (533:2): [Folded, False: 767k]
  ------------------
  534|       |
  535|   767k|	line = irc_parse_prefix(line, &nick, &address, &tags);
  536|   767k|	if (*line != '\0' || tags != NULL)
  ------------------
  |  Branch (536:6): [True: 762k, False: 4.62k]
  |  Branch (536:23): [True: 470, False: 4.15k]
  ------------------
  537|   762k|		signal_emit_id(signal_server_event_tags, 5, server, line, nick, address, tags);
  538|       |
  539|       |	server_meta_clear_all(SERVER(server));
  ------------------
  |  |    9|   767k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|   767k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  540|   767k|}
irc.c:irc_parse_prefix:
  480|   767k|{
  481|   767k|	char *p;
  482|       |
  483|   767k|	*nick = *address = *tags = NULL;
  484|       |
  485|       |	/* ["@" <tags> SPACE] :<nick> [["!" <user>] "@" <host>] SPACE */
  486|       |
  487|   767k|	if (*line == '@') {
  ------------------
  |  Branch (487:6): [True: 1.73k, False: 765k]
  ------------------
  488|  1.73k|		*tags = ++line;
  489|  4.01M|		while (*line != '\0' && *line != ' ') {
  ------------------
  |  Branch (489:10): [True: 4.01M, False: 470]
  |  Branch (489:27): [True: 4.01M, False: 1.26k]
  ------------------
  490|  4.01M|			line++;
  491|  4.01M|		}
  492|  1.73k|		if (*line == ' ') {
  ------------------
  |  Branch (492:7): [True: 1.26k, False: 470]
  ------------------
  493|  1.26k|			*line++ = '\0';
  494|  1.82k|			while (*line == ' ') line++;
  ------------------
  |  Branch (494:11): [True: 552, False: 1.26k]
  ------------------
  495|  1.26k|		}
  496|  1.73k|	}
  497|       |
  498|   767k|	if (*line != ':')
  ------------------
  |  Branch (498:6): [True: 431k, False: 335k]
  ------------------
  499|   431k|		return line;
  500|       |
  501|   335k|	*nick = ++line; p = NULL;
  502|  4.75M|	while (*line != '\0' && *line != ' ') {
  ------------------
  |  Branch (502:9): [True: 4.74M, False: 4.12k]
  |  Branch (502:26): [True: 4.41M, False: 331k]
  ------------------
  503|  4.41M|		if (*line == '!' || *line == '@') {
  ------------------
  |  Branch (503:7): [True: 430, False: 4.41M]
  |  Branch (503:23): [True: 28.6k, False: 4.38M]
  ------------------
  504|  29.0k|			p = line;
  505|  29.0k|			if (*line == '!')
  ------------------
  |  Branch (505:8): [True: 430, False: 28.6k]
  ------------------
  506|    430|				break;
  507|  29.0k|		}
  508|  4.41M|		line++;
  509|  4.41M|	}
  510|       |
  511|   335k|	if (p != NULL) {
  ------------------
  |  Branch (511:6): [True: 26.2k, False: 309k]
  ------------------
  512|  26.2k|		line = p;
  513|  26.2k|		*line++ = '\0';
  514|  26.2k|		*address = line;
  515|   687k|		while (*line != '\0' && *line != ' ')
  ------------------
  |  Branch (515:10): [True: 685k, False: 1.97k]
  |  Branch (515:27): [True: 661k, False: 24.2k]
  ------------------
  516|   661k|			line++;
  517|  26.2k|	}
  518|       |
  519|   335k|	if (*line == ' ') {
  ------------------
  |  Branch (519:6): [True: 331k, False: 4.15k]
  ------------------
  520|   331k|		*line++ = '\0';
  521|   348k|		while (*line == ' ') line++;
  ------------------
  |  Branch (521:10): [True: 17.2k, False: 331k]
  ------------------
  522|   331k|	}
  523|       |
  524|   335k|	return line;
  525|   767k|}

lag_init:
  124|      2|{
  125|      2|	settings_add_time("misc", "lag_check_time", "1min");
  ------------------
  |  |   99|      2|	settings_add_time_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  126|      2|	settings_add_time("misc", "lag_max_before_disconnect", "5min");
  ------------------
  |  |   99|      2|	settings_add_time_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  127|       |
  128|      2|	timeout_tag = g_timeout_add(1000, (GSourceFunc) sig_check_lag, NULL);
  129|      2|	signal_add_first("lag pong", (SIGNAL_FUNC) lag_event_pong);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  130|      2|        signal_add("lag ping error", (SIGNAL_FUNC) lag_ping_error);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  131|       |        signal_add("event 421", (SIGNAL_FUNC) sig_unknown_command);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  132|      2|}
lag.c:sig_unknown_command:
   68|    421|{
   69|    421|	char *params, *cmd;
   70|       |
   71|    421|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (71:2): [True: 421, False: 0]
  |  Branch (71:2): [True: 421, False: 0]
  |  Branch (71:2): [Folded, False: 421]
  ------------------
   72|       |
   73|    421|	params = event_get_params(data, 2, NULL, &cmd);
   74|    421|	if (g_ascii_strcasecmp(cmd, "PING") == 0) {
  ------------------
  |  Branch (74:6): [True: 141, False: 280]
  ------------------
   75|       |		/* some servers have disabled PING command, don't bother
   76|       |		   trying alternative methods to detect lag with these
   77|       |		   servers. */
   78|       |		server->disable_lag = TRUE;
   79|    141|		server->lag_sent = 0;
   80|    141|		server->lag = 0;
   81|    141|	}
   82|    421|	g_free(params);
   83|    421|}

massjoin_init:
  353|      2|{
  354|      2|        settings_add_int("misc", "massjoin_max_wait", 5000);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  355|      2|        settings_add_int("misc", "massjoin_max_joins", 3);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  356|      2|	massjoin_tag = g_timeout_add(1000, (GSourceFunc) sig_massjoin_timeout, NULL);
  357|       |
  358|      2|	read_settings();
  359|      2|	signal_add_first("event join", (SIGNAL_FUNC) event_join);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  360|      2|	signal_add("event chghost", (SIGNAL_FUNC) event_chghost);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  361|      2|	signal_add("event account", (SIGNAL_FUNC) event_account);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  362|      2|	signal_add("event part", (SIGNAL_FUNC) event_part);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  363|      2|	signal_add("event kick", (SIGNAL_FUNC) event_kick);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  364|      2|	signal_add("event quit", (SIGNAL_FUNC) event_quit);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  365|       |	signal_add("setup changed", (SIGNAL_FUNC) read_settings);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  366|      2|}
massjoin.c:read_settings:
  348|      2|{
  349|      2|	massjoin_max_joins = settings_get_int("massjoin_max_joins");
  350|      2|}
massjoin.c:event_join:
   37|   153k|{
   38|   153k|	char *params, *channel, *account, *realname, *ptr;
   39|   153k|	IRC_CHANNEL_REC *chanrec;
   40|   153k|	NICK_REC *nickrec;
   41|   153k|	GSList *nicks, *tmp;
   42|   153k|	gboolean send_massjoin;
   43|       |
   44|   153k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (44:2): [True: 153k, False: 0]
  |  Branch (44:2): [True: 153k, False: 0]
  |  Branch (44:2): [Folded, False: 153k]
  ------------------
   45|       |
   46|   153k|	params = event_get_params(data, 3, &channel, &account, &realname);
   47|       |
   48|   153k|	ptr = strchr(channel, 7); /* ^G does something weird.. */
   49|   153k|	if (ptr != NULL) *ptr = '\0';
  ------------------
  |  Branch (49:6): [True: 547, False: 152k]
  ------------------
   50|       |
   51|       |	/* find channel */
   52|   153k|	chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|   153k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|   153k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|   153k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|   153k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   53|   153k|	if (chanrec == NULL) {
  ------------------
  |  Branch (53:6): [True: 50.7k, False: 102k]
  ------------------
   54|  50.7k|		g_free(params);
   55|  50.7k|		return;
   56|  50.7k|	}
   57|       |
   58|   102k|	if (g_ascii_strcasecmp(nick, server->nick) == 0) {
  ------------------
  |  Branch (58:6): [True: 90.0k, False: 12.2k]
  ------------------
   59|       |		/* do not overwrite our /UPGRADEd ownnick */
   60|  90.0k|		if (chanrec->session_rejoin) {
  ------------------
  |  Branch (60:7): [True: 0, False: 90.0k]
  ------------------
   61|      0|			g_free(params);
   62|      0|			return;
   63|  90.0k|		} else {
   64|       |			/* You joined, do not massjoin */
   65|  90.0k|			send_massjoin = FALSE;
   66|  90.0k|		}
   67|  90.0k|	} else {
   68|  12.2k|		send_massjoin = TRUE;
   69|  12.2k|	}
   70|       |
   71|       |	/* check that the nick isn't already in nicklist. seems to happen
   72|       |	   sometimes (server desyncs or something?) */
   73|   102k|	nickrec = nicklist_find(CHANNEL(chanrec), nick);
  ------------------
  |  |    8|   102k|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|   102k|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|   102k|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|   102k|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
   74|   102k|	if (nickrec != NULL) {
  ------------------
  |  Branch (74:6): [True: 4.18k, False: 98.1k]
  ------------------
   75|       |		/* destroy the old record */
   76|  4.18k|		nicklist_remove(CHANNEL(chanrec), nickrec);
  ------------------
  |  |    8|  4.18k|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|  4.18k|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|  4.18k|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|  4.18k|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
   77|  4.18k|	}
   78|       |
   79|       |	/* add user to nicklist */
   80|   102k|	nickrec = irc_nicklist_insert(chanrec, nick, FALSE, FALSE, FALSE, send_massjoin, NULL);
   81|   102k|	if (nickrec == NULL) {
  ------------------
  |  Branch (81:6): [True: 86.9k, False: 15.3k]
  ------------------
   82|       |		/* invalid nick? */
   83|  86.9k|		g_free(params);
   84|  86.9k|		return;
   85|  86.9k|	}
   86|  15.3k|	if (*account != '\0' && g_strcmp0(nickrec->account, account) != 0) {
  ------------------
  |  Branch (86:6): [True: 5.85k, False: 9.53k]
  |  Branch (86:26): [True: 5.85k, False: 0]
  ------------------
   87|  5.85k|		nicklist_set_account(CHANNEL(chanrec), nickrec, account);
  ------------------
  |  |    8|  5.85k|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|  5.85k|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|  5.85k|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|  5.85k|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
   88|  5.85k|	}
   89|       |
   90|  15.3k|        nicklist_set_host(CHANNEL(chanrec), nickrec, address);
  ------------------
  |  |    8|  15.3k|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|  15.3k|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|  15.3k|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|  15.3k|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
   91|       |
   92|  15.3k|	if (send_massjoin && chanrec->massjoins == 0) {
  ------------------
  |  Branch (92:6): [True: 12.2k, False: 3.17k]
  |  Branch (92:23): [True: 1.28k, False: 10.9k]
  ------------------
   93|       |		/* no nicks waiting in massjoin queue */
   94|  1.28k|		chanrec->massjoin_start = time(NULL);
   95|  1.28k|		chanrec->last_massjoins = 0;
   96|  1.28k|	}
   97|       |
   98|  15.3k|	if (nickrec->realname == NULL) {
  ------------------
  |  Branch (98:6): [True: 15.3k, False: 0]
  ------------------
   99|       |		/* Check if user is already in some other channel,
  100|       |		   get the realname and other stuff from there */
  101|  15.3k|		nicks = nicklist_get_same(SERVER(server), nick);
  ------------------
  |  |    9|  15.3k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  15.3k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  102|  35.4k|		for (tmp = nicks; tmp != NULL; tmp = tmp->next->next) {
  ------------------
  |  Branch (102:21): [True: 21.1k, False: 14.3k]
  ------------------
  103|  21.1k|			NICK_REC *rec = tmp->next->data;
  104|       |
  105|  21.1k|			if (rec->realname != NULL) {
  ------------------
  |  Branch (105:8): [True: 1.08k, False: 20.0k]
  ------------------
  106|  1.08k|				nickrec->last_check = rec->last_check;
  107|  1.08k|				nickrec->realname = g_strdup(rec->realname);
  108|  1.08k|				nickrec->gone = rec->gone;
  109|  1.08k|				nickrec->serverop = rec->serverop;
  110|  1.08k|				break;
  111|  1.08k|			}
  112|  21.1k|		}
  113|  15.3k|		g_slist_free(nicks);
  114|  15.3k|	}
  115|       |
  116|  15.3k|	if (*realname != '\0' && g_strcmp0(nickrec->realname, realname) != 0) {
  ------------------
  |  Branch (116:6): [True: 1.32k, False: 14.0k]
  |  Branch (116:27): [True: 1.28k, False: 36]
  ------------------
  117|  1.28k|		g_free(nickrec->realname);
  118|  1.28k|		nickrec->realname = g_strdup(realname);
  119|  1.28k|	}
  120|       |
  121|  15.3k|	if (send_massjoin) {
  ------------------
  |  Branch (121:6): [True: 12.2k, False: 3.17k]
  ------------------
  122|  12.2k|		chanrec->massjoins++;
  123|  12.2k|	}
  124|  15.3k|	g_free(params);
  125|  15.3k|}
massjoin.c:event_chghost:
  129|  4.12k|{
  130|  4.12k|	char *params, *user, *host, *address;
  131|  4.12k|	GSList *nicks, *tmp;
  132|       |
  133|  4.12k|	g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (133:2): [True: 3.40k, False: 721]
  |  Branch (133:2): [True: 3.40k, False: 721]
  |  Branch (133:2): [Folded, False: 3.40k]
  ------------------
  134|  4.12k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (134:2): [True: 3.40k, False: 0]
  |  Branch (134:2): [True: 3.40k, False: 0]
  |  Branch (134:2): [Folded, False: 3.40k]
  ------------------
  135|       |
  136|  3.40k|	params = event_get_params(data, 2, &user, &host);
  137|       |
  138|       |	/* check that the nick isn't already in nicklist. seems to happen
  139|       |	   sometimes (server desyncs or something?) */
  140|  3.40k|	nicks = nicklist_get_same(SERVER(server), nick);
  ------------------
  |  |    9|  3.40k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  3.40k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  141|  3.40k|	address = nicks != NULL ? g_strconcat(user, "@", host, NULL) : NULL;
  ------------------
  |  Branch (141:12): [True: 1.57k, False: 1.83k]
  ------------------
  142|  6.67k|	for (tmp = nicks; tmp != NULL; tmp = tmp->next->next) {
  ------------------
  |  Branch (142:20): [True: 3.27k, False: 3.40k]
  ------------------
  143|  3.27k|		NICK_REC *rec = tmp->next->data;
  144|       |
  145|       |		nicklist_set_host(CHANNEL(tmp->data), rec, address);
  ------------------
  |  |    8|  3.27k|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|  3.27k|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|  3.27k|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|  3.27k|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  146|  3.27k|	}
  147|  3.40k|	g_free(address);
  148|  3.40k|	g_slist_free(nicks);
  149|  3.40k|	g_free(params);
  150|  3.40k|}
massjoin.c:event_account:
  154|     48|{
  155|     48|	char *params, *account;
  156|     48|	GSList *nicks, *tmp;
  157|       |
  158|     48|	g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (158:2): [True: 48, False: 0]
  |  Branch (158:2): [True: 48, False: 0]
  |  Branch (158:2): [Folded, False: 48]
  ------------------
  159|     48|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (159:2): [True: 48, False: 0]
  |  Branch (159:2): [True: 48, False: 0]
  |  Branch (159:2): [Folded, False: 48]
  ------------------
  160|       |
  161|     48|	params = event_get_params(data, 1, &account);
  162|     48|	nicks = nicklist_get_same(SERVER(server), nick);
  ------------------
  |  |    9|     48|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|     48|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  163|     56|	for (tmp = nicks; tmp != NULL; tmp = tmp->next->next) {
  ------------------
  |  Branch (163:20): [True: 8, False: 48]
  ------------------
  164|      8|		NICK_REC *rec = tmp->next->data;
  165|       |
  166|       |		nicklist_set_account(CHANNEL(tmp->data), rec, account);
  ------------------
  |  |    8|      8|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|      8|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|      8|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|      8|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  167|      8|	}
  168|     48|	g_slist_free(nicks);
  169|     48|	g_free(params);
  170|     48|}
massjoin.c:event_part:
  174|  4.13k|{
  175|  4.13k|	char *params, *channel, *reason;
  176|  4.13k|	IRC_CHANNEL_REC *chanrec;
  177|  4.13k|	NICK_REC *nickrec;
  178|       |
  179|  4.13k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (179:2): [True: 4.13k, False: 0]
  |  Branch (179:2): [True: 4.13k, False: 0]
  |  Branch (179:2): [Folded, False: 4.13k]
  ------------------
  180|       |
  181|  4.13k|	if (g_ascii_strcasecmp(nick, server->nick) == 0) {
  ------------------
  |  Branch (181:6): [True: 3.77k, False: 363]
  ------------------
  182|       |		/* you left channel, no need to do anything here */
  183|  3.77k|		return;
  184|  3.77k|	}
  185|       |
  186|    363|	params = event_get_params(data, 2, &channel, &reason);
  187|       |
  188|       |	/* find channel */
  189|    363|	chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|    363|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|    363|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    363|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|    363|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|    363|	if (chanrec == NULL) {
  ------------------
  |  Branch (190:6): [True: 169, False: 194]
  ------------------
  191|    169|		g_free(params);
  192|    169|		return;
  193|    169|	}
  194|       |
  195|       |	/* remove user from nicklist */
  196|    194|	nickrec = nicklist_find(CHANNEL(chanrec), nick);
  ------------------
  |  |    8|    194|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|    194|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|    194|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|    194|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  197|    194|	if (nickrec != NULL) {
  ------------------
  |  Branch (197:6): [True: 158, False: 36]
  ------------------
  198|    158|		if (nickrec->send_massjoin) {
  ------------------
  |  Branch (198:7): [True: 90, False: 68]
  ------------------
  199|       |			/* quick join/part after which it's useless to send
  200|       |			   nick in massjoin */
  201|     90|			chanrec->massjoins--;
  202|     90|		}
  203|       |		nicklist_remove(CHANNEL(chanrec), nickrec);
  ------------------
  |  |    8|    158|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|    158|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|    158|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|    158|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  204|    158|	}
  205|    194|	g_free(params);
  206|    194|}
massjoin.c:event_kick:
  242|    543|{
  243|    543|	char *params, *channel, *nick, *reason;
  244|    543|	IRC_CHANNEL_REC *chanrec;
  245|    543|	NICK_REC *nickrec;
  246|       |
  247|    543|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (247:2): [True: 543, False: 0]
  |  Branch (247:2): [True: 543, False: 0]
  |  Branch (247:2): [Folded, False: 543]
  ------------------
  248|       |
  249|    543|	params = event_get_params(data, 3, &channel, &nick, &reason);
  250|       |
  251|    543|	if (g_ascii_strcasecmp(nick, server->nick) == 0) {
  ------------------
  |  Branch (251:6): [True: 193, False: 350]
  ------------------
  252|       |		/* you were kicked, no need to do anything */
  253|    193|		g_free(params);
  254|    193|		return;
  255|    193|	}
  256|       |
  257|       |	/* Remove user from nicklist */
  258|    350|	chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|    350|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|    350|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    350|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|    350|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|    350|	nickrec = chanrec == NULL ? NULL :
  ------------------
  |  Branch (259:12): [True: 288, False: 62]
  ------------------
  260|    350|		nicklist_find(CHANNEL(chanrec), nick);
  ------------------
  |  |    8|     62|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|     62|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|     62|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|     62|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  261|       |
  262|    350|	if (chanrec != NULL && nickrec != NULL) {
  ------------------
  |  Branch (262:6): [True: 62, False: 288]
  |  Branch (262:25): [True: 6, False: 56]
  ------------------
  263|      6|		if (nickrec->send_massjoin) {
  ------------------
  |  Branch (263:7): [True: 0, False: 6]
  ------------------
  264|       |			/* quick join/kick after which it's useless to
  265|       |			   send nick in massjoin */
  266|      0|			chanrec->massjoins--;
  267|      0|		}
  268|      6|		nicklist_remove(CHANNEL(chanrec), nickrec);
  ------------------
  |  |    8|      6|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|      6|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|      6|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|      6|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  269|      6|	}
  270|       |
  271|    350|	g_free(params);
  272|    350|}
massjoin.c:event_quit:
  210|  2.99k|{
  211|  2.99k|        IRC_CHANNEL_REC *channel;
  212|  2.99k|	NICK_REC *nickrec;
  213|  2.99k|	GSList *nicks, *tmp;
  214|       |
  215|  2.99k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (215:2): [True: 2.99k, False: 0]
  |  Branch (215:2): [True: 2.99k, False: 0]
  |  Branch (215:2): [Folded, False: 2.99k]
  ------------------
  216|       |
  217|  2.99k|	if (g_ascii_strcasecmp(nick, server->nick) == 0) {
  ------------------
  |  Branch (217:6): [True: 1.59k, False: 1.39k]
  ------------------
  218|       |		/* you quit, don't do anything here */
  219|  1.59k|		return;
  220|  1.59k|	}
  221|       |
  222|       |	/* Remove nick from all channels */
  223|  1.39k|	nicks = nicklist_get_same(SERVER(server), nick);
  ------------------
  |  |    9|  1.39k|	MODULE_CHECK_CAST(server, SERVER_REC, type, "SERVER")
  |  |  ------------------
  |  |  |  |   65|  1.39k|	((cast *) module_check_cast(object, offsetof(cast, type_field), id))
  |  |  ------------------
  ------------------
  224|  1.91k|	for (tmp = nicks; tmp != NULL; tmp = tmp->next->next) {
  ------------------
  |  Branch (224:20): [True: 518, False: 1.39k]
  ------------------
  225|    518|                channel = tmp->data;
  226|    518|		nickrec = tmp->next->data;
  227|       |
  228|    518|		if (nickrec->send_massjoin) {
  ------------------
  |  Branch (228:7): [True: 518, False: 0]
  ------------------
  229|       |			/* quick join/quit after which it's useless to
  230|       |			   send nick in massjoin */
  231|    518|			channel->massjoins--;
  232|    518|		}
  233|    518|		nicklist_remove(CHANNEL(channel), nickrec);
  ------------------
  |  |    8|    518|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|    518|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|    518|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|    518|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
  234|    518|	}
  235|  1.39k|	g_slist_free(nicks);
  236|       |
  237|       |	/* invalidate any outstanding accountqueries for the nick */
  238|  1.39k|	irc_channels_query_purge_accountquery(server, nick);
  239|  1.39k|}

banlist_free:
   42|   117k|{
   43|   119k|	while (banlist != NULL)
  ------------------
  |  Branch (43:9): [True: 2.38k, False: 117k]
  ------------------
   44|  2.38k|		ban_free(&banlist, banlist->data);
   45|   117k|}
banlist_find:
   48|  12.2k|{
   49|  12.2k|	GSList *tmp;
   50|       |
   51|  12.2k|	g_return_val_if_fail(ban != NULL, NULL);
  ------------------
  |  Branch (51:2): [True: 12.2k, False: 0]
  |  Branch (51:2): [True: 12.2k, False: 0]
  |  Branch (51:2): [Folded, False: 12.2k]
  ------------------
   52|       |
   53|  24.2k|	for (tmp = list; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (53:19): [True: 18.0k, False: 6.27k]
  ------------------
   54|  18.0k|		BAN_REC *rec = tmp->data;
   55|       |
   56|  18.0k|		if (g_ascii_strcasecmp(rec->ban, ban) == 0)
  ------------------
  |  Branch (56:7): [True: 5.97k, False: 12.0k]
  ------------------
   57|  5.97k|			return rec;
   58|  18.0k|	}
   59|       |
   60|  6.27k|	return NULL;
   61|  12.2k|}
banlist_add:
   65|  8.35k|{
   66|  8.35k|	BAN_REC *rec;
   67|       |
   68|  8.35k|	g_return_val_if_fail(channel != NULL, NULL);
  ------------------
  |  Branch (68:2): [True: 8.35k, False: 0]
  |  Branch (68:2): [True: 8.35k, False: 0]
  |  Branch (68:2): [Folded, False: 8.35k]
  ------------------
   69|  8.35k|	g_return_val_if_fail(ban != NULL, NULL);
  ------------------
  |  Branch (69:2): [True: 8.35k, False: 0]
  |  Branch (69:2): [True: 8.35k, False: 0]
  |  Branch (69:2): [Folded, False: 8.35k]
  ------------------
   70|       |
   71|  8.35k|	rec = banlist_find(channel->banlist, ban);
   72|  8.35k|	if (rec != NULL) {
  ------------------
  |  Branch (72:6): [True: 5.37k, False: 2.98k]
  ------------------
   73|       |		/* duplicate - ignore. some servers send duplicates
   74|       |		   for non-ops because they just replace the hostname with
   75|       |		   eg. "localhost"... */
   76|  5.37k|		return NULL;
   77|  5.37k|	}
   78|       |
   79|  2.98k|	rec = g_new(BAN_REC, 1);
  ------------------
  |  Branch (79:8): [True: 2.98k, False: 0]
  |  Branch (79:8): [True: 0, False: 2.98k]
  ------------------
   80|  2.98k|	rec->ban = g_strdup(ban);
   81|  2.98k|	rec->setby = nick == NULL || *nick == '\0' ? NULL :
  ------------------
  |  Branch (81:15): [True: 955, False: 2.03k]
  |  Branch (81:31): [True: 2.01k, False: 22]
  ------------------
   82|  2.98k|		g_strdup(nick);
   83|  2.98k|	rec->time = time;
   84|       |
   85|  2.98k|	channel->banlist = g_slist_append(channel->banlist, rec);
   86|       |
   87|  2.98k|	signal_emit("ban new", 2, channel, rec);
   88|  2.98k|	return rec;
   89|  8.35k|}
banlist_remove:
   92|  2.16k|{
   93|  2.16k|	BAN_REC *rec;
   94|       |
   95|  2.16k|	g_return_if_fail(channel != NULL);
  ------------------
  |  Branch (95:2): [True: 2.16k, False: 0]
  |  Branch (95:2): [True: 2.16k, False: 0]
  |  Branch (95:2): [Folded, False: 2.16k]
  ------------------
   96|  2.16k|	g_return_if_fail(ban != NULL);
  ------------------
  |  Branch (96:2): [True: 2.16k, False: 0]
  |  Branch (96:2): [True: 2.16k, False: 0]
  |  Branch (96:2): [Folded, False: 2.16k]
  ------------------
   97|       |
   98|  2.16k|	rec = banlist_find(channel->banlist, ban);
   99|  2.16k|	if (rec != NULL) {
  ------------------
  |  Branch (99:6): [True: 603, False: 1.55k]
  ------------------
  100|    603|		signal_emit("ban remove", 3, channel, rec, nick);
  101|    603|		ban_free(&channel->banlist, rec);
  102|    603|	}
  103|  2.16k|}
mode_lists_init:
  131|      2|{
  132|      2|	signal_add("channel destroyed", (SIGNAL_FUNC) channel_destroyed);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  133|       |
  134|       |	signal_add("chanquery ban", (SIGNAL_FUNC) event_banlist);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  135|      2|}
mode-lists.c:ban_free:
   30|  2.98k|{
   31|  2.98k|	g_return_if_fail(list != NULL);
  ------------------
  |  Branch (31:2): [True: 2.98k, False: 0]
  |  Branch (31:2): [True: 2.98k, False: 0]
  |  Branch (31:2): [Folded, False: 2.98k]
  ------------------
   32|  2.98k|	g_return_if_fail(rec != NULL);
  ------------------
  |  Branch (32:2): [True: 2.98k, False: 0]
  |  Branch (32:2): [True: 2.98k, False: 0]
  |  Branch (32:2): [Folded, False: 2.98k]
  ------------------
   33|       |
   34|  2.98k|	*list = g_slist_remove(*list, rec);
   35|       |
   36|  2.98k|	g_free(rec->ban);
   37|  2.98k|	g_free_not_null(rec->setby);
  ------------------
  |  |   64|  2.98k|#define g_free_not_null(a) g_free(a)
  ------------------
   38|  2.98k|	g_free(rec);
   39|  2.98k|}
mode-lists.c:channel_destroyed:
  106|   117k|{
  107|   117k|	if (!IS_IRC_CHANNEL(channel))
  ------------------
  |  |   12|   117k|	(IRC_CHANNEL(channel) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |    9|   117k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|   117k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 117k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|   117k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (107:6): [True: 0, False: 117k]
  ------------------
  108|      0|                return;
  109|       |
  110|   117k|	banlist_free(channel->banlist);
  111|   117k|}

prefix_add:
   64|  17.9k|{
   65|  17.9k|	const char *prefixlst;
   66|  17.9k|	char newprefixes[MAX_USER_PREFIXES+1]; /* to hold the new prefixes */
   67|  17.9k|	unsigned int newpos = 0; /* to hold our position in the new prefixes */
   68|  17.9k|	unsigned int oldpos = 0; /* to hold our position in the old prefixes */
   69|       |
   70|  17.9k|	prefixlst = server->get_nick_flags(server);
   71|       |
   72|       |	/* go through the possible prefixes, copy higher ones, and find this one's place
   73|       |	 * always leave room for the current prefix to be added, though.
   74|       |	 */
   75|  23.0k|	while (*prefixlst != '\0' && prefixes[oldpos] != '\0' &&
  ------------------
  |  Branch (75:9): [True: 23.0k, False: 0]
  |  Branch (75:31): [True: 11.8k, False: 11.2k]
  ------------------
   76|  11.8k|			newpos < MAX_USER_PREFIXES - 1) {
  ------------------
  |  |   11|  11.8k|#define	MAX_USER_PREFIXES 7 /* Max prefixes kept for any user-in-chan. 7+1 is a memory unit */
  ------------------
  |  Branch (76:4): [True: 11.8k, False: 13]
  ------------------
   77|  11.8k|		if (prefixes[oldpos] == newprefix)
  ------------------
  |  Branch (77:7): [True: 5.61k, False: 6.22k]
  ------------------
   78|  5.61k|			return; /* already inserted.  why are we here? */
   79|       |
   80|  6.22k|		if (*prefixlst == newprefix)
  ------------------
  |  Branch (80:7): [True: 1.03k, False: 5.19k]
  ------------------
   81|  1.03k|			break; /* insert the new prefix here */
   82|       |
   83|  5.19k|		if (*prefixlst == prefixes[oldpos]) {
  ------------------
  |  Branch (83:7): [True: 2.96k, False: 2.22k]
  ------------------
   84|       |			/* this prefix is present.
   85|       |			 * the one we are inserting goes after it.
   86|       |			 * copy it over, and continue searching.
   87|       |			 */
   88|  2.96k|			newprefixes[newpos++] = prefixes[oldpos++];
   89|  2.96k|		}
   90|  5.19k|		prefixlst++;
   91|  5.19k|	}
   92|       |
   93|       |	/* newpos is now the position in which we wish to insert the prefix */
   94|  12.2k|	newprefixes[newpos++] = newprefix;
   95|       |
   96|       |	/* finish copying the remaining prefixes */
   97|  13.5k|	while (prefixes[oldpos] != '\0' && newpos < MAX_USER_PREFIXES)
  ------------------
  |  |   11|  1.25k|#define	MAX_USER_PREFIXES 7 /* Max prefixes kept for any user-in-chan. 7+1 is a memory unit */
  ------------------
  |  Branch (97:9): [True: 1.25k, False: 12.2k]
  |  Branch (97:37): [True: 1.22k, False: 27]
  ------------------
   98|  1.22k|		newprefixes[newpos++] = prefixes[oldpos++];
   99|       |
  100|  12.2k|	newprefixes[newpos] = '\0';
  101|       |
  102|  12.2k|	strcpy(prefixes, newprefixes);
  103|  12.2k|}
prefix_del:
  106|  3.61k|{
  107|  3.61k|	char *todel;
  108|       |
  109|  3.61k|	todel = strchr(prefixes, oldprefix);
  110|  3.61k|	if (todel)
  ------------------
  |  Branch (110:6): [True: 236, False: 3.38k]
  ------------------
  111|    236|		memmove(todel, todel+1, strlen(todel));
  112|  3.61k|}
modes_type_a:
  255|  17.4k|{
  256|  17.4k|	if (mode == 'b') {
  ------------------
  |  Branch (256:6): [True: 10.5k, False: 6.89k]
  ------------------
  257|  10.5k|		if (type == '+')
  ------------------
  |  Branch (257:7): [True: 8.35k, False: 2.16k]
  ------------------
  258|  8.35k|			banlist_add(channel, arg, setby, time(NULL));
  259|  2.16k|		else
  260|  2.16k|			banlist_remove(channel, arg, setby);
  261|  10.5k|	}
  262|  17.4k|}
modes_type_b:
  267|  31.1k|{
  268|  31.1k|	if (mode == 'k') {
  ------------------
  |  Branch (268:6): [True: 31.1k, False: 0]
  ------------------
  269|  31.1k|		if (*arg == '\0' && type == '+')
  ------------------
  |  Branch (269:7): [True: 28.7k, False: 2.41k]
  |  Branch (269:23): [True: 27.1k, False: 1.61k]
  ------------------
  270|  27.1k|			arg = channel->key != NULL ? channel->key : "???";
  ------------------
  |  Branch (270:10): [True: 25.6k, False: 1.54k]
  ------------------
  271|       |
  272|  31.1k|		if (arg != channel->key) {
  ------------------
  |  Branch (272:7): [True: 5.56k, False: 25.6k]
  ------------------
  273|  5.56k|			g_free_and_null(channel->key);
  ------------------
  |  |   67|  5.56k|	G_STMT_START { \
  |  |   68|  5.56k|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 2.86k, False: 2.69k]
  |  |  ------------------
  |  |   69|  5.56k|	} G_STMT_END
  ------------------
  |  Branch (273:4): [Folded, False: 5.56k]
  ------------------
  274|  5.56k|			if (type == '+')
  ------------------
  |  Branch (274:8): [True: 3.74k, False: 1.81k]
  ------------------
  275|  3.74k|				channel->key = g_strdup(arg);
  276|  5.56k|		}
  277|  31.1k|	}
  278|       |
  279|       |	mode_set_arg(channel->server, newmode, type, mode, arg, FALSE);
  280|  31.1k|}
modes_type_c:
  285|  6.64k|{
  286|  6.64k|	if (mode == 'l') {
  ------------------
  |  Branch (286:6): [True: 6.64k, False: 0]
  ------------------
  287|  6.64k|		channel->limit = type == '-' ? 0 : atoi(arg);
  ------------------
  |  Branch (287:20): [True: 1.88k, False: 4.76k]
  ------------------
  288|  6.64k|	}
  289|       |
  290|       |	mode_set_arg(channel->server, newmode, type, mode, arg, FALSE);
  291|  6.64k|}
modes_type_d:
  296|   612k|{
  297|       |	mode_set(channel->server, newmode, type, mode, FALSE);
  298|   612k|}
modes_type_prefix:
  302|  28.8k|{
  303|  28.8k|	int umode = (unsigned char) mode;
  304|       |
  305|  28.8k|	if (g_ascii_strcasecmp(channel->server->nick, arg) == 0) {
  ------------------
  |  Branch (305:6): [True: 17, False: 28.8k]
  ------------------
  306|       |		/* see if we need to update channel->chanop */
  307|     17|		const char *prefix =
  308|     17|			g_hash_table_lookup(channel->server->isupport, "PREFIX");
  309|     17|		if (prefix != NULL && *prefix == '(') {
  ------------------
  |  Branch (309:7): [True: 17, False: 0]
  |  Branch (309:25): [True: 17, False: 0]
  ------------------
  310|     17|			prefix++;
  311|     17|			while (*prefix != ')' && *prefix != '\0') {
  ------------------
  |  Branch (311:11): [True: 17, False: 0]
  |  Branch (311:29): [True: 17, False: 0]
  ------------------
  312|     17|				if (*prefix == mode) {
  ------------------
  |  Branch (312:9): [True: 2, False: 15]
  ------------------
  313|      2|					channel->chanop = type == '+';
  314|      2|					break;
  315|      2|				}
  316|     15|				if (*prefix == 'o')
  ------------------
  |  Branch (316:9): [True: 15, False: 0]
  ------------------
  317|     15|					break;
  318|      0|				prefix++;
  319|      0|			}
  320|     17|		} else {
  321|      0|			if (mode == 'o' || mode == 'O')
  ------------------
  |  Branch (321:8): [True: 0, False: 0]
  |  Branch (321:23): [True: 0, False: 0]
  ------------------
  322|      0|				channel->chanop = type == '+';
  323|      0|		}
  324|     17|	}
  325|       |
  326|  28.8k|	nick_mode_change(channel, arg, channel->server->modes[umode].prefix,
  327|  28.8k|			 type, setby);
  328|  28.8k|}
parse_channel_modes:
  341|  22.9k|{
  342|  22.9k|	IRC_SERVER_REC *server = channel->server;
  343|  22.9k|        GString *newmode;
  344|  22.9k|	char *dup, *modestr, *arg, *curmode, type, *old_key;
  345|  22.9k|	int umode;
  346|       |
  347|  22.9k|	g_return_if_fail(IS_IRC_CHANNEL(channel));
  ------------------
  |  Branch (347:2): [True: 22.9k, False: 0]
  |  Branch (347:2): [True: 22.9k, False: 0]
  |  Branch (347:2): [True: 22.9k, False: 0]
  |  Branch (347:2): [Folded, False: 22.9k]
  ------------------
  348|  22.9k|	g_return_if_fail(mode != NULL);
  ------------------
  |  Branch (348:2): [True: 22.9k, False: 0]
  |  Branch (348:2): [True: 22.9k, False: 0]
  |  Branch (348:2): [Folded, False: 22.9k]
  ------------------
  349|       |
  350|  22.9k|	type = '+';
  351|  22.9k|	newmode = g_string_new(channel->mode);
  352|  22.9k|	old_key = update_key ? NULL : g_strdup(channel->key);
  ------------------
  |  Branch (352:12): [True: 21.0k, False: 1.91k]
  ------------------
  353|       |
  354|  22.9k|	dup = modestr = g_strdup(mode);
  355|  22.9k|	curmode = cmd_get_param(&modestr);
  356|   740k|	while (*curmode != '\0') {
  ------------------
  |  Branch (356:9): [True: 718k, False: 22.9k]
  ------------------
  357|   718k|		if (HAS_MODE_ARG(server, type, *curmode)) {
  ------------------
  |  |   31|   718k|	((type) == '+' ? HAS_MODE_ARG_SET(server,mode) : \
  |  |  ------------------
  |  |  |  |   23|   412k|	(HAS_MODE_ARG_ALWAYS(server, mode) || \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|   825k|   (server->modes[(int)(unsigned char) mode].func == modes_type_a || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (17:5): [True: 13.0k, False: 399k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   18|   412k|    server->modes[(int)(unsigned char) mode].func == modes_type_b || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (18:5): [True: 29.3k, False: 370k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   19|   825k|    server->modes[(int)(unsigned char) mode].func == modes_type_prefix)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (19:5): [True: 21.4k, False: 349k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   24|   412k|	  server->modes[(int)(unsigned char) mode].func == modes_type_c)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:4): [True: 4.76k, False: 344k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (31:2): [True: 82.3k, False: 635k]
  |  |  |  Branch (31:3): [True: 412k, False: 305k]
  |  |  ------------------
  |  |   32|   718k|	  HAS_MODE_ARG_UNSET(server, mode))
  |  |  ------------------
  |  |  |  |   28|   305k|	HAS_MODE_ARG_ALWAYS(server, mode)
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|   305k|   (server->modes[(int)(unsigned char) mode].func == modes_type_a || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (17:5): [True: 4.50k, False: 300k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   18|   305k|    server->modes[(int)(unsigned char) mode].func == modes_type_b || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (18:5): [True: 1.81k, False: 298k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   19|   305k|    server->modes[(int)(unsigned char) mode].func == modes_type_prefix)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (19:5): [True: 7.39k, False: 291k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  358|       |			/* get the argument for the mode. NOTE: We don't
  359|       |			   get the +k's argument when joining to channel. */
  360|  82.3k|			arg = cmd_get_param(&modestr);
  361|   635k|		} else {
  362|   635k|			arg = NULL;
  363|   635k|		}
  364|       |
  365|   718k|		switch (*curmode) {
  366|  7.33k|		case '+':
  ------------------
  |  Branch (366:3): [True: 7.33k, False: 710k]
  ------------------
  367|  21.7k|		case '-':
  ------------------
  |  Branch (367:3): [True: 14.4k, False: 703k]
  ------------------
  368|  21.7k|			type = *curmode;
  369|  21.7k|			break;
  370|   696k|		default:
  ------------------
  |  Branch (370:3): [True: 696k, False: 21.7k]
  ------------------
  371|   696k|			umode = (unsigned char) *curmode;
  372|   696k|			if (server->modes[umode].func != NULL) {
  ------------------
  |  Branch (372:8): [True: 88.8k, False: 607k]
  ------------------
  373|  88.8k|				server->modes[umode].func(channel, setby,
  374|  88.8k|							  type, *curmode, arg,
  375|  88.8k|							  newmode);
  376|   607k|			} else {
  377|       |				/* Treat unknown modes as ones without params */
  378|   607k|				modes_type_d(channel, setby, type, *curmode,
  379|   607k|					     arg, newmode);
  380|   607k|			}
  381|   718k|		}
  382|       |
  383|   718k|		curmode++;
  384|   718k|	}
  385|  22.9k|	g_free(dup);
  386|       |
  387|  22.9k|	if (channel->key != NULL &&
  ------------------
  |  Branch (387:6): [True: 9.54k, False: 13.4k]
  ------------------
  388|  9.54k|	    strchr(channel->mode, 'k') == NULL &&
  ------------------
  |  Branch (388:6): [True: 1.55k, False: 7.98k]
  ------------------
  389|  1.55k|	    strchr(newmode->str, 'k') == NULL) {
  ------------------
  |  Branch (389:6): [True: 72, False: 1.48k]
  ------------------
  390|       |		/* join was used with key but there's no key set
  391|       |		   in channel modes.. */
  392|     72|		g_free(channel->key);
  393|     72|		channel->key = NULL;
  394|  22.9k|	} else if (!update_key && old_key != NULL) {
  ------------------
  |  Branch (394:13): [True: 1.91k, False: 20.9k]
  |  Branch (394:28): [True: 303, False: 1.61k]
  ------------------
  395|       |		/* get the old one back, just in case it was replaced */
  396|    303|		g_free(channel->key);
  397|    303|		channel->key = old_key;
  398|    303|		mode_set_arg(channel->server, newmode, '+', 'k', old_key, FALSE);
  399|    303|		old_key = NULL;
  400|    303|	}
  401|       |
  402|  22.9k|	if (g_strcmp0(newmode->str, channel->mode) != 0) {
  ------------------
  |  Branch (402:6): [True: 17.7k, False: 5.18k]
  ------------------
  403|  17.7k|		g_free(channel->mode);
  404|  17.7k|		channel->mode = g_strdup(newmode->str);
  405|       |
  406|  17.7k|		signal_emit("channel mode changed", 2, channel, setby);
  407|  17.7k|	}
  408|       |
  409|       |	g_string_free(newmode, TRUE);
  410|  22.9k|	g_free(old_key);
  411|  22.9k|}
modes_join:
  418|  2.33k|{
  419|  2.33k|	GString *newmode;
  420|  2.33k|	char *dup, *modestr, *curmode, type;
  421|       |
  422|  2.33k|        g_return_val_if_fail(mode != NULL, NULL);
  ------------------
  |  Branch (422:9): [True: 2.33k, False: 0]
  |  Branch (422:9): [True: 2.33k, False: 0]
  |  Branch (422:9): [Folded, False: 2.33k]
  ------------------
  423|       |
  424|  2.33k|	type = '+';
  425|  2.33k|	newmode = g_string_new(old);
  426|       |
  427|  2.33k|	dup = modestr = g_strdup(mode);
  428|  2.33k|	curmode = cmd_get_param(&modestr);
  429|  25.4k|	while (*curmode != '\0' && *curmode != ' ') {
  ------------------
  |  Branch (429:9): [True: 23.0k, False: 2.33k]
  |  Branch (429:29): [True: 23.0k, False: 0]
  ------------------
  430|  23.0k|		if (*curmode == '+' || *curmode == '-') {
  ------------------
  |  Branch (430:7): [True: 142, False: 22.9k]
  |  Branch (430:26): [True: 143, False: 22.8k]
  ------------------
  431|    285|			type = *curmode;
  432|    285|			curmode++;
  433|    285|			continue;
  434|    285|		}
  435|       |
  436|  22.8k|		if (!channel || !HAS_MODE_ARG(server, type, *curmode))
  ------------------
  |  |   31|      0|	((type) == '+' ? HAS_MODE_ARG_SET(server,mode) : \
  |  |  ------------------
  |  |  |  |   23|      0|	(HAS_MODE_ARG_ALWAYS(server, mode) || \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      0|   (server->modes[(int)(unsigned char) mode].func == modes_type_a || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (17:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   18|      0|    server->modes[(int)(unsigned char) mode].func == modes_type_b || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (18:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   19|      0|    server->modes[(int)(unsigned char) mode].func == modes_type_prefix)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (19:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   24|      0|	  server->modes[(int)(unsigned char) mode].func == modes_type_c)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:4): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (31:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   32|      0|	  HAS_MODE_ARG_UNSET(server, mode))
  |  |  ------------------
  |  |  |  |   28|      0|	HAS_MODE_ARG_ALWAYS(server, mode)
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      0|   (server->modes[(int)(unsigned char) mode].func == modes_type_a || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (17:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   18|      0|    server->modes[(int)(unsigned char) mode].func == modes_type_b || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (18:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   19|      0|    server->modes[(int)(unsigned char) mode].func == modes_type_prefix)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (19:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (436:7): [True: 22.8k, False: 0]
  |  Branch (436:19): [True: 0, False: 0]
  ------------------
  437|  22.8k|			mode_set(server, newmode, type, *curmode, !channel);
  438|      0|		else {
  439|      0|			mode_set_arg(server, newmode, type, *curmode,
  440|      0|				     cmd_get_param(&modestr), !channel);
  441|      0|		}
  442|       |
  443|  22.8k|		curmode++;
  444|  22.8k|	}
  445|  2.33k|	g_free(dup);
  446|       |
  447|  2.33k|	modestr = g_string_free_and_steal(newmode);
  448|  2.33k|	return modestr;
  449|  2.33k|}
modes_server_init:
  874|  29.4k|{
  875|  29.4k|	server->modes['b'].func = modes_type_a;
  876|  29.4k|	server->modes['e'].func = modes_type_a;
  877|  29.4k|	server->modes['I'].func = modes_type_a;
  878|       |
  879|  29.4k|	server->modes['h'].func = modes_type_prefix;
  880|  29.4k|	server->modes['h'].prefix = '%';
  881|  29.4k|	server->modes['o'].func = modes_type_prefix;
  882|  29.4k|	server->modes['o'].prefix = '@';
  883|  29.4k|	server->modes['O'].func = modes_type_prefix;
  884|  29.4k|	server->modes['O'].prefix = '@';
  885|  29.4k|	server->modes['v'].func = modes_type_prefix;
  886|  29.4k|	server->modes['v'].prefix = '+';
  887|       |
  888|  29.4k|	server->prefix['%'] = 'h';
  889|  29.4k|	server->prefix['@'] = 'o';
  890|  29.4k|	server->prefix['+'] = 'v';
  891|       |
  892|  29.4k|	server->modes['k'].func = modes_type_b;
  893|  29.4k|	server->modes['l'].func = modes_type_c;
  894|  29.4k|}
modes_init:
  897|      2|{
  898|      2|	settings_add_str("misc", "opermode", "");
  ------------------
  |  |   93|      2|	settings_add_str_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  899|      2|	settings_add_int("misc", "max_wildcard_modes", 6);
  ------------------
  |  |   95|      2|	settings_add_int_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  900|       |
  901|      2|	signal_add("event 221", (SIGNAL_FUNC) event_user_mode);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  902|      2|	signal_add("event 305", (SIGNAL_FUNC) event_unaway);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  903|      2|	signal_add("event 306", (SIGNAL_FUNC) event_away);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  904|      2|	signal_add("event 381", (SIGNAL_FUNC) event_oper);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  905|      2|	signal_add("event mode", (SIGNAL_FUNC) event_mode);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  906|      2|        signal_add("requested usermode change", (SIGNAL_FUNC) sig_req_usermode_change);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  907|       |
  908|      2|	command_bind_irc("op", NULL, (SIGNAL_FUNC) cmd_op);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  909|      2|	command_bind_irc("deop", NULL, (SIGNAL_FUNC) cmd_deop);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  910|      2|	command_bind_irc("voice", NULL, (SIGNAL_FUNC) cmd_voice);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  911|      2|	command_bind_irc("devoice", NULL, (SIGNAL_FUNC) cmd_devoice);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  912|      2|	command_bind_irc("mode", NULL, (SIGNAL_FUNC) cmd_mode);
  ------------------
  |  |    7|      2|        command_bind_proto(cmd, IRC_PROTOCOL, section, signal)
  |  |  ------------------
  |  |  |  |   81|      2|#define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  |  |  ------------------
  |  |  |  |               #define command_bind_proto(a, b, c, d) command_bind_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, a, b, c, d, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  913|       |
  914|      2|	command_set_options("op", "yes");
  ------------------
  |  |  116|      2|	command_set_options_module(MODULE_NAME, cmd, options)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  915|      2|}
modes.c:mode_set_arg:
  241|  38.1k|{
  242|  38.1k|	g_return_if_fail(str != NULL);
  ------------------
  |  Branch (242:2): [True: 38.1k, False: 0]
  |  Branch (242:2): [True: 38.1k, False: 0]
  |  Branch (242:2): [Folded, False: 38.1k]
  ------------------
  243|  38.1k|	g_return_if_fail(type == '-' || arg != NULL);
  ------------------
  |  Branch (243:2): [True: 3.70k, False: 34.4k]
  |  Branch (243:2): [True: 34.4k, False: 0]
  |  Branch (243:2): [True: 38.1k, False: 0]
  |  Branch (243:2): [Folded, False: 38.1k]
  ------------------
  244|       |
  245|  38.1k|	if (type == '-')
  ------------------
  |  Branch (245:6): [True: 3.70k, False: 34.4k]
  ------------------
  246|  3.70k|		mode_remove(server, str, mode, user);
  247|  34.4k|        else
  248|  34.4k|		mode_add_sorted(server, str, mode, arg, user);
  249|  38.1k|}
modes.c:mode_remove:
  212|   289k|{
  213|   289k|	char *p;
  214|   289k|	int argpos = 0;
  215|       |
  216|  5.20M|	for (p = str->str; *p != '\0' && *p != ' '; p++) {
  ------------------
  |  Branch (216:21): [True: 5.12M, False: 86.1k]
  |  Branch (216:35): [True: 5.00M, False: 118k]
  ------------------
  217|  5.00M|		if (mode == *p) {
  ------------------
  |  Branch (217:7): [True: 84.8k, False: 4.92M]
  ------------------
  218|  84.8k|			g_string_erase(str, (int) (p-str->str), 1);
  219|  84.8k|			if (!user && HAS_MODE_ARG_SET(server, mode))
  ------------------
  |  |   23|  84.6k|	(HAS_MODE_ARG_ALWAYS(server, mode) || \
  |  |  ------------------
  |  |  |  |   17|   169k|   (server->modes[(int)(unsigned char) mode].func == modes_type_a || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (17:5): [True: 0, False: 84.6k]
  |  |  |  |  ------------------
  |  |  |  |   18|  84.6k|    server->modes[(int)(unsigned char) mode].func == modes_type_b || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (18:5): [True: 1.50k, False: 83.1k]
  |  |  |  |  ------------------
  |  |  |  |   19|   169k|    server->modes[(int)(unsigned char) mode].func == modes_type_prefix)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (19:5): [True: 0, False: 83.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   24|  84.6k|	  server->modes[(int)(unsigned char) mode].func == modes_type_c)
  |  |  ------------------
  |  |  |  Branch (24:4): [True: 1.40k, False: 81.7k]
  |  |  ------------------
  ------------------
  |  Branch (219:8): [True: 84.6k, False: 144]
  ------------------
  220|  2.91k|                                node_remove_arg(str, argpos);
  221|  84.8k|			break;
  222|  84.8k|		}
  223|  4.92M|		if (!user && HAS_MODE_ARG_SET(server, *p))
  ------------------
  |  |   23|  4.90M|	(HAS_MODE_ARG_ALWAYS(server, mode) || \
  |  |  ------------------
  |  |  |  |   17|  9.81M|   (server->modes[(int)(unsigned char) mode].func == modes_type_a || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (17:5): [True: 2.51k, False: 4.90M]
  |  |  |  |  ------------------
  |  |  |  |   18|  4.90M|    server->modes[(int)(unsigned char) mode].func == modes_type_b || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (18:5): [True: 92.2k, False: 4.81M]
  |  |  |  |  ------------------
  |  |  |  |   19|  9.81M|    server->modes[(int)(unsigned char) mode].func == modes_type_prefix)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (19:5): [True: 296k, False: 4.51M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   24|  4.90M|	  server->modes[(int)(unsigned char) mode].func == modes_type_c)
  |  |  ------------------
  |  |  |  Branch (24:4): [True: 87.9k, False: 4.42M]
  |  |  ------------------
  ------------------
  |  Branch (223:7): [True: 4.90M, False: 11.3k]
  ------------------
  224|   479k|			argpos++;
  225|  4.92M|	}
  226|   289k|}
modes.c:node_remove_arg:
  188|  2.91k|{
  189|  2.91k|	char *p;
  190|  2.91k|	int startpos;
  191|       |
  192|  2.91k|	startpos = -1;
  193|  3.49M|	for (p = str->str; *p != '\0'; p++) {
  ------------------
  |  Branch (193:21): [True: 3.49M, False: 2.02k]
  ------------------
  194|  3.49M|		if (*p != ' ')
  ------------------
  |  Branch (194:7): [True: 3.47M, False: 18.3k]
  ------------------
  195|  3.47M|			continue;
  196|       |
  197|  18.3k|		if (pos < 0)
  ------------------
  |  Branch (197:7): [True: 889, False: 17.4k]
  ------------------
  198|    889|			break;
  199|  17.4k|		if (pos == 0)
  ------------------
  |  Branch (199:7): [True: 1.74k, False: 15.7k]
  ------------------
  200|  1.74k|			startpos = (int) (p-str->str);
  201|  17.4k|		pos--;
  202|  17.4k|	}
  203|       |
  204|  2.91k|	if (startpos == -1)
  ------------------
  |  Branch (204:6): [True: 1.16k, False: 1.74k]
  ------------------
  205|  1.16k|		return; /* not found */
  206|       |
  207|  1.74k|        g_string_erase(str, startpos, (int) (p-str->str)-startpos);
  208|  1.74k|}
modes.c:mode_add_sorted:
  154|   383k|{
  155|   383k|	char *p;
  156|   383k|	int updating, argpos = 0;
  157|       |
  158|       |	/* check that mode isn't already set */
  159|   383k|	if ((!user && !HAS_MODE_ARG_SET(server, mode)) &&
  ------------------
  |  |   23|   363k|	(HAS_MODE_ARG_ALWAYS(server, mode) || \
  |  |  ------------------
  |  |  |  |   17|   726k|   (server->modes[(int)(unsigned char) mode].func == modes_type_a || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (17:5): [True: 75, False: 363k]
  |  |  |  |  ------------------
  |  |  |  |   18|   363k|    server->modes[(int)(unsigned char) mode].func == modes_type_b || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (18:5): [True: 29.5k, False: 333k]
  |  |  |  |  ------------------
  |  |  |  |   19|   726k|    server->modes[(int)(unsigned char) mode].func == modes_type_prefix)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (19:5): [True: 97, False: 333k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   24|   363k|	  server->modes[(int)(unsigned char) mode].func == modes_type_c)
  |  |  ------------------
  |  |  |  Branch (24:4): [True: 4.76k, False: 329k]
  |  |  ------------------
  ------------------
  |  Branch (159:7): [True: 363k, False: 20.1k]
  ------------------
  160|   329k|	    mode_is_set(str->str, mode))
  ------------------
  |  Branch (160:6): [True: 184k, False: 144k]
  ------------------
  161|   184k|		return;
  162|       |
  163|   198k|	updating = FALSE;
  164|  2.34M|	for (p = str->str; *p != '\0' && *p != ' '; p++) {
  ------------------
  |  Branch (164:21): [True: 2.31M, False: 26.6k]
  |  Branch (164:35): [True: 2.31M, False: 1.00k]
  ------------------
  165|  2.31M|		if (mode < *p)
  ------------------
  |  Branch (165:7): [True: 125k, False: 2.18M]
  ------------------
  166|   125k|			break;
  167|  2.18M|		if (mode == *p) {
  ------------------
  |  Branch (167:7): [True: 45.7k, False: 2.14M]
  ------------------
  168|  45.7k|                        updating = TRUE;
  169|  45.7k|			break;
  170|  45.7k|		}
  171|  2.14M|		if (!user && HAS_MODE_ARG_SET(server, *p))
  ------------------
  |  |   23|  2.02M|	(HAS_MODE_ARG_ALWAYS(server, mode) || \
  |  |  ------------------
  |  |  |  |   17|  4.04M|   (server->modes[(int)(unsigned char) mode].func == modes_type_a || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (17:5): [True: 1.35k, False: 2.01M]
  |  |  |  |  ------------------
  |  |  |  |   18|  2.02M|    server->modes[(int)(unsigned char) mode].func == modes_type_b || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (18:5): [True: 4.64k, False: 2.01M]
  |  |  |  |  ------------------
  |  |  |  |   19|  4.04M|    server->modes[(int)(unsigned char) mode].func == modes_type_prefix)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (19:5): [True: 103k, False: 1.91M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   24|  2.02M|	  server->modes[(int)(unsigned char) mode].func == modes_type_c)
  |  |  ------------------
  |  |  |  Branch (24:4): [True: 1.86k, False: 1.91M]
  |  |  ------------------
  ------------------
  |  Branch (171:7): [True: 2.02M, False: 122k]
  ------------------
  172|   111k|			argpos++;
  173|  2.14M|	}
  174|       |
  175|       |	/* .. GLib shouldn't fail when inserting at the end of the string */
  176|   198k|	if (!updating) {
  ------------------
  |  Branch (176:6): [True: 152k, False: 45.7k]
  ------------------
  177|   152k|		if (*p == '\0')
  ------------------
  |  Branch (177:7): [True: 26.6k, False: 126k]
  ------------------
  178|   152k|			g_string_append_c(str, mode);
  179|   126k|		else
  180|   126k|			g_string_insert_c(str, (int) (p-str->str), mode);
  181|   152k|	}
  182|   198k|	if (arg != NULL)
  ------------------
  |  Branch (182:6): [True: 34.4k, False: 164k]
  ------------------
  183|  34.4k|                mode_add_arg(str, argpos, updating, arg);
  184|   198k|}
modes.c:mode_add_arg:
  127|  34.4k|{
  128|  34.4k|	char *p;
  129|       |
  130|  5.48M|	for (p = str->str; *p != '\0'; p++) {
  ------------------
  |  Branch (130:21): [True: 5.47M, False: 4.59k]
  ------------------
  131|  5.47M|		if (*p != ' ')
  ------------------
  |  Branch (131:7): [True: 5.42M, False: 55.1k]
  ------------------
  132|  5.42M|			continue;
  133|       |
  134|  55.1k|		if (pos == 0)
  ------------------
  |  Branch (134:7): [True: 29.8k, False: 25.3k]
  ------------------
  135|  29.8k|			break;
  136|  25.3k|		pos--;
  137|  25.3k|	}
  138|       |
  139|  34.4k|	pos = (int) (p-str->str);
  140|  34.4k|	if (updating && *p != '\0') {
  ------------------
  |  Branch (140:6): [True: 30.0k, False: 4.38k]
  |  Branch (140:18): [True: 29.4k, False: 615]
  ------------------
  141|       |		/* remove the old argument */
  142|  29.4k|                p++;
  143|  90.8k|		while (*p != '\0' && *p != ' ') p++;
  ------------------
  |  Branch (143:10): [True: 86.0k, False: 4.74k]
  |  Branch (143:24): [True: 61.3k, False: 24.6k]
  ------------------
  144|  29.4k|                g_string_erase(str, pos, (int) (p-str->str)-pos);
  145|  29.4k|	}
  146|       |
  147|  34.4k|	g_string_insert_c(str, pos, ' ');
  148|  34.4k|	g_string_insert(str, pos+1, arg);
  149|  34.4k|}
modes.c:mode_set:
  230|   634k|{
  231|   634k|	g_return_if_fail(str != NULL);
  ------------------
  |  Branch (231:2): [True: 634k, False: 0]
  |  Branch (231:2): [True: 634k, False: 0]
  |  Branch (231:2): [Folded, False: 634k]
  ------------------
  232|       |
  233|   634k|	if (type == '-')
  ------------------
  |  Branch (233:6): [True: 285k, False: 349k]
  ------------------
  234|   285k|		mode_remove(server, str, mode, user);
  235|   349k|        else
  236|   349k|		mode_add_sorted(server, str, mode, NULL, user);
  237|   634k|}
modes.c:nick_mode_change:
   37|  28.8k|{
   38|  28.8k|	NICK_REC *nickrec;
   39|  28.8k|	char modestr[2], typestr[2];
   40|       |
   41|  28.8k|	g_return_if_fail(IS_IRC_CHANNEL(channel));
  ------------------
  |  Branch (41:2): [True: 28.8k, False: 0]
  |  Branch (41:2): [True: 28.8k, False: 0]
  |  Branch (41:2): [True: 28.8k, False: 0]
  |  Branch (41:2): [Folded, False: 28.8k]
  ------------------
   42|  28.8k|	g_return_if_fail(nick != NULL);
  ------------------
  |  Branch (42:2): [True: 28.8k, False: 0]
  |  Branch (42:2): [True: 28.8k, False: 0]
  |  Branch (42:2): [Folded, False: 28.8k]
  ------------------
   43|       |
   44|  28.8k|	nickrec = nicklist_find(CHANNEL(channel), nick);
  ------------------
  |  |    8|  28.8k|	MODULE_CHECK_CAST_MODULE(channel, CHANNEL_REC, type, \
  |  |  ------------------
  |  |  |  |   67|  28.8k|	((cast *) module_check_cast_module(object, \
  |  |  |  |   68|  28.8k|				offsetof(cast, type_field), module, id))
  |  |  ------------------
  |  |    9|  28.8k|			      "WINDOW ITEM TYPE", "CHANNEL")
  ------------------
   45|  28.8k|	if (nickrec == NULL) return; /* No /names list got yet */
  ------------------
  |  Branch (45:6): [True: 22.5k, False: 6.28k]
  ------------------
   46|       |
   47|  6.28k|	if (mode == '@') nickrec->op = type == '+';
  ------------------
  |  Branch (47:6): [True: 2.91k, False: 3.36k]
  ------------------
   48|  3.36k|	else if (mode == '+') nickrec->voice = type == '+';
  ------------------
  |  Branch (48:11): [True: 338, False: 3.02k]
  ------------------
   49|  3.02k|	else if (mode == '%') nickrec->halfop = type == '+';
  ------------------
  |  Branch (49:11): [True: 1.77k, False: 1.25k]
  ------------------
   50|  6.28k|	if (channel->server->prefix[(unsigned char) mode] != '\0') {
  ------------------
  |  Branch (50:6): [True: 6.28k, False: 0]
  ------------------
   51|  6.28k|		if (type == '+')
  ------------------
  |  Branch (51:7): [True: 2.66k, False: 3.61k]
  ------------------
   52|  2.66k|			prefix_add(nickrec->prefixes, mode, (SERVER_REC *) channel->server);
   53|  3.61k|		else
   54|  3.61k|			prefix_del(nickrec->prefixes, mode);
   55|  6.28k|	}
   56|       |
   57|  6.28k|	modestr[0] = mode; modestr[1] = '\0';
   58|  6.28k|	typestr[0] = type; typestr[1] = '\0';
   59|  6.28k|	signal_emit("nick mode changed", 5,
   60|  6.28k|		    channel, nickrec, setby, modestr, typestr);
   61|  6.28k|}
modes.c:mode_is_set:
  115|   329k|{
  116|   329k|	char *end, *pos;
  117|       |
  118|   329k|	g_return_val_if_fail(str != NULL, FALSE);
  ------------------
  |  Branch (118:2): [True: 329k, False: 0]
  |  Branch (118:2): [True: 329k, False: 0]
  |  Branch (118:2): [Folded, False: 329k]
  ------------------
  119|       |
  120|   329k|	end = strchr(str, ' ');
  121|   329k|	pos = strchr(str, mode);
  122|   329k|	return pos != NULL && (end == NULL || pos < end);
  ------------------
  |  Branch (122:9): [True: 188k, False: 140k]
  |  Branch (122:25): [True: 67.7k, False: 120k]
  |  Branch (122:40): [True: 117k, False: 3.68k]
  ------------------
  123|   329k|}
modes.c:event_user_mode:
  469|    689|{
  470|    689|	char *params, *nick, *mode;
  471|       |
  472|    689|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (472:2): [True: 689, False: 0]
  |  Branch (472:2): [True: 689, False: 0]
  |  Branch (472:2): [Folded, False: 689]
  ------------------
  473|       |
  474|    689|	params = event_get_params(data, 3, NULL, &nick, &mode);
  475|    689|	parse_user_mode(server, mode);
  476|       |
  477|    689|	g_free(params);
  478|    689|}
modes.c:parse_user_mode:
  453|  2.33k|{
  454|  2.33k|	char *newmode, *oldmode;
  455|       |
  456|  2.33k|	g_return_if_fail(IS_IRC_SERVER(server));
  ------------------
  |  Branch (456:2): [True: 2.33k, False: 0]
  |  Branch (456:2): [True: 2.33k, False: 0]
  |  Branch (456:2): [True: 2.33k, False: 0]
  |  Branch (456:2): [Folded, False: 2.33k]
  ------------------
  457|  2.33k|	g_return_if_fail(modestr != NULL);
  ------------------
  |  Branch (457:2): [True: 2.33k, False: 0]
  |  Branch (457:2): [True: 2.33k, False: 0]
  |  Branch (457:2): [Folded, False: 2.33k]
  ------------------
  458|       |
  459|  2.33k|	newmode = modes_join(NULL, server->usermode, modestr, FALSE);
  460|  2.33k|	oldmode = server->usermode;
  461|  2.33k|	server->usermode = newmode;
  462|  2.33k|	server->server_operator = ((strchr(newmode, 'o') != NULL) || (strchr(newmode, 'O') != NULL));
  ------------------
  |  Branch (462:29): [True: 77, False: 2.25k]
  |  Branch (462:63): [True: 0, False: 2.25k]
  ------------------
  463|       |
  464|  2.33k|	signal_emit("user mode changed", 2, server, oldmode);
  465|  2.33k|	g_free_not_null(oldmode);
  ------------------
  |  |   64|  2.33k|#define g_free_not_null(a) g_free(a)
  ------------------
  466|  2.33k|}
modes.c:event_unaway:
  522|  11.8k|{
  523|  11.8k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (523:2): [True: 11.8k, False: 0]
  |  Branch (523:2): [True: 11.8k, False: 0]
  |  Branch (523:2): [Folded, False: 11.8k]
  ------------------
  524|       |
  525|  11.8k|	server->usermode_away = FALSE;
  526|       |	g_free_and_null(server->away_reason);
  ------------------
  |  |   67|  11.8k|	G_STMT_START { \
  |  |   68|  11.8k|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 0, False: 11.8k]
  |  |  ------------------
  |  |   69|  11.8k|	} G_STMT_END
  ------------------
  |  Branch (526:2): [Folded, False: 11.8k]
  ------------------
  527|  11.8k|	signal_emit("away mode changed", 1, server);
  528|  11.8k|}
modes.c:event_away:
  514|  10.3k|{
  515|  10.3k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (515:2): [True: 10.3k, False: 0]
  |  Branch (515:2): [True: 10.3k, False: 0]
  |  Branch (515:2): [Folded, False: 10.3k]
  ------------------
  516|       |
  517|  10.3k|	server->usermode_away = TRUE;
  518|  10.3k|	signal_emit("away mode changed", 1, server);
  519|  10.3k|}
modes.c:event_oper:
  505|  1.16k|{
  506|  1.16k|	const char *opermode;
  507|       |
  508|  1.16k|	opermode = settings_get_str("opermode");
  509|  1.16k|        if (*opermode != '\0')
  ------------------
  |  Branch (509:13): [True: 0, False: 1.16k]
  ------------------
  510|      0|		irc_send_cmdv(server, "MODE %s %s", server->nick, opermode);
  511|  1.16k|}
modes.c:event_mode:
  482|  35.9k|{
  483|  35.9k|	IRC_CHANNEL_REC *chanrec;
  484|  35.9k|	char *params, *channel, *mode;
  485|       |
  486|  35.9k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (486:2): [True: 35.9k, False: 0]
  |  Branch (486:2): [True: 35.9k, False: 0]
  |  Branch (486:2): [Folded, False: 35.9k]
  ------------------
  487|       |
  488|  35.9k|	params = event_get_params(data, 2 | PARAM_FLAG_GETREST,
  ------------------
  |  |  126|  35.9k|#define PARAM_FLAG_GETREST 0x00002000
  ------------------
  489|  35.9k|				  &channel, &mode);
  490|       |
  491|  35.9k|	if (!server_ischannel(SERVER(server), channel)) {
  ------------------
  |  |   22|  35.9k|	((server)->ischannel(server, channel))
  ------------------
  |  Branch (491:6): [True: 1.64k, False: 34.2k]
  ------------------
  492|       |		/* user mode change */
  493|  1.64k|		parse_user_mode(server, mode);
  494|  34.2k|	} else {
  495|       |		/* channel mode change */
  496|  34.2k|		chanrec = irc_channel_find(server, channel);
  ------------------
  |  |   57|  34.2k|	IRC_CHANNEL(channel_find(SERVER(server), name))
  |  |  ------------------
  |  |  |  |    9|  34.2k|	PROTO_CHECK_CAST(CHANNEL(channel), IRC_CHANNEL_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  34.2k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |   31|  34.2k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  497|  34.2k|		if (chanrec != NULL)
  ------------------
  |  Branch (497:7): [True: 21.0k, False: 13.1k]
  ------------------
  498|  21.0k|			parse_channel_modes(chanrec, nick, mode, TRUE);
  499|  34.2k|	}
  500|       |
  501|  35.9k|	g_free(params);
  502|  35.9k|}

netsplit_find:
  184|   153k|{
  185|   153k|	NETSPLIT_REC *rec;
  186|       |
  187|   153k|	g_return_val_if_fail(IS_IRC_SERVER(server), NULL);
  ------------------
  |  Branch (187:2): [True: 153k, False: 0]
  |  Branch (187:2): [True: 153k, False: 0]
  |  Branch (187:2): [True: 153k, False: 0]
  |  Branch (187:2): [Folded, False: 153k]
  ------------------
  188|   153k|	g_return_val_if_fail(nick != NULL, NULL);
  ------------------
  |  Branch (188:2): [True: 47.2k, False: 105k]
  |  Branch (188:2): [True: 47.2k, False: 105k]
  |  Branch (188:2): [Folded, False: 47.2k]
  ------------------
  189|       |
  190|  47.2k|	rec = g_hash_table_lookup(server->splits, nick);
  191|  47.2k|	if (rec == NULL) return NULL;
  ------------------
  |  Branch (191:6): [True: 47.2k, False: 0]
  ------------------
  192|       |
  193|      0|	return (address == NULL ||
  ------------------
  |  Branch (193:10): [True: 0, False: 0]
  ------------------
  194|      0|		g_ascii_strcasecmp(rec->address, address) == 0) ? rec : NULL;
  ------------------
  |  Branch (194:3): [True: 0, False: 0]
  ------------------
  195|  47.2k|}
quitmsg_is_split:
  223|  4.39k|{
  224|  4.39k|	const char *host2, *p;
  225|  4.39k|	int prev, host1_dot, host2_dot;
  226|       |
  227|  4.39k|	g_return_val_if_fail(msg != NULL, FALSE);
  ------------------
  |  Branch (227:2): [True: 4.39k, False: 0]
  |  Branch (227:2): [True: 4.39k, False: 0]
  |  Branch (227:2): [Folded, False: 4.39k]
  ------------------
  228|       |
  229|       |	/* NOTE: there used to be some paranoia checks (some older IRC
  230|       |	   clients have even more), but they're pretty useless nowadays,
  231|       |	   since IRC server prefixes the quit message with a space if it
  232|       |	   looks like a netsplit message.
  233|       |
  234|       |	   So, the check is currently just:
  235|       |             - host1.domain1 host2.domain2
  236|       |             - top-level domains have to be 2+ characters long,
  237|       |	       containing only alphabets
  238|       |	     - only 1 space
  239|       |	     - no double-dots (".." - probably useless check)
  240|       |	     - hosts/domains can't start or end with a dot
  241|       |             - the two hosts can't be identical (probably useless check)
  242|       |	     - can't contain ':' or '/' chars (some servers allow URLs)
  243|       |	   */
  244|  4.39k|	host2 = NULL;
  245|  4.39k|	prev = '\0';
  246|  4.39k|	host1_dot = host2_dot = 0;
  247|   170k|	while (*msg != '\0') {
  ------------------
  |  Branch (247:9): [True: 166k, False: 3.48k]
  ------------------
  248|   166k|		if (*msg == ' ') {
  ------------------
  |  Branch (248:7): [True: 755, False: 165k]
  ------------------
  249|    755|			if (prev == '.' || prev == '\0') {
  ------------------
  |  Branch (249:8): [True: 8, False: 747]
  |  Branch (249:23): [True: 26, False: 721]
  ------------------
  250|       |				/* domains can't end with '.', space can't
  251|       |				   be the first character in msg. */
  252|     34|				return FALSE;
  253|     34|			}
  254|    721|			if (host2 != NULL)
  ------------------
  |  Branch (254:8): [True: 7, False: 714]
  ------------------
  255|      7|				return FALSE; /* only one space allowed */
  256|    714|			if (!host1_dot)
  ------------------
  |  Branch (256:8): [True: 487, False: 227]
  ------------------
  257|    487|                                return FALSE; /* host1 didn't have domain */
  258|    227|			host2 = msg + 1;
  259|   165k|		} else if (*msg == '.') {
  ------------------
  |  Branch (259:14): [True: 450, False: 165k]
  ------------------
  260|    450|			if (prev == '\0' || prev == ' ' || prev == '.') {
  ------------------
  |  Branch (260:8): [True: 5, False: 445]
  |  Branch (260:24): [True: 0, False: 445]
  |  Branch (260:39): [True: 4, False: 441]
  ------------------
  261|       |				/* domains can't start with '.'
  262|       |				   and can't have ".." */
  263|      9|				return FALSE;
  264|      9|			}
  265|       |
  266|    441|			if (host2 != NULL)
  ------------------
  |  Branch (266:8): [True: 178, False: 263]
  ------------------
  267|    178|				host2_dot = TRUE;
  268|    263|			else
  269|    263|                                host1_dot = TRUE;
  270|   165k|		} else if (*msg == ':' || *msg == '/')
  ------------------
  |  Branch (270:14): [True: 0, False: 165k]
  |  Branch (270:29): [True: 371, False: 165k]
  ------------------
  271|    371|			return FALSE;
  272|       |
  273|   165k|		prev = *msg;
  274|   165k|		msg++;
  275|   165k|	}
  276|       |
  277|  3.48k|	if (!host2_dot || prev == '.')
  ------------------
  |  Branch (277:6): [True: 3.30k, False: 177]
  |  Branch (277:20): [True: 0, False: 177]
  ------------------
  278|  3.30k|                return FALSE;
  279|       |
  280|       |        /* top-domain1 must be 2+ chars long and contain only alphabets */
  281|    177|	p = host2-1;
  282|    685|	while (p[-1] != '.') {
  ------------------
  |  Branch (282:9): [True: 513, False: 172]
  ------------------
  283|    513|		if (!i_isalpha(p[-1]))
  ------------------
  |  |   75|    513|#define i_isalpha(x) isalpha((int) (unsigned char) (x))
  ------------------
  |  Branch (283:7): [True: 5, False: 508]
  ------------------
  284|      5|                        return FALSE;
  285|    508|		p--;
  286|    508|	}
  287|    172|	if (host2-p-1 < 2) return FALSE;
  ------------------
  |  Branch (287:6): [True: 4, False: 168]
  ------------------
  288|       |
  289|       |        /* top-domain2 must be 2+ chars long and contain only alphabets */
  290|    168|	p = host2+strlen(host2);
  291|    168|	while (p[-1] != '.') {
  ------------------
  |  Branch (291:9): [True: 168, False: 0]
  ------------------
  292|    168|		if (!i_isalpha(p[-1]))
  ------------------
  |  |   75|    168|#define i_isalpha(x) isalpha((int) (unsigned char) (x))
  ------------------
  |  Branch (292:7): [True: 168, False: 0]
  ------------------
  293|    168|                        return FALSE;
  294|      0|		p--;
  295|      0|	}
  296|      0|	if (strlen(p) < 2) return FALSE;
  ------------------
  |  Branch (296:6): [True: 0, False: 0]
  ------------------
  297|       |
  298|      0|        return TRUE;
  299|      0|}
netsplit_init:
  424|      2|{
  425|      2|	split_tag = g_timeout_add(1000, (GSourceFunc) split_check_old, NULL);
  426|      2|	signal_add_first("event join", (SIGNAL_FUNC) event_join);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  427|      2|	signal_add_last("event join", (SIGNAL_FUNC) event_join_last);
  ------------------
  |  |   25|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define SIGNAL_PRIORITY_LOW    	100
  |  |  ------------------
  ------------------
  428|      2|	signal_add_first("event quit", (SIGNAL_FUNC) event_quit);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  429|      2|	signal_add("event nick", (SIGNAL_FUNC) event_nick);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  430|       |	signal_add("server disconnected", (SIGNAL_FUNC) sig_disconnected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  431|      2|}
netsplit.c:event_join:
  310|   153k|{
  311|   153k|	NETSPLIT_REC *rec;
  312|       |
  313|   153k|	if (nick == NULL)
  ------------------
  |  Branch (313:6): [True: 105k, False: 47.2k]
  ------------------
  314|   105k|		return;
  315|       |
  316|       |	/* check if split is over */
  317|  47.2k|	rec = g_hash_table_lookup(server->splits, nick);
  318|       |
  319|  47.2k|	if (rec != NULL && g_ascii_strcasecmp(rec->address, address) == 0) {
  ------------------
  |  Branch (319:6): [True: 0, False: 47.2k]
  |  Branch (319:21): [True: 0, False: 0]
  ------------------
  320|       |		/* yep, looks like it is. for same people that had the same
  321|       |		   splitted servers set the timeout to one minute.
  322|       |
  323|       |		   .. if the user just changed server, she can't use the
  324|       |		   same nick (unless the server is broken) so don't bother
  325|       |		   checking that the nick's server matches the split. */
  326|      0|		g_hash_table_foreach(server->splits,
  327|      0|				     (GHFunc) split_set_timeout, rec);
  328|      0|	}
  329|  47.2k|}
netsplit.c:event_join_last:
  335|   153k|{
  336|   153k|	NETSPLIT_REC *rec;
  337|       |
  338|   153k|	if (nick == NULL)
  ------------------
  |  Branch (338:6): [True: 105k, False: 47.2k]
  ------------------
  339|   105k|		return;
  340|       |
  341|  47.2k|	rec = g_hash_table_lookup(server->splits, nick);
  342|  47.2k|	if (rec != NULL) {
  ------------------
  |  Branch (342:6): [True: 0, False: 47.2k]
  ------------------
  343|      0|		g_hash_table_remove(server->splits, rec->nick);
  344|      0|		netsplit_destroy(server, rec);
  345|      0|	}
  346|  47.2k|}
netsplit.c:event_quit:
  350|  2.99k|{
  351|  2.99k|	g_return_if_fail(data != NULL);
  ------------------
  |  Branch (351:2): [True: 2.99k, False: 0]
  |  Branch (351:2): [True: 2.99k, False: 0]
  |  Branch (351:2): [Folded, False: 2.99k]
  ------------------
  352|       |
  353|  2.99k|	if (*data == ':') data++;
  ------------------
  |  Branch (353:6): [True: 24, False: 2.97k]
  ------------------
  354|  2.99k|	if (g_ascii_strcasecmp(nick, server->nick) != 0 && quitmsg_is_split(data)) {
  ------------------
  |  Branch (354:6): [True: 1.39k, False: 1.59k]
  |  Branch (354:53): [True: 0, False: 1.39k]
  ------------------
  355|       |		/* netsplit! */
  356|      0|		netsplit_add(server, nick, address, data);
  357|      0|	}
  358|  2.99k|}
netsplit.c:event_nick:
  361|  18.2k|{
  362|  18.2k|	NETSPLIT_REC *rec;
  363|  18.2k|	char *params, *nick;
  364|       |
  365|  18.2k|	params = event_get_params(data, 1, &nick);
  366|       |
  367|       |	/* remove nick from split list when somebody changed
  368|       |	   nick to this one during split */
  369|  18.2k|        rec = g_hash_table_lookup(server->splits, nick);
  370|  18.2k|	if (rec != NULL) {
  ------------------
  |  Branch (370:6): [True: 0, False: 18.2k]
  ------------------
  371|      0|	        g_hash_table_remove(server->splits, rec->nick);
  372|      0|		netsplit_destroy(server, rec);
  373|      0|	}
  374|       |
  375|  18.2k|        g_free(params);
  376|  18.2k|}
netsplit.c:sig_disconnected:
  379|  29.4k|{
  380|  29.4k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (380:2): [True: 29.4k, False: 0]
  |  Branch (380:2): [True: 29.4k, False: 0]
  |  Branch (380:2): [Folded, False: 29.4k]
  ------------------
  381|       |
  382|  29.4k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (382:6): [True: 0, False: 29.4k]
  ------------------
  383|      0|		return;
  384|       |
  385|  29.4k|	if (server->splits == NULL)
  ------------------
  |  Branch (385:6): [True: 0, False: 29.4k]
  ------------------
  386|      0|		return;
  387|       |
  388|  29.4k|	g_hash_table_foreach(server->splits,
  389|  29.4k|			     (GHFunc) netsplit_destroy_hash, server);
  390|  29.4k|	g_hash_table_destroy(server->splits);
  391|       |        server->splits = NULL;
  392|  29.4k|}

sasl_init:
  411|      2|{
  412|      2|	settings_add_bool("server", "sasl_disconnect_on_failure", TRUE);
  ------------------
  |  |   97|      2|	settings_add_bool_module(MODULE_NAME, section, key, def)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  ------------------
  413|       |
  414|      2|	signal_add_first("event 001", (SIGNAL_FUNC) sig_sasl_over);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  415|       |	/* this event can get us connected on broken ircds, see irc-servers.c */
  416|      2|	signal_add_first("event 375", (SIGNAL_FUNC) sig_sasl_over);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  417|      2|	signal_add_first("server cap ack sasl", (SIGNAL_FUNC) sasl_start);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  418|      2|	signal_add_first("server cap end", (SIGNAL_FUNC) sig_sasl_over);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  419|      2|	signal_add_first("event authenticate", (SIGNAL_FUNC) sasl_step);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  420|      2|	signal_add_first("event 903", (SIGNAL_FUNC) sasl_success);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  421|      2|	signal_add_first("event 902", (SIGNAL_FUNC) sasl_fail);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  422|      2|	signal_add_first("event 904", (SIGNAL_FUNC) sasl_fail);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  423|      2|	signal_add_first("event 905", (SIGNAL_FUNC) sasl_fail);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  424|      2|	signal_add_first("event 906", (SIGNAL_FUNC) sasl_fail);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  425|      2|	signal_add_first("event 907", (SIGNAL_FUNC) sasl_already);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  426|       |	signal_add_first("server disconnected", (SIGNAL_FUNC) sasl_disconnected);
  ------------------
  |  |   23|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    6|      2|#define SIGNAL_PRIORITY_HIGH	-100
  |  |  ------------------
  ------------------
  427|      2|}
sasl.c:sig_sasl_over:
  384|  13.3k|{
  385|  13.3k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  13.3k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  13.3k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  13.3k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 13.3k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  13.3k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (385:6): [True: 0, False: 13.3k]
  ------------------
  386|      0|		return;
  387|       |
  388|       |	/* The negotiation has now been terminated, if we didn't manage to
  389|       |	 * authenticate successfully with the server just disconnect. */
  390|  13.3k|	if (!server->sasl_success &&
  ------------------
  |  Branch (390:6): [True: 13.3k, False: 53]
  ------------------
  391|  13.3k|	    server->connrec->sasl_mechanism != SASL_MECHANISM_NONE) {
  ------------------
  |  Branch (391:6): [True: 0, False: 13.3k]
  ------------------
  392|      0|		if (server->cap_supported == NULL ||
  ------------------
  |  Branch (392:7): [True: 0, False: 0]
  ------------------
  393|      0|		    !g_hash_table_lookup_extended(server->cap_supported, "sasl", NULL, NULL)) {
  ------------------
  |  Branch (393:7): [True: 0, False: 0]
  ------------------
  394|      0|			signal_emit("server sasl failure", 2, server, "The server did not offer SASL");
  395|      0|		}
  396|       |
  397|      0|		if (settings_get_bool("sasl_disconnect_on_failure")) {
  ------------------
  |  Branch (397:7): [True: 0, False: 0]
  ------------------
  398|       |			/* We can't use server_disconnect() here because we'd end up
  399|       |			 * freeing the 'server' object and be guilty of a slew of UaF. */
  400|      0|			server->connection_lost = TRUE;
  401|       |			/* By setting connection_lost we make sure the communication is
  402|       |			 * halted and when the control goes back to irc_parse_incoming
  403|       |			 * the server object is safely destroyed. */
  404|      0|			signal_stop();
  405|      0|		}
  406|      0|	}
  407|       |
  408|  13.3k|}
sasl.c:sasl_start:
   68|    357|{
   69|    357|	IRC_SERVER_CONNECT_REC *conn;
   70|       |
   71|    357|	sasl_timeout_stop(server);
   72|       |
   73|    357|	conn = server->connrec;
   74|       |
   75|    357|	switch (conn->sasl_mechanism) {
  ------------------
  |  Branch (75:10): [True: 0, False: 357]
  ------------------
   76|      0|		case SASL_MECHANISM_PLAIN:
  ------------------
  |  Branch (76:3): [True: 0, False: 357]
  ------------------
   77|      0|			irc_send_cmd_now(server, "AUTHENTICATE PLAIN");
   78|      0|			break;
   79|       |
   80|      0|		case SASL_MECHANISM_EXTERNAL:
  ------------------
  |  Branch (80:3): [True: 0, False: 357]
  ------------------
   81|      0|			irc_send_cmd_now(server, "AUTHENTICATE EXTERNAL");
   82|      0|			break;
   83|       |
   84|      0|	        case SASL_MECHANISM_SCRAM_SHA_1:
  ------------------
  |  Branch (84:10): [True: 0, False: 357]
  ------------------
   85|      0|		        irc_send_cmd_now(server, "AUTHENTICATE SCRAM-SHA-1");
   86|      0|		        break;
   87|       |
   88|      0|	        case SASL_MECHANISM_SCRAM_SHA_256:
  ------------------
  |  Branch (88:10): [True: 0, False: 357]
  ------------------
   89|      0|		        irc_send_cmd_now(server, "AUTHENTICATE SCRAM-SHA-256");
   90|      0|		        break;
   91|       |
   92|      0|	        case SASL_MECHANISM_SCRAM_SHA_512:
  ------------------
  |  Branch (92:10): [True: 0, False: 357]
  ------------------
   93|      0|		        irc_send_cmd_now(server, "AUTHENTICATE SCRAM-SHA-512");
   94|      0|		        break;
   95|       |
   96|      0|	        case SASL_MECHANISM_MAX:
  ------------------
  |  Branch (96:10): [True: 0, False: 357]
  ------------------
   97|      0|		        signal_emit("server sasl failure", 2, server,
   98|      0|		                    "Irssi: Unsupported SASL mechanism");
   99|      0|		        irc_cap_finish_negotiation(server);
  100|      0|		        return;
  101|    357|	}
  102|    357|	server->sasl_timeout = g_timeout_add(SASL_TIMEOUT, (GSourceFunc) sasl_timeout, server);
  ------------------
  |  |   42|    357|#define SASL_TIMEOUT (20 * 1000) /* ms */
  ------------------
  103|    357|}
sasl.c:sasl_timeout_stop:
   59|  38.3k|{
   60|       |	/* Stop any pending timeout, if any */
   61|  38.3k|	if (server->sasl_timeout != 0) {
  ------------------
  |  Branch (61:6): [True: 5.20k, False: 33.1k]
  ------------------
   62|  5.20k|		g_source_remove(server->sasl_timeout);
   63|  5.20k|		server->sasl_timeout = 0;
   64|  5.20k|	}
   65|  38.3k|}
sasl.c:sasl_step:
  353|  4.92k|{
  354|  4.92k|	GString *req = NULL;
  355|       |
  356|  4.92k|	sasl_timeout_stop(server);
  357|       |
  358|  4.92k|	if (!sasl_reassemble_incoming(server, data, &req)) {
  ------------------
  |  Branch (358:6): [True: 81, False: 4.84k]
  ------------------
  359|     81|		sasl_step_fail(server);
  360|     81|		return;
  361|     81|	}
  362|       |
  363|  4.84k|	if (req != NULL) {
  ------------------
  |  Branch (363:6): [True: 3.88k, False: 965]
  ------------------
  364|  3.88k|		sasl_step_complete(server, req);
  365|  3.88k|		g_string_free(req, TRUE);
  366|  3.88k|	}
  367|       |
  368|       |	/* We expect a response within a reasonable time */
  369|  4.84k|	server->sasl_timeout = g_timeout_add(SASL_TIMEOUT, (GSourceFunc) sasl_timeout, server);
  ------------------
  |  |   42|  4.84k|#define SASL_TIMEOUT (20 * 1000) /* ms */
  ------------------
  370|  4.84k|}
sasl.c:sasl_reassemble_incoming:
  157|  4.92k|{
  158|  4.92k|	GString *enc_req;
  159|  4.92k|	gsize fragment_len;
  160|       |
  161|  4.92k|	fragment_len = strlen(fragment);
  162|       |
  163|       |	/* Check if there is an existing fragment to prepend. */
  164|  4.92k|	if (server->sasl_buffer != NULL) {
  ------------------
  |  Branch (164:6): [True: 307, False: 4.61k]
  ------------------
  165|    307|		if (g_strcmp0("+", fragment) == 0) {
  ------------------
  |  Branch (165:7): [True: 0, False: 307]
  ------------------
  166|      0|			enc_req = server->sasl_buffer;
  167|    307|		} else {
  168|    307|			enc_req = g_string_append_len(server->sasl_buffer, fragment, fragment_len);
  169|    307|		}
  170|    307|		server->sasl_buffer = NULL;
  171|  4.61k|	} else {
  172|  4.61k|		enc_req = g_string_new_len(fragment, fragment_len);
  173|  4.61k|	}
  174|       |
  175|       |	/*
  176|       |	 * Fail authentication with this server. They have sent too much data.
  177|       |	 */
  178|  4.92k|	if (enc_req->len > AUTHENTICATE_MAX_SIZE) {
  ------------------
  |  |   40|  4.92k|#define AUTHENTICATE_MAX_SIZE 8192 /* bytes */
  ------------------
  |  Branch (178:6): [True: 81, False: 4.84k]
  ------------------
  179|     81|		g_string_free(enc_req, TRUE);
  180|     81|		return FALSE;
  181|     81|	}
  182|       |
  183|       |	/*
  184|       |	 * If the the request is exactly the chunk size, this is a fragment
  185|       |	 * and more data is expected.
  186|       |	 */
  187|  4.84k|	if (fragment_len == AUTHENTICATE_CHUNK_SIZE) {
  ------------------
  |  |   33|  4.84k|#define AUTHENTICATE_CHUNK_SIZE 400 /* bytes */
  ------------------
  |  Branch (187:6): [True: 965, False: 3.88k]
  ------------------
  188|    965|		server->sasl_buffer = enc_req;
  189|    965|		return TRUE;
  190|    965|	}
  191|       |
  192|  3.88k|	if (enc_req->len == 1 && *enc_req->str == '+') {
  ------------------
  |  Branch (192:6): [True: 0, False: 3.88k]
  |  Branch (192:27): [True: 0, False: 0]
  ------------------
  193|      0|		*decoded = g_string_new_len("", 0);
  194|  3.88k|	} else {
  195|  3.88k|		gsize dec_len;
  196|  3.88k|		gint state = 0;
  197|  3.88k|		guint save = 0;
  198|       |
  199|       |		/* Since we're not going to use the enc_req GString anymore we
  200|       |		 * can perform the decoding in place. */
  201|  3.88k|		dec_len = g_base64_decode_step(enc_req->str, enc_req->len,
  202|  3.88k|					       (guchar *)enc_req->str,
  203|  3.88k|					       &state, &save);
  204|       |		/* A copy of the data is made when the GString is created. */
  205|  3.88k|		*decoded = g_string_new_len(enc_req->str, dec_len);
  206|  3.88k|	}
  207|       |
  208|  3.88k|	g_string_free(enc_req, TRUE);
  209|       |	return TRUE;
  210|  4.84k|}
sasl.c:sasl_step_fail:
  343|     81|{
  344|     81|	irc_send_cmd_now(server, "AUTHENTICATE *");
  345|     81|	irc_cap_finish_negotiation(server);
  346|       |
  347|     81|	sasl_timeout_stop(server);
  348|       |
  349|     81|	signal_emit("server sasl failure", 2, server, "The server sent an invalid payload");
  350|     81|}
sasl.c:sasl_step_complete:
  296|  3.88k|{
  297|  3.88k|	IRC_SERVER_CONNECT_REC *conn;
  298|  3.88k|	GString *resp;
  299|       |
  300|  3.88k|	conn = server->connrec;
  301|       |
  302|  3.88k|	switch (conn->sasl_mechanism) {
  ------------------
  |  Branch (302:10): [True: 0, False: 3.88k]
  ------------------
  303|      0|		case SASL_MECHANISM_PLAIN:
  ------------------
  |  Branch (303:3): [True: 0, False: 3.88k]
  ------------------
  304|       |			/* At this point we assume that conn->sasl_{username, password} are non-NULL.
  305|       |			 * The PLAIN mechanism expects a NULL-separated string composed by the authorization identity, the
  306|       |			 * authentication identity and the password.
  307|       |			 * The authorization identity field is explicitly set to the user provided username.
  308|       |			 */
  309|       |
  310|      0|			resp = g_string_new(NULL);
  311|       |
  312|      0|			g_string_append(resp, conn->sasl_username);
  313|      0|			g_string_append_c(resp, '\0');
  314|      0|			g_string_append(resp, conn->sasl_username);
  315|      0|			g_string_append_c(resp, '\0');
  316|      0|			g_string_append(resp, conn->sasl_password);
  317|       |
  318|      0|			sasl_send_response(server, resp);
  319|      0|			g_string_free(resp, TRUE);
  320|       |
  321|      0|			break;
  322|       |
  323|      0|		case SASL_MECHANISM_EXTERNAL:
  ------------------
  |  Branch (323:3): [True: 0, False: 3.88k]
  ------------------
  324|       |			/* Empty response */
  325|      0|			sasl_send_response(server, NULL);
  326|      0|			break;
  327|       |
  328|      0|	        case SASL_MECHANISM_SCRAM_SHA_1:
  ------------------
  |  Branch (328:10): [True: 0, False: 3.88k]
  ------------------
  329|      0|		        scram_authenticate(server, data->str, "SHA1");
  330|      0|		        break;
  331|       |
  332|      0|	        case SASL_MECHANISM_SCRAM_SHA_256:
  ------------------
  |  Branch (332:10): [True: 0, False: 3.88k]
  ------------------
  333|      0|		        scram_authenticate(server, data->str, "SHA256");
  334|      0|		        break;
  335|       |
  336|      0|	        case SASL_MECHANISM_SCRAM_SHA_512:
  ------------------
  |  Branch (336:10): [True: 0, False: 3.88k]
  ------------------
  337|      0|		        scram_authenticate(server, data->str, "SHA512");
  338|      0|		        break;
  339|  3.88k|	}
  340|  3.88k|}
sasl.c:sasl_success:
  135|  3.37k|{
  136|  3.37k|	sasl_timeout_stop(server);
  137|       |
  138|  3.37k|	server->sasl_success = TRUE;
  139|       |
  140|  3.37k|	signal_emit("server sasl success", 1, server);
  141|       |
  142|       |	/* The authentication succeeded, time to finish the CAP negotiation */
  143|  3.37k|	irc_cap_finish_negotiation(server);
  144|  3.37k|}
sasl.c:sasl_fail:
  106|  1.76k|{
  107|  1.76k|	char *params, *error;
  108|       |
  109|       |
  110|  1.76k|	params = event_get_params(data, 2, NULL, &error);
  111|       |
  112|  1.76k|	server->sasl_success = FALSE;
  113|       |
  114|  1.76k|	signal_emit("server sasl failure", 2, server, error);
  115|       |
  116|       |	/* Terminate the negotiation */
  117|  1.76k|	irc_cap_finish_negotiation(server);
  118|       |
  119|  1.76k|	g_free(params);
  120|  1.76k|}
sasl.c:sasl_already:
  123|    191|{
  124|    191|	sasl_timeout_stop(server);
  125|       |
  126|    191|	server->sasl_success = TRUE;
  127|       |
  128|    191|	signal_emit("server sasl success", 1, server);
  129|       |
  130|       |	/* We're already authenticated, do nothing */
  131|    191|	irc_cap_finish_negotiation(server);
  132|    191|}
sasl.c:sasl_disconnected:
  373|  29.4k|{
  374|  29.4k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (374:2): [True: 29.4k, False: 0]
  |  Branch (374:2): [True: 29.4k, False: 0]
  |  Branch (374:2): [Folded, False: 29.4k]
  ------------------
  375|       |
  376|  29.4k|	if (!IS_IRC_SERVER(server)) {
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (376:6): [True: 0, False: 29.4k]
  ------------------
  377|      0|		return;
  378|      0|	}
  379|       |
  380|  29.4k|	sasl_timeout_stop(server);
  381|  29.4k|}

server_idle_add_redir:
  101|    693|{
  102|    693|	va_list va;
  103|    693|	SERVER_IDLE_REC *rec;
  104|       |
  105|    693|	g_return_val_if_fail(server != NULL, -1);
  ------------------
  |  Branch (105:2): [True: 693, False: 0]
  |  Branch (105:2): [True: 693, False: 0]
  |  Branch (105:2): [Folded, False: 693]
  ------------------
  106|       |
  107|    693|	va_start(va, failure_signal);
  108|    693|	rec = server_idle_create(cmd, redirect_cmd, count, arg, remote,
  109|    693|				 failure_signal, va);
  110|    693|	server->idles = g_slist_append(server->idles, rec);
  111|    693|	va_end(va);
  112|       |
  113|    693|	return rec->tag;
  114|    693|}
server_idle_find:
  182|  4.30k|{
  183|       |	return server_idle_find_rec(server, tag) != NULL;
  184|  4.30k|}
servers_idle_init:
  253|      2|{
  254|      2|	idlepos = 0;
  255|      2|	idle_tag = g_timeout_add(1000, (GSourceFunc) sig_idle_timeout, NULL);
  256|       |
  257|       |	signal_add("server disconnected", (SIGNAL_FUNC) sig_disconnected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  258|      2|}
servers-idle.c:server_idle_create:
   47|    693|{
   48|    693|	SERVER_IDLE_REC *rec;
   49|    693|	const char *event, *signal;
   50|       |
   51|    693|	g_return_val_if_fail(cmd != NULL, FALSE);
  ------------------
  |  Branch (51:2): [True: 693, False: 0]
  |  Branch (51:2): [True: 693, False: 0]
  |  Branch (51:2): [Folded, False: 693]
  ------------------
   52|       |
   53|    693|	rec = g_new0(SERVER_IDLE_REC, 1);
  ------------------
  |  Branch (53:8): [True: 693, False: 0]
  |  Branch (53:8): [True: 0, False: 693]
  ------------------
   54|    693|	rec->cmd = g_strdup(cmd);
   55|    693|	rec->arg = g_strdup(arg);
   56|    693|	rec->tag = ++idlepos;
   57|       |
   58|    693|        rec->redirect_cmd = g_strdup(redirect_cmd);
   59|    693|	rec->count = count;
   60|    693|	rec->remote = remote;
   61|    693|        rec->failure_signal = g_strdup(failure_signal);
   62|       |
   63|    693|	while ((event = va_arg(va, const char *)) != NULL) {
  ------------------
  |  Branch (63:9): [True: 0, False: 693]
  ------------------
   64|      0|		signal = va_arg(va, const char *);
   65|      0|		if (signal == NULL) {
  ------------------
  |  Branch (65:7): [True: 0, False: 0]
  ------------------
   66|      0|			g_warning("server_idle_create(%s): "
   67|      0|				  "signal not specified for event",
   68|      0|				  redirect_cmd);
   69|      0|			break;
   70|      0|		}
   71|       |
   72|      0|		rec->redirects =
   73|      0|			g_slist_append(rec->redirects, g_strdup(event));
   74|      0|		rec->redirects =
   75|      0|			g_slist_append(rec->redirects, g_strdup(signal));
   76|      0|	}
   77|       |
   78|    693|	return rec;
   79|    693|}
servers-idle.c:server_idle_find_rec:
   82|  4.30k|{
   83|  4.30k|	GSList *tmp;
   84|       |
   85|  4.30k|	g_return_val_if_fail(server != NULL, FALSE);
  ------------------
  |  Branch (85:2): [True: 4.30k, False: 0]
  |  Branch (85:2): [True: 4.30k, False: 0]
  |  Branch (85:2): [Folded, False: 4.30k]
  ------------------
   86|       |
   87|  11.5k|	for (tmp = server->idles; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (87:28): [True: 11.5k, False: 0]
  ------------------
   88|  11.5k|		SERVER_IDLE_REC *rec = tmp->data;
   89|       |
   90|  11.5k|		if (rec->tag == tag)
  ------------------
  |  Branch (90:7): [True: 4.30k, False: 7.24k]
  ------------------
   91|  4.30k|			return rec;
   92|  11.5k|	}
   93|       |
   94|      0|	return NULL;
   95|  4.30k|}
servers-idle.c:server_idle_destroy:
  165|    693|{
  166|    693|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (166:2): [True: 693, False: 0]
  |  Branch (166:2): [True: 693, False: 0]
  |  Branch (166:2): [Folded, False: 693]
  ------------------
  167|       |
  168|    693|	server->idles = g_slist_remove(server->idles, rec);
  169|       |
  170|    693|        g_slist_foreach(rec->redirects, (GFunc) g_free, NULL);
  171|    693|	g_slist_free(rec->redirects);
  172|       |
  173|    693|	g_free_not_null(rec->arg);
  ------------------
  |  |   64|    693|#define g_free_not_null(a) g_free(a)
  ------------------
  174|    693|        g_free_not_null(rec->redirect_cmd);
  ------------------
  |  |   64|    693|#define g_free_not_null(a) g_free(a)
  ------------------
  175|    693|        g_free_not_null(rec->failure_signal);
  ------------------
  |  |   64|    693|#define g_free_not_null(a) g_free(a)
  ------------------
  176|    693|	g_free(rec->cmd);
  177|    693|	g_free(rec);
  178|    693|}
servers-idle.c:sig_disconnected:
  225|  29.4k|{
  226|  29.4k|	g_return_if_fail(server != NULL);
  ------------------
  |  Branch (226:2): [True: 29.4k, False: 0]
  |  Branch (226:2): [True: 29.4k, False: 0]
  |  Branch (226:2): [Folded, False: 29.4k]
  ------------------
  227|       |
  228|  29.4k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (228:6): [True: 0, False: 29.4k]
  ------------------
  229|      0|		return;
  230|       |
  231|  30.1k|	while (server->idles != NULL)
  ------------------
  |  Branch (231:9): [True: 693, False: 29.4k]
  ------------------
  232|    693|		server_idle_destroy(server, server->idles->data);
  233|  29.4k|}

server_redirect_destroy:
  112|  23.6k|{
  113|  23.6k|	redirect_cmd_unref(rec->cmd);
  114|       |
  115|  23.6k|	g_free_not_null(rec->prefix);
  ------------------
  |  |   64|  23.6k|#define g_free_not_null(a) g_free(a)
  ------------------
  116|  23.6k|	g_free_not_null(rec->arg);
  ------------------
  |  |   64|  23.6k|#define g_free_not_null(a) g_free(a)
  ------------------
  117|  23.6k|        g_free_not_null(rec->failure_signal);
  ------------------
  |  |   64|  23.6k|#define g_free_not_null(a) g_free(a)
  ------------------
  118|  23.6k|        g_free_not_null(rec->default_signal);
  ------------------
  |  |   64|  23.6k|#define g_free_not_null(a) g_free(a)
  ------------------
  119|  23.6k|        g_free_not_null(rec->first_signal);
  ------------------
  |  |   64|  23.6k|#define g_free_not_null(a) g_free(a)
  ------------------
  120|  23.6k|        g_free_not_null(rec->last_signal);
  ------------------
  |  |   64|  23.6k|#define g_free_not_null(a) g_free(a)
  ------------------
  121|       |	g_slist_foreach(rec->signals, (GFunc) g_free, NULL);
  122|  23.6k|	g_slist_free(rec->signals);
  123|  23.6k|        g_free(rec);
  124|  23.6k|}
server_redirect_register:
  128|     26|{
  129|     26|	va_list va;
  130|     26|	GSList *start, *stop, *opt, **list;
  131|     26|	const char *event;
  132|     26|        int argpos;
  133|       |
  134|     26|	va_start(va, timeout);
  135|     26|	start = stop = opt = NULL; list = &start;
  136|    186|	for (;;) {
  137|    186|		event = va_arg(va, const char *);
  138|    186|		if (event == NULL) {
  ------------------
  |  Branch (138:7): [True: 78, False: 108]
  ------------------
  139|     78|			if (list == &start)
  ------------------
  |  Branch (139:8): [True: 26, False: 52]
  ------------------
  140|     26|				list = &stop;
  141|     52|			else if (list == &stop)
  ------------------
  |  Branch (141:13): [True: 26, False: 26]
  ------------------
  142|     26|				list = &opt;
  143|     26|			else
  144|     26|                                break;
  145|     52|                        continue;
  146|     78|		}
  147|       |
  148|    108|                argpos = va_arg(va, int);
  149|    108|		*list = g_slist_append(*list, g_strdup(event));
  150|    108|		*list = g_slist_append(*list, GINT_TO_POINTER(argpos));
  151|    108|	}
  152|       |
  153|     26|	va_end(va);
  154|       |
  155|     26|	server_redirect_register_list(command, remote, timeout, start, stop, opt, 0);
  156|     26|}
server_redirect_register_list:
  160|     26|{
  161|     26|	REDIRECT_CMD_REC *rec;
  162|     26|        gpointer key, value;
  163|       |
  164|     26|        g_return_if_fail(command != NULL);
  ------------------
  |  Branch (164:9): [True: 26, False: 0]
  |  Branch (164:9): [True: 26, False: 0]
  |  Branch (164:9): [Folded, False: 26]
  ------------------
  165|     26|        g_return_if_fail(stop != NULL);
  ------------------
  |  Branch (165:9): [True: 26, False: 0]
  |  Branch (165:9): [True: 26, False: 0]
  |  Branch (165:9): [Folded, False: 26]
  ------------------
  166|       |
  167|     26|	if (g_hash_table_lookup_extended(command_redirects, command,
  ------------------
  |  Branch (167:6): [True: 0, False: 26]
  ------------------
  168|     26|					 &key, &value)) {
  169|       |		/* Already registered - might have changed so destroy
  170|       |		   the old one */
  171|      0|		g_hash_table_remove(command_redirects, command);
  172|      0|                redirect_cmd_unref(value);
  173|      0|	}
  174|       |
  175|     26|	rec = g_new0(REDIRECT_CMD_REC, 1);
  ------------------
  |  Branch (175:8): [True: 26, False: 0]
  |  Branch (175:8): [True: 0, False: 26]
  ------------------
  176|     26|        redirect_cmd_ref(rec);
  177|     26|        rec->name = g_strdup(command);
  178|     26|	rec->remote = remote;
  179|     26|	rec->timeout = timeout > 0 ? timeout : DEFAULT_REDIRECT_TIMEOUT;
  ------------------
  |  |   29|     52|#define DEFAULT_REDIRECT_TIMEOUT 60
  ------------------
  |  Branch (179:17): [True: 0, False: 26]
  ------------------
  180|     26|	rec->start = start;
  181|     26|        rec->stop = stop;
  182|     26|        rec->opt = opt;
  183|     26|	rec->pos = pos;
  184|     26|	g_hash_table_insert(command_redirects, rec->name, rec);
  185|     26|}
server_redirect_event:
  190|  23.6k|{
  191|  23.6k|	GSList *signals;
  192|  23.6k|        const char *event, *signal;
  193|  23.6k|	va_list va;
  194|       |
  195|  23.6k|	va_start(va, failure_signal);
  196|  23.6k|	signals = NULL;
  197|  75.0k|	while ((event = va_arg(va, const char *)) != NULL) {
  ------------------
  |  Branch (197:9): [True: 51.3k, False: 23.6k]
  ------------------
  198|  51.3k|		signal = va_arg(va, const char *);
  199|  51.3k|		if (signal == NULL) {
  ------------------
  |  Branch (199:7): [True: 0, False: 51.3k]
  ------------------
  200|      0|			g_warning("server_redirect_event(%s): "
  201|      0|				  "signal not specified for event", command);
  202|      0|			break;
  203|      0|		}
  204|       |
  205|  51.3k|		signals = g_slist_append(signals, g_strdup(event));
  206|  51.3k|		signals = g_slist_append(signals, g_strdup(signal));
  207|  51.3k|	}
  208|       |
  209|  23.6k|	va_end(va);
  210|       |
  211|  23.6k|	server_redirect_event_list(server, command, count, arg, remote,
  212|  23.6k|				   failure_signal, signals);
  213|  23.6k|}
server_redirect_event_list:
  239|  23.6k|{
  240|  23.6k|	REDIRECT_CMD_REC *cmdrec;
  241|  23.6k|	REDIRECT_REC *rec;
  242|       |
  243|  23.6k|	g_return_if_fail(IS_IRC_SERVER(server));
  ------------------
  |  Branch (243:2): [True: 23.6k, False: 0]
  |  Branch (243:2): [True: 23.6k, False: 0]
  |  Branch (243:2): [True: 23.6k, False: 0]
  |  Branch (243:2): [Folded, False: 23.6k]
  ------------------
  244|  23.6k|	g_return_if_fail(command != NULL);
  ------------------
  |  Branch (244:2): [True: 23.6k, False: 0]
  |  Branch (244:2): [True: 23.6k, False: 0]
  |  Branch (244:2): [Folded, False: 23.6k]
  ------------------
  245|  23.6k|        g_return_if_fail((g_slist_length(signals) & 1) == 0);
  ------------------
  |  Branch (245:9): [True: 23.6k, False: 0]
  |  Branch (245:9): [True: 23.6k, False: 0]
  |  Branch (245:9): [Folded, False: 23.6k]
  ------------------
  246|       |
  247|  23.6k|	cmdrec = g_hash_table_lookup(command_redirects, command);
  248|  23.6k|	if (cmdrec == NULL) {
  ------------------
  |  Branch (248:6): [True: 0, False: 23.6k]
  ------------------
  249|      0|		g_warning("Unknown redirection command: %s", command);
  250|      0|                return;
  251|      0|	}
  252|       |
  253|  23.6k|	redirect_cmd_ref(cmdrec);
  254|       |
  255|  23.6k|        rec = g_new0(REDIRECT_REC, 1);
  ------------------
  |  Branch (255:15): [True: 23.6k, False: 0]
  |  Branch (255:15): [True: 0, False: 23.6k]
  ------------------
  256|  23.6k|        rec->created = time(NULL);
  257|  23.6k|        rec->cmd = cmdrec;
  258|  23.6k|	rec->arg = g_strdup(arg);
  259|  23.6k|        rec->count = count;
  260|  23.6k|	rec->remote = remote != -1 ? remote : cmdrec->remote;
  ------------------
  |  Branch (260:16): [True: 19.9k, False: 3.70k]
  ------------------
  261|  23.6k|	rec->failure_signal = g_strdup(failure_signal);
  262|       |
  263|  23.6k|        rec->default_signal = signal_list_move(&signals, "");
  264|  23.6k|        rec->first_signal = signal_list_move(&signals, "redirect first");
  265|  23.6k|        rec->last_signal = signal_list_move(&signals, "redirect last");
  266|  23.6k|	rec->signals = signals;
  267|       |
  268|  23.6k|	if (server->redirect_next != NULL)
  ------------------
  |  Branch (268:6): [True: 750, False: 22.9k]
  ------------------
  269|    750|                server_redirect_destroy(server->redirect_next);
  270|  23.6k|        server->redirect_next = rec;
  271|  23.6k|}
server_redirect_command:
  275|  62.7k|{
  276|  62.7k|        REDIRECT_CMD_REC *cmdrec;
  277|       |
  278|  62.7k|	g_return_if_fail(IS_IRC_SERVER(server));
  ------------------
  |  Branch (278:2): [True: 62.7k, False: 0]
  |  Branch (278:2): [True: 62.7k, False: 0]
  |  Branch (278:2): [True: 62.7k, False: 0]
  |  Branch (278:2): [Folded, False: 62.7k]
  ------------------
  279|  62.7k|	g_return_if_fail(command != NULL);
  ------------------
  |  Branch (279:2): [True: 62.7k, False: 0]
  |  Branch (279:2): [True: 62.7k, False: 0]
  |  Branch (279:2): [Folded, False: 62.7k]
  ------------------
  280|       |
  281|  62.7k|	if (redirect == NULL) {
  ------------------
  |  Branch (281:6): [True: 57.0k, False: 5.71k]
  ------------------
  282|       |		/* no redirection wanted, but still register the command
  283|       |		   so future redirections wont get messed up. */
  284|  57.0k|		cmdrec = redirect_cmd_find(command);
  285|  57.0k|		if (cmdrec == NULL)
  ------------------
  |  Branch (285:7): [True: 57.0k, False: 0]
  ------------------
  286|  57.0k|			return;
  287|       |
  288|      0|		redirect_cmd_ref(cmdrec);
  289|       |
  290|      0|		redirect = g_new0(REDIRECT_REC, 1);
  ------------------
  |  Branch (290:14): [True: 0, False: 0]
  |  Branch (290:14): [True: 0, False: 0]
  ------------------
  291|      0|		redirect->created = time(NULL);
  292|      0|		redirect->cmd = cmdrec;
  293|      0|		redirect->remote = cmdrec->remote;
  294|      0|	}
  295|       |
  296|  5.71k|	server->redirects = g_slist_append(server->redirects, redirect);
  297|  5.71k|}
server_redirect_get_signal:
  601|   762k|{
  602|   762k|	REDIRECT_REC *redirect;
  603|   762k|        const char *signal;
  604|   762k|	int match;
  605|       |
  606|   762k|	signal = server_redirect_get(server, prefix, event, args, &redirect, &match);
  607|   762k|	if (redirect == NULL)
  ------------------
  |  Branch (607:6): [True: 759k, False: 3.45k]
  ------------------
  608|   759k|		;
  609|  3.45k|	else if (match != MATCH_STOP) {
  ------------------
  |  |  352|  3.45k|#define MATCH_STOP	2
  ------------------
  |  Branch (609:11): [True: 2.99k, False: 456]
  ------------------
  610|  2.99k|		if (g_slist_find(server->redirect_active, redirect) == NULL)
  ------------------
  |  Branch (610:7): [True: 1.05k, False: 1.93k]
  ------------------
  611|  1.05k|			server->redirect_active = g_slist_prepend(server->redirect_active, redirect);
  612|  2.99k|	} else {
  613|       |		/* stop event - remove this redirection next time this
  614|       |		   function is called (can't destroy now or our return
  615|       |		   value would be corrupted) */
  616|    456|                if (--redirect->count <= 0)
  ------------------
  |  Branch (616:21): [True: 456, False: 0]
  ------------------
  617|    456|			redirect->destroyed = TRUE;
  618|    456|		server->redirect_active = g_slist_remove(server->redirect_active, redirect);
  619|    456|	}
  620|       |
  621|   762k|        return signal;
  622|   762k|}
servers_redirect_init:
  663|      2|{
  664|      2|	command_redirects = g_hash_table_new((GHashFunc) g_str_hash, (GCompareFunc) g_str_equal);
  665|       |
  666|       |	/* WHOIS - register as remote command by default
  667|       |	   with a default timeout */
  668|      2|	server_redirect_register("whois", TRUE, 0,
  669|      2|				 "event 311", 1, /* Begins the WHOIS */
  670|      2|				 NULL,
  671|      2|                                 "event 401", 1, /* No such nick */
  672|      2|				 "event 318", 1, /* End of WHOIS */
  673|      2|                                 "event 402", 1, /* No such server */
  674|      2|                                 "event 431", 1, /* No nickname given */
  675|      2|                                 "event 461", 1, /* Not enough parameters */
  676|      2|				 NULL,
  677|      2|				 "event 318", 1, /* After 401, we should get 318, but in OPN we don't.. */
  678|      2|				 NULL);
  679|       |
  680|       |	/* WHOWAS */
  681|      2|	server_redirect_register("whowas", FALSE, 0,
  682|      2|				 "event 314", 1, /* Begins the WHOWAS */
  683|      2|                                 "event 406", 1, /* There was no such nick */
  684|      2|				 NULL,
  685|      2|				 "event 369", 1, /* End of WHOWAS */
  686|      2|				 NULL,
  687|      2|				 NULL);
  688|       |
  689|       |	/* WHO */
  690|      2|	server_redirect_register("who", FALSE, 0,
  691|      2|				 "event 352", 1, /* An element of the WHO */
  692|      2|				 "event 354", -1, /* WHOX element */
  693|      2|                                 "event 401", 1, /* No such nick/channel */
  694|      2|				 NULL,
  695|      2|				 "event 315", 1, /* End of WHO */
  696|      2|				 "event 403", 1, /* no such channel */
  697|      2|				 NULL,
  698|      2|				 NULL);
  699|       |
  700|       |	/* WHO user */
  701|      2|	server_redirect_register("who user", FALSE, 0, /* */
  702|      2|	                         "event 352", 5,       /* An element of the WHO */
  703|      2|	                         "event 354", -1,      /* WHOX element */
  704|      2|	                         NULL,                 /* */
  705|      2|	                         "event 315", 1,       /* End of WHO */
  706|      2|	                         NULL,                 /* */
  707|      2|	                         NULL);
  708|       |
  709|       |	/* LIST */
  710|      2|	server_redirect_register("list", FALSE, 0,
  711|      2|				 "event 321", 1, /* Begins the LIST */
  712|      2|				 NULL,
  713|      2|				 "event 323", 1, /* End of LIST */
  714|      2|				 NULL,
  715|      2|				 NULL);
  716|       |
  717|       |        /* ISON */
  718|      2|	server_redirect_register("ison", FALSE, 0,
  719|      2|				 NULL,
  720|      2|				 "event 303", -1, /* ISON */
  721|      2|				 NULL,
  722|      2|				 NULL);
  723|       |
  724|       |        /* USERHOST */
  725|      2|	server_redirect_register("userhost", FALSE, 0,
  726|      2|				 "event 401", 1, /* no such nick */
  727|      2|				 NULL,
  728|      2|				 "event 302", -1, /* Userhost */
  729|      2|				 "event 461", -1, /* Not enough parameters */
  730|      2|				 NULL,
  731|      2|				 NULL);
  732|       |
  733|       |	/* MODE user */
  734|      2|	server_redirect_register("mode user", FALSE, 0,
  735|      2|				 NULL,
  736|      2|				 "event mode", 0, /* MODE-reply */
  737|      2|				 "event 501", -1, /* Uknown MODE flag */
  738|      2|				 "event 502", -1, /* Can't change mode for other users */
  739|      2|				 "event 403", 1, /* That channel doesn't exist (tried to change mode to others) */
  740|      2|				 NULL,
  741|      2|				 NULL);
  742|       |
  743|       |	/* MODE #channel */
  744|      2|	server_redirect_register("mode channel", FALSE, 0,
  745|      2|				 NULL,
  746|      2|				 "event 324", 1, /* MODE-reply */
  747|      2|				 "event 403", 1, /* no such channel */
  748|      2|				 "event 442", 1, /* "you're not on that channel" */
  749|      2|				 "event 479", 1, /* "Cannot join channel (illegal name)" IMHO this is not a logical reply from server. */
  750|      2|				 NULL,
  751|      2|                                 "event 329", 1, /* Channel create time */
  752|      2|				 NULL);
  753|       |
  754|       |	/* MODE #channel b */
  755|      2|	server_redirect_register("mode b", FALSE, 0,
  756|      2|                                 "event 367", 1,
  757|      2|				 NULL,
  758|      2|				 "event 368", 1, /* End of Channel ban List */
  759|      2|				 "event 403", 1, /* no such channel */
  760|      2|				 "event 442", 1, /* "you're not on that channel" */
  761|      2|				 "event 479", 1, /* "Cannot join channel (illegal name)" IMHO this is not a logical reply from server. */
  762|      2|				 NULL,
  763|      2|				 NULL);
  764|       |
  765|       |	/* MODE #channel e */
  766|      2|	server_redirect_register("mode e", FALSE, 0,
  767|      2|                                 "event 348", 1,
  768|      2|				 NULL,
  769|      2|				 "event 349", 1, /* End of ban exceptions */
  770|      2|				 "event 482", 1, /* not channel operator - OPN's ircd doesn't want non-ops to see ban exceptions */
  771|      2|				 "event 403", 1, /* no such channel */
  772|      2|				 "event 442", 1, /* "you're not on that channel" */
  773|      2|				 "event 479", 1, /* "Cannot join channel (illegal name)" IMHO this is not a logical reply from server. */
  774|      2|				 "event 472", -1, /* unknown mode (you should check e-mode's existence from 004 event instead of relying on this) */
  775|      2|				 NULL,
  776|      2|				 NULL);
  777|       |
  778|       |	/* MODE #channel I */
  779|      2|	server_redirect_register("mode I", FALSE, 0,
  780|      2|                                 "event 346", 1,
  781|      2|				 NULL,
  782|      2|				 "event 347", 1, /* End of invite list */
  783|      2|				 "event 482", 1, /* not channel operator - OPN's ircd doesn't want non-ops to see ban exceptions */
  784|      2|				 "event 403", 1, /* no such channel */
  785|      2|				 "event 442", 1, /* "you're not on that channel" */
  786|      2|				 "event 479", 1, /* "Cannot join channel (illegal name)" IMHO this is not a logical reply from server. */
  787|      2|				 "event 472", -1, /* unknown mode (you should check I-mode's existence from 004 event instead of relying on this) */
  788|      2|				 NULL,
  789|      2|				 NULL);
  790|       |
  791|       |        /* PING - use default timeout */
  792|      2|	server_redirect_register("ping", TRUE, 0,
  793|      2|				 NULL,
  794|      2|                                 "event 402", -1, /* no such server */
  795|      2|				 "event pong", -1, /* PONG */
  796|      2|				 NULL,
  797|      2|				 NULL);
  798|       |
  799|       |	signal_add("server disconnected", (SIGNAL_FUNC) sig_disconnected);
  ------------------
  |  |   21|      2|	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    4|      2|#define MODULE_NAME "irc/core"
  |  |  ------------------
  |  |               	signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
  |  |  ------------------
  |  |  |  |    5|      2|#define SIGNAL_PRIORITY_DEFAULT	0
  |  |  ------------------
  ------------------
  800|      2|}
servers-redirect.c:redirect_cmd_unref:
  106|  23.6k|{
  107|  23.6k|	if (--rec->refcount <= 0)
  ------------------
  |  Branch (107:6): [True: 0, False: 23.6k]
  ------------------
  108|      0|                redirect_cmd_destroy(rec);
  109|  23.6k|}
servers-redirect.c:redirect_cmd_ref:
  101|  23.7k|{
  102|  23.7k|        rec->refcount++;
  103|  23.7k|}
servers-redirect.c:signal_list_move:
  218|  71.0k|{
  219|  71.0k|	GSList *link;
  220|  71.0k|        char *linkevent, *linksignal;
  221|       |
  222|  71.0k|	link = i_slist_find_string(*signals, event);
  223|  71.0k|	if (link == NULL)
  ------------------
  |  Branch (223:6): [True: 47.3k, False: 23.6k]
  ------------------
  224|  47.3k|		return NULL;
  225|       |
  226|  23.6k|	linkevent = link->data;
  227|  23.6k|        linksignal = link->next->data;
  228|       |
  229|  23.6k|	*signals = g_slist_remove(*signals, linkevent);
  230|  23.6k|	*signals = g_slist_remove(*signals, linksignal);
  231|       |
  232|  23.6k|	g_free(linkevent);
  233|  23.6k|        return linksignal;
  234|  71.0k|}
servers-redirect.c:redirect_cmd_find:
   67|  57.0k|{
   68|  57.0k|        REDIRECT_CMD_REC *rec;
   69|  57.0k|	const char *p;
   70|  57.0k|        char *cmd;
   71|       |
   72|  57.0k|	p = strchr(command, ' ');
   73|  57.0k|	if (p == NULL)
  ------------------
  |  Branch (73:6): [True: 0, False: 57.0k]
  ------------------
   74|      0|                rec = g_hash_table_lookup(command_redirects, command);
   75|  57.0k|	else {
   76|  57.0k|		cmd = g_strndup(command, (int) (p-command));
   77|  57.0k|                rec = g_hash_table_lookup(command_redirects, cmd);
   78|  57.0k|		g_free(cmd);
   79|  57.0k|	}
   80|  57.0k|        return rec;
   81|  57.0k|}
servers-redirect.c:server_redirect_get:
  543|   762k|{
  544|   762k|	const char *signal = NULL;
  545|   762k|	GSList *ptr, *next;
  546|   762k|	REDIRECT_REC *r;
  547|       |
  548|   762k|        *redirect = NULL;
  549|   762k|	*match = MATCH_NONE;
  ------------------
  |  |  350|   762k|#define MATCH_NONE      0
  ------------------
  550|       |
  551|   762k|	if (server->redirects == NULL)
  ------------------
  |  Branch (551:6): [True: 652k, False: 110k]
  ------------------
  552|   652k|		return NULL;
  553|       |
  554|   120k|	for (ptr = server->redirect_active; ptr != NULL; ptr = next) {
  ------------------
  |  Branch (554:38): [True: 11.5k, False: 108k]
  ------------------
  555|  11.5k|		next = ptr->next;
  556|  11.5k|		r = ptr->data;
  557|  11.5k|		if (prefix != NULL && r->prefix != NULL &&
  ------------------
  |  Branch (557:7): [True: 9.94k, False: 1.65k]
  |  Branch (557:25): [True: 9.94k, False: 0]
  ------------------
  558|  9.94k|				g_strcmp0(prefix, r->prefix)) {
  ------------------
  |  Branch (558:5): [True: 8.60k, False: 1.34k]
  ------------------
  559|       |			/* not from this server */
  560|  8.60k|			continue;
  561|  8.60k|		}
  562|       |		/* redirection is already started, now we'll just need to
  563|       |		   keep redirecting until stop-event is found. */
  564|  2.99k|		*redirect = r;
  565|  2.99k|		signal = redirect_match(*redirect, event, NULL, match);
  566|  2.99k|		if (signal == NULL) {
  ------------------
  |  Branch (566:7): [True: 1.05k, False: 1.93k]
  ------------------
  567|       |			/* not a numeric, so we've lost the
  568|       |			   stop event.. */
  569|  1.05k|			(*redirect)->aborted = TRUE;
  570|  1.05k|			redirect_abort(server, *redirect);
  571|       |
  572|  1.05k|			*redirect = NULL;
  573|  1.05k|		}
  574|  2.99k|		if (*redirect != NULL)
  ------------------
  |  Branch (574:7): [True: 1.93k, False: 1.05k]
  ------------------
  575|  1.93k|			break;
  576|  2.99k|	}
  577|       |
  578|   110k|	if (*redirect == NULL) {
  ------------------
  |  Branch (578:6): [True: 108k, False: 1.93k]
  ------------------
  579|       |                /* find the redirection */
  580|   108k|		*redirect = redirect_find(server, event, args, &signal, match);
  581|   108k|	}
  582|       |
  583|       |	/* remember which server is replying to our request */
  584|   110k|	if (*redirect != NULL && prefix != NULL && (*redirect)->prefix == NULL)
  ------------------
  |  Branch (584:6): [True: 3.45k, False: 107k]
  |  Branch (584:27): [True: 1.57k, False: 1.87k]
  |  Branch (584:45): [True: 1.06k, False: 513]
  ------------------
  585|  1.06k|		(*redirect)->prefix = g_strdup(prefix);
  586|       |
  587|   110k|	if (*redirect != NULL && (*redirect)->first_signal != NULL &&
  ------------------
  |  Branch (587:6): [True: 3.45k, False: 107k]
  |  Branch (587:27): [True: 0, False: 3.45k]
  ------------------
  588|      0|	    !(*redirect)->first_signal_sent) {
  ------------------
  |  Branch (588:6): [True: 0, False: 0]
  ------------------
  589|       |		/* emit the first_signal */
  590|      0|                (*redirect)->first_signal_sent = TRUE;
  591|      0|		signal_emit((*redirect)->first_signal, 1, server);
  592|      0|	}
  593|       |
  594|   110k|        return signal;
  595|   762k|}
servers-redirect.c:redirect_match:
  356|   176k|{
  357|   176k|	GSList *tmp, *cmdpos;
  358|   176k|	const char *signal;
  359|   176k|        int match_list;
  360|       |
  361|   176k|	if (redirect->aborted)
  ------------------
  |  Branch (361:6): [True: 0, False: 176k]
  ------------------
  362|      0|                return NULL;
  363|       |
  364|       |	/* get the signal for redirection event - if it's not found we'll
  365|       |	   use the default signal */
  366|   176k|        signal = NULL;
  367|   351k|	for (tmp = redirect->signals; tmp != NULL; tmp = tmp->next->next) {
  ------------------
  |  Branch (367:32): [True: 176k, False: 175k]
  ------------------
  368|   176k|		if (g_strcmp0(tmp->data, event) == 0) {
  ------------------
  |  Branch (368:7): [True: 1.66k, False: 175k]
  ------------------
  369|  1.66k|			signal = tmp->next->data;
  370|  1.66k|			break;
  371|  1.66k|		}
  372|   176k|	}
  373|       |
  374|       |	/* find the argument position */
  375|   176k|	if (redirect->destroyed) {
  ------------------
  |  Branch (375:6): [True: 456, False: 176k]
  ------------------
  376|       |		/* stop event is already found for this redirection, but
  377|       |		   we'll still want to look for optional events */
  378|    456|		cmdpos = redirect_cmd_list_find(redirect->cmd->opt, event);
  379|    456|		if (cmdpos == NULL)
  ------------------
  |  Branch (379:7): [True: 453, False: 3]
  ------------------
  380|    453|			return NULL;
  381|       |
  382|      3|                match_list = MATCH_STOP;
  ------------------
  |  |  352|      3|#define MATCH_STOP	2
  ------------------
  383|   176k|	} else {
  384|       |                /* look from start/stop lists */
  385|   176k|		cmdpos = redirect_cmd_list_find(redirect->cmd->start, event);
  386|   176k|		if (cmdpos != NULL)
  ------------------
  |  Branch (386:7): [True: 1.66k, False: 174k]
  ------------------
  387|  1.66k|			match_list = MATCH_START;
  ------------------
  |  |  351|  1.66k|#define MATCH_START	1
  ------------------
  388|   174k|		else {
  389|   174k|			cmdpos = redirect_cmd_list_find(redirect->cmd->stop,
  390|   174k|							event);
  391|   174k|			if (cmdpos != NULL)
  ------------------
  |  Branch (391:8): [True: 760, False: 173k]
  ------------------
  392|    760|				match_list = MATCH_STOP;
  ------------------
  |  |  352|    760|#define MATCH_STOP	2
  ------------------
  393|   173k|			else if (redirect->default_signal != NULL &&
  ------------------
  |  Branch (393:13): [True: 173k, False: 0]
  ------------------
  394|   173k|					args == NULL &&
  ------------------
  |  Branch (394:6): [True: 2.48k, False: 171k]
  ------------------
  395|  2.48k|					strncmp(event, "event ", 6) == 0 &&
  ------------------
  |  Branch (395:6): [True: 2.48k, False: 0]
  ------------------
  396|   173k|					i_isdigit(event[6])) {
  ------------------
  |  |   79|   173k|#define i_isdigit(x) isdigit((int) (unsigned char) (x))
  ------------------
  |  Branch (396:6): [True: 1.42k, False: 1.05k]
  ------------------
  397|       |				/* If there is a default signal, the
  398|       |				 * redirection has already started and
  399|       |				 * this is a numeric, use it */
  400|       |				/* XXX this should depend on the
  401|       |				 * REDIRECT_CMD_REC, not REDIRECT_REC */
  402|  1.42k|				if (signal == NULL)
  ------------------
  |  Branch (402:9): [True: 1.42k, False: 0]
  ------------------
  403|  1.42k|					signal = redirect->default_signal;
  404|  1.42k|				match_list = MATCH_START;
  ------------------
  |  |  351|  1.42k|#define MATCH_START	1
  ------------------
  405|   172k|			} else {
  406|   172k|				match_list = MATCH_NONE;
  ------------------
  |  |  350|   172k|#define MATCH_NONE      0
  ------------------
  407|   172k|			}
  408|   174k|		}
  409|   176k|	}
  410|       |
  411|   176k|	if (signal == NULL && cmdpos == NULL) {
  ------------------
  |  Branch (411:6): [True: 173k, False: 3.09k]
  |  Branch (411:24): [True: 172k, False: 763]
  ------------------
  412|       |		/* event not found from specified redirection events nor
  413|       |		   registered command events, and no default signal */
  414|   172k|		return NULL;
  415|   172k|	}
  416|       |
  417|       |	/* check that arguments match */
  418|  3.85k|	if (args != NULL && redirect->arg != NULL && cmdpos != NULL &&
  ------------------
  |  Branch (418:6): [True: 1.91k, False: 1.93k]
  |  Branch (418:22): [True: 1.91k, False: 0]
  |  Branch (418:47): [True: 1.91k, False: 0]
  ------------------
  419|  1.91k|	    !redirect_args_match(args, redirect->arg,
  ------------------
  |  Branch (419:6): [True: 401, False: 1.51k]
  ------------------
  420|  1.91k|				 GPOINTER_TO_INT(cmdpos->next->data)))
  421|    401|		return NULL;
  422|       |
  423|  3.45k|        *match = match_list;
  424|  3.45k|	return signal != NULL ? signal : redirect->default_signal;
  ------------------
  |  Branch (424:9): [True: 2.99k, False: 456]
  ------------------
  425|  3.85k|}
servers-redirect.c:redirect_cmd_list_find:
  338|   351k|{
  339|  1.39M|	while (list != NULL) {
  ------------------
  |  Branch (339:9): [True: 1.04M, False: 348k]
  ------------------
  340|  1.04M|		const char *str = list->data;
  341|       |
  342|  1.04M|		if (g_strcmp0(str, event) == 0)
  ------------------
  |  Branch (342:7): [True: 2.42k, False: 1.04M]
  ------------------
  343|  2.42k|                        break;
  344|  1.04M|                list = list->next->next;
  345|  1.04M|	}
  346|       |
  347|   351k|        return list;
  348|   351k|}
servers-redirect.c:redirect_args_match:
  301|  2.18k|{
  302|  2.18k|	const char *start;
  303|       |
  304|  2.18k|	if (pos == -1)
  ------------------
  |  Branch (304:6): [True: 0, False: 2.18k]
  ------------------
  305|      0|		return TRUE;
  306|       |
  307|       |        /* skip to the start of the wanted argument */
  308|  4.09k|	while (pos > 0 && *event_args != '\0') {
  ------------------
  |  Branch (308:9): [True: 1.91k, False: 2.18k]
  |  Branch (308:20): [True: 1.91k, False: 0]
  ------------------
  309|  17.1k|                while (*event_args != ' ' && *event_args != '\0') event_args++;
  ------------------
  |  Branch (309:24): [True: 15.3k, False: 1.88k]
  |  Branch (309:46): [True: 15.2k, False: 30]
  ------------------
  310|  7.01k|		while (*event_args == ' ') event_args++;
  ------------------
  |  Branch (310:10): [True: 5.09k, False: 1.91k]
  ------------------
  311|  1.91k|                pos--;
  312|  1.91k|	}
  313|       |
  314|       |	/* now compare the arguments */
  315|  2.18k|	start = event_args;
  316|  2.63k|	while (*arg != '\0') {
  ------------------
  |  Branch (316:9): [True: 2.18k, False: 450]
  ------------------
  317|  9.33k|		while (*arg != '\0' && *arg != ' ' && *event_args != '\0') {
  ------------------
  |  Branch (317:10): [True: 7.60k, False: 1.73k]
  |  Branch (317:26): [True: 7.60k, False: 0]
  |  Branch (317:41): [True: 7.57k, False: 30]
  ------------------
  318|  7.57k|			if (i_toupper(*arg) != i_toupper(*event_args))
  ------------------
  |  |   72|  7.57k|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
              			if (i_toupper(*arg) != i_toupper(*event_args))
  ------------------
  |  |   72|  7.57k|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
  |  Branch (318:8): [True: 0, False: 0]
  |  Branch (318:8): [True: 0, False: 7.57k]
  |  Branch (318:8): [True: 7.57k, Folded]
  |  Branch (318:8): [True: 419, False: 7.15k]
  |  Branch (318:27): [True: 0, False: 0]
  |  Branch (318:27): [True: 0, False: 7.57k]
  |  Branch (318:27): [True: 7.57k, Folded]
  ------------------
  319|    419|				break;
  320|  7.15k|			arg++; event_args++;
  321|  7.15k|		}
  322|       |
  323|  2.18k|		if ((*arg == '\0' || *arg == ' ') &&
  ------------------
  |  Branch (323:8): [True: 1.73k, False: 449]
  |  Branch (323:24): [True: 0, False: 449]
  ------------------
  324|  1.73k|		    (*event_args == '\0' || *event_args == ' '))
  ------------------
  |  Branch (324:8): [True: 216, False: 1.51k]
  |  Branch (324:31): [True: 1.51k, False: 1]
  ------------------
  325|  1.73k|			return TRUE;
  326|       |
  327|       |                /* compare the next argument */
  328|  2.43k|		while (*arg != ' ' && *arg != '\0') arg++;
  ------------------
  |  Branch (328:10): [True: 2.43k, False: 0]
  |  Branch (328:25): [True: 1.98k, False: 450]
  ------------------
  329|    450|                while (*arg == ' ') arg++;
  ------------------
  |  Branch (329:24): [True: 0, False: 450]
  ------------------
  330|       |
  331|    450|		event_args = start;
  332|    450|	}
  333|       |
  334|    450|        return FALSE;
  335|  2.18k|}
servers-redirect.c:redirect_abort:
  428|  1.72k|{
  429|  1.72k|	char *str;
  430|       |
  431|  1.72k|	server->redirects =
  432|  1.72k|		g_slist_remove(server->redirects, rec);
  433|       |
  434|  1.72k|	if (rec->aborted || !rec->destroyed) {
  ------------------
  |  Branch (434:6): [True: 1.27k, False: 456]
  |  Branch (434:22): [True: 0, False: 456]
  ------------------
  435|       |		/* emit the failure signal */
  436|  1.27k|		if (rec->failure_signal != NULL)
  ------------------
  |  Branch (436:7): [True: 0, False: 1.27k]
  ------------------
  437|      0|			str = g_strdup_printf("FAILED %s: %s", rec->cmd->name, rec->failure_signal);
  438|  1.27k|		else
  439|  1.27k|			str = g_strdup_printf("FAILED %s", rec->cmd->name);
  440|       |
  441|  1.27k|		rawlog_redirect(server->rawlog, str);
  442|  1.27k|		g_free(str);
  443|       |
  444|  1.27k|		if (rec->failure_signal != NULL)
  ------------------
  |  Branch (444:7): [True: 0, False: 1.27k]
  ------------------
  445|      0|			signal_emit(rec->failure_signal, 3, server, rec->cmd->name, rec->arg);
  446|  1.27k|	} else if (rec->last_signal != NULL) {
  ------------------
  |  Branch (446:13): [True: 0, False: 456]
  ------------------
  447|       |                /* emit the last signal */
  448|      0|		signal_emit(rec->last_signal, 1, server);
  449|      0|	}
  450|       |
  451|  1.72k|	server->redirect_active = g_slist_remove(server->redirect_active, rec);
  452|       |
  453|  1.72k|	server_redirect_destroy(rec);
  454|  1.72k|}
servers-redirect.c:redirect_find:
  463|   108k|{
  464|   108k|        REDIRECT_REC *redirect;
  465|   108k|	GSList *tmp, *next;
  466|   108k|	time_t now;
  467|   108k|        const char *match_signal;
  468|       |
  469|       |	/* find the redirection */
  470|   108k|	*signal = NULL; redirect = NULL;
  471|   288k|	for (tmp = server->redirects; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (471:32): [True: 181k, False: 107k]
  ------------------
  472|   181k|		REDIRECT_REC *rec = tmp->data;
  473|       |
  474|       |		/* already active, don't try to start it again */
  475|   181k|		if (g_slist_find(server->redirect_active, rec) != NULL)
  ------------------
  |  Branch (475:7): [True: 8.14k, False: 173k]
  ------------------
  476|  8.14k|			continue;
  477|       |
  478|   173k|		match_signal = redirect_match(rec, event, args, match);
  479|   173k|		if (match_signal != NULL && *match != MATCH_NONE) {
  ------------------
  |  |  350|  1.51k|#define MATCH_NONE      0
  ------------------
  |  Branch (479:7): [True: 1.51k, False: 172k]
  |  Branch (479:31): [True: 1.51k, False: 0]
  ------------------
  480|  1.51k|			redirect = rec;
  481|  1.51k|                        *signal = match_signal;
  482|  1.51k|			break;
  483|  1.51k|		}
  484|   173k|	}
  485|       |
  486|   108k|	if (g_strcmp0("event 263", event) == 0) { /* RPL_TRYAGAIN */
  ------------------
  |  Branch (486:6): [True: 267, False: 108k]
  ------------------
  487|    267|		char *params, *command;
  488|    267|		params = event_get_params(args, 3, NULL, &command, NULL);
  489|       |
  490|    320|		for (tmp = server->redirects; tmp != NULL; tmp = next) {
  ------------------
  |  Branch (490:33): [True: 269, False: 51]
  ------------------
  491|    269|			REDIRECT_REC *rec = tmp->data;
  492|       |
  493|    269|			next = tmp->next;
  494|       |
  495|    269|			if (rec == redirect)
  ------------------
  |  Branch (495:8): [True: 0, False: 269]
  ------------------
  496|      0|				break;
  497|       |
  498|    269|			if (g_slist_find(server->redirect_active, rec) != NULL)
  ------------------
  |  Branch (498:8): [True: 4, False: 265]
  ------------------
  499|      4|				continue;
  500|       |
  501|    265|			if (redirect_args_match(rec->cmd->name, command, rec->cmd->pos)) {
  ------------------
  |  Branch (501:8): [True: 216, False: 49]
  ------------------
  502|       |				/* the server crashed our command with RPL_TRYAGAIN, send the
  503|       |				   failure */
  504|    216|				rec->aborted = TRUE;
  505|    216|				redirect_abort(server, rec);
  506|    216|				break;
  507|    216|			}
  508|    265|		}
  509|    267|		g_free(params);
  510|    267|	}
  511|       |
  512|       |	/* remove the destroyed, non-remote and timeouted remote
  513|       |	   redirections that should have happened before this redirection */
  514|   108k|	now = time(NULL);
  515|   288k|	for (tmp = server->redirects; tmp != NULL; tmp = next) {
  ------------------
  |  Branch (515:32): [True: 181k, False: 107k]
  ------------------
  516|   181k|		REDIRECT_REC *rec = tmp->data;
  517|       |
  518|   181k|		if (rec == redirect)
  ------------------
  |  Branch (518:7): [True: 1.51k, False: 180k]
  ------------------
  519|  1.51k|			break;
  520|       |
  521|   180k|		next = tmp->next;
  522|   180k|		if (rec->destroyed) {
  ------------------
  |  Branch (522:7): [True: 456, False: 179k]
  ------------------
  523|       |                        /* redirection is finished, destroy it */
  524|    456|			redirect_abort(server, rec);
  525|   179k|		} else if (redirect != NULL) {
  ------------------
  |  Branch (525:14): [True: 113, False: 179k]
  ------------------
  526|       |                        /* check if redirection failed */
  527|    113|			if (rec->aborted ||
  ------------------
  |  Branch (527:8): [True: 0, False: 113]
  ------------------
  528|    113|			    rec->failures++ >= MAX_FAILURE_COUNT) {
  ------------------
  |  |   34|    113|#define MAX_FAILURE_COUNT 1
  ------------------
  |  Branch (528:8): [True: 0, False: 113]
  ------------------
  529|       |                                /* enough failures, abort it now */
  530|      0|				if (!rec->remote || REDIRECT_IS_TIMEOUTED(rec))
  ------------------
  |  |  457|      0|	((now-(rec)->created) > (rec)->cmd->timeout)
  |  |  ------------------
  |  |  |  Branch (457:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (530:9): [True: 0, False: 0]
  ------------------
  531|      0|					redirect_abort(server, rec);
  532|      0|			}
  533|    113|		}
  534|   180k|	}
  535|       |
  536|   108k|        return redirect;
  537|   108k|}
servers-redirect.c:sig_disconnected:
  640|  29.4k|{
  641|  29.4k|	if (!IS_IRC_SERVER(server))
  ------------------
  |  |   41|  29.4k|	(IRC_SERVER(server) ? TRUE : FALSE)
  |  |  ------------------
  |  |  |  |   34|  29.4k|	PROTO_CHECK_CAST(SERVER(server), IRC_SERVER_REC, chat_type, "IRC")
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  29.4k|	((cast *) chat_protocol_check_cast(object, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:2): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|  29.4k|				offsetof(cast, type_field), id))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (641:6): [True: 0, False: 29.4k]
  ------------------
  642|      0|                return;
  643|       |
  644|  29.4k|	g_slist_free(server->redirect_active);
  645|  29.4k|        server->redirect_active = NULL;
  646|  29.4k|	g_slist_foreach(server->redirects,
  647|  29.4k|			(GFunc) server_redirect_destroy, NULL);
  648|  29.4k|	g_slist_free(server->redirects);
  649|  29.4k|        server->redirects = NULL;
  650|       |
  651|  29.4k|	if (server->redirect_next != NULL) {
  ------------------
  |  Branch (651:6): [True: 424, False: 28.9k]
  ------------------
  652|    424|		server_redirect_destroy(server->redirect_next);
  653|       |                server->redirect_next = NULL;
  654|    424|	}
  655|  29.4k|}

config_node_find:
   24|  2.98M|{
   25|  2.98M|	GSList *tmp;
   26|       |
   27|  2.98M|	g_return_val_if_fail(node != NULL, NULL);
  ------------------
  |  Branch (27:2): [True: 2.98M, False: 0]
  |  Branch (27:2): [True: 2.98M, False: 0]
  |  Branch (27:2): [Folded, False: 2.98M]
  ------------------
   28|  2.98M|	g_return_val_if_fail(key != NULL, NULL);
  ------------------
  |  Branch (28:2): [True: 2.98M, False: 0]
  |  Branch (28:2): [True: 2.98M, False: 0]
  |  Branch (28:2): [Folded, False: 2.98M]
  ------------------
   29|  2.98M|	g_return_val_if_fail(is_node_list(node), NULL);
  ------------------
  |  Branch (29:2): [True: 2.98M, False: 0]
  |  Branch (29:2): [True: 0, False: 0]
  |  Branch (29:2): [True: 2.98M, False: 0]
  |  Branch (29:2): [Folded, False: 2.98M]
  ------------------
   30|       |
   31|  7.07M|	for (tmp = node->value; tmp != NULL; tmp = tmp->next) {
  ------------------
  |  Branch (31:26): [True: 4.64M, False: 2.43M]
  ------------------
   32|  4.64M|		CONFIG_NODE *node = tmp->data;
   33|       |
   34|  4.64M|		if (node->key != NULL && g_ascii_strcasecmp(node->key, key) == 0)
  ------------------
  |  Branch (34:7): [True: 4.30M, False: 342k]
  |  Branch (34:28): [True: 551k, False: 3.75M]
  ------------------
   35|   551k|			return node;
   36|  4.64M|	}
   37|       |
   38|  2.43M|	return NULL;
   39|  2.98M|}
config_node_section:
   42|  2.51M|{
   43|  2.51M|	return config_node_section_index(rec, parent, key, -1, new_type);
   44|  2.51M|}
config_node_section_index:
   48|  2.51M|{
   49|  2.51M|	CONFIG_NODE *node;
   50|  2.51M|        int nindex;
   51|       |
   52|  2.51M|	g_return_val_if_fail(parent != NULL, NULL);
  ------------------
  |  Branch (52:2): [True: 2.51M, False: 0]
  |  Branch (52:2): [True: 2.51M, False: 0]
  |  Branch (52:2): [Folded, False: 2.51M]
  ------------------
   53|  2.51M|	g_return_val_if_fail(is_node_list(parent), NULL);
  ------------------
  |  Branch (53:2): [True: 2.51M, False: 46]
  |  Branch (53:2): [True: 46, False: 0]
  |  Branch (53:2): [True: 2.51M, False: 0]
  |  Branch (53:2): [Folded, False: 2.51M]
  ------------------
   54|       |
   55|  2.51M|	node = key == NULL ? NULL : config_node_find(parent, key);
  ------------------
  |  Branch (55:9): [True: 46, False: 2.51M]
  ------------------
   56|  2.51M|	if (node != NULL) {
  ------------------
  |  Branch (56:6): [True: 462k, False: 2.05M]
  ------------------
   57|   462k|		nindex = g_slist_index(parent->value, node);
   58|   462k|		if (index >= 0 && nindex != index &&
  ------------------
  |  Branch (58:7): [True: 0, False: 462k]
  |  Branch (58:21): [True: 0, False: 0]
  ------------------
   59|      0|		    nindex <= g_slist_length(parent->value)) {
  ------------------
  |  Branch (59:7): [True: 0, False: 0]
  ------------------
   60|       |			/* move it to wanted position */
   61|      0|			parent->value = g_slist_remove(parent->value, node);
   62|      0|			parent->value = g_slist_insert(parent->value, node, index);
   63|      0|		}
   64|   462k|		if (!is_node_list(node)) {
  ------------------
  |  |   15|   462k|        ((a)->type == NODE_TYPE_BLOCK || (a)->type == NODE_TYPE_LIST)
  |  |  ------------------
  |  |  |  Branch (15:10): [True: 462k, False: 4]
  |  |  |  Branch (15:42): [True: 4, False: 0]
  |  |  ------------------
  ------------------
   65|      0|			int error = 0;
   66|       |
   67|      0|			if (new_type != -1) {
  ------------------
  |  Branch (67:8): [True: 0, False: 0]
  ------------------
   68|      0|				config_node_remove(rec, parent, node);
   69|      0|				node = NULL;
   70|      0|				error = 1;
   71|      0|			} else if (!g_hash_table_lookup_extended(rec->cache_nodes, node, NULL, NULL)) {
  ------------------
  |  Branch (71:15): [True: 0, False: 0]
  ------------------
   72|      0|				g_hash_table_insert(rec->cache_nodes, node, NULL);
   73|      0|				error = 1;
   74|      0|			}
   75|      0|			if (error)
  ------------------
  |  Branch (75:8): [True: 0, False: 0]
  ------------------
   76|      0|				g_critical("Expected %s node at `%s%s/%s' was of scalar type. Corrupt config?",
  ------------------
  |  Branch (76:5): [True: 0, False: 0]
  |  Branch (76:5): [True: 0, False: 0]
  |  Branch (76:5): [True: 0, False: 0]
  |  Branch (76:5): [True: 0, False: 0]
  ------------------
   77|      0|					   new_type == NODE_TYPE_LIST ? "list" : new_type == NODE_TYPE_BLOCK ? "block" : "section",
   78|      0|					   parent == rec->mainnode ? "" : "..",
   79|      0|					   parent->key == NULL ? "" : parent->key, key);
   80|   462k|		} else {
   81|   462k|			g_return_val_if_fail(new_type == -1 || new_type == node->type, NULL);
  ------------------
  |  Branch (81:4): [True: 462k, False: 4]
  |  Branch (81:4): [True: 4, False: 0]
  |  Branch (81:4): [True: 462k, False: 0]
  |  Branch (81:4): [Folded, False: 462k]
  ------------------
   82|   462k|			return node;
   83|   462k|		}
   84|   462k|	}
   85|       |
   86|  2.05M|	if (new_type == -1)
  ------------------
  |  Branch (86:6): [True: 2.05M, False: 157]
  ------------------
   87|  2.05M|		return NULL;
   88|       |
   89|    157|	node = g_new0(CONFIG_NODE, 1);
  ------------------
  |  Branch (89:9): [True: 157, False: 0]
  |  Branch (89:9): [True: 0, False: 157]
  ------------------
   90|    157|	parent->value = index < 0 ? g_slist_append(parent->value, node) :
  ------------------
  |  Branch (90:18): [True: 157, False: 0]
  ------------------
   91|    157|		g_slist_insert(parent->value, node, index);
   92|       |
   93|    157|	node->type = new_type;
   94|    157|	node->key = key == NULL ? NULL : g_strdup(key);
  ------------------
  |  Branch (94:14): [True: 46, False: 111]
  ------------------
   95|       |
   96|    157|	return node;
   97|  2.05M|}
config_node_traverse:
  100|  2.52M|{
  101|  2.52M|	CONFIG_NODE *node;
  102|  2.52M|	char **list, **tmp, *str;
  103|  2.52M|	int is_list, new_type;
  104|       |
  105|  2.52M|	g_return_val_if_fail(rec != NULL, NULL);
  ------------------
  |  Branch (105:2): [True: 2.52M, False: 0]
  |  Branch (105:2): [True: 2.52M, False: 0]
  |  Branch (105:2): [Folded, False: 2.52M]
  ------------------
  106|       |
  107|  2.52M|	if (section == NULL || *section == '\0')
  ------------------
  |  Branch (107:6): [True: 4, False: 2.52M]
  |  Branch (107:25): [True: 0, False: 2.52M]
  ------------------
  108|      4|		return rec->mainnode;
  109|       |
  110|       |	/* check if it already exists in cache */
  111|  2.52M|	node = g_hash_table_lookup(rec->cache, section);
  112|  2.52M|	if (node != NULL) {
  ------------------
  |  Branch (112:6): [True: 2.44M, False: 77.2k]
  ------------------
  113|  2.44M|		if (create) {
  ------------------
  |  Branch (113:7): [True: 7.60k, False: 2.43M]
  ------------------
  114|  7.60k|			const char *path = strrchr(section, '/');
  115|  7.60k|			if (path == NULL) path = section;
  ------------------
  |  Branch (115:8): [True: 7.60k, False: 0]
  ------------------
  116|      0|			else path++;
  117|  7.60k|			new_type = *path == '(' ? NODE_TYPE_LIST : NODE_TYPE_BLOCK;
  ------------------
  |  Branch (117:15): [True: 0, False: 7.60k]
  ------------------
  118|  7.60k|			if (node->type != new_type) {
  ------------------
  |  Branch (118:8): [True: 0, False: 7.60k]
  ------------------
  119|      0|				g_critical("Expected %s node at `%s' was of %s type. Corrupt config?",
  ------------------
  |  Branch (119:5): [True: 0, False: 0]
  |  Branch (119:5): [True: 0, False: 0]
  ------------------
  120|      0|						   new_type == NODE_TYPE_LIST ? "list" : "block", section,
  121|      0|						   node->type == NODE_TYPE_LIST ? "list" : "block");
  122|      0|				node->type = new_type;
  123|      0|			}
  124|  7.60k|		}
  125|  2.44M|		return node;
  126|  2.44M|	}
  127|       |
  128|  77.2k|        new_type = -1;
  129|       |
  130|  77.2k|	node = rec->mainnode;
  131|  77.2k|	list = g_strsplit(section, "/", -1);
  132|  77.2k|	for (tmp = list; *tmp != NULL; tmp++) {
  ------------------
  |  Branch (132:19): [True: 77.2k, False: 15]
  ------------------
  133|  77.2k|		is_list = **tmp == '(';
  134|  77.2k|		if (create) {
  ------------------
  |  Branch (134:7): [True: 3, False: 77.2k]
  ------------------
  135|      3|			CONFIG_NODE *tmpnode;
  136|       |
  137|      3|			new_type = is_list ? NODE_TYPE_LIST : NODE_TYPE_BLOCK;
  ------------------
  |  Branch (137:15): [True: 0, False: 3]
  ------------------
  138|      3|			tmpnode = config_node_find(node, *tmp + is_list);
  139|      3|			if (tmpnode != NULL && tmpnode->type != new_type) {
  ------------------
  |  Branch (139:8): [True: 0, False: 3]
  |  Branch (139:27): [True: 0, False: 0]
  ------------------
  140|      0|				g_critical("Expected %s node at `%s' was of scalar type. Corrupt config?", is_list ? "list" : "block", section);
  ------------------
  |  Branch (140:5): [True: 0, False: 0]
  ------------------
  141|      0|				config_node_remove(rec, node, tmpnode);
  142|      0|			}
  143|      3|		}
  144|       |
  145|  77.2k|		node = config_node_section(rec, node, *tmp + is_list, new_type);
  146|  77.2k|		if (node == NULL) {
  ------------------
  |  Branch (146:7): [True: 77.2k, False: 15]
  ------------------
  147|  77.2k|			g_strfreev(list);
  148|  77.2k|			return NULL;
  149|  77.2k|		}
  150|  77.2k|	}
  151|     15|	g_strfreev(list);
  152|       |
  153|     15|	if (!is_node_list(node)) {
  ------------------
  |  |   15|     15|        ((a)->type == NODE_TYPE_BLOCK || (a)->type == NODE_TYPE_LIST)
  |  |  ------------------
  |  |  |  Branch (15:10): [True: 11, False: 4]
  |  |  |  Branch (15:42): [True: 4, False: 0]
  |  |  ------------------
  ------------------
  154|       |		/* Will die. Better to not corrupt the config further in this case. */
  155|      0|		g_critical("Attempt to use non-list node `%s' as list. Corrupt config?", section);
  156|      0|		return NULL;
  157|      0|	}
  158|       |
  159|       |	/* save to cache */
  160|     15|        str = g_strdup(section);
  161|     15|	g_hash_table_insert(rec->cache, str, node);
  162|     15|	g_hash_table_insert(rec->cache_nodes, node, str);
  163|     15|	return node;
  164|     15|}
config_get_str:
  167|  77.2k|{
  168|  77.2k|	CONFIG_NODE *parent, *node;
  169|  77.2k|	char *path;
  170|       |
  171|  77.2k|	g_return_val_if_fail(rec != NULL, (char *) def);
  ------------------
  |  Branch (171:2): [True: 77.2k, False: 0]
  |  Branch (171:2): [True: 77.2k, False: 0]
  |  Branch (171:2): [Folded, False: 77.2k]
  ------------------
  172|  77.2k|	g_return_val_if_fail(key != NULL, (char *) def);
  ------------------
  |  Branch (172:2): [True: 77.2k, False: 0]
  |  Branch (172:2): [True: 77.2k, False: 0]
  |  Branch (172:2): [Folded, False: 77.2k]
  ------------------
  173|       |
  174|       |	/* check if it already exists in cache */
  175|  77.2k|	path = g_strconcat(section == NULL ? "" : section, "/", key, NULL);
  ------------------
  |  Branch (175:21): [True: 4, False: 77.2k]
  ------------------
  176|  77.2k|	node = g_hash_table_lookup(rec->cache, path);
  177|       |
  178|  77.2k|	if (node != NULL)
  ------------------
  |  Branch (178:6): [True: 0, False: 77.2k]
  ------------------
  179|      0|		g_free(path);
  180|  77.2k|	else {
  181|  77.2k|		parent = config_node_traverse(rec, section, FALSE);
  182|  77.2k|		node = parent == NULL ? NULL :
  ------------------
  |  Branch (182:10): [True: 77.2k, False: 4]
  ------------------
  183|  77.2k|			config_node_find(parent, key);
  184|       |
  185|       |		/* save to cache */
  186|  77.2k|		if (node == NULL)
  ------------------
  |  Branch (186:7): [True: 77.2k, False: 4]
  ------------------
  187|  77.2k|			g_free(path);
  188|      4|		else {
  189|      4|			g_hash_table_insert(rec->cache, path, node);
  190|      4|			g_hash_table_insert(rec->cache_nodes, node, path);
  191|      4|		}
  192|  77.2k|	}
  193|       |
  194|  77.2k|	return (node == NULL || !has_node_value(node)) ? (char *) def : node->value;
  ------------------
  |  |   13|      4|	((a)->type == NODE_TYPE_KEY || (a)->type == NODE_TYPE_VALUE)
  |  |  ------------------
  |  |  |  Branch (13:3): [True: 4, False: 0]
  |  |  |  Branch (13:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (194:10): [True: 77.2k, False: 4]
  ------------------
  195|  77.2k|}
config_get_int:
  198|      2|{
  199|      2|	char *str;
  200|       |
  201|      2|	str = config_get_str(rec, section, key, NULL);
  202|      2|	if (str == NULL) return def;
  ------------------
  |  Branch (202:6): [True: 0, False: 2]
  ------------------
  203|       |
  204|      2|        return atoi(str);
  205|      2|}
config_get_bool:
  208|      2|{
  209|      2|	char *str;
  210|       |
  211|      2|	str = config_get_str(rec, section, key, NULL);
  212|      2|	if (str == NULL) return def;
  ------------------
  |  Branch (212:6): [True: 0, False: 2]
  ------------------
  213|       |
  214|      2|        return i_toupper(*str) == 'T' || i_toupper(*str) == 'Y';
  ------------------
  |  |   72|      2|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
                      return i_toupper(*str) == 'T' || i_toupper(*str) == 'Y';
  ------------------
  |  |   72|      2|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
  |  Branch (214:16): [True: 0, False: 0]
  |  Branch (214:16): [True: 0, False: 2]
  |  Branch (214:16): [True: 2, Folded]
  |  Branch (214:16): [True: 0, False: 2]
  |  Branch (214:42): [True: 0, False: 0]
  |  Branch (214:42): [True: 0, False: 2]
  |  Branch (214:42): [True: 2, Folded]
  |  Branch (214:42): [True: 0, False: 2]
  ------------------
  215|      2|}
config_node_get_str:
  218|   463k|{
  219|   463k|	CONFIG_NODE *node;
  220|       |
  221|   463k|        if (parent == NULL) return (char *) def;
  ------------------
  |  Branch (221:13): [True: 0, False: 463k]
  ------------------
  222|       |
  223|   463k|	node = config_node_find(parent, key);
  224|   463k|	return (char *) ((node != NULL && has_node_value(node)) ?
  ------------------
  |  |   13|  88.5k|	((a)->type == NODE_TYPE_KEY || (a)->type == NODE_TYPE_VALUE)
  |  |  ------------------
  |  |  |  Branch (13:3): [True: 88.5k, False: 0]
  |  |  |  Branch (13:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (224:20): [True: 88.5k, False: 375k]
  ------------------
  225|   375k|			 node->value : def);
  226|   463k|}
config_node_get_int:
  229|    274|{
  230|    274|	char *str;
  231|       |
  232|    274|	str = config_node_get_str(parent, key, NULL);
  233|    274|	if (str == NULL) return def;
  ------------------
  |  Branch (233:6): [True: 174, False: 100]
  ------------------
  234|       |
  235|    100|	return atoi(str);
  236|    274|}
config_node_get_bool:
  239|   319k|{
  240|   319k|	char *str;
  241|       |
  242|   319k|	str = config_node_get_str(parent, key, NULL);
  243|   319k|	if (str == NULL) return def;
  ------------------
  |  Branch (243:6): [True: 319k, False: 40]
  ------------------
  244|       |
  245|     40|	return i_toupper(*str) == 'T' || i_toupper(*str) == 'Y' ||
  ------------------
  |  |   72|     40|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
              	return i_toupper(*str) == 'T' || i_toupper(*str) == 'Y' ||
  ------------------
  |  |   72|     40|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
  |  Branch (245:9): [True: 0, False: 0]
  |  Branch (245:9): [True: 0, False: 40]
  |  Branch (245:9): [True: 40, Folded]
  |  Branch (245:9): [True: 0, False: 40]
  |  Branch (245:35): [True: 0, False: 0]
  |  Branch (245:35): [True: 0, False: 40]
  |  Branch (245:35): [True: 40, Folded]
  |  Branch (245:35): [True: 22, False: 18]
  ------------------
  246|     18|		(i_toupper(*str) == 'O' && i_toupper(str[1]) == 'N');
  ------------------
  |  |   72|     18|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
              		(i_toupper(*str) == 'O' && i_toupper(str[1]) == 'N');
  ------------------
  |  |   72|      0|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
  |  Branch (246:4): [True: 0, False: 0]
  |  Branch (246:4): [True: 0, False: 18]
  |  Branch (246:4): [True: 18, Folded]
  |  Branch (246:4): [True: 0, False: 18]
  |  Branch (246:30): [True: 0, False: 0]
  |  Branch (246:30): [True: 0, False: 0]
  |  Branch (246:30): [True: 0, Folded]
  |  Branch (246:30): [True: 0, False: 0]
  ------------------
  247|   319k|}
config_node_first:
  327|     78|{
  328|     78|	while (list != NULL) {
  ------------------
  |  Branch (328:9): [True: 72, False: 6]
  ------------------
  329|     72|		CONFIG_NODE *node = list->data;
  330|       |
  331|     72|		if (node->type != NODE_TYPE_COMMENT)
  ------------------
  |  Branch (331:7): [True: 72, False: 0]
  ------------------
  332|     72|                        break;
  333|      0|		list = list->next;
  334|      0|	}
  335|     78|	return list;
  336|     78|}
config_node_next:
  339|     72|{
  340|     72|	list = list->next;
  341|     72|        return config_node_first(list);
  342|     72|}

config_parse_init:
  252|      6|{
  253|      6|	GScanner *scanner;
  254|       |
  255|      6|	g_free_and_null(rec->last_error);
  ------------------
  |  |   67|      6|	G_STMT_START { \
  |  |   68|      6|	  if (a) { g_free(a); (a) = NULL; } \
  |  |  ------------------
  |  |  |  Branch (68:8): [True: 0, False: 6]
  |  |  ------------------
  |  |   69|      6|	} G_STMT_END
  ------------------
  |  Branch (255:2): [Folded, False: 6]
  ------------------
  256|      6|	config_nodes_remove_all(rec);
  257|       |
  258|      6|	rec->scanner = scanner = g_scanner_new(NULL);
  259|      6|	scanner->config->skip_comment_single = FALSE;
  260|      6|	scanner->config->cset_identifier_first = G_CSET_a_2_z"_0123456789"G_CSET_A_2_Z;
  261|      6|	scanner->config->cset_skip_characters = " \t";
  262|      6|	scanner->config->scan_binary = FALSE;
  263|      6|	scanner->config->scan_octal = FALSE;
  264|      6|	scanner->config->scan_float = FALSE;
  265|      6|	scanner->config->scan_string_sq = TRUE;
  266|      6|	scanner->config->scan_string_dq = TRUE;
  267|      6|	scanner->config->scan_identifier_1char = TRUE;
  268|      6|	scanner->config->identifier_2_string = TRUE;
  269|       |
  270|      6|	scanner->user_data = rec;
  271|      6|	scanner->input_name = name;
  272|      6|	scanner->msg_handler = (GScannerMsgFunc) config_parse_error_func;
  273|      6|}
config_parse_data:
  297|      6|{
  298|      6|	config_parse_init(rec, input_name);
  299|      6|	g_scanner_input_text(rec->scanner, data, strlen(data));
  300|      6|	config_parse_loop(rec, rec->mainnode, G_TOKEN_EOF);
  301|      6|	g_scanner_destroy(rec->scanner);
  302|       |
  303|      6|	return rec->last_error == NULL ? 0 : -1;
  ------------------
  |  Branch (303:9): [True: 6, False: 0]
  ------------------
  304|      6|}
config_open:
  307|     10|{
  308|     10|	CONFIG_REC *rec;
  309|     10|	int f;
  310|       |
  311|     10|	if (fname != NULL) {
  ------------------
  |  Branch (311:6): [True: 4, False: 6]
  ------------------
  312|      4|		f = open(fname, O_RDONLY | (create_mode != -1 ? O_CREAT : 0), create_mode);
  ------------------
  |  Branch (312:31): [True: 0, False: 4]
  ------------------
  313|      4|		if (f == -1) return NULL;
  ------------------
  |  Branch (313:7): [True: 4, False: 0]
  ------------------
  314|      0|		close(f);
  315|      0|	}
  316|       |
  317|      6|	rec = g_new0(CONFIG_REC, 1);
  ------------------
  |  Branch (317:8): [True: 6, False: 0]
  |  Branch (317:8): [True: 0, False: 6]
  ------------------
  318|      6|	rec->fname = fname == NULL ? NULL : g_strdup(fname);
  ------------------
  |  Branch (318:15): [True: 6, False: 0]
  ------------------
  319|      6|	rec->create_mode = create_mode;
  320|      6|	rec->mainnode = g_new0(CONFIG_NODE, 1);
  ------------------
  |  Branch (320:18): [True: 6, False: 0]
  |  Branch (320:18): [True: 0, False: 6]
  ------------------
  321|      6|	rec->mainnode->type = NODE_TYPE_BLOCK;
  322|      6|	rec->cache = g_hash_table_new((GHashFunc) i_istr_hash, (GCompareFunc) i_istr_equal);
  323|      6|	rec->cache_nodes = g_hash_table_new((GHashFunc) g_direct_hash, (GCompareFunc) g_direct_equal);
  324|       |
  325|      6|	return rec;
  326|     10|}
config_close:
  329|      4|{
  330|      4|	g_return_if_fail(rec != NULL);
  ------------------
  |  Branch (330:2): [True: 4, False: 0]
  |  Branch (330:2): [True: 4, False: 0]
  |  Branch (330:2): [Folded, False: 4]
  ------------------
  331|       |
  332|      4|	config_nodes_remove_all(rec);
  333|      4|	g_free(rec->mainnode);
  334|       |
  335|      4|	g_hash_table_foreach(rec->cache, (GHFunc) g_free, NULL);
  336|      4|	g_hash_table_destroy(rec->cache);
  337|      4|	g_hash_table_destroy(rec->cache_nodes);
  338|      4|	g_free_not_null(rec->last_error);
  ------------------
  |  |   64|      4|#define g_free_not_null(a) g_free(a)
  ------------------
  339|      4|	g_free_not_null(rec->fname);
  ------------------
  |  |   64|      4|#define g_free_not_null(a) g_free(a)
  ------------------
  340|      4|	g_free(rec);
  341|      4|}
config_change_file_name:
  344|      2|{
  345|      2|	g_return_if_fail(rec != NULL);
  ------------------
  |  Branch (345:2): [True: 2, False: 0]
  |  Branch (345:2): [True: 2, False: 0]
  |  Branch (345:2): [Folded, False: 2]
  ------------------
  346|      2|	g_return_if_fail(fname != NULL);
  ------------------
  |  Branch (346:2): [True: 2, False: 0]
  |  Branch (346:2): [True: 2, False: 0]
  |  Branch (346:2): [Folded, False: 2]
  ------------------
  347|       |
  348|      2|	g_free_not_null(rec->fname);
  ------------------
  |  |   64|      2|#define g_free_not_null(a) g_free(a)
  ------------------
  349|      2|	rec->fname = g_strdup(fname);
  350|       |
  351|      2|	if (create_mode != -1)
  ------------------
  |  Branch (351:6): [True: 2, False: 0]
  ------------------
  352|      2|		rec->create_mode = create_mode;
  353|      2|}
parse.c:config_parse_loop:
  217|    158|{
  218|    158|	GTokenType expected_token;
  219|       |
  220|    158|	g_return_if_fail(rec != NULL);
  ------------------
  |  Branch (220:2): [True: 158, False: 0]
  |  Branch (220:2): [True: 158, False: 0]
  |  Branch (220:2): [Folded, False: 158]
  ------------------
  221|    158|	g_return_if_fail(node != NULL);
  ------------------
  |  Branch (221:2): [True: 158, False: 0]
  |  Branch (221:2): [True: 158, False: 0]
  |  Branch (221:2): [Folded, False: 158]
  ------------------
  222|       |
  223|  1.15k|	for (;;) {
  224|  1.15k|		config_parse_peek_token(rec->scanner, node);
  225|  1.15k|		if (rec->scanner->next_token == expect ||
  ------------------
  |  Branch (225:7): [True: 158, False: 992]
  ------------------
  226|    992|		    rec->scanner->next_token == G_TOKEN_EOF) break;
  ------------------
  |  Branch (226:7): [True: 0, False: 992]
  ------------------
  227|       |
  228|    992|		expected_token = config_parse_symbol(rec, node);
  229|    992|		if (expected_token != G_TOKEN_NONE) {
  ------------------
  |  Branch (229:7): [True: 0, False: 992]
  ------------------
  230|      0|			if (expected_token == G_TOKEN_ERROR)
  ------------------
  |  Branch (230:8): [True: 0, False: 0]
  ------------------
  231|      0|				expected_token = G_TOKEN_NONE;
  232|      0|			g_scanner_unexp_token(rec->scanner, expected_token, NULL, "symbol", NULL, NULL, TRUE);
  233|      0|		}
  234|    992|	}
  235|    158|}
parse.c:config_parse_peek_token:
   96|  3.08k|{
   97|  3.08k|	int prev_empty = FALSE;
   98|       |
   99|  4.80k|	for (;;) {
  100|  4.80k|		g_scanner_peek_next_token(scanner);
  101|       |
  102|  4.80k|		if (scanner->next_token == G_TOKEN_COMMENT_SINGLE)
  ------------------
  |  Branch (102:7): [True: 540, False: 4.26k]
  ------------------
  103|    540|			node_add_comment(node, scanner->next_value.v_string);
  104|  4.26k|		else if (scanner->next_token == '\n') {
  ------------------
  |  Branch (104:12): [True: 1.17k, False: 3.08k]
  ------------------
  105|  1.17k|			if (prev_empty) node_add_comment(node, NULL);
  ------------------
  |  Branch (105:8): [True: 322, False: 850]
  ------------------
  106|  1.17k|		} else
  107|  3.08k|			break;
  108|       |
  109|  1.71k|		prev_empty = TRUE;
  110|  1.71k|		g_scanner_get_next_token(scanner);
  111|  1.71k|	}
  112|  3.08k|}
parse.c:node_add_comment:
   54|    862|{
   55|    862|	CONFIG_NODE *node;
   56|       |
   57|    862|	g_return_val_if_fail(parent != NULL, -1);
  ------------------
  |  Branch (57:2): [True: 862, False: 0]
  |  Branch (57:2): [True: 862, False: 0]
  |  Branch (57:2): [Folded, False: 862]
  ------------------
   58|       |
   59|    862|	if (!is_node_list(parent))
  ------------------
  |  |   15|    862|        ((a)->type == NODE_TYPE_BLOCK || (a)->type == NODE_TYPE_LIST)
  |  |  ------------------
  |  |  |  Branch (15:10): [True: 862, False: 0]
  |  |  |  Branch (15:42): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   60|      0|		return -1;
   61|       |
   62|    862|	node = g_new0(CONFIG_NODE, 1);
  ------------------
  |  Branch (62:9): [True: 862, False: 0]
  |  Branch (62:9): [True: 0, False: 862]
  ------------------
   63|    862|	node->type = NODE_TYPE_COMMENT;
   64|    862|	node->value = str == NULL ? NULL : g_strdup(str);
  ------------------
  |  Branch (64:16): [True: 322, False: 540]
  ------------------
   65|       |
   66|    862|	parent->value = g_slist_append(parent->value, node);
   67|    862|	return 0;
   68|    862|}
parse.c:config_parse_symbol:
  131|    992|{
  132|    992|	CONFIG_NODE *newnode;
  133|    992|	GTokenType last_char;
  134|    992|	int print_warning;
  135|    992|	char *key;
  136|       |
  137|    992|	g_return_val_if_fail(rec != NULL, G_TOKEN_ERROR);
  ------------------
  |  Branch (137:2): [True: 992, False: 0]
  |  Branch (137:2): [True: 992, False: 0]
  |  Branch (137:2): [Folded, False: 992]
  ------------------
  138|    992|	g_return_val_if_fail(node != NULL, G_TOKEN_ERROR);
  ------------------
  |  Branch (138:2): [True: 992, False: 0]
  |  Branch (138:2): [True: 992, False: 0]
  |  Branch (138:2): [Folded, False: 992]
  ------------------
  139|       |
  140|    992|	config_parse_get_token(rec->scanner, node);
  141|       |
  142|    992|	last_char = (GTokenType) (node->type == NODE_TYPE_LIST ? ',' : ';');
  ------------------
  |  Branch (142:28): [True: 46, False: 946]
  ------------------
  143|       |
  144|       |	/* key */
  145|    992|	key = NULL;
  146|    992|	if (node->type != NODE_TYPE_LIST &&
  ------------------
  |  Branch (146:6): [True: 946, False: 46]
  ------------------
  147|    946|	    (rec->scanner->token == G_TOKEN_STRING)) {
  ------------------
  |  Branch (147:6): [True: 946, False: 0]
  ------------------
  148|    946|		key = g_strdup(rec->scanner->value.v_string);
  149|       |
  150|    946|                config_parse_warn_missing(rec, node, '=', TRUE);
  151|    946|		config_parse_get_token(rec->scanner, node);
  152|    946|	}
  153|       |
  154|    992| 	switch (rec->scanner->token) {
  155|    840|	case G_TOKEN_STRING:
  ------------------
  |  Branch (155:2): [True: 840, False: 152]
  ------------------
  156|       |		/* value */
  157|    840|		config_node_set_str(rec, node, key, rec->scanner->value.v_string);
  158|    840|		g_free_not_null(key);
  ------------------
  |  |   64|    840|#define g_free_not_null(a) g_free(a)
  ------------------
  159|       |
  160|    840|		print_warning = TRUE;
  161|    840|		if (node->type == NODE_TYPE_LIST) {
  ------------------
  |  Branch (161:7): [True: 0, False: 840]
  ------------------
  162|       |			/* if it's last item it doesn't need comma */
  163|      0|			config_parse_peek_token(rec->scanner, node);
  164|      0|			if (rec->scanner->next_token == ')')
  ------------------
  |  Branch (164:8): [True: 0, False: 0]
  ------------------
  165|      0|				print_warning = FALSE;
  166|      0|		}
  167|       |
  168|    840|		config_parse_warn_missing(rec, node, last_char, print_warning);
  169|    840|		break;
  170|       |
  171|    148|	case '{':
  ------------------
  |  Branch (171:2): [True: 148, False: 844]
  ------------------
  172|       |		/* block */
  173|    148|		if (key == NULL && node->type != NODE_TYPE_LIST) {
  ------------------
  |  Branch (173:7): [True: 46, False: 102]
  |  Branch (173:22): [True: 0, False: 46]
  ------------------
  174|      0|			g_scanner_error(rec->scanner, "Missing key");
  175|      0|			return G_TOKEN_ERROR;
  176|      0|		}
  177|       |
  178|    148|		newnode = config_node_section(rec, node, key, NODE_TYPE_BLOCK);
  179|    148|		config_parse_loop(rec, newnode, (GTokenType) '}');
  180|    148|		g_free_not_null(key);
  ------------------
  |  |   64|    148|#define g_free_not_null(a) g_free(a)
  ------------------
  181|       |
  182|    148|		config_parse_get_token(rec->scanner, node);
  183|    148|		if (rec->scanner->token != '}')
  ------------------
  |  Branch (183:7): [True: 0, False: 148]
  ------------------
  184|      0|			return (GTokenType) '}';
  185|       |
  186|    148|		config_parse_warn_missing(rec, node, last_char, FALSE);
  187|    148|		break;
  188|       |
  189|      4|	case '(':
  ------------------
  |  Branch (189:2): [True: 4, False: 988]
  ------------------
  190|       |		/* list */
  191|      4|		if (key == NULL && !rec->list_of_lists) {
  ------------------
  |  Branch (191:7): [True: 0, False: 4]
  |  Branch (191:22): [True: 0, False: 0]
  ------------------
  192|      0|			g_scanner_error(rec->scanner, "List of lists not allowed");
  193|      0|			return G_TOKEN_ERROR;
  194|      0|		}
  195|       |
  196|      4|		newnode = config_node_section(rec, node, key, NODE_TYPE_LIST);
  197|      4|		config_parse_loop(rec, newnode, (GTokenType) ')');
  198|      4|		g_free_not_null(key);
  ------------------
  |  |   64|      4|#define g_free_not_null(a) g_free(a)
  ------------------
  199|       |
  200|      4|		config_parse_get_token(rec->scanner, node);
  201|      4|		if (rec->scanner->token != ')')
  ------------------
  |  Branch (201:7): [True: 0, False: 4]
  ------------------
  202|      0|			return (GTokenType) ')';
  203|       |
  204|      4|		config_parse_warn_missing(rec, node, last_char, FALSE);
  205|      4|		break;
  206|       |
  207|      0|	default:
  ------------------
  |  Branch (207:2): [True: 0, False: 992]
  ------------------
  208|       |		/* error */
  209|      0|		g_free_not_null(key);
  ------------------
  |  |   64|      0|#define g_free_not_null(a) g_free(a)
  ------------------
  210|      0|		return G_TOKEN_STRING;
  211|    992|	}
  212|       |
  213|    992|        return G_TOKEN_NONE;
  214|    992|}
parse.c:config_parse_get_token:
   72|  2.09k|{
   73|  2.09k|	int prev_empty = FALSE;
   74|       |
   75|  2.09k|	for (;;) {
   76|  2.09k|		g_scanner_get_next_token(scanner);
   77|       |
   78|  2.09k|		if (scanner->token == G_TOKEN_COMMENT_SINGLE)
  ------------------
  |  Branch (78:7): [True: 0, False: 2.09k]
  ------------------
   79|      0|			node_add_comment(node, scanner->value.v_string);
   80|  2.09k|		else if (scanner->token == '\n') {
  ------------------
  |  Branch (80:12): [True: 0, False: 2.09k]
  ------------------
   81|      0|			if (prev_empty) node_add_comment(node, NULL);
  ------------------
  |  Branch (81:8): [True: 0, False: 0]
  ------------------
   82|  2.09k|		} else {
   83|  2.09k|			if (scanner->token == G_TOKEN_INT) {
  ------------------
  |  Branch (83:8): [True: 0, False: 2.09k]
  ------------------
   84|      0|				scanner->token = G_TOKEN_STRING;
   85|      0|				scanner->value.v_string = g_strdup_printf("%lu", scanner->value.v_int);
   86|      0|			}
   87|  2.09k|			break;
   88|  2.09k|		}
   89|       |
   90|      0|		prev_empty = TRUE;
   91|      0|	}
   92|  2.09k|}
parse.c:config_parse_warn_missing:
  117|  1.93k|{
  118|  1.93k|	config_parse_peek_token(rec->scanner, node);
  119|  1.93k|	if (rec->scanner->next_token == expected_token) {
  ------------------
  |  Branch (119:6): [True: 1.93k, False: 4]
  ------------------
  120|  1.93k|		g_scanner_get_next_token(rec->scanner);
  121|  1.93k|		return;
  122|  1.93k|	}
  123|       |
  124|      4|        if (print_warning)
  ------------------
  |  Branch (124:13): [True: 0, False: 4]
  ------------------
  125|      0|		g_scanner_warn(rec->scanner, "Warning: missing '%c'", expected_token);
  126|      4|}
parse.c:i_istr_hash:
   30|  2.59M|{
   31|  2.59M|	const char *s = (const char *) v;
   32|  2.59M|	unsigned int h = 0, g;
   33|       |
   34|   119M|	while (*s != '\0') {
  ------------------
  |  Branch (34:9): [True: 116M, False: 2.59M]
  ------------------
   35|   116M|		h = (h << 4) + i_toupper(*s);
  ------------------
  |  |   72|   116M|#define i_toupper(x) toupper((int) (unsigned char) (x))
  ------------------
  |  Branch (35:18): [True: 0, False: 0]
  |  Branch (35:18): [True: 0, False: 116M]
  |  Branch (35:18): [True: 116M, Folded]
  ------------------
   36|   116M|		if ((g = h & 0xf0000000UL)) {
  ------------------
  |  Branch (36:7): [True: 94.6M, False: 22.2M]
  ------------------
   37|  94.6M|			h = h ^ (g >> 24);
   38|  94.6M|			h = h ^ g;
   39|  94.6M|		}
   40|   116M|		s++;
   41|   116M|	}
   42|       |
   43|  2.59M|	return h /* % M */;
   44|  2.59M|}
parse.c:i_istr_equal:
   24|  2.44M|{
   25|  2.44M|	return g_ascii_strcasecmp((const char *) v, (const char *) v2) == 0;
   26|  2.44M|}

config_node_remove:
   36|  1.18k|{
   37|  1.18k|	g_return_if_fail(node != NULL);
  ------------------
  |  Branch (37:2): [True: 1.18k, False: 0]
  |  Branch (37:2): [True: 1.18k, False: 0]
  |  Branch (37:2): [Folded, False: 1.18k]
  ------------------
   38|       |
   39|  1.18k|	if (parent == NULL)
  ------------------
  |  Branch (39:6): [True: 0, False: 1.18k]
  ------------------
   40|      0|                parent = rec->mainnode;
   41|       |
   42|  1.18k|	rec->modifycounter++;
   43|  1.18k|	cache_remove(rec, node);
   44|  1.18k|	parent->value = g_slist_remove(parent->value, node);
   45|       |
   46|  1.18k|	switch (node->type) {
  ------------------
  |  Branch (46:10): [True: 1.18k, False: 0]
  ------------------
   47|    364|	case NODE_TYPE_KEY:
  ------------------
  |  Branch (47:2): [True: 364, False: 820]
  ------------------
   48|    364|	case NODE_TYPE_VALUE:
  ------------------
  |  Branch (48:2): [True: 0, False: 1.18k]
  ------------------
   49|  1.17k|	case NODE_TYPE_COMMENT:
  ------------------
  |  Branch (49:2): [True: 812, False: 372]
  ------------------
   50|  1.17k|		g_free_not_null(node->value);
  ------------------
  |  |   64|  1.17k|#define g_free_not_null(a) g_free(a)
  ------------------
   51|  1.17k|		break;
   52|      8|	case NODE_TYPE_BLOCK:
  ------------------
  |  Branch (52:2): [True: 8, False: 1.17k]
  ------------------
   53|      8|	case NODE_TYPE_LIST:
  ------------------
  |  Branch (53:2): [True: 0, False: 1.18k]
  ------------------
   54|    952|		while (node->value != NULL)
  ------------------
  |  Branch (54:10): [True: 944, False: 8]
  ------------------
   55|    944|			config_node_remove(rec, node, ((GSList *) node->value)->data);
   56|      8|		break;
   57|  1.18k|	}
   58|  1.18k|	g_free_not_null(node->key);
  ------------------
  |  |   64|  1.18k|#define g_free_not_null(a) g_free(a)
  ------------------
   59|  1.18k|        g_free(node);
   60|  1.18k|}
config_nodes_remove_all:
   83|     10|{
   84|     10|	g_return_if_fail(rec != NULL);
  ------------------
  |  Branch (84:2): [True: 10, False: 0]
  |  Branch (84:2): [True: 10, False: 0]
  |  Branch (84:2): [Folded, False: 10]
  ------------------
   85|     10|	g_return_if_fail(is_node_list(rec->mainnode));
  ------------------
  |  Branch (85:2): [True: 10, False: 0]
  |  Branch (85:2): [True: 0, False: 0]
  |  Branch (85:2): [True: 10, False: 0]
  |  Branch (85:2): [Folded, False: 10]
  ------------------
   86|       |
   87|    250|	while (rec->mainnode->value != NULL)
  ------------------
  |  Branch (87:9): [True: 240, False: 10]
  ------------------
   88|    240|		config_node_remove(rec, rec->mainnode, ((GSList *) rec->mainnode->value)->data);
   89|     10|}
config_node_set_str:
   92|  8.44k|{
   93|  8.44k|	CONFIG_NODE *node;
   94|  8.44k|	int no_key;
   95|       |
   96|  8.44k|	g_return_if_fail(rec != NULL);
  ------------------
  |  Branch (96:2): [True: 8.44k, False: 0]
  |  Branch (96:2): [True: 8.44k, False: 0]
  |  Branch (96:2): [Folded, False: 8.44k]
  ------------------
   97|  8.44k|	g_return_if_fail(parent != NULL);
  ------------------
  |  Branch (97:2): [True: 8.44k, False: 0]
  |  Branch (97:2): [True: 8.44k, False: 0]
  |  Branch (97:2): [Folded, False: 8.44k]
  ------------------
   98|  8.44k|	g_return_if_fail(is_node_list(parent));
  ------------------
  |  Branch (98:2): [True: 8.44k, False: 0]
  |  Branch (98:2): [True: 0, False: 0]
  |  Branch (98:2): [True: 8.44k, False: 0]
  |  Branch (98:2): [Folded, False: 8.44k]
  ------------------
   99|       |
  100|  8.44k|	no_key = key == NULL;
  101|  8.44k|	node = no_key ? NULL : config_node_find(parent, key);
  ------------------
  |  Branch (101:9): [True: 0, False: 8.44k]
  ------------------
  102|       |
  103|  8.44k|	if (value == NULL) {
  ------------------
  |  Branch (103:6): [True: 7.59k, False: 846]
  ------------------
  104|       |                /* remove the key */
  105|  7.59k|		if (node != NULL) config_node_remove(rec, parent, node);
  ------------------
  |  Branch (105:7): [True: 0, False: 7.59k]
  ------------------
  106|  7.59k|		return;
  107|  7.59k|	}
  108|       |
  109|    846|	if (node != NULL && !has_node_value(node)) {
  ------------------
  |  |   13|      0|	((a)->type == NODE_TYPE_KEY || (a)->type == NODE_TYPE_VALUE)
  |  |  ------------------
  |  |  |  Branch (13:3): [True: 0, False: 0]
  |  |  |  Branch (13:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (109:6): [True: 0, False: 846]
  ------------------
  110|      0|		g_critical("Expected scalar node at `..%s/%s' was of complex type. Corrupt config?",
  111|      0|				   parent->key, key);
  112|      0|		config_node_remove(rec, parent, node);
  113|      0|		node = NULL;
  114|      0|	}
  115|    846|	if (node != NULL) {
  ------------------
  |  Branch (115:6): [True: 0, False: 846]
  ------------------
  116|      0|		if (g_strcmp0(node->value, value) == 0)
  ------------------
  |  Branch (116:7): [True: 0, False: 0]
  ------------------
  117|      0|			return;
  118|      0|                g_free(node->value);
  119|    846|	} else {
  120|    846|		node = g_new0(CONFIG_NODE, 1);
  ------------------
  |  Branch (120:10): [True: 846, False: 0]
  |  Branch (120:10): [True: 0, False: 846]
  ------------------
  121|    846|		parent->value = g_slist_append(parent->value, node);
  122|       |
  123|    846|		node->type = no_key ? NODE_TYPE_VALUE : NODE_TYPE_KEY;
  ------------------
  |  Branch (123:16): [True: 0, False: 846]
  ------------------
  124|    846|		node->key = no_key ? NULL : g_strdup(key);
  ------------------
  |  Branch (124:15): [True: 0, False: 846]
  ------------------
  125|    846|	}
  126|       |
  127|    846|	node->value = g_strdup(value);
  128|    846|	rec->modifycounter++;
  129|    846|}
config_set_str:
  145|  7.59k|{
  146|  7.59k|	CONFIG_NODE *parent;
  147|       |
  148|  7.59k|	g_return_val_if_fail(rec != NULL, -1);
  ------------------
  |  Branch (148:2): [True: 7.59k, False: 0]
  |  Branch (148:2): [True: 7.59k, False: 0]
  |  Branch (148:2): [Folded, False: 7.59k]
  ------------------
  149|       |
  150|  7.59k|	parent = config_node_traverse(rec, section, TRUE);
  151|  7.59k|	if (parent == NULL) return -1;
  ------------------
  |  Branch (151:6): [True: 0, False: 7.59k]
  ------------------
  152|       |
  153|  7.59k|	config_node_set_str(rec, parent, key, value);
  154|  7.59k|	return 0;
  155|  7.59k|}
set.c:cache_remove:
   24|  1.18k|{
   25|  1.18k|	char *path;
   26|       |
   27|  1.18k|	path = g_hash_table_lookup(rec->cache_nodes, node);
   28|  1.18k|	if (path != NULL) {
  ------------------
  |  Branch (28:6): [True: 10, False: 1.17k]
  ------------------
   29|     10|		g_hash_table_remove(rec->cache, path);
   30|     10|		g_hash_table_remove(rec->cache_nodes, node);
   31|     10|                g_free(path);
   32|     10|	}
   33|  1.18k|}

g_atomic_rc_box_dup:
  267|  2.86k|{
  268|  2.86k|  gpointer res;
  269|       |
  270|  2.86k|  g_return_val_if_fail (block_size > 0, NULL);
  ------------------
  |  |  652|  2.86k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  2.86k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  2.86k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  2.86k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  2.86k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  2.86k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  2.86k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  2.86k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2.86k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  2.86k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  2.86k|   else                                         \
  |  |  |  |  |  | 1183|  2.86k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  2.86k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  2.86k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2.86k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  2.86k|      { } \
  |  |  655|  2.86k|    else \
  |  |  656|  2.86k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  2.86k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  2.86k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2.86k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  271|  2.86k|  g_return_val_if_fail (mem_block != NULL, NULL);
  ------------------
  |  |  652|  2.86k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  2.86k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  2.86k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  2.86k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  2.86k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  2.86k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  2.86k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  2.86k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2.86k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  2.86k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  2.86k|   else                                         \
  |  |  |  |  |  | 1183|  2.86k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  2.86k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  2.86k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2.86k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  2.86k|      { } \
  |  |  655|  2.86k|    else \
  |  |  656|  2.86k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  2.86k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  2.86k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2.86k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  272|       |
  273|  2.86k|  res = g_rc_box_alloc_full (block_size, STRUCT_ALIGNMENT, TRUE, FALSE);
  ------------------
  |  |   63|  2.86k|#define STRUCT_ALIGNMENT (2 * sizeof (gsize))
  ------------------
                res = g_rc_box_alloc_full (block_size, STRUCT_ALIGNMENT, TRUE, FALSE);
  ------------------
  |  |  884|  2.86k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  2.86k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
                res = g_rc_box_alloc_full (block_size, STRUCT_ALIGNMENT, TRUE, FALSE);
  ------------------
  |  |  880|  2.86k|#define	FALSE	(0)
  ------------------
  274|  2.86k|  memcpy (res, mem_block, block_size);
  275|       |
  276|  2.86k|  return res;
  277|  2.86k|}
g_atomic_rc_box_acquire:
  292|    387|{
  293|    387|  GArcBox *real_box = G_ARC_BOX (mem_block);
  ------------------
  |  |   36|    387|#define G_ARC_BOX(p)            (GArcBox *) (((char *) (p)) - G_ARC_BOX_SIZE)
  |  |  ------------------
  |  |  |  |   66|    387|#define G_ARC_BOX_SIZE sizeof (GArcBox)
  |  |  ------------------
  ------------------
  294|       |
  295|    387|  g_return_val_if_fail (mem_block != NULL, NULL);
  ------------------
  |  |  652|    387|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    387|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    387|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    387|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    387| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    387|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    387|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    387|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 387, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    387|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    387|   else                                         \
  |  |  |  |  |  | 1183|    387|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    387|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    387|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 387, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    387|      { } \
  |  |  655|    387|    else \
  |  |  656|    387|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    387|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    387|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 387]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  296|    387|#ifndef G_DISABLE_ASSERT
  297|    387|  g_return_val_if_fail (real_box->magic == G_BOX_MAGIC, NULL);
  ------------------
  |  |  652|    387|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    387|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    387|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    387|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    387| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    387|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    387|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    387|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 387, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    387|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    387|   else                                         \
  |  |  |  |  |  | 1183|    387|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    387|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    387|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 387, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    387|      { } \
  |  |  655|    387|    else \
  |  |  656|    387|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    387|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    387|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 387]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  298|    387|#endif
  299|       |
  300|    387|  g_atomic_ref_count_inc (&real_box->ref_count);
  301|       |
  302|    387|  TRACE (GLIB_RCBOX_ACQUIRE (mem_block, 1));
  303|       |
  304|    387|  return mem_block;
  305|    387|}
g_atomic_rc_box_release_full:
  340|  3.24k|{
  341|  3.24k|  GArcBox *real_box = G_ARC_BOX (mem_block);
  ------------------
  |  |   36|  3.24k|#define G_ARC_BOX(p)            (GArcBox *) (((char *) (p)) - G_ARC_BOX_SIZE)
  |  |  ------------------
  |  |  |  |   66|  3.24k|#define G_ARC_BOX_SIZE sizeof (GArcBox)
  |  |  ------------------
  ------------------
  342|       |
  343|  3.24k|  g_return_if_fail (mem_block != NULL);
  ------------------
  |  |  639|  3.24k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  3.24k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  3.24k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  3.24k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  3.24k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  3.24k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  3.24k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  3.24k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 3.24k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  3.24k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  3.24k|   else                                         \
  |  |  |  |  |  | 1183|  3.24k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  3.24k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  3.24k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 3.24k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  3.24k|      { } \
  |  |  642|  3.24k|    else \
  |  |  643|  3.24k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  3.24k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  3.24k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 3.24k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  344|  3.24k|#ifndef G_DISABLE_ASSERT
  345|  3.24k|  g_return_if_fail (real_box->magic == G_BOX_MAGIC);
  ------------------
  |  |  639|  3.24k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  3.24k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  3.24k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  3.24k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  3.24k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  3.24k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  3.24k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  3.24k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 3.24k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  3.24k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  3.24k|   else                                         \
  |  |  |  |  |  | 1183|  3.24k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  3.24k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  3.24k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 3.24k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  3.24k|      { } \
  |  |  642|  3.24k|    else \
  |  |  643|  3.24k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  3.24k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  3.24k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 3.24k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  346|  3.24k|#endif
  347|       |
  348|  3.24k|  if (g_atomic_ref_count_dec (&real_box->ref_count))
  ------------------
  |  Branch (348:7): [True: 2.86k, False: 387]
  ------------------
  349|  2.86k|    {
  350|  2.86k|      char *real_mem = (char *) real_box - real_box->private_offset;
  351|       |
  352|  2.86k|      TRACE (GLIB_RCBOX_RELEASE (mem_block, 1));
  353|       |
  354|  2.86k|      if (clear_func != NULL)
  ------------------
  |  Branch (354:11): [True: 2.86k, False: 0]
  ------------------
  355|  2.86k|        clear_func (mem_block);
  356|       |
  357|  2.86k|      TRACE (GLIB_RCBOX_FREE (mem_block));
  358|  2.86k|      g_free (real_mem);
  359|  2.86k|    }
  360|  3.24k|}

g_array_sized_new:
  265|      2|{
  266|      2|  GRealArray *array;
  267|       |  
  268|      2|  g_return_val_if_fail (elt_size > 0, NULL);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|       |#if (UINT_WIDTH / 8) >= GLIB_SIZEOF_SIZE_T
  270|       |  g_return_val_if_fail (elt_size <= G_MAXSIZE / 2 - 1, NULL);
  271|       |#endif
  272|       |
  273|      2|  array = g_slice_new (GRealArray);
  ------------------
  |  |   48|      2|#define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
  ------------------
  274|       |
  275|      2|  array->data            = NULL;
  276|      2|  array->len             = 0;
  277|      2|  array->elt_capacity = 0;
  278|      2|  array->zero_terminated = (zero_terminated ? 1 : 0);
  ------------------
  |  Branch (278:29): [True: 0, False: 2]
  ------------------
  279|      2|  array->clear           = (clear ? 1 : 0);
  ------------------
  |  Branch (279:29): [True: 2, False: 0]
  ------------------
  280|      2|  array->elt_size        = elt_size;
  281|      2|  array->clear_func      = NULL;
  282|       |
  283|      2|  g_atomic_ref_count_init (&array->ref_count);
  284|       |
  285|      2|  if (array->zero_terminated || reserved_size != 0)
  ------------------
  |  Branch (285:7): [True: 0, False: 2]
  |  Branch (285:33): [True: 2, False: 0]
  ------------------
  286|      2|    {
  287|      2|      g_array_maybe_expand (array, reserved_size);
  288|      2|      g_array_zero_terminate(array);
  ------------------
  |  |  160|      2|#define g_array_zero_terminate(array) G_STMT_START{                     \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  161|      2|  if ((array)->zero_terminated)                                         \
  |  |  ------------------
  |  |  |  Branch (161:7): [True: 0, False: 2]
  |  |  ------------------
  |  |  162|      2|    g_array_elt_zero ((array), (array)->len, 1);                        \
  |  |  ------------------
  |  |  |  |  159|      0|  (memset (g_array_elt_pos ((array), pos), 0,  g_array_elt_len ((array), len)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|      0|#define g_array_elt_pos(array,i) ((array)->data + g_array_elt_len((array),(i)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  156|      0|#define g_array_elt_len(array,i) ((gsize)(array)->elt_size * (i))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                 (memset (g_array_elt_pos ((array), pos), 0,  g_array_elt_len ((array), len)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      0|#define g_array_elt_len(array,i) ((gsize)(array)->elt_size * (i))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      2|}G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  289|      2|    }
  290|       |
  291|      2|  return (GArray*) array;
  292|      2|}
g_array_append_vals:
  520|      2|{
  521|      2|  GRealArray *array = (GRealArray*) farray;
  522|       |
  523|      2|  g_return_val_if_fail (array, NULL);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  524|       |
  525|      2|  if (len == 0)
  ------------------
  |  Branch (525:7): [True: 0, False: 2]
  ------------------
  526|      0|    return farray;
  527|       |
  528|      2|  g_array_maybe_expand (array, len);
  529|       |
  530|      2|  memcpy (g_array_elt_pos (array, array->len), data, 
  ------------------
  |  |  157|      2|#define g_array_elt_pos(array,i) ((array)->data + g_array_elt_len((array),(i)))
  |  |  ------------------
  |  |  |  |  156|      2|#define g_array_elt_len(array,i) ((gsize)(array)->elt_size * (i))
  |  |  ------------------
  ------------------
  531|      2|          g_array_elt_len (array, len));
  ------------------
  |  |  156|      2|#define g_array_elt_len(array,i) ((gsize)(array)->elt_size * (i))
  ------------------
  532|       |
  533|      2|  array->len += len;
  534|       |
  535|      2|  g_array_zero_terminate (array);
  ------------------
  |  |  160|      2|#define g_array_zero_terminate(array) G_STMT_START{                     \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  161|      2|  if ((array)->zero_terminated)                                         \
  |  |  ------------------
  |  |  |  Branch (161:7): [True: 0, False: 2]
  |  |  ------------------
  |  |  162|      2|    g_array_elt_zero ((array), (array)->len, 1);                        \
  |  |  ------------------
  |  |  |  |  159|      0|  (memset (g_array_elt_pos ((array), pos), 0,  g_array_elt_len ((array), len)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|      0|#define g_array_elt_pos(array,i) ((array)->data + g_array_elt_len((array),(i)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  156|      0|#define g_array_elt_len(array,i) ((gsize)(array)->elt_size * (i))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                 (memset (g_array_elt_pos ((array), pos), 0,  g_array_elt_len ((array), len)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      0|#define g_array_elt_len(array,i) ((gsize)(array)->elt_size * (i))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      2|}G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  536|       |
  537|      2|  return farray;
  538|      2|}
g_ptr_array_new:
 1145|   769k|{
 1146|   769k|  return ptr_array_new (0, NULL, FALSE);
  ------------------
  |  |  880|   769k|#define	FALSE	(0)
  ------------------
 1147|   769k|}
g_ptr_array_new_full:
 1383|  3.97k|{
 1384|  3.97k|  return ptr_array_new (reserved_size, element_free_func, FALSE);
  ------------------
  |  |  880|  3.97k|#define	FALSE	(0)
  ------------------
 1385|  3.97k|}
g_ptr_array_free:
 1548|   773k|{
 1549|   773k|  GRealPtrArray *rarray = (GRealPtrArray *)array;
 1550|   773k|  ArrayFreeFlags flags;
 1551|       |
 1552|   773k|  g_return_val_if_fail (rarray, NULL);
  ------------------
  |  |  652|   773k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   773k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   773k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   773k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   773k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   773k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   773k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   773k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 773k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   773k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   773k|   else                                         \
  |  |  |  |  |  | 1183|   773k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   773k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   773k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 773k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   773k|      { } \
  |  |  655|   773k|    else \
  |  |  656|   773k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   773k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   773k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 773k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1553|       |
 1554|   773k|  flags = (free_segment ? FREE_SEGMENT : 0);
  ------------------
  |  Branch (1554:12): [True: 0, False: 773k]
  ------------------
 1555|       |
 1556|       |  /* if others are holding a reference, preserve the wrapper but
 1557|       |   * do free/return the data
 1558|       |   *
 1559|       |   * Coverity doesn’t understand this and assumes it’s a leak, so comment this
 1560|       |   * out.
 1561|       |   */
 1562|   773k|#ifndef __COVERITY__
 1563|   773k|  if (!g_atomic_ref_count_dec (&rarray->ref_count))
  ------------------
  |  Branch (1563:7): [True: 0, False: 773k]
  ------------------
 1564|      0|    flags |= PRESERVE_WRAPPER;
 1565|   773k|#endif
 1566|       |
 1567|   773k|  return ptr_array_free (array, flags);
 1568|   773k|}
g_ptr_array_add:
 1956|  5.18M|{
 1957|  5.18M|  GRealPtrArray *rarray = (GRealPtrArray *)array;
 1958|       |
 1959|  5.18M|  g_return_if_fail (rarray);
  ------------------
  |  |  639|  5.18M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.18M|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  5.18M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.18M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.18M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.18M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.18M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.18M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.18M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.18M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.18M|   else                                         \
  |  |  |  |  |  | 1183|  5.18M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.18M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.18M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.18M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  5.18M|      { } \
  |  |  642|  5.18M|    else \
  |  |  643|  5.18M|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  5.18M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.18M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.18M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1960|  5.18M|  g_return_if_fail (rarray->len == 0 || (rarray->len != 0 && rarray->pdata != NULL));
  ------------------
  |  |  639|  5.18M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.18M|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  5.18M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.18M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.18M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.18M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.18M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  23.6M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 4.41M, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 4.41M, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 773k, False: 4.41M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.18M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.18M|   else                                         \
  |  |  |  |  |  | 1183|  5.18M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.18M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.18M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.18M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  5.18M|      { } \
  |  |  642|  5.18M|    else \
  |  |  643|  5.18M|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  5.18M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.18M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.18M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1961|       |
 1962|  5.18M|  g_ptr_array_maybe_expand (rarray, 1u + rarray->null_terminated);
 1963|       |
 1964|  5.18M|  rarray->pdata[rarray->len++] = data;
 1965|       |
 1966|  5.18M|  ptr_array_maybe_null_terminate (rarray);
 1967|  5.18M|}
garray.c:g_array_maybe_expand:
  980|      4|{
  981|      4|  guint max_len, want_len;
  982|       | 
  983|       |  /* The maximum array length is derived from following constraints:
  984|       |   * - The number of bytes must fit into a gsize / 2.
  985|       |   * - The number of elements must fit into guint.
  986|       |   * - zero terminated arrays must leave space for the terminating element
  987|       |   */
  988|      4|  max_len = MIN (G_MAXSIZE / 2 / array->elt_size, G_MAXUINT) - array->zero_terminated;
  ------------------
  |  |  891|      4|#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (891:21): [True: 0, False: 4]
  |  |  ------------------
  ------------------
  989|       |
  990|       |  /* Detect potential overflow */
  991|      4|  if G_UNLIKELY ((max_len - array->len) < len)
  ------------------
  |  | 1187|      4|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      4| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      4|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      4|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      4|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 1181|      4|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      4|   else                                         \
  |  |  |  | 1183|      4|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      4|   _g_boolean_var_;                             \
  |  |  |  | 1185|      4|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 0, False: 4]
  |  |  ------------------
  ------------------
  992|      4|    g_error ("adding %u to array would overflow", len);
  ------------------
  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  346|      0|                        for (;;) ;                   \
  |  |  347|      0|                      } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  993|       |
  994|      4|  want_len = array->len + len + array->zero_terminated;
  995|      4|  if (want_len > array->elt_capacity)
  ------------------
  |  Branch (995:7): [True: 2, False: 2]
  ------------------
  996|      2|    {
  997|      2|      gsize want_alloc = g_nearest_pow (g_array_elt_len (array, want_len));
  ------------------
  |  |  156|      2|#define g_array_elt_len(array,i) ((gsize)(array)->elt_size * (i))
  ------------------
  998|      2|      want_alloc = MAX (want_alloc, MIN_ARRAY_SIZE);
  ------------------
  |  |  888|      2|#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (888:21): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  999|       |
 1000|      2|      array->data = g_realloc (array->data, want_alloc);
 1001|       |
 1002|      2|      if (G_UNLIKELY (g_mem_gc_friendly))
  ------------------
  |  | 1187|      2|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      2|   else                                         \
  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  | 1185|      2|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1003|      0|        memset (g_array_elt_pos (array, array->elt_capacity), 0,
  ------------------
  |  |  157|      0|#define g_array_elt_pos(array,i) ((array)->data + g_array_elt_len((array),(i)))
  |  |  ------------------
  |  |  |  |  156|      0|#define g_array_elt_len(array,i) ((gsize)(array)->elt_size * (i))
  |  |  ------------------
  ------------------
 1004|      0|                g_array_elt_len (array, want_len - array->elt_capacity));
  ------------------
  |  |  156|      0|#define g_array_elt_len(array,i) ((gsize)(array)->elt_size * (i))
  ------------------
 1005|       |
 1006|      2|      array->elt_capacity = MIN (want_alloc / array->elt_size, G_MAXUINT);
  ------------------
  |  |  891|      2|#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (891:21): [True: 2, False: 0]
  |  |  ------------------
  ------------------
 1007|      2|    }
 1008|      4|}
garray.c:ptr_array_new:
 1105|   773k|{
 1106|   773k|  GRealPtrArray *array;
 1107|       |
 1108|   773k|  array = g_slice_new (GRealPtrArray);
  ------------------
  |  |   48|   773k|#define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
  ------------------
 1109|       |
 1110|   773k|  array->pdata = NULL;
 1111|   773k|  array->len = 0;
 1112|   773k|  array->alloc = 0;
 1113|   773k|  array->null_terminated = null_terminated ? 1 : 0;
  ------------------
  |  Branch (1113:28): [True: 0, False: 773k]
  ------------------
 1114|   773k|  array->element_free_func = element_free_func;
 1115|       |
 1116|   773k|  g_atomic_ref_count_init (&array->ref_count);
 1117|       |
 1118|   773k|  if (reserved_size != 0)
  ------------------
  |  Branch (1118:7): [True: 3.97k, False: 769k]
  ------------------
 1119|  3.97k|    {
 1120|  3.97k|      if (G_LIKELY (reserved_size < G_MAXUINT) &&
  ------------------
  |  | 1186|  7.95k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|  3.97k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  3.97k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  3.97k|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  3.97k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 3.97k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|  3.97k|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  3.97k|   else                                         \
  |  |  |  | 1183|  3.97k|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  3.97k|   _g_boolean_var_;                             \
  |  |  |  | 1185|  3.97k|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 3.97k, False: 0]
  |  |  ------------------
  ------------------
 1121|  3.97k|          null_terminated)
  ------------------
  |  Branch (1121:11): [True: 0, False: 3.97k]
  ------------------
 1122|      0|        reserved_size++;
 1123|  3.97k|      g_ptr_array_maybe_expand (array, reserved_size);
 1124|  3.97k|      if (null_terminated)
  ------------------
  |  Branch (1124:11): [True: 0, False: 3.97k]
  ------------------
 1125|      0|        {
 1126|       |          /* don't use ptr_array_maybe_null_terminate(). It helps the compiler
 1127|       |           * to see when @null_terminated is false and thereby inline
 1128|       |           * ptr_array_new() and possibly remove the code entirely. */
 1129|      0|          array->pdata[0] = NULL;
 1130|      0|        }
 1131|  3.97k|    }
 1132|       |
 1133|   773k|  return (GPtrArray *) array;
 1134|   773k|}
garray.c:ptr_array_maybe_null_terminate:
 1096|  5.18M|{
 1097|  5.18M|  if (G_UNLIKELY (rarray->null_terminated))
  ------------------
  |  | 1187|  5.18M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  5.18M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  5.18M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  5.18M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  5.18M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 5.18M]
  |  |  |  |  ------------------
  |  |  |  | 1181|  5.18M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  5.18M|   else                                         \
  |  |  |  | 1183|  5.18M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  5.18M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  5.18M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 5.18M]
  |  |  ------------------
  ------------------
 1098|      0|    rarray->pdata[rarray->len] = NULL;
 1099|  5.18M|}
garray.c:ptr_array_free:
 1573|   773k|{
 1574|   773k|  GRealPtrArray *rarray = (GRealPtrArray *)array;
 1575|   773k|  gpointer *segment;
 1576|       |
 1577|   773k|  if (flags & FREE_SEGMENT)
  ------------------
  |  Branch (1577:7): [True: 0, False: 773k]
  ------------------
 1578|      0|    {
 1579|       |      /* Data here is stolen and freed manually. It is an
 1580|       |       * error to attempt to access the array data (including
 1581|       |       * mutating the array bounds) during destruction).
 1582|       |       *
 1583|       |       * https://bugzilla.gnome.org/show_bug.cgi?id=769064
 1584|       |       */
 1585|      0|      gpointer *stolen_pdata = g_steal_pointer (&rarray->pdata);
  ------------------
  |  |  231|      0|#define g_steal_pointer(pp) ((glib_typeof (*pp)) (g_steal_pointer) (pp))
  ------------------
 1586|      0|      if (rarray->element_free_func != NULL)
  ------------------
  |  Branch (1586:11): [True: 0, False: 0]
  ------------------
 1587|      0|        {
 1588|      0|          guint i;
 1589|       |
 1590|      0|          for (i = 0; i < rarray->len; ++i)
  ------------------
  |  Branch (1590:23): [True: 0, False: 0]
  ------------------
 1591|      0|            rarray->element_free_func (stolen_pdata[i]);
 1592|      0|        }
 1593|       |
 1594|      0|      g_free (stolen_pdata);
 1595|      0|      segment = NULL;
 1596|      0|    }
 1597|   773k|  else
 1598|   773k|    {
 1599|   773k|      segment = rarray->pdata;
 1600|   773k|      if (!segment && rarray->null_terminated)
  ------------------
  |  Branch (1600:11): [True: 0, False: 773k]
  |  Branch (1600:23): [True: 0, False: 0]
  ------------------
 1601|      0|        segment = (gpointer *) g_new0 (char *, 1);
  ------------------
  |  |  316|      0|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|      0|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      0|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      0|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      0|	  gpointer __p;						\
  |  |  |  |  248|      0|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  249|      0|	    __p = g_##func (__n);				\
  |  |  |  |  250|      0|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      0|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      0|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      0|	  else							\
  |  |  |  |  254|      0|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      0|	  __p;							\
  |  |  |  |  256|      0|	}))
  |  |  ------------------
  ------------------
 1602|   773k|    }
 1603|       |
 1604|   773k|  if (flags & PRESERVE_WRAPPER)
  ------------------
  |  Branch (1604:7): [True: 0, False: 773k]
  ------------------
 1605|      0|    {
 1606|      0|      rarray->pdata = NULL;
 1607|      0|      rarray->len = 0;
 1608|      0|      rarray->alloc = 0;
 1609|      0|    }
 1610|   773k|  else
 1611|   773k|    {
 1612|   773k|      g_slice_free1 (sizeof (GRealPtrArray), rarray);
 1613|   773k|    }
 1614|       |
 1615|   773k|  return segment;
 1616|   773k|}
garray.c:g_ptr_array_maybe_expand:
 1621|  5.18M|{
 1622|  5.18M|  guint max_len;
 1623|       |
 1624|       |  /* The maximum array length is derived from following constraints:
 1625|       |   * - The number of bytes must fit into a gsize / 2.
 1626|       |   * - The number of elements must fit into guint.
 1627|       |   */
 1628|  5.18M|  max_len = MIN (G_MAXSIZE / 2 / sizeof (gpointer), G_MAXUINT);
  ------------------
  |  |  891|  5.18M|#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (891:21): [Folded, False: 5.18M]
  |  |  ------------------
  ------------------
 1629|       |
 1630|       |  /* Detect potential overflow */
 1631|  5.18M|  if G_UNLIKELY ((max_len - array->len) < len)
  ------------------
  |  | 1187|  5.18M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  5.18M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  5.18M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  5.18M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  5.18M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 5.18M]
  |  |  |  |  ------------------
  |  |  |  | 1181|  5.18M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  5.18M|   else                                         \
  |  |  |  | 1183|  5.18M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  5.18M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  5.18M|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 0, False: 5.18M]
  |  |  ------------------
  ------------------
 1632|  5.18M|    g_error ("adding %u to array would overflow", len);
  ------------------
  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  346|      0|                        for (;;) ;                   \
  |  |  347|      0|                      } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1633|       |
 1634|  5.18M|  if ((array->len + len) > array->alloc)
  ------------------
  |  Branch (1634:7): [True: 1.00M, False: 4.18M]
  ------------------
 1635|  1.00M|    {
 1636|  1.00M|      guint old_alloc = array->alloc;
 1637|  1.00M|      gsize want_alloc = g_nearest_pow (sizeof (gpointer) * (array->len + len));
 1638|  1.00M|      want_alloc = MAX (want_alloc, MIN_ARRAY_SIZE);
  ------------------
  |  |  888|  1.00M|#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (888:21): [True: 232k, False: 769k]
  |  |  ------------------
  ------------------
 1639|  1.00M|      array->alloc = MIN (want_alloc / sizeof (gpointer), G_MAXUINT);
  ------------------
  |  |  891|  1.00M|#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (891:21): [True: 1.00M, False: 0]
  |  |  ------------------
  ------------------
 1640|  1.00M|      array->pdata = g_realloc (array->pdata, want_alloc);
 1641|  1.00M|      if (G_UNLIKELY (g_mem_gc_friendly))
  ------------------
  |  | 1187|  1.00M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  1.00M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  1.00M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  1.00M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  1.00M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 1.00M]
  |  |  |  |  ------------------
  |  |  |  | 1181|  1.00M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  1.00M|   else                                         \
  |  |  |  | 1183|  1.00M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  1.00M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  1.00M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 1.00M]
  |  |  ------------------
  ------------------
 1642|      0|        for ( ; old_alloc < array->alloc; old_alloc++)
  ------------------
  |  Branch (1642:17): [True: 0, False: 0]
  ------------------
 1643|      0|          array->pdata [old_alloc] = NULL;
 1644|  1.00M|    }
 1645|  5.18M|}

g_base64_decode_step:
  331|  3.88k|{
  332|  3.88k|  const guchar *inptr;
  333|  3.88k|  guchar *outptr;
  334|  3.88k|  const guchar *inend;
  335|  3.88k|  guchar c, rank;
  336|  3.88k|  guchar last[2];
  337|  3.88k|  unsigned int v;
  338|  3.88k|  int i;
  339|       |
  340|  3.88k|  g_return_val_if_fail (in != NULL || len == 0, 0);
  ------------------
  |  |  652|  3.88k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  3.88k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  3.88k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  3.88k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  3.88k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  3.88k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  3.88k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  7.76k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 3.88k, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  3.88k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  3.88k|   else                                         \
  |  |  |  |  |  | 1183|  3.88k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  3.88k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  3.88k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 3.88k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  3.88k|      { } \
  |  |  655|  3.88k|    else \
  |  |  656|  3.88k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  3.88k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  3.88k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 3.88k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  341|  3.88k|  g_return_val_if_fail (out != NULL, 0);
  ------------------
  |  |  652|  3.88k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  3.88k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  3.88k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  3.88k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  3.88k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  3.88k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  3.88k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  3.88k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 3.88k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  3.88k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  3.88k|   else                                         \
  |  |  |  |  |  | 1183|  3.88k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  3.88k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  3.88k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 3.88k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  3.88k|      { } \
  |  |  655|  3.88k|    else \
  |  |  656|  3.88k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  3.88k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  3.88k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 3.88k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  342|  3.88k|  g_return_val_if_fail (state != NULL, 0);
  ------------------
  |  |  652|  3.88k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  3.88k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  3.88k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  3.88k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  3.88k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  3.88k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  3.88k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  3.88k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 3.88k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  3.88k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  3.88k|   else                                         \
  |  |  |  |  |  | 1183|  3.88k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  3.88k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  3.88k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 3.88k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  3.88k|      { } \
  |  |  655|  3.88k|    else \
  |  |  656|  3.88k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  3.88k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  3.88k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 3.88k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  343|  3.88k|  g_return_val_if_fail (save != NULL, 0);
  ------------------
  |  |  652|  3.88k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  3.88k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  3.88k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  3.88k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  3.88k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  3.88k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  3.88k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  3.88k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 3.88k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  3.88k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  3.88k|   else                                         \
  |  |  |  |  |  | 1183|  3.88k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  3.88k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  3.88k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 3.88k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  3.88k|      { } \
  |  |  655|  3.88k|    else \
  |  |  656|  3.88k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  3.88k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  3.88k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 3.88k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  344|       |
  345|  3.88k|  if (len == 0)
  ------------------
  |  Branch (345:7): [True: 0, False: 3.88k]
  ------------------
  346|      0|    return 0;
  347|       |
  348|  3.88k|  inend = (const guchar *)in+len;
  349|  3.88k|  outptr = out;
  350|       |
  351|       |  /* convert 4 base64 bytes to 3 normal bytes */
  352|  3.88k|  v=*save;
  353|  3.88k|  i=*state;
  354|       |
  355|  3.88k|  last[0] = last[1] = 0;
  356|       |
  357|       |  /* we use the sign in the state to determine if we got a padding character
  358|       |     in the previous sequence */
  359|  3.88k|  if (i < 0)
  ------------------
  |  Branch (359:7): [True: 0, False: 3.88k]
  ------------------
  360|      0|    {
  361|      0|      i = -i;
  362|      0|      last[0] = '=';
  363|      0|    }
  364|       |
  365|  3.88k|  inptr = (const guchar *)in;
  366|   537k|  while (inptr < inend)
  ------------------
  |  Branch (366:10): [True: 533k, False: 3.88k]
  ------------------
  367|   533k|    {
  368|   533k|      c = *inptr++;
  369|   533k|      rank = mime_base64_rank [c];
  370|   533k|      if (rank != 0xff)
  ------------------
  |  Branch (370:11): [True: 333k, False: 200k]
  ------------------
  371|   333k|        {
  372|   333k|          last[1] = last[0];
  373|   333k|          last[0] = c;
  374|   333k|          v = (v<<6) | rank;
  375|   333k|          i++;
  376|   333k|          if (i==4)
  ------------------
  |  Branch (376:15): [True: 81.9k, False: 251k]
  ------------------
  377|  81.9k|            {
  378|  81.9k|              *outptr++ = v>>16;
  379|  81.9k|              if (last[1] != '=')
  ------------------
  |  Branch (379:19): [True: 81.8k, False: 119]
  ------------------
  380|  81.8k|                *outptr++ = v>>8;
  381|  81.9k|              if (last[0] != '=')
  ------------------
  |  Branch (381:19): [True: 81.8k, False: 138]
  ------------------
  382|  81.8k|                *outptr++ = v;
  383|  81.9k|              i=0;
  384|  81.9k|            }
  385|   333k|        }
  386|   533k|    }
  387|       |
  388|  3.88k|  *save = v;
  389|  3.88k|  *state = last[0] == '=' ? -i : i;
  ------------------
  |  Branch (389:12): [True: 3, False: 3.87k]
  ------------------
  390|       |
  391|  3.88k|  return outptr - out;
  392|  3.88k|}

g_pointer_bit_lock:
  409|      6|{
  410|      6|  void *address_nonvolatile = (void *) address;
  411|       |
  412|      6|  g_return_if_fail (lock_bit < 32);
  ------------------
  |  |  639|      6|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      6|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      6|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      6|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      6|   else                                         \
  |  |  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      6|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      6|      { } \
  |  |  642|      6|    else \
  |  |  643|      6|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      6|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      6|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  413|       |
  414|      6|  {
  415|       |#ifdef USE_ASM_GOTO
  416|       | retry:
  417|       |    __asm__ volatile goto ("lock bts %1, (%0)\n"
  418|       |                           "jc %l[contended]"
  419|       |                           : /* no output */
  420|       |                           : "r" (address), "r" ((gsize) lock_bit)
  421|       |                           : "cc", "memory"
  422|       |                           : contended);
  423|       |    return;
  424|       |
  425|       | contended:
  426|       |    {
  427|       |      gsize *pointer_address = address_nonvolatile;
  428|       |      gsize mask = 1u << lock_bit;
  429|       |      gsize v;
  430|       |
  431|       |      v = (gsize) g_atomic_pointer_get (pointer_address);
  432|       |      if (v & mask)
  433|       |        {
  434|       |          guint class = ((gsize) address_nonvolatile) % G_N_ELEMENTS (g_bit_lock_contended);
  435|       |
  436|       |          g_atomic_int_add (&g_bit_lock_contended[class], +1);
  437|       |          g_futex_wait (g_futex_int_address (address_nonvolatile), v);
  438|       |          g_atomic_int_add (&g_bit_lock_contended[class], -1);
  439|       |        }
  440|       |    }
  441|       |    goto retry;
  442|       |#else
  443|      6|  gsize *pointer_address = address_nonvolatile;
  444|      6|  gsize mask = 1u << lock_bit;
  445|      6|  gsize v;
  446|       |
  447|      6| retry:
  448|      6|  v = g_atomic_pointer_or (pointer_address, mask);
  ------------------
  |  |  294|      6|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  295|      6|    gsize *gapo_atomic = (gsize *) (atomic);                                 \
  |  |  296|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  ------------------
  |  |  |  |  824|      6|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  297|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gsize));                    \
  |  |  ------------------
  |  |  |  |  824|      6|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  298|      6|    (void) (0 ? (gpointer) *(atomic) : NULL);                                \
  |  |  ------------------
  |  |  |  Branch (298:13): [Folded, False: 6]
  |  |  ------------------
  |  |  299|      6|    (void) (0 ? (val) ^ (val) : 1);                                          \
  |  |  ------------------
  |  |  |  Branch (299:13): [Folded, False: 6]
  |  |  ------------------
  |  |  300|      6|    (gsize) __atomic_fetch_or (gapo_atomic, (val), __ATOMIC_SEQ_CST);        \
  |  |  301|      6|  }))
  ------------------
  449|      6|  if (v & mask)
  ------------------
  |  Branch (449:7): [True: 0, False: 6]
  ------------------
  450|       |    /* already locked */
  451|      0|    {
  452|      0|      guint class = ((gsize) address_nonvolatile) % G_N_ELEMENTS (g_bit_lock_contended);
  ------------------
  |  |  906|      0|#define G_N_ELEMENTS(arr)		(sizeof (arr) / sizeof ((arr)[0]))
  ------------------
  453|       |
  454|      0|      g_atomic_int_add (&g_bit_lock_contended[class], +1);
  ------------------
  |  |  209|      0|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  210|      0|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|      0|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  211|      0|    (void) (0 ? *(atomic) ^ (val) : 1);                                      \
  |  |  ------------------
  |  |  |  Branch (211:13): [Folded, False: 0]
  |  |  ------------------
  |  |  212|      0|    (gint) __atomic_fetch_add ((atomic), (val), __ATOMIC_SEQ_CST);           \
  |  |  213|      0|  }))
  ------------------
  455|      0|      g_futex_wait (g_futex_int_address (address_nonvolatile), (guint) v);
  456|      0|      g_atomic_int_add (&g_bit_lock_contended[class], -1);
  ------------------
  |  |  209|      0|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  210|      0|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|      0|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  211|      0|    (void) (0 ? *(atomic) ^ (val) : 1);                                      \
  |  |  ------------------
  |  |  |  Branch (211:13): [Folded, False: 0]
  |  |  ------------------
  |  |  212|      0|    (gint) __atomic_fetch_add ((atomic), (val), __ATOMIC_SEQ_CST);           \
  |  |  213|      0|  }))
  ------------------
  457|       |
  458|      0|      goto retry;
  459|      0|    }
  460|      6|#endif
  461|      6|  }
  462|      6|}
g_pointer_bit_unlock:
  534|      6|{
  535|      6|  void *address_nonvolatile = (void *) address;
  536|       |
  537|      6|  g_return_if_fail (lock_bit < 32);
  ------------------
  |  |  639|      6|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      6|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      6|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      6|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      6|   else                                         \
  |  |  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      6|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      6|      { } \
  |  |  642|      6|    else \
  |  |  643|      6|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      6|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      6|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  538|       |
  539|      6|  {
  540|       |#ifdef USE_ASM_GOTO
  541|       |    __asm__ volatile ("lock btr %1, (%0)"
  542|       |                      : /* no output */
  543|       |                      : "r" (address), "r" ((gsize) lock_bit)
  544|       |                      : "cc", "memory");
  545|       |#else
  546|      6|    gsize *pointer_address = address_nonvolatile;
  547|      6|    gsize mask = 1u << lock_bit;
  548|       |
  549|      6|    g_atomic_pointer_and (pointer_address, ~mask);
  ------------------
  |  |  285|      6|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  286|      6|    gsize *gapa_atomic = (gsize *) (atomic);                                 \
  |  |  287|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  ------------------
  |  |  |  |  824|      6|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  288|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gsize));                    \
  |  |  ------------------
  |  |  |  |  824|      6|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  289|      6|    (void) (0 ? (gpointer) *(atomic) : NULL);                                \
  |  |  ------------------
  |  |  |  Branch (289:13): [Folded, False: 6]
  |  |  ------------------
  |  |  290|      6|    (void) (0 ? (val) ^ (val) : 1);                                          \
  |  |  ------------------
  |  |  |  Branch (290:13): [Folded, False: 6]
  |  |  ------------------
  |  |  291|      6|    (gsize) __atomic_fetch_and (gapa_atomic, (val), __ATOMIC_SEQ_CST);       \
  |  |  292|      6|  }))
  ------------------
  550|      6|#endif
  551|       |
  552|      6|    {
  553|      6|      guint class = ((gsize) address_nonvolatile) % G_N_ELEMENTS (g_bit_lock_contended);
  ------------------
  |  |  906|      6|#define G_N_ELEMENTS(arr)		(sizeof (arr) / sizeof ((arr)[0]))
  ------------------
  554|      6|      if (g_atomic_int_get (&g_bit_lock_contended[class]))
  ------------------
  |  |  110|      6|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 0, False: 6]
  |  |  ------------------
  |  |  111|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|      6|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  112|      6|    gint gaig_temp;                                                          \
  |  |  113|      6|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (113:13): [Folded, False: 6]
  |  |  ------------------
  |  |  114|      6|    __atomic_load ((gint *)(atomic), &gaig_temp, __ATOMIC_SEQ_CST);          \
  |  |  115|      6|    (gint) gaig_temp;                                                        \
  |  |  116|      6|  }))
  ------------------
  555|      0|        g_futex_wake (g_futex_int_address (address_nonvolatile));
  556|      6|    }
  557|      6|  }
  558|      6|}

gsignal.c:g_bsearch_array_create:
  123|      2|{
  124|      2|  GBSearchArray *barray;
  125|      2|  guint size;
  126|       |
  127|      2|  g_return_val_if_fail (bconfig != NULL, NULL);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  128|       |
  129|      2|  size = sizeof (GBSearchArray) + bconfig->sizeof_node;
  130|      2|  if (bconfig->flags & G_BSEARCH_ARRAY_ALIGN_POWER2)
  ------------------
  |  Branch (130:7): [True: 2, False: 0]
  ------------------
  131|      2|    size = G_BSEARCH_UPPER_POWER2 (size);
  ------------------
  |  |  119|      2|#define G_BSEARCH_UPPER_POWER2(n)       ((n) ? 1 << g_bit_storage ((n) - 1) : 0)
  |  |  ------------------
  |  |  |  |  376|      2|#define g_bit_storage(number)        g_bit_storage_impl(number)
  |  |  ------------------
  |  |  |  Branch (119:42): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  132|      2|  barray = (GBSearchArray *) g_malloc (size);
  133|      2|  memset (barray, 0, sizeof (GBSearchArray));
  134|       |
  135|      2|  return barray;
  136|      2|}
gvalue.c:g_bsearch_array_create:
  123|      2|{
  124|      2|  GBSearchArray *barray;
  125|      2|  guint size;
  126|       |
  127|      2|  g_return_val_if_fail (bconfig != NULL, NULL);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  128|       |
  129|      2|  size = sizeof (GBSearchArray) + bconfig->sizeof_node;
  130|      2|  if (bconfig->flags & G_BSEARCH_ARRAY_ALIGN_POWER2)
  ------------------
  |  Branch (130:7): [True: 2, False: 0]
  ------------------
  131|      2|    size = G_BSEARCH_UPPER_POWER2 (size);
  ------------------
  |  |  119|      2|#define G_BSEARCH_UPPER_POWER2(n)       ((n) ? 1 << g_bit_storage ((n) - 1) : 0)
  |  |  ------------------
  |  |  |  |  376|      2|#define g_bit_storage(number)        g_bit_storage_impl(number)
  |  |  ------------------
  |  |  |  Branch (119:42): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  132|      2|  barray = (GBSearchArray *) g_malloc (size);
  133|      2|  memset (barray, 0, sizeof (GBSearchArray));
  134|       |
  135|      2|  return barray;
  136|      2|}
gvalue.c:g_bsearch_array_replace:
  251|    340|{
  252|    340|  guint8 *node = (guint8 *) g_bsearch_array_lookup (barray, bconfig, key_node);
  ------------------
  |  |   97|    340|    g_bsearch_array_lookup_fuzzy ((barray), (bconfig), (key_node), 0)
  ------------------
  253|    340|  if (G_LIKELY (node))  /* expected path */
  ------------------
  |  | 1186|    340|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|    340| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    340|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|    340|   int _g_boolean_var_;                         \
  |  |  |  | 1180|    340|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 340]
  |  |  |  |  ------------------
  |  |  |  | 1181|    340|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|    340|   else                                         \
  |  |  |  | 1183|    340|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|    340|   _g_boolean_var_;                             \
  |  |  |  | 1185|    340|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 0, False: 340]
  |  |  ------------------
  ------------------
  254|      0|    memcpy (node, key_node, bconfig->sizeof_node);
  255|    340|  else                  /* revert to insertion */
  256|    340|    barray = g_bsearch_array_insert (barray, bconfig, key_node);
  257|    340|  return barray;
  258|    340|}
gvalue.c:g_bsearch_array_lookup_fuzzy:
  147|    678|{
  148|    678|  GBSearchCompareFunc cmp_nodes = bconfig->cmp_nodes;
  149|    678|  guint8 *check = NULL, *nodes = G_BSEARCH_ARRAY_NODES (barray);
  ------------------
  |  |  120|    678|#define G_BSEARCH_ARRAY_NODES(barray)    (((guint8*) (barray)) + sizeof (GBSearchArray))
  ------------------
  150|    678|  guint n_nodes = barray->n_nodes, offs = 0;
  151|    678|  guint sizeof_node = bconfig->sizeof_node;
  152|    678|  gint cmp = 0;
  153|       |
  154|  4.70k|  while (offs < n_nodes)
  ------------------
  |  Branch (154:10): [True: 4.02k, False: 678]
  ------------------
  155|  4.02k|    {
  156|  4.02k|      guint i = (offs + n_nodes) >> 1;
  157|       |
  158|  4.02k|      check = nodes + i * sizeof_node;
  159|  4.02k|      cmp = cmp_nodes (key_node, check);
  160|  4.02k|      if (cmp == 0)
  ------------------
  |  Branch (160:11): [True: 0, False: 4.02k]
  ------------------
  161|      0|        return sibling_or_after > 1 ? NULL : check;
  ------------------
  |  Branch (161:16): [True: 0, False: 0]
  ------------------
  162|  4.02k|      else if (cmp < 0)
  ------------------
  |  Branch (162:16): [True: 924, False: 3.10k]
  ------------------
  163|    924|        n_nodes = i;
  164|  3.10k|      else /* (cmp > 0) */
  165|  3.10k|        offs = i + 1;
  166|  4.02k|    }
  167|       |
  168|       |  /* check is last mismatch, cmp > 0 indicates greater key */
  169|    678|  return G_LIKELY (!sibling_or_after) ? NULL : (sibling_or_after > 1 && cmp > 0) ? check + sizeof_node : check;
  ------------------
  |  | 1186|    678|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|    678| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    678|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|    678|   int _g_boolean_var_;                         \
  |  |  |  | 1180|    678|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 340, False: 338]
  |  |  |  |  ------------------
  |  |  |  | 1181|    678|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|    678|   else                                         \
  |  |  |  | 1183|    678|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|    678|   _g_boolean_var_;                             \
  |  |  |  | 1185|    678|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 340, False: 338]
  |  |  ------------------
  ------------------
  |  Branch (169:49): [True: 338, False: 0]
  |  Branch (169:73): [True: 212, False: 126]
  ------------------
  170|    678|}
gvalue.c:g_bsearch_array_insert:
  222|    340|{
  223|    340|  guint8 *node;
  224|       |
  225|    340|  if (G_UNLIKELY (!barray->n_nodes))
  ------------------
  |  | 1187|    340|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|    340| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    340|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|    340|   int _g_boolean_var_;                         \
  |  |  |  | 1180|    340|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 2, False: 338]
  |  |  |  |  ------------------
  |  |  |  | 1181|    340|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|    340|   else                                         \
  |  |  |  | 1183|    340|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|    340|   _g_boolean_var_;                             \
  |  |  |  | 1185|    340|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 2, False: 338]
  |  |  ------------------
  ------------------
  226|      2|    {
  227|      2|      barray = g_bsearch_array_grow (barray, bconfig, 0);
  228|      2|      node = G_BSEARCH_ARRAY_NODES (barray);
  ------------------
  |  |  120|      2|#define G_BSEARCH_ARRAY_NODES(barray)    (((guint8*) (barray)) + sizeof (GBSearchArray))
  ------------------
  229|      2|    }
  230|    338|  else
  231|    338|    {
  232|    338|      node = (guint8 *) g_bsearch_array_lookup_insertion (barray, bconfig, key_node);
  ------------------
  |  |  114|    338|    g_bsearch_array_lookup_fuzzy ((barray), (bconfig), (key_node), 2)
  ------------------
  233|    338|      if (G_LIKELY (node))
  ------------------
  |  | 1186|    338|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|    338| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    338|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|    338|   int _g_boolean_var_;                         \
  |  |  |  | 1180|    338|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 338, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|    338|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|    338|   else                                         \
  |  |  |  | 1183|    338|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|    338|   _g_boolean_var_;                             \
  |  |  |  | 1185|    338|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 338, False: 0]
  |  |  ------------------
  ------------------
  234|    338|        {
  235|    338|          guint index_ = g_bsearch_array_get_index (barray, bconfig, node);
  236|       |
  237|       |          /* grow and insert */
  238|    338|          barray = g_bsearch_array_grow (barray, bconfig, index_);
  239|    338|          node = G_BSEARCH_ARRAY_NODES (barray) + index_ * bconfig->sizeof_node;
  ------------------
  |  |  120|    338|#define G_BSEARCH_ARRAY_NODES(barray)    (((guint8*) (barray)) + sizeof (GBSearchArray))
  ------------------
  240|    338|        }
  241|      0|      else /* no insertion needed, node already there */
  242|      0|        return barray;
  243|    338|    }
  244|    340|  memcpy (node, key_node, bconfig->sizeof_node);
  245|    340|  return barray;
  246|    340|}
gvalue.c:g_bsearch_array_grow:
  197|    340|{
  198|    340|  guint old_size = barray->n_nodes * bconfig->sizeof_node;
  199|    340|  guint new_size = old_size + bconfig->sizeof_node;
  200|    340|  guint8 *node;
  201|       |
  202|    340|  g_return_val_if_fail (index_ <= barray->n_nodes, NULL);
  ------------------
  |  |  652|    340|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    340|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    340|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    340|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    340| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    340|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    340|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    340|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 340, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    340|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    340|   else                                         \
  |  |  |  |  |  | 1183|    340|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    340|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    340|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 340, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    340|      { } \
  |  |  655|    340|    else \
  |  |  656|    340|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    340|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    340|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 340]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  203|       |
  204|    340|  if (G_UNLIKELY (bconfig->flags & G_BSEARCH_ARRAY_ALIGN_POWER2))
  ------------------
  |  | 1187|    340|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|    340| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    340|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|    340|   int _g_boolean_var_;                         \
  |  |  |  | 1180|    340|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 340, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|    340|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|    340|   else                                         \
  |  |  |  | 1183|    340|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|    340|   _g_boolean_var_;                             \
  |  |  |  | 1185|    340|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 340, False: 0]
  |  |  ------------------
  ------------------
  205|    340|    {
  206|    340|      new_size = G_BSEARCH_UPPER_POWER2 (sizeof (GBSearchArray) + new_size);
  ------------------
  |  |  119|    340|#define G_BSEARCH_UPPER_POWER2(n)       ((n) ? 1 << g_bit_storage ((n) - 1) : 0)
  |  |  ------------------
  |  |  |  |  376|    340|#define g_bit_storage(number)        g_bit_storage_impl(number)
  |  |  ------------------
  |  |  |  Branch (119:42): [True: 340, False: 0]
  |  |  ------------------
  ------------------
  207|    340|      old_size = G_BSEARCH_UPPER_POWER2 (sizeof (GBSearchArray) + old_size);
  ------------------
  |  |  119|    340|#define G_BSEARCH_UPPER_POWER2(n)       ((n) ? 1 << g_bit_storage ((n) - 1) : 0)
  |  |  ------------------
  |  |  |  |  376|    340|#define g_bit_storage(number)        g_bit_storage_impl(number)
  |  |  ------------------
  |  |  |  Branch (119:42): [True: 340, False: 0]
  |  |  ------------------
  ------------------
  208|    340|      if (old_size != new_size)
  ------------------
  |  Branch (208:11): [True: 16, False: 324]
  ------------------
  209|     16|        barray = (GBSearchArray *) g_realloc (barray, new_size);
  210|    340|    }
  211|      0|  else
  212|      0|    barray = (GBSearchArray *) g_realloc (barray, sizeof (GBSearchArray) + new_size);
  213|    340|  node = G_BSEARCH_ARRAY_NODES (barray) + index_ * bconfig->sizeof_node;
  ------------------
  |  |  120|    340|#define G_BSEARCH_ARRAY_NODES(barray)    (((guint8*) (barray)) + sizeof (GBSearchArray))
  ------------------
  214|    340|  memmove (node + bconfig->sizeof_node, node, (barray->n_nodes - index_) * bconfig->sizeof_node);
  215|    340|  barray->n_nodes += 1;
  216|    340|  return barray;
  217|    340|}
gvalue.c:g_bsearch_array_get_index:
  184|    338|{
  185|    338|  guint distance = ((guint8*) node_in_array) - G_BSEARCH_ARRAY_NODES (barray);
  ------------------
  |  |  120|    338|#define G_BSEARCH_ARRAY_NODES(barray)    (((guint8*) (barray)) + sizeof (GBSearchArray))
  ------------------
  186|       |
  187|    338|  g_return_val_if_fail (node_in_array != NULL, barray->n_nodes);
  ------------------
  |  |  652|    338|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    338|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    338|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    338|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    338| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    338|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    338|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    338|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 338, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    338|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    338|   else                                         \
  |  |  |  |  |  | 1183|    338|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    338|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    338|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 338, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    338|      { } \
  |  |  655|    338|    else \
  |  |  656|    338|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    338|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    338|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 338]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |
  189|    338|  distance /= bconfig->sizeof_node;
  190|       |
  191|    338|  return MIN (distance, barray->n_nodes + 1); /* may return one after end */
  ------------------
  |  |  891|    338|#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (891:21): [True: 338, False: 0]
  |  |  ------------------
  ------------------
  192|    338|}

g_get_charset:
  203|    130|{
  204|    130|  static GPrivate cache_private = G_PRIVATE_INIT (charset_cache_free);
  ------------------
  |  |   88|    130|#define G_PRIVATE_INIT(notify) { NULL, (notify), { NULL, NULL } }
  ------------------
  205|    130|  GCharsetCache *cache = g_private_get (&cache_private);
  206|    130|  const gchar *raw;
  207|       |
  208|    130|  if (!cache)
  ------------------
  |  Branch (208:7): [True: 2, False: 128]
  ------------------
  209|      2|    cache = g_private_set_alloc0 (&cache_private, sizeof (GCharsetCache));
  210|       |
  211|    130|  G_LOCK (aliases);
  ------------------
  |  |  137|    130|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|    130|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  212|    130|  raw = _g_locale_charset_raw ();
  213|    130|  G_UNLOCK (aliases);
  ------------------
  |  |  138|    130|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|    130|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  214|       |
  215|    130|  if (cache->raw == NULL || strcmp (cache->raw, raw) != 0)
  ------------------
  |  Branch (215:7): [True: 2, False: 128]
  |  Branch (215:29): [True: 0, False: 128]
  ------------------
  216|      2|    {
  217|      2|      const gchar *new_charset;
  218|       |
  219|      2|      g_free (cache->raw);
  220|      2|      g_free (cache->charset);
  221|      2|      cache->raw = g_strdup (raw);
  222|      2|      cache->is_utf8 = g_utf8_get_charset_internal (raw, &new_charset);
  223|      2|      cache->charset = g_strdup (new_charset);
  224|      2|    }
  225|       |
  226|    130|  if (charset)
  ------------------
  |  Branch (226:7): [True: 128, False: 2]
  ------------------
  227|    128|    *charset = cache->charset;
  228|       |
  229|    130|  return cache->is_utf8;
  230|    130|}
g_get_console_charset:
  360|      2|{
  361|       |#ifdef G_OS_WIN32
  362|       |  static GPrivate cache_private = G_PRIVATE_INIT (charset_cache_free);
  363|       |  GCharsetCache *cache = g_private_get (&cache_private);
  364|       |  const gchar *locale;
  365|       |  unsigned int cp;
  366|       |  char buf[2 + 20 + 1]; /* "CP" + G_MAXUINT64 (to be safe) in decimal form (20 bytes) + "\0" */
  367|       |  const gchar *raw = NULL;
  368|       |
  369|       |  if (!cache)
  370|       |    cache = g_private_set_alloc0 (&cache_private, sizeof (GCharsetCache));
  371|       |
  372|       |  /* first try to query $LANG (works for Cygwin/MSYS/MSYS2 and others using mintty) */
  373|       |  locale = g_getenv ("LANG");
  374|       |  if (locale != NULL && locale[0] != '\0')
  375|       |    {
  376|       |      /* If the locale name contains an encoding after the dot, return it.  */
  377|       |      const char *dot = strchr (locale, '.');
  378|       |
  379|       |      if (dot != NULL)
  380|       |        {
  381|       |          const char *modifier;
  382|       |
  383|       |          dot++;
  384|       |          /* Look for the possible @... trailer and remove it, if any.  */
  385|       |          modifier = strchr (dot, '@');
  386|       |          if (modifier == NULL)
  387|       |            raw = dot;
  388|       |          else if ((gsize) (modifier - dot) < sizeof (buf))
  389|       |            {
  390|       |              memcpy (buf, dot, modifier - dot);
  391|       |              buf[modifier - dot] = '\0';
  392|       |              raw = buf;
  393|       |            }
  394|       |        }
  395|       |    }
  396|       |  /* next try querying console codepage using native win32 API */
  397|       |  if (raw == NULL)
  398|       |    {
  399|       |      cp = GetConsoleOutputCP ();
  400|       |      if (cp)
  401|       |        {
  402|       |          sprintf (buf, "CP%u", cp);
  403|       |          raw = buf;
  404|       |        }
  405|       |      else if (GetLastError () != ERROR_INVALID_HANDLE)
  406|       |        {
  407|       |          gchar *emsg = g_win32_error_message (GetLastError ());
  408|       |          g_warning ("Failed to determine console output code page: %s. "
  409|       |                     "Falling back to UTF-8", emsg);
  410|       |          g_free (emsg);
  411|       |        }
  412|       |    }
  413|       |  /* fall-back to UTF-8 if the rest failed (it's a universal default) */
  414|       |  if (raw == NULL)
  415|       |    raw = "UTF-8";
  416|       |
  417|       |  if (cache->raw == NULL || strcmp (cache->raw, raw) != 0)
  418|       |    {
  419|       |      const gchar *new_charset;
  420|       |
  421|       |      g_free (cache->raw);
  422|       |      g_free (cache->charset);
  423|       |      cache->raw = g_strdup (raw);
  424|       |      cache->is_utf8 = g_utf8_get_charset_internal (raw, &new_charset);
  425|       |      cache->charset = g_strdup (new_charset);
  426|       |    }
  427|       |
  428|       |  if (charset)
  429|       |    *charset = cache->charset;
  430|       |
  431|       |  return cache->is_utf8;
  432|       |#else
  433|       |  /* assume the locale settings match the console encoding on non-Windows OSs */
  434|      2|  return g_get_charset (charset);
  435|      2|#endif
  436|      2|}
gcharset.c:g_utf8_get_charset_internal:
  113|      2|{
  114|       |  /* Allow CHARSET to override the charset of any locale category. Users should
  115|       |   * probably never be setting this — instead, just add the charset after a `.`
  116|       |   * in `LANGUAGE`/`LC_ALL`/`LC_*`/`LANG`. I can’t find any reference (in
  117|       |   * `git log`, code comments, or man pages) to this environment variable being
  118|       |   * standardised or documented or even used anywhere outside GLib. Perhaps it
  119|       |   * should eventually be removed. */
  120|      2|  const char *charset = g_getenv ("CHARSET");
  121|       |
  122|      2|  if (charset && *charset)
  ------------------
  |  Branch (122:7): [True: 0, False: 2]
  |  Branch (122:18): [True: 0, False: 0]
  ------------------
  123|      0|    {
  124|      0|      *a = charset;
  125|       |
  126|      0|      if (charset && strstr (charset, "UTF-8"))
  ------------------
  |  Branch (126:11): [True: 0, False: 0]
  |  Branch (126:22): [True: 0, False: 0]
  ------------------
  127|      0|        return TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  128|      0|      else
  129|      0|        return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  130|      0|    }
  131|       |
  132|       |  /* The libcharset code tries to be thread-safe without
  133|       |   * a lock, but has a memory leak and a missing memory
  134|       |   * barrier, so we lock for it
  135|       |   */
  136|      2|  G_LOCK (aliases);
  ------------------
  |  |  137|      2|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      2|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  137|      2|  charset = _g_locale_charset_unalias (raw_data);
  138|      2|  G_UNLOCK (aliases);
  ------------------
  |  |  138|      2|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      2|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  139|       |
  140|      2|  if (charset && *charset)
  ------------------
  |  Branch (140:7): [True: 2, False: 0]
  |  Branch (140:18): [True: 2, False: 0]
  ------------------
  141|      2|    {
  142|      2|      *a = charset;
  143|       |
  144|      2|      if (charset && strstr (charset, "UTF-8"))
  ------------------
  |  Branch (144:11): [True: 2, False: 0]
  |  Branch (144:22): [True: 0, False: 2]
  ------------------
  145|      0|        return TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  146|      2|      else
  147|      2|        return FALSE;
  ------------------
  |  |  880|      2|#define	FALSE	(0)
  ------------------
  148|      2|    }
  149|       |
  150|       |  /* Assume this for compatibility at present.  */
  151|      0|  *a = "US-ASCII";
  152|       |
  153|      0|  return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  154|      2|}

g_iconv_open:
  218|  85.2k|{
  219|  85.2k|  iconv_t cd;
  220|       |  
  221|  85.2k|  if (!try_conversion (to_codeset, from_codeset, &cd))
  ------------------
  |  Branch (221:7): [True: 0, False: 85.2k]
  ------------------
  222|      0|    {
  223|      0|      const char **to_aliases = _g_charset_get_aliases (to_codeset);
  224|      0|      const char **from_aliases = _g_charset_get_aliases (from_codeset);
  225|       |
  226|      0|      if (from_aliases)
  ------------------
  |  Branch (226:11): [True: 0, False: 0]
  ------------------
  227|      0|	{
  228|      0|	  const char **p = from_aliases;
  229|      0|	  while (*p)
  ------------------
  |  Branch (229:11): [True: 0, False: 0]
  ------------------
  230|      0|	    {
  231|      0|	      if (try_conversion (to_codeset, *p, &cd))
  ------------------
  |  Branch (231:12): [True: 0, False: 0]
  ------------------
  232|      0|		goto out;
  233|       |
  234|      0|	      if (try_to_aliases (to_aliases, *p, &cd))
  ------------------
  |  Branch (234:12): [True: 0, False: 0]
  ------------------
  235|      0|		goto out;
  236|       |
  237|      0|	      p++;
  238|      0|	    }
  239|      0|	}
  240|       |
  241|      0|      if (try_to_aliases (to_aliases, from_codeset, &cd))
  ------------------
  |  Branch (241:11): [True: 0, False: 0]
  ------------------
  242|      0|	goto out;
  243|      0|    }
  244|       |
  245|  85.2k| out:
  246|  85.2k|  return (cd == (iconv_t)-1) ? (GIConv)-1 : (GIConv)cd;
  ------------------
  |  Branch (246:10): [True: 0, False: 85.2k]
  ------------------
  247|  85.2k|}
g_iconv:
  279|   170k|{
  280|   170k|  iconv_t cd = (iconv_t)converter;
  281|       |
  282|   170k|  return iconv (cd, inbuf, inbytes_left, outbuf, outbytes_left);
  283|   170k|}
g_iconv_close:
  302|  85.2k|{
  303|  85.2k|  iconv_t cd = (iconv_t)converter;
  304|       |
  305|  85.2k|  return iconv_close (cd);
  306|  85.2k|}
g_convert_with_iconv:
  399|  85.0k|{
  400|  85.0k|  gchar *dest;
  401|  85.0k|  gchar *outp;
  402|  85.0k|  const gchar *p;
  403|  85.0k|  gsize inbytes_remaining;
  404|  85.0k|  gsize outbytes_remaining;
  405|  85.0k|  gsize err;
  406|  85.0k|  gsize outbuf_size;
  407|  85.0k|  gboolean have_error = FALSE;
  ------------------
  |  |  880|  85.0k|#define	FALSE	(0)
  ------------------
  408|  85.0k|  gboolean done = FALSE;
  ------------------
  |  |  880|  85.0k|#define	FALSE	(0)
  ------------------
  409|  85.0k|  gboolean reset = FALSE;
  ------------------
  |  |  880|  85.0k|#define	FALSE	(0)
  ------------------
  410|       |  
  411|  85.0k|  g_return_val_if_fail (converter != (GIConv) -1, NULL);
  ------------------
  |  |  652|  85.0k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  85.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  85.0k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  85.0k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  85.0k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  85.0k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  85.0k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  85.0k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 85.0k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  85.0k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  85.0k|   else                                         \
  |  |  |  |  |  | 1183|  85.0k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  85.0k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  85.0k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 85.0k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  85.0k|      { } \
  |  |  655|  85.0k|    else \
  |  |  656|  85.0k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  85.0k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  85.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 85.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|       |     
  413|  85.0k|  if (len < 0)
  ------------------
  |  Branch (413:7): [True: 2, False: 85.0k]
  ------------------
  414|      2|    len = strlen (str);
  415|       |
  416|  85.0k|  p = str;
  417|  85.0k|  inbytes_remaining = len;
  418|  85.0k|  outbuf_size = len + NUL_TERMINATOR_LENGTH;
  ------------------
  |  |  163|  85.0k|#define NUL_TERMINATOR_LENGTH 4
  ------------------
  419|       |  
  420|  85.0k|  outbytes_remaining = outbuf_size - NUL_TERMINATOR_LENGTH;
  ------------------
  |  |  163|  85.0k|#define NUL_TERMINATOR_LENGTH 4
  ------------------
  421|  85.0k|  outp = dest = g_malloc (outbuf_size);
  422|       |
  423|   255k|  while (!done && !have_error)
  ------------------
  |  Branch (423:10): [True: 170k, False: 84.8k]
  |  Branch (423:19): [True: 169k, False: 227]
  ------------------
  424|   169k|    {
  425|   169k|      if (reset)
  ------------------
  |  Branch (425:11): [True: 84.8k, False: 85.1k]
  ------------------
  426|  84.8k|        err = g_iconv (converter, NULL, &inbytes_remaining, &outp, &outbytes_remaining);
  427|  85.1k|      else
  428|  85.1k|        err = g_iconv (converter, (char **)&p, &inbytes_remaining, &outp, &outbytes_remaining);
  429|       |
  430|   169k|      if (err == (gsize) -1)
  ------------------
  |  Branch (430:11): [True: 104, False: 169k]
  ------------------
  431|    104|	{
  432|    104|	  switch (errno)
  433|    104|	    {
  434|      0|	    case EINVAL:
  ------------------
  |  Branch (434:6): [True: 0, False: 104]
  ------------------
  435|       |	      /* Incomplete text, do not report an error */
  436|      0|	      done = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  437|      0|	      break;
  438|    104|	    case E2BIG:
  ------------------
  |  Branch (438:6): [True: 104, False: 0]
  ------------------
  439|    104|	      {
  440|    104|		gsize used = outp - dest;
  441|       |		
  442|    104|		outbuf_size *= 2;
  443|    104|		dest = g_realloc (dest, outbuf_size);
  444|       |		
  445|    104|		outp = dest + used;
  446|    104|		outbytes_remaining = outbuf_size - used - NUL_TERMINATOR_LENGTH;
  ------------------
  |  |  163|    104|#define NUL_TERMINATOR_LENGTH 4
  ------------------
  447|    104|	      }
  448|    104|	      break;
  449|      0|	    case EILSEQ:
  ------------------
  |  Branch (449:6): [True: 0, False: 104]
  ------------------
  450|      0|              g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
  451|      0|                                   _("Invalid byte sequence in conversion input"));
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
  452|      0|	      have_error = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  453|      0|	      break;
  454|      0|	    default:
  ------------------
  |  Branch (454:6): [True: 0, False: 104]
  ------------------
  455|      0|              {
  456|      0|                int errsv = errno;
  457|       |
  458|      0|                g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
  459|      0|                             _("Error during conversion: %s"),
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
  460|      0|                             g_strerror (errsv));
  461|      0|              }
  462|      0|	      have_error = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  463|      0|	      break;
  464|    104|	    }
  465|    104|	}
  466|   169k|      else if (err > 0)
  ------------------
  |  Branch (466:16): [True: 227, False: 169k]
  ------------------
  467|    227|        {
  468|       |          /* @err gives the number of replacement characters used. */
  469|    227|          g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
  ------------------
  |  |   75|    227|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
  470|    227|                               _("Unrepresentable character in conversion input"));
  ------------------
  |  |   17|    227|#define _(String) glib_gettext(String)
  ------------------
  471|    227|          have_error = TRUE;
  ------------------
  |  |  884|    227|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|    227|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  472|    227|        }
  473|   169k|      else 
  474|   169k|	{
  475|   169k|	  if (!reset)
  ------------------
  |  Branch (475:8): [True: 84.8k, False: 84.8k]
  ------------------
  476|  84.8k|	    {
  477|       |	      /* call g_iconv with NULL inbuf to cleanup shift state */
  478|  84.8k|	      reset = TRUE;
  ------------------
  |  |  884|  84.8k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  84.8k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  479|  84.8k|	      inbytes_remaining = 0;
  480|  84.8k|	    }
  481|  84.8k|	  else
  482|  84.8k|	    done = TRUE;
  ------------------
  |  |  884|  84.8k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  84.8k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  483|   169k|	}
  484|   169k|    }
  485|       |
  486|  85.0k|  memset (outp, 0, NUL_TERMINATOR_LENGTH);
  ------------------
  |  |  163|  85.0k|#define NUL_TERMINATOR_LENGTH 4
  ------------------
  487|       |  
  488|  85.0k|  if (bytes_read)
  ------------------
  |  Branch (488:7): [True: 0, False: 85.0k]
  ------------------
  489|      0|    *bytes_read = p - str;
  490|  85.0k|  else
  491|  85.0k|    {
  492|  85.0k|      if ((p - str) != len) 
  ------------------
  |  Branch (492:11): [True: 0, False: 85.0k]
  ------------------
  493|      0|	{
  494|      0|          if (!have_error)
  ------------------
  |  Branch (494:15): [True: 0, False: 0]
  ------------------
  495|      0|            {
  496|      0|              g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_PARTIAL_INPUT,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
  497|      0|                                   _("Partial character sequence at end of input"));
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
  498|      0|              have_error = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  499|      0|            }
  500|      0|	}
  501|  85.0k|    }
  502|       |
  503|  85.0k|  if (bytes_written)
  ------------------
  |  Branch (503:7): [True: 229, False: 84.8k]
  ------------------
  504|    229|    *bytes_written = outp - dest;	/* Doesn't include '\0' */
  505|       |
  506|  85.0k|  if (have_error)
  ------------------
  |  Branch (506:7): [True: 227, False: 84.8k]
  ------------------
  507|    227|    {
  508|    227|      g_free (dest);
  509|    227|      return NULL;
  510|    227|    }
  511|  84.8k|  else
  512|  84.8k|    return dest;
  513|  85.0k|}
g_convert:
  566|  85.0k|{
  567|  85.0k|  gchar *res;
  568|  85.0k|  GIConv cd;
  569|       |
  570|  85.0k|  g_return_val_if_fail (str != NULL, NULL);
  ------------------
  |  |  652|  85.0k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  85.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  85.0k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  85.0k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  85.0k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  85.0k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  85.0k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  85.0k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 85.0k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  85.0k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  85.0k|   else                                         \
  |  |  |  |  |  | 1183|  85.0k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  85.0k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  85.0k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 85.0k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  85.0k|      { } \
  |  |  655|  85.0k|    else \
  |  |  656|  85.0k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  85.0k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  85.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 85.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  571|  85.0k|  g_return_val_if_fail (to_codeset != NULL, NULL);
  ------------------
  |  |  652|  85.0k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  85.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  85.0k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  85.0k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  85.0k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  85.0k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  85.0k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  85.0k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 85.0k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  85.0k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  85.0k|   else                                         \
  |  |  |  |  |  | 1183|  85.0k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  85.0k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  85.0k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 85.0k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  85.0k|      { } \
  |  |  655|  85.0k|    else \
  |  |  656|  85.0k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  85.0k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  85.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 85.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  572|  85.0k|  g_return_val_if_fail (from_codeset != NULL, NULL);
  ------------------
  |  |  652|  85.0k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  85.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  85.0k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  85.0k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  85.0k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  85.0k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  85.0k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  85.0k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 85.0k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  85.0k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  85.0k|   else                                         \
  |  |  |  |  |  | 1183|  85.0k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  85.0k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  85.0k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 85.0k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  85.0k|      { } \
  |  |  655|  85.0k|    else \
  |  |  656|  85.0k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  85.0k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  85.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 85.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  573|       |  
  574|  85.0k|  cd = open_converter (to_codeset, from_codeset, error);
  575|       |
  576|  85.0k|  if (cd == (GIConv) -1)
  ------------------
  |  Branch (576:7): [True: 0, False: 85.0k]
  ------------------
  577|      0|    {
  578|      0|      if (bytes_read)
  ------------------
  |  Branch (578:11): [True: 0, False: 0]
  ------------------
  579|      0|        *bytes_read = 0;
  580|       |      
  581|      0|      if (bytes_written)
  ------------------
  |  Branch (581:11): [True: 0, False: 0]
  ------------------
  582|      0|        *bytes_written = 0;
  583|       |      
  584|      0|      return NULL;
  585|      0|    }
  586|       |
  587|  85.0k|  res = g_convert_with_iconv (str, len, cd,
  588|  85.0k|			      bytes_read, bytes_written,
  589|  85.0k|			      error);
  590|       |
  591|  85.0k|  close_converter (cd);
  592|       |
  593|  85.0k|  return res;
  594|  85.0k|}
g_convert_with_fallback:
  653|  84.8k|{
  654|  84.8k|  gchar *utf8;
  655|  84.8k|  gchar *dest;
  656|  84.8k|  gchar *outp;
  657|  84.8k|  const gchar *insert_str = NULL;
  658|  84.8k|  const gchar *p;
  659|  84.8k|  gsize inbytes_remaining;   
  660|  84.8k|  const gchar *save_p = NULL;
  661|  84.8k|  gsize save_inbytes = 0;
  662|  84.8k|  gsize outbytes_remaining; 
  663|  84.8k|  gsize err;
  664|  84.8k|  GIConv cd;
  665|  84.8k|  gsize outbuf_size;
  666|  84.8k|  gboolean have_error = FALSE;
  ------------------
  |  |  880|  84.8k|#define	FALSE	(0)
  ------------------
  667|  84.8k|  gboolean done = FALSE;
  ------------------
  |  |  880|  84.8k|#define	FALSE	(0)
  ------------------
  668|       |
  669|  84.8k|  GError *local_error = NULL;
  670|       |  
  671|  84.8k|  g_return_val_if_fail (str != NULL, NULL);
  ------------------
  |  |  652|  84.8k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  84.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  84.8k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  84.8k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  84.8k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  84.8k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  84.8k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  84.8k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 84.8k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  84.8k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  84.8k|   else                                         \
  |  |  |  |  |  | 1183|  84.8k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  84.8k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  84.8k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 84.8k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  84.8k|      { } \
  |  |  655|  84.8k|    else \
  |  |  656|  84.8k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  84.8k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  84.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 84.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  672|  84.8k|  g_return_val_if_fail (to_codeset != NULL, NULL);
  ------------------
  |  |  652|  84.8k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  84.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  84.8k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  84.8k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  84.8k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  84.8k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  84.8k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  84.8k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 84.8k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  84.8k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  84.8k|   else                                         \
  |  |  |  |  |  | 1183|  84.8k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  84.8k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  84.8k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 84.8k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  84.8k|      { } \
  |  |  655|  84.8k|    else \
  |  |  656|  84.8k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  84.8k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  84.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 84.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  673|  84.8k|  g_return_val_if_fail (from_codeset != NULL, NULL);
  ------------------
  |  |  652|  84.8k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  84.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  84.8k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  84.8k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  84.8k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  84.8k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  84.8k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  84.8k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 84.8k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  84.8k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  84.8k|   else                                         \
  |  |  |  |  |  | 1183|  84.8k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  84.8k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  84.8k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 84.8k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  84.8k|      { } \
  |  |  655|  84.8k|    else \
  |  |  656|  84.8k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  84.8k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  84.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 84.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  674|       |     
  675|  84.8k|  if (len < 0)
  ------------------
  |  Branch (675:7): [True: 0, False: 84.8k]
  ------------------
  676|      0|    len = strlen (str);
  677|       |  
  678|       |  /* Try an exact conversion; we only proceed if this fails
  679|       |   * due to an illegal sequence in the input string.
  680|       |   */
  681|  84.8k|  dest = g_convert (str, len, to_codeset, from_codeset, 
  682|  84.8k|		    bytes_read, bytes_written, &local_error);
  683|  84.8k|  if (!local_error)
  ------------------
  |  Branch (683:7): [True: 84.6k, False: 227]
  ------------------
  684|  84.6k|    return dest;
  685|       |
  686|  84.8k|  g_assert (dest == NULL);
  ------------------
  |  |  234|    227|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    227|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|    227|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|    227|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    227| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    227|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    227|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    227|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 227, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    227|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    227|   else                                         \
  |  |  |  |  |  | 1183|    227|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    227|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    227|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 227, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|    227|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  84.8k|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  84.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 227]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  687|       |
  688|    227|  if (!g_error_matches (local_error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE))
  ------------------
  |  |   75|    227|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
  |  Branch (688:7): [True: 0, False: 227]
  ------------------
  689|      0|    {
  690|      0|      g_propagate_error (error, local_error);
  691|      0|      return NULL;
  692|      0|    }
  693|    227|  else
  694|    227|    g_error_free (local_error);
  695|       |
  696|    227|  local_error = NULL;
  697|       |  
  698|       |  /* No go; to proceed, we need a converter from "UTF-8" to
  699|       |   * to_codeset, and the string as UTF-8.
  700|       |   */
  701|    227|  cd = open_converter (to_codeset, "UTF-8", error);
  702|    227|  if (cd == (GIConv) -1)
  ------------------
  |  Branch (702:7): [True: 0, False: 227]
  ------------------
  703|      0|    {
  704|      0|      if (bytes_read)
  ------------------
  |  Branch (704:11): [True: 0, False: 0]
  ------------------
  705|      0|        *bytes_read = 0;
  706|       |      
  707|      0|      if (bytes_written)
  ------------------
  |  Branch (707:11): [True: 0, False: 0]
  ------------------
  708|      0|        *bytes_written = 0;
  709|       |      
  710|      0|      return NULL;
  711|      0|    }
  712|       |
  713|    227|  utf8 = g_convert (str, len, "UTF-8", from_codeset, 
  714|    227|		    bytes_read, &inbytes_remaining, error);
  715|    227|  if (!utf8)
  ------------------
  |  Branch (715:7): [True: 0, False: 227]
  ------------------
  716|      0|    {
  717|      0|      close_converter (cd);
  718|      0|      if (bytes_written)
  ------------------
  |  Branch (718:11): [True: 0, False: 0]
  ------------------
  719|      0|        *bytes_written = 0;
  720|      0|      return NULL;
  721|      0|    }
  722|       |
  723|       |  /* Now the heart of the code. We loop through the UTF-8 string, and
  724|       |   * whenever we hit an offending character, we form fallback, convert
  725|       |   * the fallback to the target codeset, and then go back to
  726|       |   * converting the original string after finishing with the fallback.
  727|       |   *
  728|       |   * The variables save_p and save_inbytes store the input state
  729|       |   * for the original string while we are converting the fallback
  730|       |   */
  731|    227|  p = utf8;
  732|       |
  733|    227|  outbuf_size = len + NUL_TERMINATOR_LENGTH;
  ------------------
  |  |  163|    227|#define NUL_TERMINATOR_LENGTH 4
  ------------------
  734|    227|  outbytes_remaining = outbuf_size - NUL_TERMINATOR_LENGTH;
  ------------------
  |  |  163|    227|#define NUL_TERMINATOR_LENGTH 4
  ------------------
  735|    227|  outp = dest = g_malloc (outbuf_size);
  736|       |
  737|    784|  while (!done && !have_error)
  ------------------
  |  Branch (737:10): [True: 557, False: 227]
  |  Branch (737:19): [True: 557, False: 0]
  ------------------
  738|    557|    {
  739|    557|      gsize inbytes_tmp = inbytes_remaining;
  740|    557|      err = g_iconv (cd, (char **)&p, &inbytes_tmp, &outp, &outbytes_remaining);
  741|    557|      inbytes_remaining = inbytes_tmp;
  742|       |
  743|    557|      if (err == (gsize) -1)
  ------------------
  |  Branch (743:11): [True: 103, False: 454]
  ------------------
  744|    103|	{
  745|    103|	  switch (errno)
  746|    103|	    {
  747|      0|	    case EINVAL:
  ------------------
  |  Branch (747:6): [True: 0, False: 103]
  ------------------
  748|      0|	      g_assert_not_reached();
  ------------------
  |  |  233|      0|#define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|      0|	      break;
  750|    103|	    case E2BIG:
  ------------------
  |  Branch (750:6): [True: 103, False: 0]
  ------------------
  751|    103|	      {
  752|    103|		gsize used = outp - dest;
  753|       |
  754|    103|		outbuf_size *= 2;
  755|    103|		dest = g_realloc (dest, outbuf_size);
  756|       |		
  757|    103|		outp = dest + used;
  758|    103|		outbytes_remaining = outbuf_size - used - NUL_TERMINATOR_LENGTH;
  ------------------
  |  |  163|    103|#define NUL_TERMINATOR_LENGTH 4
  ------------------
  759|       |		
  760|    103|		break;
  761|      0|	      }
  762|      0|	    case EILSEQ:
  ------------------
  |  Branch (762:6): [True: 0, False: 103]
  ------------------
  763|      0|	      if (save_p)
  ------------------
  |  Branch (763:12): [True: 0, False: 0]
  ------------------
  764|      0|		{
  765|       |		  /* Error converting fallback string - fatal
  766|       |		   */
  767|      0|		  g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
  768|      0|			       _("Cannot convert fallback “%s” to codeset “%s”"),
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
  769|      0|			       insert_str, to_codeset);
  770|      0|		  have_error = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  771|      0|		  break;
  772|      0|		}
  773|      0|	      else if (p)
  ------------------
  |  Branch (773:17): [True: 0, False: 0]
  ------------------
  774|      0|		{
  775|      0|		  if (!fallback)
  ------------------
  |  Branch (775:9): [True: 0, False: 0]
  ------------------
  776|      0|		    { 
  777|      0|		      gunichar ch = g_utf8_get_char (p);
  778|      0|		      insert_str = g_strdup_printf (ch < 0x10000 ? "\\u%04x" : "\\U%08x",
  ------------------
  |  Branch (778:39): [True: 0, False: 0]
  ------------------
  779|      0|						    ch);
  780|      0|		    }
  781|      0|		  else
  782|      0|		    insert_str = fallback;
  783|       |		  
  784|      0|		  save_p = g_utf8_next_char (p);
  ------------------
  |  |  799|      0|#define g_utf8_next_char(p) (char *)((p) + g_utf8_skip[*(const guchar *)(p)])
  ------------------
  785|      0|		  save_inbytes = inbytes_remaining - (save_p - p);
  786|      0|		  p = insert_str;
  787|      0|		  inbytes_remaining = strlen (p);
  788|      0|		  break;
  789|      0|		}
  790|       |              /* if p is null */
  791|      0|              G_GNUC_FALLTHROUGH;
  ------------------
  |  |  638|      0|#define G_GNUC_FALLTHROUGH __attribute__((fallthrough)) \
  |  |  639|      0|  GLIB_AVAILABLE_MACRO_IN_2_60
  ------------------
  792|      0|	    default:
  ------------------
  |  Branch (792:6): [True: 0, False: 103]
  ------------------
  793|      0|              {
  794|      0|                int errsv = errno;
  795|       |
  796|      0|                g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
  797|      0|                             _("Error during conversion: %s"),
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
  798|      0|                             g_strerror (errsv));
  799|      0|              }
  800|       |
  801|      0|	      have_error = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  802|      0|	      break;
  803|    103|	    }
  804|    103|	}
  805|    454|      else
  806|    454|	{
  807|    454|	  if (save_p)
  ------------------
  |  Branch (807:8): [True: 0, False: 454]
  ------------------
  808|      0|	    {
  809|      0|	      if (!fallback)
  ------------------
  |  Branch (809:12): [True: 0, False: 0]
  ------------------
  810|      0|		g_free ((gchar *)insert_str);
  811|      0|	      p = save_p;
  812|      0|	      inbytes_remaining = save_inbytes;
  813|      0|	      save_p = NULL;
  814|      0|	    }
  815|    454|	  else if (p)
  ------------------
  |  Branch (815:13): [True: 227, False: 227]
  ------------------
  816|    227|	    {
  817|       |	      /* call g_iconv with NULL inbuf to cleanup shift state */
  818|    227|	      p = NULL;
  819|    227|	      inbytes_remaining = 0;
  820|    227|	    }
  821|    227|	  else
  822|    227|	    done = TRUE;
  ------------------
  |  |  884|    227|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|    227|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  823|    454|	}
  824|    557|    }
  825|       |
  826|       |  /* Cleanup
  827|       |   */
  828|    227|  memset (outp, 0, NUL_TERMINATOR_LENGTH);
  ------------------
  |  |  163|    227|#define NUL_TERMINATOR_LENGTH 4
  ------------------
  829|       |  
  830|    227|  close_converter (cd);
  831|       |
  832|    227|  if (bytes_written)
  ------------------
  |  Branch (832:7): [True: 0, False: 227]
  ------------------
  833|      0|    *bytes_written = outp - dest;	/* Doesn't include '\0' */
  834|       |
  835|    227|  g_free (utf8);
  836|       |
  837|    227|  if (have_error)
  ------------------
  |  Branch (837:7): [True: 0, False: 227]
  ------------------
  838|      0|    {
  839|      0|      if (save_p && !fallback)
  ------------------
  |  Branch (839:11): [True: 0, False: 0]
  |  Branch (839:21): [True: 0, False: 0]
  ------------------
  840|      0|	g_free ((gchar *)insert_str);
  841|      0|      g_free (dest);
  842|      0|      return NULL;
  843|      0|    }
  844|    227|  else
  845|    227|    return dest;
  846|    227|}
g_locale_to_utf8:
 1012|      2|{
 1013|      2|  const char *charset;
 1014|       |
 1015|      2|  if (g_get_charset (&charset))
  ------------------
  |  Branch (1015:7): [True: 0, False: 2]
  ------------------
 1016|      0|    return strdup_len (opsysstring, len, bytes_read, bytes_written, error);
 1017|      2|  else
 1018|      2|    return convert_checked (opsysstring, len, "UTF-8", charset,
 1019|      2|                            CONVERT_CHECK_NO_NULS_IN_OUTPUT,
 1020|      2|                            bytes_read, bytes_written, error);
 1021|      2|}
g_get_filename_charsets:
 1173|    123|{
 1174|    123|  static GPrivate cache_private = G_PRIVATE_INIT (filename_charset_cache_free);
  ------------------
  |  |   88|    123|#define G_PRIVATE_INIT(notify) { NULL, (notify), { NULL, NULL } }
  ------------------
 1175|    123|  GFilenameCharsetCache *cache = g_private_get (&cache_private);
 1176|    123|  const gchar *charset;
 1177|       |
 1178|    123|  if (!cache)
  ------------------
  |  Branch (1178:7): [True: 1, False: 122]
  ------------------
 1179|      1|    cache = g_private_set_alloc0 (&cache_private, sizeof (GFilenameCharsetCache));
 1180|       |
 1181|    123|  g_get_charset (&charset);
 1182|       |
 1183|    123|  if (!(cache->charset && strcmp (cache->charset, charset) == 0))
  ------------------
  |  Branch (1183:9): [True: 122, False: 1]
  |  Branch (1183:27): [True: 122, False: 0]
  ------------------
 1184|      1|    {
 1185|      1|      const gchar *new_charset;
 1186|      1|      const gchar *p;
 1187|      1|      gint i;
 1188|       |
 1189|      1|      g_free (cache->charset);
 1190|      1|      g_strfreev (cache->filename_charsets);
 1191|      1|      cache->charset = g_strdup (charset);
 1192|       |      
 1193|      1|      p = g_getenv ("G_FILENAME_ENCODING");
 1194|      1|      if (p != NULL && p[0] != '\0') 
  ------------------
  |  Branch (1194:11): [True: 0, False: 1]
  |  Branch (1194:24): [True: 0, False: 0]
  ------------------
 1195|      0|	{
 1196|      0|	  cache->filename_charsets = g_strsplit (p, ",", 0);
 1197|      0|	  cache->is_utf8 = (strcmp (cache->filename_charsets[0], "UTF-8") == 0);
 1198|       |
 1199|      0|	  for (i = 0; cache->filename_charsets[i]; i++)
  ------------------
  |  Branch (1199:16): [True: 0, False: 0]
  ------------------
 1200|      0|	    {
 1201|      0|	      if (strcmp ("@locale", cache->filename_charsets[i]) == 0)
  ------------------
  |  Branch (1201:12): [True: 0, False: 0]
  ------------------
 1202|      0|		{
 1203|      0|		  g_get_charset (&new_charset);
 1204|      0|		  g_free (cache->filename_charsets[i]);
 1205|      0|		  cache->filename_charsets[i] = g_strdup (new_charset);
 1206|      0|		}
 1207|      0|	    }
 1208|      0|	}
 1209|      1|      else if (g_getenv ("G_BROKEN_FILENAMES") != NULL)
  ------------------
  |  Branch (1209:16): [True: 0, False: 1]
  ------------------
 1210|      0|	{
 1211|      0|	  cache->filename_charsets = g_new0 (gchar *, 2);
  ------------------
  |  |  316|      0|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|      0|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      0|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      0|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      0|	  gpointer __p;						\
  |  |  |  |  248|      0|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  249|      0|	    __p = g_##func (__n);				\
  |  |  |  |  250|      0|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      0|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      0|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      0|	  else							\
  |  |  |  |  254|      0|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      0|	  __p;							\
  |  |  |  |  256|      0|	}))
  |  |  ------------------
  ------------------
 1212|      0|	  cache->is_utf8 = g_get_charset (&new_charset);
 1213|      0|	  cache->filename_charsets[0] = g_strdup (new_charset);
 1214|      0|	}
 1215|      1|      else 
 1216|      1|	{
 1217|      1|	  cache->filename_charsets = g_new0 (gchar *, 3);
  ------------------
  |  |  316|      1|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|      1|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      1|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      1|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      1|	  gpointer __p;						\
  |  |  |  |  248|      1|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  249|      1|	    __p = g_##func (__n);				\
  |  |  |  |  250|      1|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      1|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      1|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      1|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 1]
  |  |  |  |  |  Branch (251:26): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      1|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      1|	  else							\
  |  |  |  |  254|      1|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      1|	  __p;							\
  |  |  |  |  256|      1|	}))
  |  |  ------------------
  ------------------
 1218|      1|	  cache->is_utf8 = TRUE;
  ------------------
  |  |  884|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1219|      1|	  cache->filename_charsets[0] = g_strdup ("UTF-8");
 1220|      1|	  if (!g_get_charset (&new_charset))
  ------------------
  |  Branch (1220:8): [True: 1, False: 0]
  ------------------
 1221|      1|	    cache->filename_charsets[1] = g_strdup (new_charset);
 1222|      1|	}
 1223|      1|    }
 1224|       |
 1225|    123|  if (filename_charsets)
  ------------------
  |  Branch (1225:7): [True: 123, False: 0]
  ------------------
 1226|    123|    *filename_charsets = (const gchar **)cache->filename_charsets;
 1227|       |
 1228|    123|  return cache->is_utf8;
 1229|    123|}
g_filename_display_name:
 1975|    123|{
 1976|    123|  gint i;
 1977|    123|  const gchar **charsets;
 1978|    123|  gchar *display_name = NULL;
 1979|    123|  gboolean is_utf8;
 1980|       | 
 1981|    123|  is_utf8 = g_get_filename_charsets (&charsets);
 1982|       |
 1983|    123|  if (is_utf8)
  ------------------
  |  Branch (1983:7): [True: 123, False: 0]
  ------------------
 1984|    123|    {
 1985|    123|      if (g_utf8_validate (filename, -1, NULL))
  ------------------
  |  Branch (1985:11): [True: 123, False: 0]
  ------------------
 1986|    123|	display_name = g_strdup (filename);
 1987|    123|    }
 1988|       |  
 1989|    123|  if (!display_name)
  ------------------
  |  Branch (1989:7): [True: 0, False: 123]
  ------------------
 1990|      0|    {
 1991|       |      /* Try to convert from the filename charsets to UTF-8.
 1992|       |       * Skip the first charset if it is UTF-8.
 1993|       |       */
 1994|      0|      for (i = is_utf8 ? 1 : 0; charsets[i]; i++)
  ------------------
  |  Branch (1994:16): [True: 0, False: 0]
  |  Branch (1994:33): [True: 0, False: 0]
  ------------------
 1995|      0|	{
 1996|      0|	  display_name = g_convert (filename, -1, "UTF-8", charsets[i], 
 1997|      0|				    NULL, NULL, NULL);
 1998|       |
 1999|      0|	  if (display_name)
  ------------------
  |  Branch (1999:8): [True: 0, False: 0]
  ------------------
 2000|      0|	    break;
 2001|      0|	}
 2002|      0|    }
 2003|       |  
 2004|       |  /* if all conversions failed, we replace invalid UTF-8
 2005|       |   * by a question mark
 2006|       |   */
 2007|    123|  if (!display_name) 
  ------------------
  |  Branch (2007:7): [True: 0, False: 123]
  ------------------
 2008|      0|    display_name = g_utf8_make_valid (filename, -1);
 2009|       |
 2010|    123|  return display_name;
 2011|    123|}
gconvert.c:try_conversion:
  171|  85.2k|{
  172|  85.2k|  *cd = iconv_open (to_codeset, from_codeset);
  173|       |
  174|  85.2k|  if (*cd == (iconv_t)-1 && errno == EINVAL)
  ------------------
  |  Branch (174:7): [True: 0, False: 85.2k]
  |  Branch (174:29): [True: 0, False: 0]
  ------------------
  175|      0|    return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  176|  85.2k|  else
  177|  85.2k|    return TRUE;
  ------------------
  |  |  884|  85.2k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  85.2k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  178|  85.2k|}
gconvert.c:open_converter:
  312|  85.2k|{
  313|  85.2k|  GIConv cd;
  314|       |
  315|  85.2k|  cd = g_iconv_open (to_codeset, from_codeset);
  316|       |
  317|  85.2k|  if (cd == (GIConv) -1)
  ------------------
  |  Branch (317:7): [True: 0, False: 85.2k]
  ------------------
  318|      0|    {
  319|       |      /* Something went wrong.  */
  320|      0|      if (error)
  ------------------
  |  Branch (320:11): [True: 0, False: 0]
  ------------------
  321|      0|	{
  322|      0|	  if (errno == EINVAL)
  ------------------
  |  Branch (322:8): [True: 0, False: 0]
  ------------------
  323|      0|	    g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_NO_CONVERSION,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
  324|      0|			 _("Conversion from character set “%s” to “%s” is not supported"),
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
  325|      0|			 from_codeset, to_codeset);
  326|      0|	  else
  327|      0|	    g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
  328|      0|			 _("Could not open converter from “%s” to “%s”"),
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
  329|      0|			 from_codeset, to_codeset);
  330|      0|	}
  331|      0|    }
  332|       |  
  333|  85.2k|  return cd;
  334|  85.2k|}
gconvert.c:close_converter:
  338|  85.2k|{
  339|  85.2k|  if (cd == (GIConv) -1)
  ------------------
  |  Branch (339:7): [True: 0, False: 85.2k]
  ------------------
  340|      0|    return 0;
  341|       |  
  342|  85.2k|  return g_iconv_close (cd);  
  343|  85.2k|}
gconvert.c:convert_checked:
  925|      2|{
  926|      2|  gchar *out;
  927|      2|  gsize outbytes;
  928|       |
  929|      2|  if ((flags & CONVERT_CHECK_NO_NULS_IN_INPUT) && len > 0)
  ------------------
  |  Branch (929:7): [True: 0, False: 2]
  |  Branch (929:51): [True: 0, False: 0]
  ------------------
  930|      0|    {
  931|      0|      const gchar *early_nul = memchr (string, '\0', len);
  932|      0|      if (early_nul != NULL)
  ------------------
  |  Branch (932:11): [True: 0, False: 0]
  ------------------
  933|      0|        {
  934|      0|          if (bytes_read)
  ------------------
  |  Branch (934:15): [True: 0, False: 0]
  ------------------
  935|      0|            *bytes_read = early_nul - string;
  936|      0|          if (bytes_written)
  ------------------
  |  Branch (936:15): [True: 0, False: 0]
  ------------------
  937|      0|            *bytes_written = 0;
  938|       |
  939|      0|          g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
  940|      0|                               _("Embedded NUL byte in conversion input"));
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
  941|      0|          return NULL;
  942|      0|        }
  943|      0|    }
  944|       |
  945|      2|  out = g_convert (string, len, to_codeset, from_codeset,
  946|      2|                   bytes_read, &outbytes, error);
  947|      2|  if (out == NULL)
  ------------------
  |  Branch (947:7): [True: 0, False: 2]
  ------------------
  948|      0|    {
  949|      0|      if (bytes_written)
  ------------------
  |  Branch (949:11): [True: 0, False: 0]
  ------------------
  950|      0|        *bytes_written = 0;
  951|      0|      return NULL;
  952|      0|    }
  953|       |
  954|      2|  if ((flags & CONVERT_CHECK_NO_NULS_IN_OUTPUT)
  ------------------
  |  Branch (954:7): [True: 2, False: 0]
  ------------------
  955|      2|      && memchr (out, '\0', outbytes) != NULL)
  ------------------
  |  Branch (955:10): [True: 0, False: 2]
  ------------------
  956|      0|    {
  957|      0|      g_free (out);
  958|      0|      if (bytes_written)
  ------------------
  |  Branch (958:11): [True: 0, False: 0]
  ------------------
  959|      0|        *bytes_written = 0;
  960|      0|      g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_EMBEDDED_NUL,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
  961|      0|                           _("Embedded NUL byte in conversion output"));
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
  962|      0|      return NULL;
  963|      0|    }
  964|       |
  965|      2|  if (bytes_written)
  ------------------
  |  Branch (965:7): [True: 0, False: 2]
  ------------------
  966|      0|    *bytes_written = outbytes;
  967|      2|  return out;
  968|      2|}

g_datalist_clear:
  258|      6|{
  259|      6|  GData *data;
  260|      6|  guint i;
  261|       |
  262|      6|  g_return_if_fail (datalist != NULL);
  ------------------
  |  |  639|      6|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      6|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      6|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      6|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      6|   else                                         \
  |  |  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      6|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      6|      { } \
  |  |  642|      6|    else \
  |  |  643|      6|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      6|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      6|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  263|       |
  264|      6|  g_datalist_lock (datalist);
  265|       |
  266|      6|  data = G_DATALIST_GET_POINTER (datalist);
  ------------------
  |  |  145|      6|  ((GData*) ((gsize) g_atomic_pointer_get (datalist) & ~(gsize) G_DATALIST_FLAGS_MASK_INTERNAL))
  |  |  ------------------
  |  |  |  |  127|      6|  (G_GNUC_EXTENSION ({                                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  128|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));               \
  |  |  |  |  ------------------
  |  |  |  |  |  |  824|      6|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  |  |  ------------------
  |  |  |  |  129|      6|    glib_typeof (*(atomic)) gapg_temp_newval;                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      6|#define glib_typeof(t) __typeof__ (t)
  |  |  |  |  ------------------
  |  |  |  |  130|      6|    glib_typeof ((atomic)) gapg_temp_atomic = (atomic);                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      6|#define glib_typeof(t) __typeof__ (t)
  |  |  |  |  ------------------
  |  |  |  |  131|      6|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  |  |  132|      6|    gapg_temp_newval;                                                      \
  |  |  |  |  133|      6|  }))
  |  |  ------------------
  |  |                 ((GData*) ((gsize) g_atomic_pointer_get (datalist) & ~(gsize) G_DATALIST_FLAGS_MASK_INTERNAL))
  |  |  ------------------
  |  |  |  |  141|      6|#define G_DATALIST_FLAGS_MASK_INTERNAL 0x7
  |  |  ------------------
  ------------------
  267|      6|  G_DATALIST_SET_POINTER (datalist, NULL);
  ------------------
  |  |  147|      6|#define G_DATALIST_SET_POINTER(datalist, pointer)       G_STMT_START {                  \
  |  |  ------------------
  |  |  |  |  940|      6|#define G_STMT_START  do
  |  |  ------------------
  |  |  148|      6|  gpointer _oldv, _newv;                                                                \
  |  |  149|      6|  do {                                                                                  \
  |  |  150|      6|    _oldv = g_atomic_pointer_get (datalist);                                            \
  |  |  ------------------
  |  |  |  |  127|      6|  (G_GNUC_EXTENSION ({                                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  128|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));               \
  |  |  |  |  ------------------
  |  |  |  |  |  |  824|      6|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  |  |  ------------------
  |  |  |  |  129|      6|    glib_typeof (*(atomic)) gapg_temp_newval;                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      6|#define glib_typeof(t) __typeof__ (t)
  |  |  |  |  ------------------
  |  |  |  |  130|      6|    glib_typeof ((atomic)) gapg_temp_atomic = (atomic);                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      6|#define glib_typeof(t) __typeof__ (t)
  |  |  |  |  ------------------
  |  |  |  |  131|      6|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  |  |  132|      6|    gapg_temp_newval;                                                      \
  |  |  |  |  133|      6|  }))
  |  |  ------------------
  |  |  151|      6|    _newv = (gpointer) (((gsize) _oldv & G_DATALIST_FLAGS_MASK_INTERNAL) | (gsize) pointer);     \
  |  |  ------------------
  |  |  |  |  141|      6|#define G_DATALIST_FLAGS_MASK_INTERNAL 0x7
  |  |  ------------------
  |  |  152|      6|  } while (!g_atomic_pointer_compare_and_exchange ((void**) datalist, _oldv, _newv));   \
  |  |  ------------------
  |  |  |  |  252|      6|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  253|      6|    G_STATIC_ASSERT (sizeof (oldval) == sizeof (gpointer));                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  824|      6|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  |  |  ------------------
  |  |  |  |  254|      6|    gpointer gapcae_oldval = (gpointer)(oldval);                             \
  |  |  |  |  255|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  824|      6|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  |  |  ------------------
  |  |  |  |  256|      6|    (void) (0 ? (gpointer) *(atomic) : NULL);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (256:13): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  257|      6|    __atomic_compare_exchange_n ((atomic), (void *) (&(gapcae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  880|      6|#define	FALSE	(0)
  |  |  |  |  ------------------
  |  |  |  |                   __atomic_compare_exchange_n ((atomic), (void *) (&(gapcae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  884|      6|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  880|      6|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   __atomic_compare_exchange_n ((atomic), (void *) (&(gapcae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (257:5): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  258|      6|  }))
  |  |  ------------------
  |  |  |  Branch (152:12): [True: 0, False: 6]
  |  |  ------------------
  |  |  153|      6|} G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      6|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|       |
  269|      6|  g_datalist_unlock (datalist);
  270|       |
  271|      6|  if (data)
  ------------------
  |  Branch (271:7): [True: 0, False: 6]
  ------------------
  272|      0|    {
  273|      0|      for (i = 0; i < data->len; i++)
  ------------------
  |  Branch (273:19): [True: 0, False: 0]
  ------------------
  274|      0|        {
  275|      0|          if (data->data[i].data && data->data[i].destroy)
  ------------------
  |  Branch (275:15): [True: 0, False: 0]
  |  Branch (275:37): [True: 0, False: 0]
  ------------------
  276|      0|            data->data[i].destroy (data->data[i].data);
  277|      0|        }
  278|       |
  279|      0|      g_free (data);
  280|      0|    }
  281|      6|}
g_datalist_init:
 1282|      6|{
 1283|      6|  g_return_if_fail (datalist != NULL);
  ------------------
  |  |  639|      6|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      6|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      6|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      6|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      6|   else                                         \
  |  |  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      6|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      6|      { } \
  |  |  642|      6|    else \
  |  |  643|      6|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      6|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      6|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1284|       |
 1285|      6|  g_atomic_pointer_set (datalist, NULL);
  ------------------
  |  |  135|      6|  (G_GNUC_EXTENSION ({                                                      \
  |  |  ------------------
  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  136|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                \
  |  |  ------------------
  |  |  |  |  824|      6|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  137|      6|    glib_typeof ((atomic)) gaps_temp_atomic = (atomic);                     \
  |  |  ------------------
  |  |  |  |   39|      6|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  138|      6|    glib_typeof (*(atomic)) gaps_temp_newval = (newval);                    \
  |  |  ------------------
  |  |  |  |   39|      6|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  139|      6|    (void) (0 ? (gpointer) * (atomic) : NULL);                              \
  |  |  ------------------
  |  |  |  Branch (139:13): [Folded, False: 6]
  |  |  ------------------
  |  |  140|      6|    __atomic_store (gaps_temp_atomic, &gaps_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  141|      6|  }))
  ------------------
 1286|      6|}
gdataset.c:g_datalist_lock:
  211|      6|{
  212|       |  g_pointer_bit_lock ((void **)datalist, DATALIST_LOCK_BIT);
  ------------------
  |  |   57|      6|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |   58|      6|    G_STATIC_ASSERT (sizeof *(address) == sizeof (gpointer));                \
  |  |  ------------------
  |  |  |  |  824|      6|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |   59|      6|    g_pointer_bit_lock ((address), (lock_bit));                              \
  |  |   60|      6|  }))
  ------------------
  213|      6|}
gdataset.c:g_datalist_unlock:
  217|      6|{
  218|       |  g_pointer_bit_unlock ((void **)datalist, DATALIST_LOCK_BIT);
  ------------------
  |  |   69|      6|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |   70|      6|    G_STATIC_ASSERT (sizeof *(address) == sizeof (gpointer));                \
  |  |  ------------------
  |  |  |  |  824|      6|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |   71|      6|    g_pointer_bit_unlock ((address), (lock_bit));                            \
  |  |   72|      6|  }))
  ------------------
  219|      6|}

g_date_time_new_from_iso8601:
 1499|  1.75k|{
 1500|  1.75k|  gint length, date_length = -1;
 1501|  1.75k|  gint hour = 0, minute = 0;
 1502|  1.75k|  gdouble seconds = 0.0;
 1503|  1.75k|  GTimeZone *tz = NULL;
 1504|  1.75k|  GDateTime *datetime = NULL;
 1505|       |
 1506|  1.75k|  g_return_val_if_fail (text != NULL, NULL);
  ------------------
  |  |  652|  1.75k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.75k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  1.75k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.75k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.75k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.75k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.75k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.75k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.75k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.75k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.75k|   else                                         \
  |  |  |  |  |  | 1183|  1.75k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.75k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.75k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.75k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  1.75k|      { } \
  |  |  655|  1.75k|    else \
  |  |  656|  1.75k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  1.75k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.75k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.75k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1507|       |
 1508|       |  /* Count length of string and find date / time separator ('T', 't', or ' ') */
 1509|  10.5M|  for (length = 0; text[length] != '\0'; length++)
  ------------------
  |  Branch (1509:20): [True: 10.5M, False: 1.75k]
  ------------------
 1510|  10.5M|    {
 1511|  10.5M|      if (date_length < 0 && (text[length] == 'T' || text[length] == 't' || text[length] == ' '))
  ------------------
  |  Branch (1511:11): [True: 4.00M, False: 6.50M]
  |  Branch (1511:31): [True: 4, False: 4.00M]
  |  Branch (1511:54): [True: 1.19k, False: 3.99M]
  |  Branch (1511:77): [True: 0, False: 3.99M]
  ------------------
 1512|  1.19k|        date_length = length;
 1513|  10.5M|    }
 1514|       |
 1515|  1.75k|  if (date_length < 0)
  ------------------
  |  Branch (1515:7): [True: 559, False: 1.19k]
  ------------------
 1516|    559|    return NULL;
 1517|       |
 1518|  1.19k|  if (!parse_iso8601_time (text + date_length + 1, length - (date_length + 1),
  ------------------
  |  Branch (1518:7): [True: 295, False: 899]
  ------------------
 1519|  1.19k|                           &hour, &minute, &seconds, &tz))
 1520|    295|    goto out;
 1521|    899|  if (tz == NULL && default_tz == NULL)
  ------------------
  |  Branch (1521:7): [True: 0, False: 899]
  |  Branch (1521:21): [True: 0, False: 0]
  ------------------
 1522|      0|    return NULL;
 1523|       |
 1524|    899|  datetime = parse_iso8601_date (text, date_length, hour, minute, seconds, tz ? tz : default_tz);
  ------------------
  |  Branch (1524:76): [True: 899, False: 0]
  ------------------
 1525|       |
 1526|  1.19k|out:
 1527|  1.19k|    if (tz != NULL)
  ------------------
  |  Branch (1527:9): [True: 958, False: 236]
  ------------------
 1528|    958|      g_time_zone_unref (tz);
 1529|  1.19k|    return datetime;
 1530|    899|}
gdatetime.c:parse_iso8601_time:
 1417|  1.19k|{
 1418|  1.19k|  gssize tz_offset = -1;
 1419|       |
 1420|       |  /* Check for timezone suffix */
 1421|  1.19k|  *tz = parse_iso8601_timezone (text, length, &tz_offset);
 1422|  1.19k|  if (tz_offset >= 0)
  ------------------
  |  Branch (1422:7): [True: 1.08k, False: 113]
  ------------------
 1423|  1.08k|    length = tz_offset;
 1424|       |
 1425|       |  /* hh:mm:ss(.sss) */
 1426|  1.19k|  if (length >= 8 && text[2] == ':' && text[5] == ':')
  ------------------
  |  Branch (1426:7): [True: 1.07k, False: 123]
  |  Branch (1426:22): [True: 1.00k, False: 69]
  |  Branch (1426:40): [True: 996, False: 6]
  ------------------
 1427|    996|    {
 1428|    996|      return get_iso8601_int (text, 2, hour) &&
  ------------------
  |  Branch (1428:14): [True: 992, False: 4]
  ------------------
 1429|    992|             get_iso8601_int (text + 3, 2, minute) &&
  ------------------
  |  Branch (1429:14): [True: 976, False: 16]
  ------------------
 1430|    976|             get_iso8601_seconds (text + 6, length - 6, seconds);
  ------------------
  |  Branch (1430:14): [True: 899, False: 77]
  ------------------
 1431|    996|    }
 1432|       |  /* hhmmss(.sss) */
 1433|    198|  else if (length >= 6)
  ------------------
  |  Branch (1433:12): [True: 198, False: 0]
  ------------------
 1434|    198|    {
 1435|    198|      return get_iso8601_int (text, 2, hour) &&
  ------------------
  |  Branch (1435:14): [True: 32, False: 166]
  ------------------
 1436|     32|             get_iso8601_int (text + 2, 2, minute) &&
  ------------------
  |  Branch (1436:14): [True: 8, False: 24]
  ------------------
 1437|      8|             get_iso8601_seconds (text + 4, length - 4, seconds);
  ------------------
  |  Branch (1437:14): [True: 0, False: 8]
  ------------------
 1438|    198|    }
 1439|      0|  else
 1440|      0|    return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 1441|  1.19k|}
gdatetime.c:parse_iso8601_timezone:
 1351|  1.19k|{
 1352|  1.19k|  gint i, tz_length, offset_hours, offset_minutes;
 1353|  1.19k|  gint offset_sign = 1;
 1354|  1.19k|  GTimeZone *tz;
 1355|       |
 1356|       |  /* UTC uses Z suffix  */
 1357|  1.19k|  if (length > 0 && text[length - 1] == 'Z')
  ------------------
  |  Branch (1357:7): [True: 1.19k, False: 0]
  |  Branch (1357:21): [True: 958, False: 236]
  ------------------
 1358|    958|    {
 1359|    958|      *tz_offset = length - 1;
 1360|    958|      return g_time_zone_new_utc ();
 1361|    958|    }
 1362|       |
 1363|       |  /* Look for '+' or '-' of offset */
 1364|  3.60M|  for (i = length - 1; i >= 0; i--)
  ------------------
  |  Branch (1364:24): [True: 3.60M, False: 91]
  ------------------
 1365|  3.60M|    if (text[i] == '+' || text[i] == '-')
  ------------------
  |  Branch (1365:9): [True: 0, False: 3.60M]
  |  Branch (1365:27): [True: 145, False: 3.60M]
  ------------------
 1366|    145|      {
 1367|    145|        offset_sign = text[i] == '-' ? -1 : 1;
  ------------------
  |  Branch (1367:23): [True: 145, False: 0]
  ------------------
 1368|    145|        break;
 1369|    145|      }
 1370|    236|  if (i < 0)
  ------------------
  |  Branch (1370:7): [True: 91, False: 145]
  ------------------
 1371|     91|    return NULL;
 1372|    145|  tz_length = length - i;
 1373|       |
 1374|       |  /* +hh:mm or -hh:mm */
 1375|    145|  if (tz_length == 6 && text[i+3] == ':')
  ------------------
  |  Branch (1375:7): [True: 123, False: 22]
  |  Branch (1375:25): [True: 123, False: 0]
  ------------------
 1376|    123|    {
 1377|    123|      if (!get_iso8601_int (text + i + 1, 2, &offset_hours) ||
  ------------------
  |  Branch (1377:11): [True: 0, False: 123]
  ------------------
 1378|    123|          !get_iso8601_int (text + i + 4, 2, &offset_minutes))
  ------------------
  |  Branch (1378:11): [True: 0, False: 123]
  ------------------
 1379|      0|        return NULL;
 1380|    123|    }
 1381|       |  /* +hhmm or -hhmm */
 1382|     22|  else if (tz_length == 5)
  ------------------
  |  Branch (1382:12): [True: 6, False: 16]
  ------------------
 1383|      6|    {
 1384|      6|      if (!get_iso8601_int (text + i + 1, 2, &offset_hours) ||
  ------------------
  |  Branch (1384:11): [True: 6, False: 0]
  ------------------
 1385|      0|          !get_iso8601_int (text + i + 3, 2, &offset_minutes))
  ------------------
  |  Branch (1385:11): [True: 0, False: 0]
  ------------------
 1386|      6|        return NULL;
 1387|      6|    }
 1388|       |  /* +hh or -hh */
 1389|     16|  else if (tz_length == 3)
  ------------------
  |  Branch (1389:12): [True: 0, False: 16]
  ------------------
 1390|      0|    {
 1391|      0|      if (!get_iso8601_int (text + i + 1, 2, &offset_hours))
  ------------------
  |  Branch (1391:11): [True: 0, False: 0]
  ------------------
 1392|      0|        return NULL;
 1393|      0|      offset_minutes = 0;
 1394|      0|    }
 1395|     16|  else
 1396|     16|    return NULL;
 1397|       |
 1398|    123|  *tz_offset = i;
 1399|    123|  tz = g_time_zone_new_identifier (text + i);
 1400|       |
 1401|       |  /* Double-check that the GTimeZone matches our interpretation of the timezone.
 1402|       |   * This can fail because our interpretation is less strict than (for example)
 1403|       |   * parse_time() in gtimezone.c, which restricts the range of the parsed
 1404|       |   * integers. */
 1405|    123|  if (tz == NULL || g_time_zone_get_offset (tz, 0) != offset_sign * (offset_hours * 3600 + offset_minutes * 60))
  ------------------
  |  Branch (1405:7): [True: 123, False: 0]
  |  Branch (1405:21): [True: 0, False: 0]
  ------------------
 1406|    123|    {
 1407|    123|      g_clear_pointer (&tz, g_time_zone_unref);
  ------------------
  |  |  129|    123|  G_STMT_START                                           \
  |  |  ------------------
  |  |  |  |  940|    123|#define G_STMT_START  do
  |  |  ------------------
  |  |  130|    123|  {                                                      \
  |  |  131|    123|    G_STATIC_ASSERT (sizeof *(pp) == sizeof (gpointer)); \
  |  |  ------------------
  |  |  |  |  824|    123|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  132|    123|    glib_typeof ((pp)) _pp = (pp);                       \
  |  |  ------------------
  |  |  |  |   39|    123|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  133|    123|    glib_typeof (*(pp)) _ptr = *_pp;                     \
  |  |  ------------------
  |  |  |  |   39|    123|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  134|    123|    *_pp = NULL;                                         \
  |  |  135|    123|    if (_ptr)                                            \
  |  |  ------------------
  |  |  |  Branch (135:9): [True: 0, False: 123]
  |  |  ------------------
  |  |  136|    123|      (destroy) (_ptr);                                  \
  |  |  137|    123|  }                                                      \
  |  |  138|    123|  G_STMT_END                                             \
  |  |  ------------------
  |  |  |  |  948|    123|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 123]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|    123|  GLIB_AVAILABLE_MACRO_IN_2_34
  ------------------
 1408|    123|      return NULL;
 1409|    123|    }
 1410|       |
 1411|      0|  return tz;
 1412|    123|}
gdatetime.c:get_iso8601_int:
 1170|  3.82k|{
 1171|  3.82k|  gsize i;
 1172|  3.82k|  guint v = 0;
 1173|       |
 1174|  3.82k|  if (length < 1 || length > 4)
  ------------------
  |  Branch (1174:7): [True: 0, False: 3.82k]
  |  Branch (1174:21): [True: 0, False: 3.82k]
  ------------------
 1175|      0|    return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 1176|       |
 1177|  12.0k|  for (i = 0; i < length; i++)
  ------------------
  |  Branch (1177:15): [True: 9.29k, False: 2.76k]
  ------------------
 1178|  9.29k|    {
 1179|  9.29k|      const gchar c = text[i];
 1180|  9.29k|      if (c < '0' || c > '9')
  ------------------
  |  Branch (1180:11): [True: 875, False: 8.42k]
  |  Branch (1180:22): [True: 188, False: 8.23k]
  ------------------
 1181|  1.06k|        return FALSE;
  ------------------
  |  |  880|  1.06k|#define	FALSE	(0)
  ------------------
 1182|  8.23k|      v = v * 10 + (c - '0');
 1183|  8.23k|    }
 1184|       |
 1185|  2.76k|  *value = v;
 1186|  2.76k|  return TRUE;
  ------------------
  |  |  884|  2.76k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  2.76k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1187|  3.82k|}
gdatetime.c:get_iso8601_seconds:
 1192|    984|{
 1193|    984|  gsize i;
 1194|    984|  guint64 divisor = 1, v = 0;
 1195|       |
 1196|    984|  if (length < 2)
  ------------------
  |  Branch (1196:7): [True: 0, False: 984]
  ------------------
 1197|      0|    return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 1198|       |
 1199|  2.95k|  for (i = 0; i < 2; i++)
  ------------------
  |  Branch (1199:15): [True: 1.96k, False: 984]
  ------------------
 1200|  1.96k|    {
 1201|  1.96k|      const gchar c = text[i];
 1202|  1.96k|      if (c < '0' || c > '9')
  ------------------
  |  Branch (1202:11): [True: 0, False: 1.96k]
  |  Branch (1202:22): [True: 0, False: 1.96k]
  ------------------
 1203|      0|        return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 1204|  1.96k|      v = v * 10 + (c - '0');
 1205|  1.96k|    }
 1206|       |
 1207|    984|  if (length > 2 && !(text[i] == '.' || text[i] == ','))
  ------------------
  |  Branch (1207:7): [True: 85, False: 899]
  |  Branch (1207:23): [True: 6, False: 79]
  |  Branch (1207:41): [True: 0, False: 79]
  ------------------
 1208|     79|    return FALSE;
  ------------------
  |  |  880|     79|#define	FALSE	(0)
  ------------------
 1209|       |
 1210|       |  /* Ignore leap seconds, see g_date_time_new_from_iso8601() */
 1211|    905|  if (v >= 60.0 && v <= 61.0)
  ------------------
  |  Branch (1211:7): [True: 0, False: 905]
  |  Branch (1211:20): [True: 0, False: 0]
  ------------------
 1212|      0|    v = 59.0;
 1213|       |
 1214|    905|  i++;
 1215|    905|  if (i == length)
  ------------------
  |  Branch (1215:7): [True: 0, False: 905]
  ------------------
 1216|      0|    return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 1217|       |
 1218|    905|  for (; i < length; i++)
  ------------------
  |  Branch (1218:10): [True: 6, False: 899]
  ------------------
 1219|      6|    {
 1220|      6|      const gchar c = text[i];
 1221|      6|      if (c < '0' || c > '9' ||
  ------------------
  |  Branch (1221:11): [True: 0, False: 6]
  |  Branch (1221:22): [True: 6, False: 0]
  ------------------
 1222|      0|          v > (G_MAXUINT64 - (c - '0')) / 10 ||
  ------------------
  |  |  103|      0|#define G_MAXUINT64	G_GUINT64_CONSTANT(0xffffffffffffffff)
  |  |  ------------------
  |  |  |  |   67|      0|#define G_GUINT64_CONSTANT(val)	(val##UL)
  |  |  ------------------
  ------------------
  |  Branch (1222:11): [True: 0, False: 0]
  ------------------
 1223|      0|          divisor > G_MAXUINT64 / 10)
  ------------------
  |  |  103|      0|#define G_MAXUINT64	G_GUINT64_CONSTANT(0xffffffffffffffff)
  |  |  ------------------
  |  |  |  |   67|      0|#define G_GUINT64_CONSTANT(val)	(val##UL)
  |  |  ------------------
  ------------------
  |  Branch (1223:11): [True: 0, False: 0]
  ------------------
 1224|      6|        return FALSE;
  ------------------
  |  |  880|      6|#define	FALSE	(0)
  ------------------
 1225|      0|      v = v * 10 + (c - '0');
 1226|      0|      divisor *= 10;
 1227|      0|    }
 1228|       |
 1229|    899|  *value = (gdouble) v / divisor;
 1230|    899|  return TRUE;
  ------------------
  |  |  884|    899|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|    899|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1231|    905|}
gdatetime.c:parse_iso8601_date:
 1286|    899|{
 1287|       |  /* YYYY-MM-DD */
 1288|    899|  if (length == 10 && text[4] == '-' && text[7] == '-')
  ------------------
  |  Branch (1288:7): [True: 0, False: 899]
  |  Branch (1288:23): [True: 0, False: 0]
  |  Branch (1288:41): [True: 0, False: 0]
  ------------------
 1289|      0|    {
 1290|      0|      int year, month, day;
 1291|      0|      if (!get_iso8601_int (text, 4, &year) ||
  ------------------
  |  Branch (1291:11): [True: 0, False: 0]
  ------------------
 1292|      0|          !get_iso8601_int (text + 5, 2, &month) ||
  ------------------
  |  Branch (1292:11): [True: 0, False: 0]
  ------------------
 1293|      0|          !get_iso8601_int (text + 8, 2, &day))
  ------------------
  |  Branch (1293:11): [True: 0, False: 0]
  ------------------
 1294|      0|        return NULL;
 1295|      0|      return g_date_time_new (tz, year, month, day, hour, minute, seconds);
 1296|      0|    }
 1297|       |  /* YYYY-DDD */
 1298|    899|  else if (length == 8 && text[4] == '-')
  ------------------
  |  Branch (1298:12): [True: 0, False: 899]
  |  Branch (1298:27): [True: 0, False: 0]
  ------------------
 1299|      0|    {
 1300|      0|      gint year, ordinal_day;
 1301|      0|      if (!get_iso8601_int (text, 4, &year) ||
  ------------------
  |  Branch (1301:11): [True: 0, False: 0]
  ------------------
 1302|      0|          !get_iso8601_int (text + 5, 3, &ordinal_day))
  ------------------
  |  Branch (1302:11): [True: 0, False: 0]
  ------------------
 1303|      0|        return NULL;
 1304|      0|      return g_date_time_new_ordinal (tz, year, ordinal_day, hour, minute, seconds);
 1305|      0|    }
 1306|       |  /* YYYY-Www-D */
 1307|    899|  else if (length == 10 && text[4] == '-' && text[5] == 'W' && text[8] == '-')
  ------------------
  |  Branch (1307:12): [True: 0, False: 899]
  |  Branch (1307:28): [True: 0, False: 0]
  |  Branch (1307:46): [True: 0, False: 0]
  |  Branch (1307:64): [True: 0, False: 0]
  ------------------
 1308|      0|    {
 1309|      0|      gint year, week, week_day;
 1310|      0|      if (!get_iso8601_int (text, 4, &year) ||
  ------------------
  |  Branch (1310:11): [True: 0, False: 0]
  ------------------
 1311|      0|          !get_iso8601_int (text + 6, 2, &week) ||
  ------------------
  |  Branch (1311:11): [True: 0, False: 0]
  ------------------
 1312|      0|          !get_iso8601_int (text + 9, 1, &week_day))
  ------------------
  |  Branch (1312:11): [True: 0, False: 0]
  ------------------
 1313|      0|        return NULL;
 1314|      0|      return g_date_time_new_week (tz, year, week, week_day, hour, minute, seconds);
 1315|      0|    }
 1316|       |  /* YYYYWwwD */
 1317|    899|  else if (length == 8 && text[4] == 'W')
  ------------------
  |  Branch (1317:12): [True: 0, False: 899]
  |  Branch (1317:27): [True: 0, False: 0]
  ------------------
 1318|      0|    {
 1319|      0|      gint year, week, week_day;
 1320|      0|      if (!get_iso8601_int (text, 4, &year) ||
  ------------------
  |  Branch (1320:11): [True: 0, False: 0]
  ------------------
 1321|      0|          !get_iso8601_int (text + 5, 2, &week) ||
  ------------------
  |  Branch (1321:11): [True: 0, False: 0]
  ------------------
 1322|      0|          !get_iso8601_int (text + 7, 1, &week_day))
  ------------------
  |  Branch (1322:11): [True: 0, False: 0]
  ------------------
 1323|      0|        return NULL;
 1324|      0|      return g_date_time_new_week (tz, year, week, week_day, hour, minute, seconds);
 1325|      0|    }
 1326|       |  /* YYYYMMDD */
 1327|    899|  else if (length == 8)
  ------------------
  |  Branch (1327:12): [True: 0, False: 899]
  ------------------
 1328|      0|    {
 1329|      0|      int year, month, day;
 1330|      0|      if (!get_iso8601_int (text, 4, &year) ||
  ------------------
  |  Branch (1330:11): [True: 0, False: 0]
  ------------------
 1331|      0|          !get_iso8601_int (text + 4, 2, &month) ||
  ------------------
  |  Branch (1331:11): [True: 0, False: 0]
  ------------------
 1332|      0|          !get_iso8601_int (text + 6, 2, &day))
  ------------------
  |  Branch (1332:11): [True: 0, False: 0]
  ------------------
 1333|      0|        return NULL;
 1334|      0|      return g_date_time_new (tz, year, month, day, hour, minute, seconds);
 1335|      0|    }
 1336|       |  /* YYYYDDD */
 1337|    899|  else if (length == 7)
  ------------------
  |  Branch (1337:12): [True: 847, False: 52]
  ------------------
 1338|    847|    {
 1339|    847|      gint year, ordinal_day;
 1340|    847|      if (!get_iso8601_int (text, 4, &year) ||
  ------------------
  |  Branch (1340:11): [True: 338, False: 509]
  ------------------
 1341|    509|          !get_iso8601_int (text + 4, 3, &ordinal_day))
  ------------------
  |  Branch (1341:11): [True: 509, False: 0]
  ------------------
 1342|    847|        return NULL;
 1343|      0|      return g_date_time_new_ordinal (tz, year, ordinal_day, hour, minute, seconds);
 1344|    847|    }
 1345|     52|  else
 1346|     52|    return FALSE;
  ------------------
  |  |  880|     52|#define	FALSE	(0)
  ------------------
 1347|    899|}

g_getenv:
  254|    143|{
  255|    143|  g_return_val_if_fail (variable != NULL, NULL);
  ------------------
  |  |  652|    143|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    143|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    143|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    143|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    143| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    143|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    143|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    143|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 143, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    143|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    143|   else                                         \
  |  |  |  |  |  | 1183|    143|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    143|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    143|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 143, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    143|      { } \
  |  |  655|    143|    else \
  |  |  656|    143|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    143|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    143|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 143]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|       |
  257|    143|  return getenv (variable);
  258|    143|}

g_error_init:
  524|      2|{
  525|      2|  error_domain_ht = g_hash_table_new (NULL, NULL);
  526|      2|}
g_error_new_literal:
  817|  6.80k|{
  818|  6.80k|  g_return_val_if_fail (message != NULL, NULL);
  ------------------
  |  |  652|  6.80k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  6.80k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  6.80k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  6.80k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  6.80k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  6.80k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  6.80k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  6.80k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6.80k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  6.80k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  6.80k|   else                                         \
  |  |  |  |  |  | 1183|  6.80k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  6.80k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  6.80k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6.80k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  6.80k|      { } \
  |  |  655|  6.80k|    else \
  |  |  656|  6.80k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  6.80k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  6.80k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6.80k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  819|  6.80k|  g_return_val_if_fail (domain != 0, NULL);
  ------------------
  |  |  652|  6.80k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  6.80k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  6.80k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  6.80k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  6.80k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  6.80k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  6.80k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  6.80k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6.80k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  6.80k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  6.80k|   else                                         \
  |  |  |  |  |  | 1183|  6.80k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  6.80k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  6.80k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6.80k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  6.80k|      { } \
  |  |  655|  6.80k|    else \
  |  |  656|  6.80k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  6.80k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  6.80k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6.80k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  820|       |
  821|  6.80k|  return g_error_new_steal (domain, code, g_strdup (message), NULL);
  822|  6.80k|}
g_error_free:
  832|  6.80k|{
  833|  6.80k|  gsize private_size;
  834|  6.80k|  ErrorDomainInfo *info;
  835|  6.80k|  guint8 *allocated;
  836|       |
  837|  6.80k|  g_return_if_fail (error != NULL);
  ------------------
  |  |  639|  6.80k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  6.80k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  6.80k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  6.80k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  6.80k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  6.80k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  6.80k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  6.80k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6.80k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  6.80k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  6.80k|   else                                         \
  |  |  |  |  |  | 1183|  6.80k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  6.80k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  6.80k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6.80k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  6.80k|      { } \
  |  |  642|  6.80k|    else \
  |  |  643|  6.80k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  6.80k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  6.80k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6.80k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  838|       |
  839|  6.80k|  g_rw_lock_reader_lock (&error_domain_global);
  840|  6.80k|  info = error_domain_lookup (error->domain);
  841|  6.80k|  if (info != NULL)
  ------------------
  |  Branch (841:7): [True: 0, False: 6.80k]
  ------------------
  842|      0|    {
  843|      0|      GErrorClearFunc clear = info->clear;
  844|       |
  845|      0|      private_size = info->private_size;
  846|      0|      g_rw_lock_reader_unlock (&error_domain_global);
  847|      0|      clear (error);
  848|      0|    }
  849|  6.80k|  else
  850|  6.80k|    {
  851|  6.80k|      g_rw_lock_reader_unlock (&error_domain_global);
  852|  6.80k|      private_size = 0;
  853|  6.80k|    }
  854|       |
  855|  6.80k|  g_free (error->message);
  856|  6.80k|  allocated = ((guint8 *) error) - private_size;
  857|       |  /* See comments in g_type_free_instance in gtype.c to see what this
  858|       |   * magic is about.
  859|       |   */
  860|  6.80k|#ifdef ENABLE_VALGRIND
  861|  6.80k|  if (private_size > 0 && RUNNING_ON_VALGRIND)
  ------------------
  |  | 6215|      0|    (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* if not */,         \
  |  |  ------------------
  |  |  |  |  413|      0|    __extension__                                                 \
  |  |  |  |  414|      0|    ({ volatile unsigned long int _zzq_args[6];                   \
  |  |  |  |  415|      0|    volatile unsigned long int _zzq_result;                       \
  |  |  |  |  416|      0|    _zzq_args[0] = (unsigned long int)(_zzq_request);             \
  |  |  |  |  417|      0|    _zzq_args[1] = (unsigned long int)(_zzq_arg1);                \
  |  |  |  |  418|      0|    _zzq_args[2] = (unsigned long int)(_zzq_arg2);                \
  |  |  |  |  419|      0|    _zzq_args[3] = (unsigned long int)(_zzq_arg3);                \
  |  |  |  |  420|      0|    _zzq_args[4] = (unsigned long int)(_zzq_arg4);                \
  |  |  |  |  421|      0|    _zzq_args[5] = (unsigned long int)(_zzq_arg5);                \
  |  |  |  |  422|      0|    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
  |  |  |  |  423|      0|                     /* %RDX = client_request ( %RAX ) */         \
  |  |  |  |  424|      0|                     "xchgq %%rbx,%%rbx"                          \
  |  |  |  |  425|      0|                     : "=d" (_zzq_result)                         \
  |  |  |  |  426|      0|                     : "a" (&_zzq_args[0]), "0" (_zzq_default)    \
  |  |  |  |  427|      0|                     : "cc", "memory"                             \
  |  |  |  |  428|      0|                    );                                            \
  |  |  |  |  429|      0|    _zzq_result;                                                  \
  |  |  |  |  430|      0|    })
  |  |  ------------------
  |  |  |  Branch (6215:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (861:7): [True: 0, False: 6.80k]
  ------------------
  862|      0|    {
  863|      0|      private_size += ALIGN_STRUCT (1);
  ------------------
  |  |  549|      0|      ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
  |  |  ------------------
  |  |  |  |  547|      0|#define STRUCT_ALIGNMENT (2 * sizeof (gsize))
  |  |  ------------------
  |  |                     ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
  |  |  ------------------
  |  |  |  |  547|      0|#define STRUCT_ALIGNMENT (2 * sizeof (gsize))
  |  |  ------------------
  ------------------
  864|      0|      allocated -= ALIGN_STRUCT (1);
  ------------------
  |  |  549|      0|      ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
  |  |  ------------------
  |  |  |  |  547|      0|#define STRUCT_ALIGNMENT (2 * sizeof (gsize))
  |  |  ------------------
  |  |                     ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
  |  |  ------------------
  |  |  |  |  547|      0|#define STRUCT_ALIGNMENT (2 * sizeof (gsize))
  |  |  ------------------
  ------------------
  865|      0|      *(gpointer *) (allocated + private_size + sizeof (GError)) = NULL;
  866|      0|      g_slice_free1 (private_size + sizeof (GError) + sizeof (gpointer), allocated);
  867|      0|      VALGRIND_FREELIKE_BLOCK (allocated + ALIGN_STRUCT (1), 0);
  ------------------
  |  | 6493|      0|    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__FREELIKE_BLOCK,         \
  |  |  ------------------
  |  |  |  |  203|      0|  do { (void) VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  413|      0|    __extension__                                                 \
  |  |  |  |  |  |  414|      0|    ({ volatile unsigned long int _zzq_args[6];                   \
  |  |  |  |  |  |  415|      0|    volatile unsigned long int _zzq_result;                       \
  |  |  |  |  |  |  416|      0|    _zzq_args[0] = (unsigned long int)(_zzq_request);             \
  |  |  |  |  |  |  417|      0|    _zzq_args[1] = (unsigned long int)(_zzq_arg1);                \
  |  |  |  |  |  |  418|      0|    _zzq_args[2] = (unsigned long int)(_zzq_arg2);                \
  |  |  |  |  |  |  419|      0|    _zzq_args[3] = (unsigned long int)(_zzq_arg3);                \
  |  |  |  |  |  |  420|      0|    _zzq_args[4] = (unsigned long int)(_zzq_arg4);                \
  |  |  |  |  |  |  421|      0|    _zzq_args[5] = (unsigned long int)(_zzq_arg5);                \
  |  |  |  |  |  |  422|      0|    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
  |  |  |  |  |  |  423|      0|                     /* %RDX = client_request ( %RAX ) */         \
  |  |  |  |  |  |  424|      0|                     "xchgq %%rbx,%%rbx"                          \
  |  |  |  |  |  |  425|      0|                     : "=d" (_zzq_result)                         \
  |  |  |  |  |  |  426|      0|                     : "a" (&_zzq_args[0]), "0" (_zzq_default)    \
  |  |  |  |  |  |  427|      0|                     : "cc", "memory"                             \
  |  |  |  |  |  |  428|      0|                    );                                            \
  |  |  |  |  |  |  429|      0|    _zzq_result;                                                  \
  |  |  |  |  |  |  430|      0|    })
  |  |  |  |  ------------------
  |  |  |  |  204|      0|                    (_zzq_request), (_zzq_arg1), (_zzq_arg2),           \
  |  |  |  |  205|      0|                    (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (205:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6494|      0|                                    addr, rzB, 0, 0, 0)
  ------------------
  868|      0|      VALGRIND_FREELIKE_BLOCK (error, 0);
  ------------------
  |  | 6493|      0|    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__FREELIKE_BLOCK,         \
  |  |  ------------------
  |  |  |  |  203|      0|  do { (void) VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  413|      0|    __extension__                                                 \
  |  |  |  |  |  |  414|      0|    ({ volatile unsigned long int _zzq_args[6];                   \
  |  |  |  |  |  |  415|      0|    volatile unsigned long int _zzq_result;                       \
  |  |  |  |  |  |  416|      0|    _zzq_args[0] = (unsigned long int)(_zzq_request);             \
  |  |  |  |  |  |  417|      0|    _zzq_args[1] = (unsigned long int)(_zzq_arg1);                \
  |  |  |  |  |  |  418|      0|    _zzq_args[2] = (unsigned long int)(_zzq_arg2);                \
  |  |  |  |  |  |  419|      0|    _zzq_args[3] = (unsigned long int)(_zzq_arg3);                \
  |  |  |  |  |  |  420|      0|    _zzq_args[4] = (unsigned long int)(_zzq_arg4);                \
  |  |  |  |  |  |  421|      0|    _zzq_args[5] = (unsigned long int)(_zzq_arg5);                \
  |  |  |  |  |  |  422|      0|    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
  |  |  |  |  |  |  423|      0|                     /* %RDX = client_request ( %RAX ) */         \
  |  |  |  |  |  |  424|      0|                     "xchgq %%rbx,%%rbx"                          \
  |  |  |  |  |  |  425|      0|                     : "=d" (_zzq_result)                         \
  |  |  |  |  |  |  426|      0|                     : "a" (&_zzq_args[0]), "0" (_zzq_default)    \
  |  |  |  |  |  |  427|      0|                     : "cc", "memory"                             \
  |  |  |  |  |  |  428|      0|                    );                                            \
  |  |  |  |  |  |  429|      0|    _zzq_result;                                                  \
  |  |  |  |  |  |  430|      0|    })
  |  |  |  |  ------------------
  |  |  |  |  204|      0|                    (_zzq_request), (_zzq_arg1), (_zzq_arg2),           \
  |  |  |  |  205|      0|                    (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (205:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6494|      0|                                    addr, rzB, 0, 0, 0)
  ------------------
  869|      0|    }
  870|  6.80k|  else
  871|  6.80k|#endif
  872|  6.80k|  g_slice_free1 (private_size + sizeof (GError), allocated);
  873|  6.80k|}
g_error_matches:
  927|    227|{
  928|    227|  return error &&
  ------------------
  |  Branch (928:10): [True: 227, False: 0]
  ------------------
  929|    227|    error->domain == domain &&
  ------------------
  |  Branch (929:5): [True: 227, False: 0]
  ------------------
  930|    227|    error->code == code;
  ------------------
  |  Branch (930:5): [True: 227, False: 0]
  ------------------
  931|    227|}
g_set_error:
  954|    123|{
  955|    123|  GError *new;
  956|       |
  957|    123|  va_list args;
  958|       |
  959|    123|  if (err == NULL)
  ------------------
  |  Branch (959:7): [True: 123, False: 0]
  ------------------
  960|    123|    return;
  961|       |
  962|    123|  va_start (args, format);
  963|      0|  new = g_error_new_valist (domain, code, format, args);
  964|      0|  va_end (args);
  965|       |
  966|      0|  if (*err == NULL)
  ------------------
  |  Branch (966:7): [True: 0, False: 0]
  ------------------
  967|      0|    *err = new;
  968|      0|  else
  969|      0|    {
  970|      0|      g_warning (ERROR_OVERWRITTEN_WARNING, new->message);
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  971|      0|      g_error_free (new);
  972|      0|    }
  973|      0|}
g_set_error_literal:
  995|  42.3k|{
  996|  42.3k|  if (err == NULL)
  ------------------
  |  Branch (996:7): [True: 35.5k, False: 6.80k]
  ------------------
  997|  35.5k|    return;
  998|       |
  999|  6.80k|  if (*err == NULL)
  ------------------
  |  Branch (999:7): [True: 6.80k, False: 0]
  ------------------
 1000|  6.80k|    *err = g_error_new_literal (domain, code, message);
 1001|      0|  else
 1002|      0|    g_warning (ERROR_OVERWRITTEN_WARNING, message);
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 1003|  6.80k|}
g_clear_error:
 1051|  28.9k|{
 1052|  28.9k|  if (err && *err)
  ------------------
  |  Branch (1052:7): [True: 28.9k, False: 0]
  |  Branch (1052:14): [True: 6.58k, False: 22.4k]
  ------------------
 1053|  6.58k|    {
 1054|  6.58k|      g_error_free (*err);
 1055|       |      *err = NULL;
 1056|  6.58k|    }
 1057|  28.9k|}
gerror.c:g_error_new_steal:
  722|  6.80k|{
  723|  6.80k|  ErrorDomainInfo info;
  724|  6.80k|  GError *error = g_error_allocate (domain, &info);
  725|       |
  726|  6.80k|  error->domain = domain;
  727|  6.80k|  error->code = code;
  728|  6.80k|  error->message = message;
  729|       |
  730|  6.80k|  if (info.init != NULL)
  ------------------
  |  Branch (730:7): [True: 0, False: 6.80k]
  ------------------
  731|      0|    info.init (error);
  732|  6.80k|  if (out_info != NULL)
  ------------------
  |  Branch (732:7): [True: 0, False: 6.80k]
  ------------------
  733|      0|    *out_info = info;
  734|       |
  735|  6.80k|  return error;
  736|  6.80k|}
gerror.c:g_error_allocate:
  674|  6.80k|{
  675|  6.80k|  guint8 *allocated;
  676|  6.80k|  GError *error;
  677|  6.80k|  ErrorDomainInfo *info;
  678|  6.80k|  gsize private_size;
  679|       |
  680|  6.80k|  g_rw_lock_reader_lock (&error_domain_global);
  681|  6.80k|  info = error_domain_lookup (domain);
  682|  6.80k|  if (info != NULL)
  ------------------
  |  Branch (682:7): [True: 0, False: 6.80k]
  ------------------
  683|      0|    {
  684|      0|      if (out_info != NULL)
  ------------------
  |  Branch (684:11): [True: 0, False: 0]
  ------------------
  685|      0|        *out_info = *info;
  686|      0|      private_size = info->private_size;
  687|      0|      g_rw_lock_reader_unlock (&error_domain_global);
  688|      0|    }
  689|  6.80k|  else
  690|  6.80k|    {
  691|  6.80k|      g_rw_lock_reader_unlock (&error_domain_global);
  692|  6.80k|      if (out_info != NULL)
  ------------------
  |  Branch (692:11): [True: 6.80k, False: 0]
  ------------------
  693|  6.80k|        memset (out_info, 0, sizeof (*out_info));
  694|  6.80k|      private_size = 0;
  695|  6.80k|    }
  696|       |  /* See comments in g_type_create_instance in gtype.c to see what
  697|       |   * this magic is about.
  698|       |   */
  699|  6.80k|#ifdef ENABLE_VALGRIND
  700|  6.80k|  if (private_size > 0 && RUNNING_ON_VALGRIND)
  ------------------
  |  | 6215|      0|    (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* if not */,         \
  |  |  ------------------
  |  |  |  |  413|      0|    __extension__                                                 \
  |  |  |  |  414|      0|    ({ volatile unsigned long int _zzq_args[6];                   \
  |  |  |  |  415|      0|    volatile unsigned long int _zzq_result;                       \
  |  |  |  |  416|      0|    _zzq_args[0] = (unsigned long int)(_zzq_request);             \
  |  |  |  |  417|      0|    _zzq_args[1] = (unsigned long int)(_zzq_arg1);                \
  |  |  |  |  418|      0|    _zzq_args[2] = (unsigned long int)(_zzq_arg2);                \
  |  |  |  |  419|      0|    _zzq_args[3] = (unsigned long int)(_zzq_arg3);                \
  |  |  |  |  420|      0|    _zzq_args[4] = (unsigned long int)(_zzq_arg4);                \
  |  |  |  |  421|      0|    _zzq_args[5] = (unsigned long int)(_zzq_arg5);                \
  |  |  |  |  422|      0|    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
  |  |  |  |  423|      0|                     /* %RDX = client_request ( %RAX ) */         \
  |  |  |  |  424|      0|                     "xchgq %%rbx,%%rbx"                          \
  |  |  |  |  425|      0|                     : "=d" (_zzq_result)                         \
  |  |  |  |  426|      0|                     : "a" (&_zzq_args[0]), "0" (_zzq_default)    \
  |  |  |  |  427|      0|                     : "cc", "memory"                             \
  |  |  |  |  428|      0|                    );                                            \
  |  |  |  |  429|      0|    _zzq_result;                                                  \
  |  |  |  |  430|      0|    })
  |  |  ------------------
  |  |  |  Branch (6215:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (700:7): [True: 0, False: 6.80k]
  ------------------
  701|      0|    {
  702|      0|      private_size += ALIGN_STRUCT (1);
  ------------------
  |  |  549|      0|      ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
  |  |  ------------------
  |  |  |  |  547|      0|#define STRUCT_ALIGNMENT (2 * sizeof (gsize))
  |  |  ------------------
  |  |                     ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
  |  |  ------------------
  |  |  |  |  547|      0|#define STRUCT_ALIGNMENT (2 * sizeof (gsize))
  |  |  ------------------
  ------------------
  703|      0|      allocated = g_slice_alloc0 (private_size + sizeof (GError) + sizeof (gpointer));
  704|      0|      *(gpointer *) (allocated + private_size + sizeof (GError)) = allocated + ALIGN_STRUCT (1);
  ------------------
  |  |  549|      0|      ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
  |  |  ------------------
  |  |  |  |  547|      0|#define STRUCT_ALIGNMENT (2 * sizeof (gsize))
  |  |  ------------------
  |  |                     ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
  |  |  ------------------
  |  |  |  |  547|      0|#define STRUCT_ALIGNMENT (2 * sizeof (gsize))
  |  |  ------------------
  ------------------
  705|      0|      VALGRIND_MALLOCLIKE_BLOCK (allocated + private_size, sizeof (GError) + sizeof (gpointer), 0, TRUE);
  ------------------
  |  | 6479|      0|    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MALLOCLIKE_BLOCK,       \
  |  |  ------------------
  |  |  |  |  203|      0|  do { (void) VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  413|      0|    __extension__                                                 \
  |  |  |  |  |  |  414|      0|    ({ volatile unsigned long int _zzq_args[6];                   \
  |  |  |  |  |  |  415|      0|    volatile unsigned long int _zzq_result;                       \
  |  |  |  |  |  |  416|      0|    _zzq_args[0] = (unsigned long int)(_zzq_request);             \
  |  |  |  |  |  |  417|      0|    _zzq_args[1] = (unsigned long int)(_zzq_arg1);                \
  |  |  |  |  |  |  418|      0|    _zzq_args[2] = (unsigned long int)(_zzq_arg2);                \
  |  |  |  |  |  |  419|      0|    _zzq_args[3] = (unsigned long int)(_zzq_arg3);                \
  |  |  |  |  |  |  420|      0|    _zzq_args[4] = (unsigned long int)(_zzq_arg4);                \
  |  |  |  |  |  |  421|      0|    _zzq_args[5] = (unsigned long int)(_zzq_arg5);                \
  |  |  |  |  |  |  422|      0|    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
  |  |  |  |  |  |  423|      0|                     /* %RDX = client_request ( %RAX ) */         \
  |  |  |  |  |  |  424|      0|                     "xchgq %%rbx,%%rbx"                          \
  |  |  |  |  |  |  425|      0|                     : "=d" (_zzq_result)                         \
  |  |  |  |  |  |  426|      0|                     : "a" (&_zzq_args[0]), "0" (_zzq_default)    \
  |  |  |  |  |  |  427|      0|                     : "cc", "memory"                             \
  |  |  |  |  |  |  428|      0|                    );                                            \
  |  |  |  |  |  |  429|      0|    _zzq_result;                                                  \
  |  |  |  |  |  |  430|      0|    })
  |  |  |  |  ------------------
  |  |  |  |  204|      0|                    (_zzq_request), (_zzq_arg1), (_zzq_arg2),           \
  |  |  |  |  205|      0|                    (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (205:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6480|      0|                                    addr, sizeB, rzB, is_zeroed, 0)
  ------------------
  706|      0|      VALGRIND_MALLOCLIKE_BLOCK (allocated + ALIGN_STRUCT (1), private_size - ALIGN_STRUCT (1), 0, TRUE);
  ------------------
  |  | 6479|      0|    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MALLOCLIKE_BLOCK,       \
  |  |  ------------------
  |  |  |  |  203|      0|  do { (void) VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  413|      0|    __extension__                                                 \
  |  |  |  |  |  |  414|      0|    ({ volatile unsigned long int _zzq_args[6];                   \
  |  |  |  |  |  |  415|      0|    volatile unsigned long int _zzq_result;                       \
  |  |  |  |  |  |  416|      0|    _zzq_args[0] = (unsigned long int)(_zzq_request);             \
  |  |  |  |  |  |  417|      0|    _zzq_args[1] = (unsigned long int)(_zzq_arg1);                \
  |  |  |  |  |  |  418|      0|    _zzq_args[2] = (unsigned long int)(_zzq_arg2);                \
  |  |  |  |  |  |  419|      0|    _zzq_args[3] = (unsigned long int)(_zzq_arg3);                \
  |  |  |  |  |  |  420|      0|    _zzq_args[4] = (unsigned long int)(_zzq_arg4);                \
  |  |  |  |  |  |  421|      0|    _zzq_args[5] = (unsigned long int)(_zzq_arg5);                \
  |  |  |  |  |  |  422|      0|    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
  |  |  |  |  |  |  423|      0|                     /* %RDX = client_request ( %RAX ) */         \
  |  |  |  |  |  |  424|      0|                     "xchgq %%rbx,%%rbx"                          \
  |  |  |  |  |  |  425|      0|                     : "=d" (_zzq_result)                         \
  |  |  |  |  |  |  426|      0|                     : "a" (&_zzq_args[0]), "0" (_zzq_default)    \
  |  |  |  |  |  |  427|      0|                     : "cc", "memory"                             \
  |  |  |  |  |  |  428|      0|                    );                                            \
  |  |  |  |  |  |  429|      0|    _zzq_result;                                                  \
  |  |  |  |  |  |  430|      0|    })
  |  |  |  |  ------------------
  |  |  |  |  204|      0|                    (_zzq_request), (_zzq_arg1), (_zzq_arg2),           \
  |  |  |  |  205|      0|                    (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (205:70): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6480|      0|                                    addr, sizeB, rzB, is_zeroed, 0)
  ------------------
  707|      0|    }
  708|  6.80k|  else
  709|  6.80k|#endif
  710|  6.80k|    allocated = g_slice_alloc0 (private_size + sizeof (GError));
  711|       |
  712|  6.80k|  error = (GError *) (allocated + private_size);
  713|  6.80k|  return error;
  714|  6.80k|}
gerror.c:error_domain_lookup:
  541|  13.6k|{
  542|  13.6k|  return g_hash_table_lookup (error_domain_ht,
  543|  13.6k|                              GUINT_TO_POINTER (domain));
  ------------------
  |  |  104|  13.6k|#define GUINT_TO_POINTER(u)	((gpointer) (gulong) (u))
  ------------------
  544|  13.6k|}

g_mkdir_with_parents:
  221|      1|{
  222|      1|  gchar *fn, *p;
  223|       |
  224|      1|  if (pathname == NULL || *pathname == '\0')
  ------------------
  |  Branch (224:7): [True: 0, False: 1]
  |  Branch (224:27): [True: 0, False: 1]
  ------------------
  225|      0|    {
  226|      0|      errno = EINVAL;
  227|      0|      return -1;
  228|      0|    }
  229|       |
  230|       |  /* try to create the full path first */
  231|      1|  if (g_mkdir (pathname, mode) == 0)
  ------------------
  |  |   75|      1|#define g_mkdir   mkdir
  ------------------
  |  Branch (231:7): [True: 1, False: 0]
  ------------------
  232|      1|    return 0;
  233|      0|  else if (errno == EEXIST)
  ------------------
  |  Branch (233:12): [True: 0, False: 0]
  ------------------
  234|      0|    {
  235|      0|      if (!g_file_test (pathname, G_FILE_TEST_IS_DIR))
  ------------------
  |  Branch (235:11): [True: 0, False: 0]
  ------------------
  236|      0|        {
  237|      0|          errno = ENOTDIR;
  238|      0|          return -1;
  239|      0|        }
  240|      0|      return 0;
  241|      0|    }
  242|       |
  243|       |  /* walk the full path and try creating each element */
  244|      0|  fn = g_strdup (pathname);
  245|       |
  246|      0|  if (g_path_is_absolute (fn))
  ------------------
  |  Branch (246:7): [True: 0, False: 0]
  ------------------
  247|      0|    p = (gchar *) g_path_skip_root (fn);
  248|      0|  else
  249|      0|    p = fn;
  250|       |
  251|      0|  do
  252|      0|    {
  253|      0|      while (*p && !G_IS_DIR_SEPARATOR (*p))
  ------------------
  |  |  197|      0|#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR)
  |  |  ------------------
  |  |  |  |  203|      0|#define G_DIR_SEPARATOR '/'
  |  |  ------------------
  ------------------
  |  Branch (253:14): [True: 0, False: 0]
  |  Branch (253:20): [True: 0, False: 0]
  ------------------
  254|      0|	p++;
  255|       |      
  256|      0|      if (!*p)
  ------------------
  |  Branch (256:11): [True: 0, False: 0]
  ------------------
  257|      0|	p = NULL;
  258|      0|      else
  259|      0|	*p = '\0';
  260|       |      
  261|      0|      if (!g_file_test (fn, G_FILE_TEST_EXISTS))
  ------------------
  |  Branch (261:11): [True: 0, False: 0]
  ------------------
  262|      0|	{
  263|      0|	  if (g_mkdir (fn, mode) == -1 && errno != EEXIST)
  ------------------
  |  |   75|      0|#define g_mkdir   mkdir
  ------------------
  |  Branch (263:8): [True: 0, False: 0]
  |  Branch (263:36): [True: 0, False: 0]
  ------------------
  264|      0|	    {
  265|      0|	      int errno_save = errno;
  266|      0|	      if (errno != ENOENT || !p)
  ------------------
  |  Branch (266:12): [True: 0, False: 0]
  |  Branch (266:31): [True: 0, False: 0]
  ------------------
  267|      0|                {
  268|      0|	          g_free (fn);
  269|      0|	          errno = errno_save;
  270|      0|	          return -1;
  271|      0|		}
  272|      0|	    }
  273|      0|	}
  274|      0|      else if (!g_file_test (fn, G_FILE_TEST_IS_DIR))
  ------------------
  |  Branch (274:16): [True: 0, False: 0]
  ------------------
  275|      0|	{
  276|      0|	  g_free (fn);
  277|      0|	  errno = ENOTDIR;
  278|      0|	  return -1;
  279|      0|	}
  280|      0|      if (p)
  ------------------
  |  Branch (280:11): [True: 0, False: 0]
  ------------------
  281|      0|	{
  282|      0|	  *p++ = G_DIR_SEPARATOR;
  ------------------
  |  |  203|      0|#define G_DIR_SEPARATOR '/'
  ------------------
  283|      0|	  while (*p && G_IS_DIR_SEPARATOR (*p))
  ------------------
  |  |  197|      0|#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR)
  |  |  ------------------
  |  |  |  |  203|      0|#define G_DIR_SEPARATOR '/'
  |  |  ------------------
  |  |  |  Branch (197:31): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (283:11): [True: 0, False: 0]
  ------------------
  284|      0|	    p++;
  285|      0|	}
  286|      0|    }
  287|      0|  while (p);
  ------------------
  |  Branch (287:10): [True: 0, False: 0]
  ------------------
  288|       |
  289|      0|  g_free (fn);
  290|       |
  291|      0|  return 0;
  292|      0|}
g_file_test:
  347|    127|{
  348|       |#ifdef G_OS_WIN32
  349|       |  DWORD attributes;
  350|       |  wchar_t *wfilename;
  351|       |#endif
  352|       |
  353|    127|  g_return_val_if_fail (filename != NULL, FALSE);
  ------------------
  |  |  652|    127|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    127|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    127|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    127|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    127| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    127|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    127|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    127|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 127, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    127|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    127|   else                                         \
  |  |  |  |  |  | 1183|    127|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    127|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    127|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 127, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    127|      { } \
  |  |  655|    127|    else \
  |  |  656|    127|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    127|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    127|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 127]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  354|       |
  355|       |#ifdef G_OS_WIN32
  356|       |/* stuff missing in std vc6 api */
  357|       |#  ifndef INVALID_FILE_ATTRIBUTES
  358|       |#    define INVALID_FILE_ATTRIBUTES -1
  359|       |#  endif
  360|       |#  ifndef FILE_ATTRIBUTE_DEVICE
  361|       |#    define FILE_ATTRIBUTE_DEVICE 64
  362|       |#  endif
  363|       |  wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
  364|       |
  365|       |  if (wfilename == NULL)
  366|       |    return FALSE;
  367|       |
  368|       |  attributes = GetFileAttributesW (wfilename);
  369|       |
  370|       |  g_free (wfilename);
  371|       |
  372|       |  if (attributes == INVALID_FILE_ATTRIBUTES)
  373|       |    return FALSE;
  374|       |
  375|       |  if (test & G_FILE_TEST_EXISTS)
  376|       |    return TRUE;
  377|       |      
  378|       |  if (test & G_FILE_TEST_IS_REGULAR)
  379|       |    {
  380|       |      if ((attributes & (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_DEVICE)) == 0)
  381|       |	return TRUE;
  382|       |    }
  383|       |
  384|       |  if (test & G_FILE_TEST_IS_DIR)
  385|       |    {
  386|       |      if ((attributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
  387|       |	return TRUE;
  388|       |    }
  389|       |
  390|       |  /* "while" so that we can exit this "loop" with a simple "break" */
  391|       |  while (test & G_FILE_TEST_IS_EXECUTABLE)
  392|       |    {
  393|       |      const gchar *lastdot = strrchr (filename, '.');
  394|       |      const gchar *pathext = NULL, *p;
  395|       |      int extlen;
  396|       |
  397|       |      if (lastdot == NULL)
  398|       |        break;
  399|       |
  400|       |      if (_stricmp (lastdot, ".exe") == 0 ||
  401|       |	  _stricmp (lastdot, ".cmd") == 0 ||
  402|       |	  _stricmp (lastdot, ".bat") == 0 ||
  403|       |	  _stricmp (lastdot, ".com") == 0)
  404|       |	return TRUE;
  405|       |
  406|       |      /* Check if it is one of the types listed in %PATHEXT% */
  407|       |
  408|       |      pathext = g_getenv ("PATHEXT");
  409|       |      if (pathext == NULL)
  410|       |        break;
  411|       |
  412|       |      pathext = g_utf8_casefold (pathext, -1);
  413|       |
  414|       |      lastdot = g_utf8_casefold (lastdot, -1);
  415|       |      extlen = strlen (lastdot);
  416|       |
  417|       |      p = pathext;
  418|       |      while (TRUE)
  419|       |	{
  420|       |	  const gchar *q = strchr (p, ';');
  421|       |	  if (q == NULL)
  422|       |	    q = p + strlen (p);
  423|       |	  if (extlen == q - p &&
  424|       |	      memcmp (lastdot, p, extlen) == 0)
  425|       |	    {
  426|       |	      g_free ((gchar *) pathext);
  427|       |	      g_free ((gchar *) lastdot);
  428|       |	      return TRUE;
  429|       |	    }
  430|       |	  if (*q)
  431|       |	    p = q + 1;
  432|       |	  else
  433|       |	    break;
  434|       |	}
  435|       |
  436|       |      g_free ((gchar *) pathext);
  437|       |      g_free ((gchar *) lastdot);
  438|       |      break;
  439|       |    }
  440|       |
  441|       |  return FALSE;
  442|       |#else
  443|    127|  if ((test & G_FILE_TEST_EXISTS) && (access (filename, F_OK) == 0))
  ------------------
  |  Branch (443:7): [True: 0, False: 127]
  |  Branch (443:38): [True: 0, False: 0]
  ------------------
  444|      0|    return TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  445|       |  
  446|    127|  if ((test & G_FILE_TEST_IS_EXECUTABLE) && (access (filename, X_OK) == 0))
  ------------------
  |  Branch (446:7): [True: 2, False: 125]
  |  Branch (446:45): [True: 2, False: 0]
  ------------------
  447|      2|    {
  448|      2|      if (getuid () != 0)
  ------------------
  |  Branch (448:11): [True: 0, False: 2]
  ------------------
  449|      0|	return TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  450|       |
  451|       |      /* For root, on some POSIX systems, access (filename, X_OK)
  452|       |       * will succeed even if no executable bits are set on the
  453|       |       * file. We fall through to a stat test to avoid that.
  454|       |       */
  455|      2|    }
  456|    125|  else
  457|    125|    test &= ~G_FILE_TEST_IS_EXECUTABLE;
  458|       |
  459|    127|  if (test & G_FILE_TEST_IS_SYMLINK)
  ------------------
  |  Branch (459:7): [True: 0, False: 127]
  ------------------
  460|      0|    {
  461|      0|      struct stat s;
  462|       |
  463|      0|      if ((lstat (filename, &s) == 0) && S_ISLNK (s.st_mode))
  ------------------
  |  Branch (463:11): [True: 0, False: 0]
  |  Branch (463:42): [True: 0, False: 0]
  ------------------
  464|      0|        return TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  465|      0|    }
  466|       |  
  467|    127|  if (test & (G_FILE_TEST_IS_REGULAR |
  ------------------
  |  Branch (467:7): [True: 127, False: 0]
  ------------------
  468|    127|	      G_FILE_TEST_IS_DIR |
  469|    127|	      G_FILE_TEST_IS_EXECUTABLE))
  470|    127|    {
  471|    127|      struct stat s;
  472|       |      
  473|    127|      if (stat (filename, &s) == 0)
  ------------------
  |  Branch (473:11): [True: 127, False: 0]
  ------------------
  474|    127|	{
  475|    127|	  if ((test & G_FILE_TEST_IS_REGULAR) && S_ISREG (s.st_mode))
  ------------------
  |  Branch (475:8): [True: 0, False: 127]
  |  Branch (475:43): [True: 0, False: 0]
  ------------------
  476|      0|	    return TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  477|       |	  
  478|    127|	  if ((test & G_FILE_TEST_IS_DIR) && S_ISDIR (s.st_mode))
  ------------------
  |  Branch (478:8): [True: 125, False: 2]
  |  Branch (478:39): [True: 123, False: 2]
  ------------------
  479|    123|	    return TRUE;
  ------------------
  |  |  884|    123|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|    123|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  480|       |
  481|       |	  /* The extra test for root when access (file, X_OK) succeeds.
  482|       |	   */
  483|      4|	  if ((test & G_FILE_TEST_IS_EXECUTABLE) &&
  ------------------
  |  Branch (483:8): [True: 2, False: 2]
  ------------------
  484|      2|	      ((s.st_mode & S_IXOTH) ||
  ------------------
  |  Branch (484:9): [True: 2, False: 0]
  ------------------
  485|      0|	       (s.st_mode & S_IXUSR) ||
  ------------------
  |  Branch (485:9): [True: 0, False: 0]
  ------------------
  486|      0|	       (s.st_mode & S_IXGRP)))
  ------------------
  |  Branch (486:9): [True: 0, False: 0]
  ------------------
  487|      2|	    return TRUE;
  ------------------
  |  |  884|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  488|      4|	}
  489|    127|    }
  490|       |
  491|      2|  return FALSE;
  ------------------
  |  |  880|      2|#define	FALSE	(0)
  ------------------
  492|    127|#endif
  493|    127|}
g_file_error_from_errno:
  515|    123|{
  516|    123|  switch (err_no)
  517|    123|    {
  518|      0|#ifdef EEXIST
  519|      0|    case EEXIST:
  ------------------
  |  Branch (519:5): [True: 0, False: 123]
  ------------------
  520|      0|      return G_FILE_ERROR_EXIST;
  521|      0|#endif
  522|       |
  523|      0|#ifdef EISDIR
  524|      0|    case EISDIR:
  ------------------
  |  Branch (524:5): [True: 0, False: 123]
  ------------------
  525|      0|      return G_FILE_ERROR_ISDIR;
  526|      0|#endif
  527|       |
  528|      0|#ifdef EACCES
  529|      0|    case EACCES:
  ------------------
  |  Branch (529:5): [True: 0, False: 123]
  ------------------
  530|      0|      return G_FILE_ERROR_ACCES;
  531|      0|#endif
  532|       |
  533|      0|#ifdef ENAMETOOLONG
  534|      0|    case ENAMETOOLONG:
  ------------------
  |  Branch (534:5): [True: 0, False: 123]
  ------------------
  535|      0|      return G_FILE_ERROR_NAMETOOLONG;
  536|      0|#endif
  537|       |
  538|      0|#ifdef ENOENT
  539|    123|    case ENOENT:
  ------------------
  |  Branch (539:5): [True: 123, False: 0]
  ------------------
  540|    123|      return G_FILE_ERROR_NOENT;
  541|      0|#endif
  542|       |
  543|      0|#ifdef ENOTDIR
  544|      0|    case ENOTDIR:
  ------------------
  |  Branch (544:5): [True: 0, False: 123]
  ------------------
  545|      0|      return G_FILE_ERROR_NOTDIR;
  546|      0|#endif
  547|       |
  548|      0|#ifdef ENXIO
  549|      0|    case ENXIO:
  ------------------
  |  Branch (549:5): [True: 0, False: 123]
  ------------------
  550|      0|      return G_FILE_ERROR_NXIO;
  551|      0|#endif
  552|       |
  553|      0|#ifdef ENODEV
  554|      0|    case ENODEV:
  ------------------
  |  Branch (554:5): [True: 0, False: 123]
  ------------------
  555|      0|      return G_FILE_ERROR_NODEV;
  556|      0|#endif
  557|       |
  558|      0|#ifdef EROFS
  559|      0|    case EROFS:
  ------------------
  |  Branch (559:5): [True: 0, False: 123]
  ------------------
  560|      0|      return G_FILE_ERROR_ROFS;
  561|      0|#endif
  562|       |
  563|      0|#ifdef ETXTBSY
  564|      0|    case ETXTBSY:
  ------------------
  |  Branch (564:5): [True: 0, False: 123]
  ------------------
  565|      0|      return G_FILE_ERROR_TXTBSY;
  566|      0|#endif
  567|       |
  568|      0|#ifdef EFAULT
  569|      0|    case EFAULT:
  ------------------
  |  Branch (569:5): [True: 0, False: 123]
  ------------------
  570|      0|      return G_FILE_ERROR_FAULT;
  571|      0|#endif
  572|       |
  573|      0|#ifdef ELOOP
  574|      0|    case ELOOP:
  ------------------
  |  Branch (574:5): [True: 0, False: 123]
  ------------------
  575|      0|      return G_FILE_ERROR_LOOP;
  576|      0|#endif
  577|       |
  578|      0|#ifdef ENOSPC
  579|      0|    case ENOSPC:
  ------------------
  |  Branch (579:5): [True: 0, False: 123]
  ------------------
  580|      0|      return G_FILE_ERROR_NOSPC;
  581|      0|#endif
  582|       |
  583|      0|#ifdef ENOMEM
  584|      0|    case ENOMEM:
  ------------------
  |  Branch (584:5): [True: 0, False: 123]
  ------------------
  585|      0|      return G_FILE_ERROR_NOMEM;
  586|      0|#endif
  587|       |
  588|      0|#ifdef EMFILE
  589|      0|    case EMFILE:
  ------------------
  |  Branch (589:5): [True: 0, False: 123]
  ------------------
  590|      0|      return G_FILE_ERROR_MFILE;
  591|      0|#endif
  592|       |
  593|      0|#ifdef ENFILE
  594|      0|    case ENFILE:
  ------------------
  |  Branch (594:5): [True: 0, False: 123]
  ------------------
  595|      0|      return G_FILE_ERROR_NFILE;
  596|      0|#endif
  597|       |
  598|      0|#ifdef EBADF
  599|      0|    case EBADF:
  ------------------
  |  Branch (599:5): [True: 0, False: 123]
  ------------------
  600|      0|      return G_FILE_ERROR_BADF;
  601|      0|#endif
  602|       |
  603|      0|#ifdef EINVAL
  604|      0|    case EINVAL:
  ------------------
  |  Branch (604:5): [True: 0, False: 123]
  ------------------
  605|      0|      return G_FILE_ERROR_INVAL;
  606|      0|#endif
  607|       |
  608|      0|#ifdef EPIPE
  609|      0|    case EPIPE:
  ------------------
  |  Branch (609:5): [True: 0, False: 123]
  ------------------
  610|      0|      return G_FILE_ERROR_PIPE;
  611|      0|#endif
  612|       |
  613|      0|#ifdef EAGAIN
  614|      0|    case EAGAIN:
  ------------------
  |  Branch (614:5): [True: 0, False: 123]
  ------------------
  615|      0|      return G_FILE_ERROR_AGAIN;
  616|      0|#endif
  617|       |
  618|      0|#ifdef EINTR
  619|      0|    case EINTR:
  ------------------
  |  Branch (619:5): [True: 0, False: 123]
  ------------------
  620|      0|      return G_FILE_ERROR_INTR;
  621|      0|#endif
  622|       |
  623|      0|#ifdef EIO
  624|      0|    case EIO:
  ------------------
  |  Branch (624:5): [True: 0, False: 123]
  ------------------
  625|      0|      return G_FILE_ERROR_IO;
  626|      0|#endif
  627|       |
  628|      0|#ifdef EPERM
  629|      0|    case EPERM:
  ------------------
  |  Branch (629:5): [True: 0, False: 123]
  ------------------
  630|      0|      return G_FILE_ERROR_PERM;
  631|      0|#endif
  632|       |
  633|      0|#ifdef ENOSYS
  634|      0|    case ENOSYS:
  ------------------
  |  Branch (634:5): [True: 0, False: 123]
  ------------------
  635|      0|      return G_FILE_ERROR_NOSYS;
  636|      0|#endif
  637|       |
  638|      0|    default:
  ------------------
  |  Branch (638:5): [True: 0, False: 123]
  ------------------
  639|      0|      return G_FILE_ERROR_FAILED;
  640|    123|    }
  641|    123|}
g_file_get_contents:
 1016|      2|{  
 1017|      2|  g_return_val_if_fail (filename != NULL, FALSE);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1018|      2|  g_return_val_if_fail (contents != NULL, FALSE);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1019|       |
 1020|      2|  *contents = NULL;
 1021|      2|  if (length)
  ------------------
  |  Branch (1021:7): [True: 2, False: 0]
  ------------------
 1022|      2|    *length = 0;
 1023|       |
 1024|       |#ifdef G_OS_WIN32
 1025|       |  return get_contents_win32 (filename, contents, length, error);
 1026|       |#else
 1027|      2|  return get_contents_posix (filename, contents, length, error);
 1028|      2|#endif
 1029|      2|}
g_build_filename:
 2248|    123|{
 2249|    123|  gchar *str;
 2250|    123|  va_list args;
 2251|       |
 2252|    123|  va_start (args, first_element);
 2253|    123|  str = g_build_filename_va (first_element, &args, NULL);
 2254|    123|  va_end (args);
 2255|       |
 2256|    123|  return str;
 2257|    123|}
g_path_is_absolute:
 2399|    127|{
 2400|    127|  g_return_val_if_fail (file_name != NULL, FALSE);
  ------------------
  |  |  652|    127|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    127|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    127|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    127|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    127| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    127|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    127|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    127|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 127, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    127|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    127|   else                                         \
  |  |  |  |  |  | 1183|    127|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    127|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    127|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 127, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    127|      { } \
  |  |  655|    127|    else \
  |  |  656|    127|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    127|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    127|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 127]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2401|       |
 2402|    127|  if (G_IS_DIR_SEPARATOR (file_name[0]))
  ------------------
  |  |  197|    127|#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR)
  |  |  ------------------
  |  |  |  |  203|    127|#define G_DIR_SEPARATOR '/'
  |  |  ------------------
  |  |  |  Branch (197:31): [True: 4, False: 123]
  |  |  ------------------
  ------------------
 2403|      4|    return TRUE;
  ------------------
  |  |  884|      4|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      4|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2404|       |
 2405|       |#ifdef G_OS_WIN32
 2406|       |  /* Recognize drive letter on native Windows */
 2407|       |  if (g_ascii_isalpha (file_name[0]) &&
 2408|       |      file_name[1] == ':' && G_IS_DIR_SEPARATOR (file_name[2]))
 2409|       |    return TRUE;
 2410|       |#endif
 2411|       |
 2412|    123|  return FALSE;
  ------------------
  |  |  880|    123|#define	FALSE	(0)
  ------------------
 2413|    127|}
g_path_get_basename:
 2547|      2|{
 2548|      2|  gssize base;
 2549|      2|  gssize last_nonslash;
 2550|      2|  gsize len;
 2551|      2|  gchar *retval;
 2552|       |
 2553|      2|  g_return_val_if_fail (file_name != NULL, NULL);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2554|       |
 2555|      2|  if (file_name[0] == '\0')
  ------------------
  |  Branch (2555:7): [True: 0, False: 2]
  ------------------
 2556|      0|    return g_strdup (".");
 2557|       |
 2558|      2|  last_nonslash = strlen (file_name) - 1;
 2559|       |
 2560|      2|  while (last_nonslash >= 0 && G_IS_DIR_SEPARATOR (file_name [last_nonslash]))
  ------------------
  |  |  197|      2|#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR)
  |  |  ------------------
  |  |  |  |  203|      2|#define G_DIR_SEPARATOR '/'
  |  |  ------------------
  |  |  |  Branch (197:31): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (2560:10): [True: 2, False: 0]
  ------------------
 2561|      0|    last_nonslash--;
 2562|       |
 2563|      2|  if (last_nonslash == -1)
  ------------------
  |  Branch (2563:7): [True: 0, False: 2]
  ------------------
 2564|       |    /* string only containing slashes */
 2565|      0|    return g_strdup (G_DIR_SEPARATOR_S);
  ------------------
  |  |  204|      0|#define G_DIR_SEPARATOR_S "/"
  ------------------
 2566|       |
 2567|       |#ifdef G_OS_WIN32
 2568|       |  if (last_nonslash == 1 &&
 2569|       |      g_ascii_isalpha (file_name[0]) &&
 2570|       |      file_name[1] == ':')
 2571|       |    /* string only containing slashes and a drive */
 2572|       |    return g_strdup (G_DIR_SEPARATOR_S);
 2573|       |#endif
 2574|      2|  base = last_nonslash;
 2575|       |
 2576|     24|  while (base >=0 && !G_IS_DIR_SEPARATOR (file_name [base]))
  ------------------
  |  |  197|     24|#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR)
  |  |  ------------------
  |  |  |  |  203|     24|#define G_DIR_SEPARATOR '/'
  |  |  ------------------
  ------------------
  |  Branch (2576:10): [True: 24, False: 0]
  |  Branch (2576:22): [True: 22, False: 2]
  ------------------
 2577|     22|    base--;
 2578|       |
 2579|       |#ifdef G_OS_WIN32
 2580|       |  if (base == -1 &&
 2581|       |      g_ascii_isalpha (file_name[0]) &&
 2582|       |      file_name[1] == ':')
 2583|       |    base = 1;
 2584|       |#endif /* G_OS_WIN32 */
 2585|       |
 2586|      2|  len = last_nonslash - base;
 2587|      2|  retval = g_malloc (len + 1);
 2588|      2|  memcpy (retval, file_name + (base + 1), len);
 2589|      2|  retval [len] = '\0';
 2590|       |
 2591|      2|  return retval;
 2592|      2|}
gfileutils.c:get_contents_posix:
  888|      2|{
  889|      2|  struct stat stat_buf;
  890|      2|  gint fd;
  891|       |
  892|       |  /* O_BINARY useful on Cygwin */
  893|      2|  fd = open (filename, O_RDONLY|O_BINARY);
  ------------------
  |  |   48|      2|#define O_BINARY 0
  ------------------
  894|       |
  895|      2|  if (fd < 0)
  ------------------
  |  Branch (895:7): [True: 0, False: 2]
  ------------------
  896|      0|    {
  897|      0|      int saved_errno = errno;
  898|       |
  899|      0|      if (error)
  ------------------
  |  Branch (899:11): [True: 0, False: 0]
  ------------------
  900|      0|        set_file_error (error,
  901|      0|                        filename,
  902|      0|                        _("Failed to open file “%s”: %s"),
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
  903|      0|                        saved_errno);
  904|       |
  905|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  906|      0|    }
  907|       |
  908|       |  /* I don't think this will ever fail, aside from ENOMEM, but. */
  909|      2|  if (fstat (fd, &stat_buf) < 0)
  ------------------
  |  Branch (909:7): [True: 0, False: 2]
  ------------------
  910|      0|    {
  911|      0|      int saved_errno = errno;
  912|      0|      if (error)
  ------------------
  |  Branch (912:11): [True: 0, False: 0]
  ------------------
  913|      0|        set_file_error (error,
  914|      0|                        filename,
  915|      0|                        _("Failed to get attributes of file “%s”: fstat() failed: %s"),
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
  916|      0|                        saved_errno);
  917|      0|      close (fd);
  918|       |
  919|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  920|      0|    }
  921|       |
  922|      2|  if (stat_buf.st_size > 0 && S_ISREG (stat_buf.st_mode))
  ------------------
  |  Branch (922:7): [True: 0, False: 2]
  |  Branch (922:31): [True: 0, False: 0]
  ------------------
  923|      0|    {
  924|      0|      gboolean retval = get_contents_regfile (filename,
  925|      0|					      &stat_buf,
  926|      0|					      fd,
  927|      0|					      contents,
  928|      0|					      length,
  929|      0|					      error);
  930|       |
  931|      0|      return retval;
  932|      0|    }
  933|      2|  else
  934|      2|    {
  935|      2|      FILE *f;
  936|      2|      gboolean retval;
  937|       |
  938|      2|      f = fdopen (fd, "r");
  939|       |      
  940|      2|      if (f == NULL)
  ------------------
  |  Branch (940:11): [True: 0, False: 2]
  ------------------
  941|      0|        {
  942|      0|          int saved_errno = errno;
  943|      0|          if (error)
  ------------------
  |  Branch (943:15): [True: 0, False: 0]
  ------------------
  944|      0|            set_file_error (error,
  945|      0|                            filename,
  946|      0|                            _("Failed to open file “%s”: fdopen() failed: %s"),
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
  947|      0|                            saved_errno);
  948|       |
  949|      0|          return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  950|      0|        }
  951|       |  
  952|      2|      retval = get_contents_stdio (filename, f, contents, length, error);
  953|       |
  954|      2|      return retval;
  955|      2|    }
  956|      2|}
gfileutils.c:get_contents_stdio:
  692|      2|{
  693|      2|  gchar buf[4096];
  694|      2|  gsize bytes;  /* always <= sizeof(buf) */
  695|      2|  gchar *str = NULL;
  696|      2|  gsize total_bytes = 0;
  697|      2|  gsize total_allocated = 0;
  698|      2|  gchar *tmp;
  699|      2|  gchar *display_filename;
  700|       |
  701|      2|  g_assert (f != NULL);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  702|       |
  703|      4|  while (!feof (f))
  ------------------
  |  Branch (703:10): [True: 2, False: 2]
  ------------------
  704|      2|    {
  705|      2|      gint save_errno;
  706|       |
  707|      2|      bytes = fread (buf, 1, sizeof (buf), f);
  708|      2|      save_errno = errno;
  709|       |
  710|      2|      if (total_bytes > G_MAXSIZE - bytes)
  ------------------
  |  |   86|      2|#define G_MAXSIZE	G_MAXULONG
  |  |  ------------------
  |  |  |  |   40|      2|#define G_MAXULONG	ULONG_MAX
  |  |  ------------------
  ------------------
  |  Branch (710:11): [True: 0, False: 2]
  ------------------
  711|      0|          goto file_too_large;
  712|       |
  713|       |      /* Possibility of overflow eliminated above. */
  714|      4|      while (total_bytes + bytes >= total_allocated)
  ------------------
  |  Branch (714:14): [True: 2, False: 2]
  ------------------
  715|      2|        {
  716|      2|          if (str)
  ------------------
  |  Branch (716:15): [True: 0, False: 2]
  ------------------
  717|      0|            {
  718|      0|              if (total_allocated > G_MAXSIZE / 2)
  ------------------
  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  ------------------
  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  ------------------
  ------------------
  |  Branch (718:19): [True: 0, False: 0]
  ------------------
  719|      0|                  goto file_too_large;
  720|      0|              total_allocated *= 2;
  721|      0|            }
  722|      2|          else
  723|      2|            {
  724|      2|              total_allocated = MIN (bytes + 1, sizeof (buf));
  ------------------
  |  |  891|      2|#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (891:21): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  725|      2|            }
  726|       |
  727|      2|          tmp = g_try_realloc (str, total_allocated);
  728|       |
  729|      2|          if (tmp == NULL)
  ------------------
  |  Branch (729:15): [True: 0, False: 2]
  ------------------
  730|      0|            {
  731|      0|              display_filename = g_filename_display_name (filename);
  732|      0|              g_set_error (error,
  733|      0|                           G_FILE_ERROR,
  ------------------
  |  |   33|      0|#define G_FILE_ERROR g_file_error_quark ()
  ------------------
  734|      0|                           G_FILE_ERROR_NOMEM,
  735|      0|                           g_dngettext (GETTEXT_PACKAGE, "Could not allocate %lu byte to read file “%s”", "Could not allocate %lu bytes to read file “%s”", (gulong)total_allocated),
  ------------------
  |  |   18|      0|#define GETTEXT_PACKAGE "glib20"
  ------------------
  736|      0|                           (gulong) total_allocated,
  737|      0|			   display_filename);
  738|      0|              g_free (display_filename);
  739|       |
  740|      0|              goto error;
  741|      0|            }
  742|       |
  743|      2|	  str = tmp;
  744|      2|        }
  745|       |
  746|      2|      if (ferror (f))
  ------------------
  |  Branch (746:11): [True: 0, False: 2]
  ------------------
  747|      0|        {
  748|      0|          display_filename = g_filename_display_name (filename);
  749|      0|          g_set_error (error,
  750|      0|                       G_FILE_ERROR,
  ------------------
  |  |   33|      0|#define G_FILE_ERROR g_file_error_quark ()
  ------------------
  751|      0|                       g_file_error_from_errno (save_errno),
  752|      0|                       _("Error reading file “%s”: %s"),
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
  753|      0|                       display_filename,
  754|      0|		       g_strerror (save_errno));
  755|      0|          g_free (display_filename);
  756|       |
  757|      0|          goto error;
  758|      0|        }
  759|       |
  760|      2|      g_assert (str != NULL);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  761|      2|      memcpy (str + total_bytes, buf, bytes);
  762|       |
  763|      2|      total_bytes += bytes;
  764|      2|    }
  765|       |
  766|      2|  fclose (f);
  767|       |
  768|      2|  if (total_allocated == 0)
  ------------------
  |  Branch (768:7): [True: 0, False: 2]
  ------------------
  769|      0|    {
  770|      0|      str = g_new (gchar, 1);
  ------------------
  |  |  299|      0|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  244|      0|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      0|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      0|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      0|	  gpointer __p;						\
  |  |  |  |  248|      0|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  249|      0|	    __p = g_##func (__n);				\
  |  |  |  |  250|      0|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      0|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      0|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      0|	  else							\
  |  |  |  |  254|      0|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      0|	  __p;							\
  |  |  |  |  256|      0|	}))
  |  |  ------------------
  ------------------
  771|      0|      total_bytes = 0;
  772|      0|    }
  773|       |
  774|      2|  str[total_bytes] = '\0';
  775|       |
  776|      2|  if (length)
  ------------------
  |  Branch (776:7): [True: 2, False: 0]
  ------------------
  777|      2|    *length = total_bytes;
  778|       |
  779|      2|  *contents = str;
  780|       |
  781|      2|  return TRUE;
  ------------------
  |  |  884|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  782|       |
  783|      0| file_too_large:
  784|      0|  display_filename = g_filename_display_name (filename);
  785|      0|  g_set_error (error,
  786|      0|               G_FILE_ERROR,
  ------------------
  |  |   33|      0|#define G_FILE_ERROR g_file_error_quark ()
  ------------------
  787|      0|               G_FILE_ERROR_FAILED,
  788|      0|               _("File “%s” is too large"),
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
  789|      0|               display_filename);
  790|      0|  g_free (display_filename);
  791|       |
  792|      0| error:
  793|       |
  794|      0|  g_free (str);
  795|      0|  fclose (f);
  796|       |
  797|      0|  return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  798|      0|}
gfileutils.c:g_build_path_va:
 1870|    123|{
 1871|    123|  GString *result;
 1872|    123|  gint separator_len = strlen (separator);
 1873|    123|  gboolean is_first = TRUE;
  ------------------
  |  |  884|    123|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|    123|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1874|    123|  gboolean have_leading = FALSE;
  ------------------
  |  |  880|    123|#define	FALSE	(0)
  ------------------
 1875|    123|  const gchar *single_element = NULL;
 1876|    123|  const gchar *next_element;
 1877|    123|  const gchar *last_trailing = NULL;
 1878|    123|  gint i = 0;
 1879|       |
 1880|    123|  result = g_string_new (NULL);
 1881|       |
 1882|    123|  if (str_array)
  ------------------
  |  Branch (1882:7): [True: 0, False: 123]
  ------------------
 1883|      0|    next_element = str_array[i++];
 1884|    123|  else
 1885|    123|    next_element = first_element;
 1886|       |
 1887|    369|  while (TRUE)
  ------------------
  |  |  884|    369|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|    369|#define	FALSE	(0)
  |  |  ------------------
  |  |  |  Branch (884:14): [True: 369, Folded]
  |  |  ------------------
  ------------------
 1888|    369|    {
 1889|    369|      const gchar *element;
 1890|    369|      const gchar *start;
 1891|    369|      const gchar *end;
 1892|       |
 1893|    369|      if (next_element)
  ------------------
  |  Branch (1893:11): [True: 246, False: 123]
  ------------------
 1894|    246|	{
 1895|    246|	  element = next_element;
 1896|    246|	  if (str_array)
  ------------------
  |  Branch (1896:8): [True: 0, False: 246]
  ------------------
 1897|      0|	    next_element = str_array[i++];
 1898|    246|	  else
 1899|    246|	    next_element = va_arg (*args, gchar *);
 1900|    246|	}
 1901|    123|      else
 1902|    123|	break;
 1903|       |
 1904|       |      /* Ignore empty elements */
 1905|    246|      if (!*element)
  ------------------
  |  Branch (1905:11): [True: 0, False: 246]
  ------------------
 1906|      0|	continue;
 1907|       |      
 1908|    246|      start = element;
 1909|       |
 1910|    246|      if (separator_len)
  ------------------
  |  Branch (1910:11): [True: 246, False: 0]
  ------------------
 1911|    246|	{
 1912|    369|	  while (strncmp (start, separator, separator_len) == 0)
  ------------------
  |  Branch (1912:11): [True: 123, False: 246]
  ------------------
 1913|    123|	    start += separator_len;
 1914|    246|      	}
 1915|       |
 1916|    246|      end = start + strlen (start);
 1917|       |      
 1918|    246|      if (separator_len)
  ------------------
  |  Branch (1918:11): [True: 246, False: 0]
  ------------------
 1919|    246|	{
 1920|    246|	  while (end >= start + separator_len &&
  ------------------
  |  Branch (1920:11): [True: 246, False: 0]
  ------------------
 1921|    246|		 strncmp (end - separator_len, separator, separator_len) == 0)
  ------------------
  |  Branch (1921:4): [True: 0, False: 246]
  ------------------
 1922|      0|	    end -= separator_len;
 1923|       |	  
 1924|    246|	  last_trailing = end;
 1925|    246|	  while (last_trailing >= element + separator_len &&
  ------------------
  |  Branch (1925:11): [True: 246, False: 0]
  ------------------
 1926|    246|		 strncmp (last_trailing - separator_len, separator, separator_len) == 0)
  ------------------
  |  Branch (1926:4): [True: 0, False: 246]
  ------------------
 1927|      0|	    last_trailing -= separator_len;
 1928|       |
 1929|    246|	  if (!have_leading)
  ------------------
  |  Branch (1929:8): [True: 123, False: 123]
  ------------------
 1930|    123|	    {
 1931|       |	      /* If the leading and trailing separator strings are in the
 1932|       |	       * same element and overlap, the result is exactly that element
 1933|       |	       */
 1934|    123|	      if (last_trailing <= start)
  ------------------
  |  Branch (1934:12): [True: 0, False: 123]
  ------------------
 1935|      0|		single_element = element;
 1936|       |		  
 1937|    123|	      g_string_append_len (result, element, start - element);
 1938|    123|	      have_leading = TRUE;
  ------------------
  |  |  884|    123|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|    123|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1939|    123|	    }
 1940|    123|	  else
 1941|    123|	    single_element = NULL;
 1942|    246|	}
 1943|       |
 1944|    246|      if (end == start)
  ------------------
  |  Branch (1944:11): [True: 0, False: 246]
  ------------------
 1945|      0|	continue;
 1946|       |
 1947|    246|      if (!is_first)
  ------------------
  |  Branch (1947:11): [True: 123, False: 123]
  ------------------
 1948|    123|	g_string_append (result, separator);
 1949|       |      
 1950|    246|      g_string_append_len (result, start, end - start);
 1951|    246|      is_first = FALSE;
  ------------------
  |  |  880|    246|#define	FALSE	(0)
  ------------------
 1952|    246|    }
 1953|       |
 1954|    123|  if (single_element)
  ------------------
  |  Branch (1954:7): [True: 0, False: 123]
  ------------------
 1955|      0|    {
 1956|      0|      g_string_free (result, TRUE);
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1957|      0|      return g_strdup (single_element);
 1958|      0|    }
 1959|    123|  else
 1960|    123|    {
 1961|    123|      if (last_trailing)
  ------------------
  |  Branch (1961:11): [True: 123, False: 0]
  ------------------
 1962|    123|	g_string_append (result, last_trailing);
 1963|       |  
 1964|    123|      return g_string_free (result, FALSE);
  ------------------
  |  |  880|    123|#define	FALSE	(0)
  ------------------
 1965|    123|    }
 1966|    123|}
gfileutils.c:g_build_filename_va:
 2167|    123|{
 2168|    123|  gchar *str;
 2169|       |
 2170|    123|#ifndef G_OS_WIN32
 2171|    123|  str = g_build_path_va (G_DIR_SEPARATOR_S, first_argument, args, str_array);
  ------------------
  |  |  204|    123|#define G_DIR_SEPARATOR_S "/"
  ------------------
 2172|       |#else
 2173|       |  str = g_build_pathname_va (first_argument, args, str_array);
 2174|       |#endif
 2175|       |
 2176|    123|  return str;
 2177|    123|}

glib_gettext:
  130|    350|{
  131|    350|  ensure_gettext_initialized ();
  132|       |
  133|    350|  return g_dgettext (GETTEXT_PACKAGE, str);
  ------------------
  |  |   18|    350|#define GETTEXT_PACKAGE "glib20"
  ------------------
  134|    350|}
g_dgettext:
  400|    350|{
  401|    350|  if (domain && G_UNLIKELY (!_g_dgettext_should_translate ()))
  ------------------
  |  | 1187|    350|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|    350| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    350|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|    350|   int _g_boolean_var_;                         \
  |  |  |  | 1180|    350|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 350]
  |  |  |  |  ------------------
  |  |  |  | 1181|    350|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|    350|   else                                         \
  |  |  |  | 1183|    350|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|    350|   _g_boolean_var_;                             \
  |  |  |  | 1185|    350|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 350]
  |  |  ------------------
  ------------------
  |  Branch (401:7): [True: 350, False: 0]
  ------------------
  402|      0|    return msgid;
  403|       |
  404|    350|  return dgettext (domain, msgid);
  405|    350|}
ggettext.c:ensure_gettext_initialized:
   99|    350|{
  100|    350|  static gsize initialised;
  101|       |
  102|    350|  if (g_once_init_enter (&initialised))
  ------------------
  |  |  259|    350|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   62|    350|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (259:3): [True: 1, False: 349]
  |  |  ------------------
  |  |  260|    350|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  824|    350|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  261|    350|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (261:13): [Folded, False: 350]
  |  |  ------------------
  |  |  262|    350|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  127|    700|  (G_GNUC_EXTENSION ({                                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    350|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  128|    700|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));               \
  |  |  |  |  ------------------
  |  |  |  |  |  |  824|    350|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  |  |  ------------------
  |  |  |  |  129|    700|    glib_typeof (*(atomic)) gapg_temp_newval;                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|    350|#define glib_typeof(t) __typeof__ (t)
  |  |  |  |  ------------------
  |  |  |  |  130|    700|    glib_typeof ((atomic)) gapg_temp_atomic = (atomic);                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|    350|#define glib_typeof(t) __typeof__ (t)
  |  |  |  |  ------------------
  |  |  |  |  131|    700|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  |  |  132|    700|    gapg_temp_newval;                                                      \
  |  |  |  |  133|    700|  }))
  |  |  ------------------
  |  |  |  Branch (262:6): [True: 1, False: 349]
  |  |  ------------------
  |  |  263|    350|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (263:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  264|    350|  }))
  ------------------
  103|      1|    {
  104|       |#ifdef G_OS_WIN32
  105|       |      gchar *tmp = _glib_get_locale_dir ();
  106|       |      bindtextdomain (GETTEXT_PACKAGE, tmp);
  107|       |      g_free (tmp);
  108|       |#else
  109|      1|      bindtextdomain (GETTEXT_PACKAGE, GLIB_LOCALE_DIR);
  ------------------
  |  |   18|      1|#define GETTEXT_PACKAGE "glib20"
  ------------------
                    bindtextdomain (GETTEXT_PACKAGE, GLIB_LOCALE_DIR);
  ------------------
  |  |   24|      1|#define GLIB_LOCALE_DIR "/irssi-glib-internal/share/locale"
  ------------------
  110|      1|#endif
  111|      1|#    ifdef HAVE_BIND_TEXTDOMAIN_CODESET
  112|      1|      bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
  ------------------
  |  |   18|      1|#define GETTEXT_PACKAGE "glib20"
  ------------------
  113|      1|#    endif
  114|       |      g_once_init_leave (&initialised, TRUE);
  ------------------
  |  |  266|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   62|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  267|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  824|      1|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  268|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (268:5): [Folded, False: 1]
  |  |  ------------------
  |  |  269|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  270|      1|  }))
  ------------------
  115|      1|    }
  116|    350|}
ggettext.c:_g_dgettext_should_translate:
  306|    350|{
  307|    350|  static gsize translate = 0;
  308|    350|  enum {
  309|    350|    SHOULD_TRANSLATE = 1,
  310|    350|    SHOULD_NOT_TRANSLATE = 2
  311|    350|  };
  312|       |
  313|    350|  if (G_UNLIKELY (g_once_init_enter (&translate)))
  ------------------
  |  | 1187|    350|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|    350| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    350|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|    350|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  1.40k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [Folded, False: 350]
  |  |  |  |  |  Branch (1180:8): [True: 1, False: 349]
  |  |  |  |  |  Branch (1180:8): [True: 1, False: 0]
  |  |  |  |  |  Branch (1180:8): [True: 1, False: 349]
  |  |  |  |  ------------------
  |  |  |  | 1181|    350|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|    350|   else                                         \
  |  |  |  | 1183|    350|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|    350|   _g_boolean_var_;                             \
  |  |  |  | 1185|    350|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 1, False: 349]
  |  |  ------------------
  ------------------
  314|      1|    {
  315|      1|      gboolean should_translate = TRUE;
  ------------------
  |  |  884|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  316|       |
  317|      1|      const char *default_domain     = textdomain (NULL);
  318|      1|      const char *translator_comment = gettext ("");
  319|      1|#ifndef G_OS_WIN32
  320|      1|      const char *translate_locale   = setlocale (LC_MESSAGES, NULL);
  321|       |#else
  322|       |      const char *translate_locale   = g_win32_getlocale ();
  323|       |#endif
  324|       |      /* We should NOT translate only if all the following hold:
  325|       |       *   - user has called textdomain() and set textdomain to non-default
  326|       |       *   - default domain has no translations
  327|       |       *   - locale does not start with "en_" and is not "C"
  328|       |       *
  329|       |       * Rationale:
  330|       |       *   - If text domain is still the default domain, maybe user calls
  331|       |       *     it later. Continue with old behavior of translating.
  332|       |       *   - If locale starts with "en_", we can continue using the
  333|       |       *     translations even if the app doesn't have translations for
  334|       |       *     this locale.  That is, en_UK and en_CA for example.
  335|       |       *   - If locale is "C", maybe user calls setlocale(LC_ALL,"") later.
  336|       |       *     Continue with old behavior of translating.
  337|       |       */
  338|      1|      if (!default_domain || !translator_comment || !translate_locale ||
  ------------------
  |  Branch (338:11): [True: 0, False: 1]
  |  Branch (338:30): [True: 0, False: 1]
  |  Branch (338:53): [True: 0, False: 1]
  ------------------
  339|      1|          (0 != strcmp (default_domain, "messages") &&
  ------------------
  |  Branch (339:12): [True: 0, False: 1]
  ------------------
  340|      0|          '\0' == *translator_comment &&
  ------------------
  |  Branch (340:11): [True: 0, False: 0]
  ------------------
  341|      0|          0 != strncmp (translate_locale, "en_", 3) &&
  ------------------
  |  Branch (341:11): [True: 0, False: 0]
  ------------------
  342|      0|          0 != strcmp (translate_locale, "C")))
  ------------------
  |  Branch (342:11): [True: 0, False: 0]
  ------------------
  343|      0|        should_translate = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  344|       |
  345|      1|      g_once_init_leave (&translate,
  ------------------
  |  |  266|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   62|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  267|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  824|      1|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  268|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (268:5): [Folded, False: 1]
  |  |  |  Branch (268:32): [True: 0, False: 0]
  |  |  ------------------
  |  |  269|      2|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  ------------------
  |  |  |  Branch (269:45): [True: 1, False: 0]
  |  |  ------------------
  |  |  270|      1|  }))
  ------------------
  346|      1|                         should_translate ?
  347|      1|                         SHOULD_TRANSLATE :
  348|      1|                         SHOULD_NOT_TRANSLATE);
  349|      1|    }
  350|       |
  351|    350|  return translate == SHOULD_TRANSLATE;
  352|    350|}

g_hash_table_new:
 1035|   385k|{
 1036|   385k|  return g_hash_table_new_full (hash_func, key_equal_func, NULL, NULL);
 1037|   385k|}
g_hash_table_new_full:
 1070|   448k|{
 1071|   448k|  GHashTable *hash_table;
 1072|       |
 1073|   448k|  hash_table = g_slice_new (GHashTable);
  ------------------
  |  |   48|   448k|#define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
  ------------------
 1074|   448k|  g_atomic_ref_count_init (&hash_table->ref_count);
 1075|   448k|  hash_table->nnodes             = 0;
 1076|   448k|  hash_table->noccupied          = 0;
 1077|   448k|  hash_table->hash_func          = hash_func ? hash_func : g_direct_hash;
  ------------------
  |  Branch (1077:36): [True: 419k, False: 29.4k]
  ------------------
 1078|   448k|  hash_table->key_equal_func     = key_equal_func;
 1079|   448k|#ifndef G_DISABLE_ASSERT
 1080|   448k|  hash_table->version            = 0;
 1081|   448k|#endif
 1082|   448k|  hash_table->key_destroy_func   = key_destroy_func;
 1083|   448k|  hash_table->value_destroy_func = value_destroy_func;
 1084|       |
 1085|   448k|  g_hash_table_setup_storage (hash_table);
 1086|       |
 1087|   448k|  return hash_table;
 1088|   448k|}
g_hash_table_unref:
 1485|   419k|{
 1486|   419k|  g_return_if_fail (hash_table != NULL);
  ------------------
  |  |  639|   419k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   419k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|   419k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   419k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   419k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   419k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   419k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   419k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 419k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   419k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   419k|   else                                         \
  |  |  |  |  |  | 1183|   419k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   419k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   419k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 419k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|   419k|      { } \
  |  |  642|   419k|    else \
  |  |  643|   419k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|   419k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   419k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 419k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1487|       |
 1488|   419k|  if (g_atomic_ref_count_dec (&hash_table->ref_count))
  ------------------
  |  Branch (1488:7): [True: 419k, False: 0]
  ------------------
 1489|   419k|    {
 1490|   419k|      g_hash_table_remove_all_nodes (hash_table, TRUE, TRUE);
  ------------------
  |  |  884|   419k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|   419k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
                    g_hash_table_remove_all_nodes (hash_table, TRUE, TRUE);
  ------------------
  |  |  884|   419k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|   419k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1491|   419k|      if (hash_table->keys != hash_table->values)
  ------------------
  |  Branch (1491:11): [True: 185k, False: 233k]
  ------------------
 1492|   185k|        g_free (hash_table->values);
 1493|   419k|      g_free (hash_table->keys);
 1494|   419k|      g_free (hash_table->hashes);
 1495|   419k|      g_slice_free (GHashTable, hash_table);
  ------------------
  |  |   81|   419k|#define g_slice_free(type, mem)                                 \
  |  |  ------------------
  |  |  |  |  940|   419k|#define G_STMT_START  do
  |  |  ------------------
  |  |   82|   419k|G_STMT_START {                                                  \
  |  |   83|   419k|  if (1) g_slice_free1 (sizeof (type), (mem));			\
  |  |  ------------------
  |  |  |  Branch (83:7): [True: 419k, Folded]
  |  |  ------------------
  |  |   84|   419k|  else   (void) ((type*) 0 == (mem)); 				\
  |  |   85|   419k|} G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   419k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 419k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1496|   419k|    }
 1497|   419k|}
g_hash_table_destroy:
 1512|   419k|{
 1513|   419k|  g_return_if_fail (hash_table != NULL);
  ------------------
  |  |  639|   419k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   419k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|   419k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   419k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   419k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   419k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   419k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   419k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 419k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   419k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   419k|   else                                         \
  |  |  |  |  |  | 1183|   419k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   419k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   419k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 419k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|   419k|      { } \
  |  |  642|   419k|    else \
  |  |  643|   419k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|   419k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   419k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 419k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1514|       |
 1515|   419k|  g_hash_table_remove_all (hash_table);
 1516|   419k|  g_hash_table_unref (hash_table);
 1517|   419k|}
g_hash_table_lookup:
 1534|  1.04G|{
 1535|  1.04G|  guint node_index;
 1536|  1.04G|  guint node_hash;
 1537|       |
 1538|  1.04G|  g_return_val_if_fail (hash_table != NULL, NULL);
  ------------------
  |  |  652|  1.04G|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.04G|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  1.04G|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.04G|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.04G| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.04G|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.04G|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.04G|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.04G, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.04G|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.04G|   else                                         \
  |  |  |  |  |  | 1183|  1.04G|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.04G|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.04G|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.04G, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  1.04G|      { } \
  |  |  655|  1.04G|    else \
  |  |  656|  1.04G|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  1.04G|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.04G|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.04G]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1539|       |
 1540|  1.04G|  node_index = g_hash_table_lookup_node (hash_table, key, &node_hash);
 1541|       |
 1542|  1.04G|  return HASH_IS_REAL (hash_table->hashes[node_index])
  ------------------
  |  |  244|  1.04G|#define HASH_IS_REAL(h_) ((h_) >= 2)
  |  |  ------------------
  |  |  |  Branch (244:26): [True: 646M, False: 402M]
  |  |  ------------------
  ------------------
 1543|  1.04G|    ? g_hash_table_fetch_key_or_value (hash_table->values, node_index, hash_table->have_big_values)
 1544|       |    : NULL;
 1545|  1.04G|}
g_hash_table_lookup_extended:
 1571|   844M|{
 1572|   844M|  guint node_index;
 1573|   844M|  guint node_hash;
 1574|       |
 1575|   844M|  g_return_val_if_fail (hash_table != NULL, FALSE);
  ------------------
  |  |  652|   844M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   844M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   844M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   844M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   844M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   844M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   844M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   844M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 844M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   844M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   844M|   else                                         \
  |  |  |  |  |  | 1183|   844M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   844M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   844M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 844M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   844M|      { } \
  |  |  655|   844M|    else \
  |  |  656|   844M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   844M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   844M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 844M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1576|       |
 1577|   844M|  node_index = g_hash_table_lookup_node (hash_table, lookup_key, &node_hash);
 1578|       |
 1579|   844M|  if (!HASH_IS_REAL (hash_table->hashes[node_index]))
  ------------------
  |  |  244|   844M|#define HASH_IS_REAL(h_) ((h_) >= 2)
  ------------------
  |  Branch (1579:7): [True: 29.4k, False: 844M]
  ------------------
 1580|  29.4k|    {
 1581|  29.4k|      if (orig_key != NULL)
  ------------------
  |  Branch (1581:11): [True: 7.75k, False: 21.7k]
  ------------------
 1582|  7.75k|        *orig_key = NULL;
 1583|  29.4k|      if (value != NULL)
  ------------------
  |  Branch (1583:11): [True: 7.75k, False: 21.7k]
  ------------------
 1584|  7.75k|        *value = NULL;
 1585|       |
 1586|  29.4k|      return FALSE;
  ------------------
  |  |  880|  29.4k|#define	FALSE	(0)
  ------------------
 1587|  29.4k|    }
 1588|       |
 1589|   844M|  if (orig_key)
  ------------------
  |  Branch (1589:7): [True: 844M, False: 985]
  ------------------
 1590|   844M|    *orig_key = g_hash_table_fetch_key_or_value (hash_table->keys, node_index, hash_table->have_big_keys);
 1591|       |
 1592|   844M|  if (value)
  ------------------
  |  Branch (1592:7): [True: 844M, False: 985]
  ------------------
 1593|   844M|    *value = g_hash_table_fetch_key_or_value (hash_table->values, node_index, hash_table->have_big_values);
 1594|       |
 1595|   844M|  return TRUE;
  ------------------
  |  |  884|   844M|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|   844M|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1596|   844M|}
g_hash_table_insert:
 1657|   437k|{
 1658|   437k|  return g_hash_table_insert_internal (hash_table, key, value, FALSE);
  ------------------
  |  |  880|   437k|#define	FALSE	(0)
  ------------------
 1659|   437k|}
g_hash_table_replace:
 1685|  8.79k|{
 1686|  8.79k|  return g_hash_table_insert_internal (hash_table, key, value, TRUE);
  ------------------
  |  |  884|  8.79k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  8.79k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1687|  8.79k|}
g_hash_table_add:
 1717|  2.86k|{
 1718|  2.86k|  return g_hash_table_insert_internal (hash_table, key, key, TRUE);
  ------------------
  |  |  884|  2.86k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  2.86k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1719|  2.86k|}
g_hash_table_contains:
 1735|  5.48k|{
 1736|  5.48k|  guint node_index;
 1737|  5.48k|  guint node_hash;
 1738|       |
 1739|  5.48k|  g_return_val_if_fail (hash_table != NULL, FALSE);
  ------------------
  |  |  652|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.48k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  5.48k|      { } \
  |  |  655|  5.48k|    else \
  |  |  656|  5.48k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1740|       |
 1741|  5.48k|  node_index = g_hash_table_lookup_node (hash_table, key, &node_hash);
 1742|       |
 1743|  5.48k|  return HASH_IS_REAL (hash_table->hashes[node_index]);
  ------------------
  |  |  244|  5.48k|#define HASH_IS_REAL(h_) ((h_) >= 2)
  ------------------
 1744|  5.48k|}
g_hash_table_remove:
 1801|   491k|{
 1802|   491k|  return g_hash_table_remove_internal (hash_table, key, TRUE);
  ------------------
  |  |  884|   491k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|   491k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1803|   491k|}
g_hash_table_remove_all:
 1908|  1.26M|{
 1909|  1.26M|  g_return_if_fail (hash_table != NULL);
  ------------------
  |  |  639|  1.26M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.26M|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  1.26M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.26M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.26M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.26M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.26M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.26M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.26M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.26M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.26M|   else                                         \
  |  |  |  |  |  | 1183|  1.26M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.26M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.26M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.26M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  1.26M|      { } \
  |  |  642|  1.26M|    else \
  |  |  643|  1.26M|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  1.26M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.26M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.26M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1910|       |
 1911|  1.26M|#ifndef G_DISABLE_ASSERT
 1912|  1.26M|  if (hash_table->nnodes != 0)
  ------------------
  |  Branch (1912:7): [True: 41.5k, False: 1.22M]
  ------------------
 1913|  41.5k|    hash_table->version++;
 1914|  1.26M|#endif
 1915|       |
 1916|  1.26M|  g_hash_table_remove_all_nodes (hash_table, TRUE, FALSE);
  ------------------
  |  |  884|  1.26M|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  1.26M|#define	FALSE	(0)
  |  |  ------------------
  ------------------
                g_hash_table_remove_all_nodes (hash_table, TRUE, FALSE);
  ------------------
  |  |  880|  1.26M|#define	FALSE	(0)
  ------------------
 1917|  1.26M|  g_hash_table_maybe_resize (hash_table);
 1918|  1.26M|}
g_hash_table_foreach_remove:
 2021|  22.7k|{
 2022|  22.7k|  g_return_val_if_fail (hash_table != NULL, 0);
  ------------------
  |  |  652|  22.7k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  22.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  22.7k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  22.7k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  22.7k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  22.7k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  22.7k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  22.7k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 22.7k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  22.7k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  22.7k|   else                                         \
  |  |  |  |  |  | 1183|  22.7k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  22.7k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  22.7k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 22.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  22.7k|      { } \
  |  |  655|  22.7k|    else \
  |  |  656|  22.7k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  22.7k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  22.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 22.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2023|  22.7k|  g_return_val_if_fail (func != NULL, 0);
  ------------------
  |  |  652|  22.7k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  22.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  22.7k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  22.7k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  22.7k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  22.7k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  22.7k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  22.7k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 22.7k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  22.7k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  22.7k|   else                                         \
  |  |  |  |  |  | 1183|  22.7k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  22.7k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  22.7k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 22.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  22.7k|      { } \
  |  |  655|  22.7k|    else \
  |  |  656|  22.7k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  22.7k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  22.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 22.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2024|       |
 2025|  22.7k|  return g_hash_table_foreach_remove_or_steal (hash_table, func, user_data, TRUE);
  ------------------
  |  |  884|  22.7k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  22.7k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2026|  22.7k|}
g_hash_table_foreach:
 2078|   181k|{
 2079|   181k|  gsize i;
 2080|   181k|#ifndef G_DISABLE_ASSERT
 2081|   181k|  gint version;
 2082|   181k|#endif
 2083|       |
 2084|   181k|  g_return_if_fail (hash_table != NULL);
  ------------------
  |  |  639|   181k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   181k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|   181k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   181k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   181k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   181k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   181k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   181k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 181k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   181k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   181k|   else                                         \
  |  |  |  |  |  | 1183|   181k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   181k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   181k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 181k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|   181k|      { } \
  |  |  642|   181k|    else \
  |  |  643|   181k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|   181k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   181k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 181k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2085|   181k|  g_return_if_fail (func != NULL);
  ------------------
  |  |  639|   181k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   181k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|   181k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   181k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   181k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   181k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   181k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   181k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 181k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   181k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   181k|   else                                         \
  |  |  |  |  |  | 1183|   181k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   181k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   181k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 181k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|   181k|      { } \
  |  |  642|   181k|    else \
  |  |  643|   181k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|   181k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   181k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 181k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2086|       |
 2087|   181k|#ifndef G_DISABLE_ASSERT
 2088|   181k|  version = hash_table->version;
 2089|   181k|#endif
 2090|       |
 2091|  1.80M|  for (i = 0; i < hash_table->size; i++)
  ------------------
  |  Branch (2091:15): [True: 1.62M, False: 181k]
  ------------------
 2092|  1.62M|    {
 2093|  1.62M|      guint node_hash = hash_table->hashes[i];
 2094|  1.62M|      gpointer node_key = g_hash_table_fetch_key_or_value (hash_table->keys, i, hash_table->have_big_keys);
 2095|  1.62M|      gpointer node_value = g_hash_table_fetch_key_or_value (hash_table->values, i, hash_table->have_big_values);
 2096|       |
 2097|  1.62M|      if (HASH_IS_REAL (node_hash))
  ------------------
  |  |  244|  1.62M|#define HASH_IS_REAL(h_) ((h_) >= 2)
  |  |  ------------------
  |  |  |  Branch (244:26): [True: 193k, False: 1.43M]
  |  |  ------------------
  ------------------
 2098|   193k|        (* func) (node_key, node_value, user_data);
 2099|       |
 2100|  1.62M|#ifndef G_DISABLE_ASSERT
 2101|  1.62M|      g_return_if_fail (version == hash_table->version);
  ------------------
  |  |  639|  1.62M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.62M|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  1.62M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.62M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.62M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.62M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.62M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.62M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.62M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.62M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.62M|   else                                         \
  |  |  |  |  |  | 1183|  1.62M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.62M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.62M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.62M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  1.62M|      { } \
  |  |  642|  1.62M|    else \
  |  |  643|  1.62M|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  1.62M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.62M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.62M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2102|  1.62M|#endif
 2103|  1.62M|    }
 2104|   181k|}
g_hash_table_size:
 2182|  47.7k|{
 2183|  47.7k|  g_return_val_if_fail (hash_table != NULL, 0);
  ------------------
  |  |  652|  47.7k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  47.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  47.7k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  47.7k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  47.7k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  47.7k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  47.7k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  47.7k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 47.7k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  47.7k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  47.7k|   else                                         \
  |  |  |  |  |  | 1183|  47.7k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  47.7k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  47.7k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 47.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  47.7k|      { } \
  |  |  655|  47.7k|    else \
  |  |  656|  47.7k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  47.7k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  47.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 47.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2184|       |
 2185|  47.7k|  return hash_table->nnodes;
 2186|  47.7k|}
g_str_equal:
 2332|  1.03G|{
 2333|  1.03G|  const gchar *string1 = v1;
 2334|  1.03G|  const gchar *string2 = v2;
 2335|       |
 2336|  1.03G|  return strcmp (string1, string2) == 0;
 2337|  1.03G|}
g_str_hash:
 2362|  1.03G|{
 2363|  1.03G|  const signed char *p;
 2364|  1.03G|  guint32 h = 5381;
 2365|       |
 2366|  13.7G|  for (p = v; *p != '\0'; p++)
  ------------------
  |  Branch (2366:15): [True: 12.7G, False: 1.03G]
  ------------------
 2367|  12.7G|    h = (h << 5) + h + *p;
 2368|       |
 2369|  1.03G|  return h;
 2370|  1.03G|}
g_direct_hash:
 2388|   845M|{
 2389|   845M|  return GPOINTER_TO_UINT (v);
  ------------------
  |  |  101|   845M|#define GPOINTER_TO_UINT(p)	((guint) (gulong) (p))
  ------------------
 2390|   845M|}
g_direct_equal:
 2410|   428M|{
 2411|   428M|  return v1 == v2;
 2412|   428M|}
ghash.c:g_hash_table_setup_storage:
  569|   451k|{
  570|   451k|  gboolean small = FALSE;
  ------------------
  |  |  880|   451k|#define	FALSE	(0)
  ------------------
  571|       |
  572|       |  /* We want to use small arrays only if:
  573|       |   *   - we are running on a system where that makes sense (64 bit); and
  574|       |   *   - we are not running under valgrind.
  575|       |   */
  576|       |
  577|   451k|#ifdef USE_SMALL_ARRAYS
  578|   451k|  small = TRUE;
  ------------------
  |  |  884|   451k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|   451k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  579|       |
  580|   451k|# ifdef ENABLE_VALGRIND
  581|   451k|  if (RUNNING_ON_VALGRIND)
  ------------------
  |  | 6215|   451k|    (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* if not */,         \
  |  |  ------------------
  |  |  |  |  413|   451k|    __extension__                                                 \
  |  |  |  |  414|   451k|    ({ volatile unsigned long int _zzq_args[6];                   \
  |  |  |  |  415|   451k|    volatile unsigned long int _zzq_result;                       \
  |  |  |  |  416|   451k|    _zzq_args[0] = (unsigned long int)(_zzq_request);             \
  |  |  |  |  417|   451k|    _zzq_args[1] = (unsigned long int)(_zzq_arg1);                \
  |  |  |  |  418|   451k|    _zzq_args[2] = (unsigned long int)(_zzq_arg2);                \
  |  |  |  |  419|   451k|    _zzq_args[3] = (unsigned long int)(_zzq_arg3);                \
  |  |  |  |  420|   451k|    _zzq_args[4] = (unsigned long int)(_zzq_arg4);                \
  |  |  |  |  421|   451k|    _zzq_args[5] = (unsigned long int)(_zzq_arg5);                \
  |  |  |  |  422|   451k|    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
  |  |  |  |  423|   451k|                     /* %RDX = client_request ( %RAX ) */         \
  |  |  |  |  424|   451k|                     "xchgq %%rbx,%%rbx"                          \
  |  |  |  |  425|   451k|                     : "=d" (_zzq_result)                         \
  |  |  |  |  426|   451k|                     : "a" (&_zzq_args[0]), "0" (_zzq_default)    \
  |  |  |  |  427|   451k|                     : "cc", "memory"                             \
  |  |  |  |  428|   451k|                    );                                            \
  |  |  |  |  429|   451k|    _zzq_result;                                                  \
  |  |  |  |  430|   451k|    })
  |  |  ------------------
  |  |  |  Branch (6215:5): [True: 0, False: 451k]
  |  |  ------------------
  |  | 6216|   451k|                                    VG_USERREQ__RUNNING_ON_VALGRIND,  \
  |  | 6217|   451k|                                    0, 0, 0, 0, 0)                    \
  ------------------
  582|      0|    small = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  583|   451k|# endif
  584|   451k|#endif
  585|       |
  586|   451k|  g_hash_table_set_shift (hash_table, HASH_TABLE_MIN_SHIFT);
  ------------------
  |  |  238|   451k|#define HASH_TABLE_MIN_SHIFT 3  /* 1 << 3 == 8 buckets */
  ------------------
  587|       |
  588|   451k|  hash_table->have_big_keys = !small;
  589|   451k|  hash_table->have_big_values = !small;
  590|       |
  591|   451k|  hash_table->keys   = g_hash_table_realloc_key_or_value_array (NULL, hash_table->size, hash_table->have_big_keys);
  592|   451k|  hash_table->values = hash_table->keys;
  593|       |  hash_table->hashes = g_new0 (guint, hash_table->size);
  ------------------
  |  |  316|   451k|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|   451k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|   451k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|   451k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|   451k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|   451k|	  gpointer __p;						\
  |  |  |  |  248|   451k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 451k]
  |  |  |  |  ------------------
  |  |  |  |  249|   451k|	    __p = g_##func (__n);				\
  |  |  |  |  250|   451k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 451k]
  |  |  |  |  ------------------
  |  |  |  |  251|   451k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|   451k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|   451k|	  else							\
  |  |  |  |  254|   451k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|   451k|	  __p;							\
  |  |  |  |  256|   451k|	}))
  |  |  ------------------
  ------------------
  594|   451k|}
ghash.c:g_hash_table_set_shift:
  344|   458k|{
  345|   458k|  hash_table->size = 1 << shift;
  346|   458k|  hash_table->mod  = prime_mod [shift];
  347|       |
  348|       |  /* hash_table->size is always a power of two, so we can calculate the mask
  349|       |   * by simply subtracting 1 from it. The leading assertion ensures that
  350|       |   * we're really dealing with a power of two. */
  351|       |
  352|   458k|  g_assert ((hash_table->size & (hash_table->size - 1)) == 0);
  ------------------
  |  |  234|   458k|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   458k|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|   458k|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|   458k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   458k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   458k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   458k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   458k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 458k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   458k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   458k|   else                                         \
  |  |  |  |  |  | 1183|   458k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   458k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   458k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 458k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|   458k|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|   458k|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   458k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 458k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  353|   458k|  hash_table->mask = hash_table->size - 1;
  354|   458k|}
ghash.c:g_hash_table_realloc_key_or_value_array:
  380|   465k|{
  381|   465k|#ifdef USE_SMALL_ARRAYS
  382|   465k|  return g_realloc (a, size * (is_big ? BIG_ENTRY_SIZE : SMALL_ENTRY_SIZE));
  ------------------
  |  |  251|  13.6k|#define BIG_ENTRY_SIZE (SIZEOF_VOID_P)
  |  |  ------------------
  |  |  |  |  392|  13.6k|#define SIZEOF_VOID_P 8
  |  |  ------------------
  ------------------
                return g_realloc (a, size * (is_big ? BIG_ENTRY_SIZE : SMALL_ENTRY_SIZE));
  ------------------
  |  |  252|   451k|#define SMALL_ENTRY_SIZE (SIZEOF_INT)
  |  |  ------------------
  |  |  |  |  380|   451k|#define SIZEOF_INT 4
  |  |  ------------------
  ------------------
  |  Branch (382:32): [True: 13.6k, False: 451k]
  ------------------
  383|       |#else
  384|       |  return g_renew (gpointer, a, size);
  385|       |#endif
  386|   465k|}
ghash.c:g_hash_table_fetch_key_or_value:
  390|  3.83G|{
  391|       |#ifndef USE_SMALL_ARRAYS
  392|       |  is_big = TRUE;
  393|       |#endif
  394|  3.83G|  return is_big ? *(((gpointer *) a) + index) : GUINT_TO_POINTER (*(((guint *) a) + index));
  ------------------
  |  |  104|  1.69G|#define GUINT_TO_POINTER(u)	((gpointer) (gulong) (u))
  ------------------
  |  Branch (394:10): [True: 2.13G, False: 1.69G]
  ------------------
  395|  3.83G|}
ghash.c:g_hash_table_insert_node:
 1301|   449k|{
 1302|   449k|  gboolean already_exists;
 1303|   449k|  guint old_hash;
 1304|   449k|  gpointer key_to_free = NULL;
 1305|   449k|  gpointer key_to_keep = NULL;
 1306|   449k|  gpointer value_to_free = NULL;
 1307|       |
 1308|   449k|  old_hash = hash_table->hashes[node_index];
 1309|   449k|  already_exists = HASH_IS_REAL (old_hash);
  ------------------
  |  |  244|   449k|#define HASH_IS_REAL(h_) ((h_) >= 2)
  ------------------
 1310|       |
 1311|       |  /* Proceed in three steps.  First, deal with the key because it is the
 1312|       |   * most complicated.  Then consider if we need to split the table in
 1313|       |   * two (because writing the value will result in the set invariant
 1314|       |   * becoming broken).  Then deal with the value.
 1315|       |   *
 1316|       |   * There are three cases for the key:
 1317|       |   *
 1318|       |   *  - entry already exists in table, reusing key:
 1319|       |   *    free the just-passed-in new_key and use the existing value
 1320|       |   *
 1321|       |   *  - entry already exists in table, not reusing key:
 1322|       |   *    free the entry in the table, use the new key
 1323|       |   *
 1324|       |   *  - entry not already in table:
 1325|       |   *    use the new key, free nothing
 1326|       |   *
 1327|       |   * We update the hash at the same time...
 1328|       |   */
 1329|   449k|  if (already_exists)
  ------------------
  |  Branch (1329:7): [True: 1.51k, False: 447k]
  ------------------
 1330|  1.51k|    {
 1331|       |      /* Note: we must record the old value before writing the new key
 1332|       |       * because we might change the value in the event that the two
 1333|       |       * arrays are shared.
 1334|       |       */
 1335|  1.51k|      value_to_free = g_hash_table_fetch_key_or_value (hash_table->values, node_index, hash_table->have_big_values);
 1336|       |
 1337|  1.51k|      if (keep_new_key)
  ------------------
  |  Branch (1337:11): [True: 1.12k, False: 397]
  ------------------
 1338|  1.12k|        {
 1339|  1.12k|          key_to_free = g_hash_table_fetch_key_or_value (hash_table->keys, node_index, hash_table->have_big_keys);
 1340|  1.12k|          key_to_keep = new_key;
 1341|  1.12k|        }
 1342|    397|      else
 1343|    397|        {
 1344|    397|          key_to_free = new_key;
 1345|    397|          key_to_keep = g_hash_table_fetch_key_or_value (hash_table->keys, node_index, hash_table->have_big_keys);
 1346|    397|        }
 1347|  1.51k|    }
 1348|   447k|  else
 1349|   447k|    {
 1350|   447k|      hash_table->hashes[node_index] = key_hash;
 1351|   447k|      key_to_keep = new_key;
 1352|   447k|    }
 1353|       |
 1354|       |  /* Resize key/value arrays and split table as necessary */
 1355|   449k|  g_hash_table_ensure_keyval_fits (hash_table, key_to_keep, new_value);
 1356|   449k|  g_hash_table_assign_key_or_value (hash_table->keys, node_index, hash_table->have_big_keys, key_to_keep);
 1357|       |
 1358|       |  /* Step 3: Actually do the write */
 1359|   449k|  g_hash_table_assign_key_or_value (hash_table->values, node_index, hash_table->have_big_values, new_value);
 1360|       |
 1361|       |  /* Now, the bookkeeping... */
 1362|   449k|  if (!already_exists)
  ------------------
  |  Branch (1362:7): [True: 447k, False: 1.51k]
  ------------------
 1363|   447k|    {
 1364|   447k|      hash_table->nnodes++;
 1365|       |
 1366|   447k|      if (HASH_IS_UNUSED (old_hash))
  ------------------
  |  |  242|   447k|#define HASH_IS_UNUSED(h_) ((h_) == UNUSED_HASH_VALUE)
  |  |  ------------------
  |  |  |  |  240|   447k|#define UNUSED_HASH_VALUE 0
  |  |  ------------------
  |  |  |  Branch (242:28): [True: 310k, False: 137k]
  |  |  ------------------
  ------------------
 1367|   310k|        {
 1368|       |          /* We replaced an empty node, and not a tombstone */
 1369|   310k|          hash_table->noccupied++;
 1370|   310k|          g_hash_table_maybe_resize (hash_table);
 1371|   310k|        }
 1372|       |
 1373|   447k|#ifndef G_DISABLE_ASSERT
 1374|   447k|      hash_table->version++;
 1375|   447k|#endif
 1376|   447k|    }
 1377|       |
 1378|   449k|  if (already_exists)
  ------------------
  |  Branch (1378:7): [True: 1.51k, False: 447k]
  ------------------
 1379|  1.51k|    {
 1380|  1.51k|      if (hash_table->key_destroy_func && !reusing_key)
  ------------------
  |  Branch (1380:11): [True: 1.12k, False: 397]
  |  Branch (1380:43): [True: 1.12k, False: 0]
  ------------------
 1381|  1.12k|        (* hash_table->key_destroy_func) (key_to_free);
 1382|  1.51k|      if (hash_table->value_destroy_func)
  ------------------
  |  Branch (1382:11): [True: 1.12k, False: 397]
  ------------------
 1383|  1.12k|        (* hash_table->value_destroy_func) (value_to_free);
 1384|  1.51k|    }
 1385|       |
 1386|   449k|  return !already_exists;
 1387|   449k|}
ghash.c:g_hash_table_ensure_keyval_fits:
  956|   449k|{
  957|   449k|  gboolean is_a_set = (hash_table->keys == hash_table->values);
  958|       |
  959|   449k|#ifdef USE_SMALL_ARRAYS
  960|       |
  961|       |  /* Convert from set to map? */
  962|   449k|  if (is_a_set)
  ------------------
  |  Branch (962:7): [True: 191k, False: 258k]
  ------------------
  963|   191k|    {
  964|   191k|      if (hash_table->have_big_keys)
  ------------------
  |  Branch (964:11): [True: 1.12k, False: 190k]
  ------------------
  965|  1.12k|        {
  966|  1.12k|          if (key != value)
  ------------------
  |  Branch (966:15): [True: 0, False: 1.12k]
  ------------------
  967|      0|            hash_table->values = g_memdup2 (hash_table->keys, sizeof (gpointer) * hash_table->size);
  968|       |          /* Keys and values are both big now, so no need for further checks */
  969|  1.12k|          return;
  970|  1.12k|        }
  971|   190k|      else
  972|   190k|        {
  973|   190k|          if (key != value)
  ------------------
  |  Branch (973:15): [True: 188k, False: 1.73k]
  ------------------
  974|   188k|            {
  975|   188k|              hash_table->values = g_memdup2 (hash_table->keys, sizeof (guint) * hash_table->size);
  976|   188k|              is_a_set = FALSE;
  ------------------
  |  |  880|   188k|#define	FALSE	(0)
  ------------------
  977|   188k|            }
  978|   190k|        }
  979|   191k|    }
  980|       |
  981|       |  /* Make keys big? */
  982|   448k|  if (!hash_table->have_big_keys)
  ------------------
  |  Branch (982:7): [True: 318k, False: 129k]
  ------------------
  983|   318k|    {
  984|   318k|      hash_table->have_big_keys = g_hash_table_maybe_make_big_keys_or_values (&hash_table->keys, key, hash_table->size);
  985|       |
  986|   318k|      if (is_a_set)
  ------------------
  |  Branch (986:11): [True: 1.73k, False: 316k]
  ------------------
  987|  1.73k|        {
  988|  1.73k|          hash_table->values = hash_table->keys;
  989|  1.73k|          hash_table->have_big_values = hash_table->have_big_keys;
  990|  1.73k|        }
  991|   318k|    }
  992|       |
  993|       |  /* Make values big? */
  994|   448k|  if (!is_a_set && !hash_table->have_big_values)
  ------------------
  |  Branch (994:7): [True: 446k, False: 1.73k]
  |  Branch (994:20): [True: 196k, False: 249k]
  ------------------
  995|   196k|    {
  996|   196k|      hash_table->have_big_values = g_hash_table_maybe_make_big_keys_or_values (&hash_table->values, value, hash_table->size);
  997|   196k|    }
  998|       |
  999|       |#else
 1000|       |
 1001|       |  /* Just split if necessary */
 1002|       |  if (is_a_set && key != value)
 1003|       |    hash_table->values = g_memdup2 (hash_table->keys, sizeof (gpointer) * hash_table->size);
 1004|       |
 1005|       |#endif
 1006|   448k|}
ghash.c:g_hash_table_maybe_make_big_keys_or_values:
  930|   515k|{
  931|   515k|  if (entry_is_big (v))
  ------------------
  |  Branch (931:7): [True: 378k, False: 137k]
  ------------------
  932|   378k|    {
  933|   378k|      guint *a = (guint *) *a_p;
  934|   378k|      gpointer *a_new;
  935|   378k|      gint i;
  936|       |
  937|   378k|      a_new = g_new (gpointer, ht_size);
  ------------------
  |  |  299|   378k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  244|   378k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|   378k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|   378k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|   378k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|   378k|	  gpointer __p;						\
  |  |  |  |  248|   378k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 378k]
  |  |  |  |  ------------------
  |  |  |  |  249|   378k|	    __p = g_##func (__n);				\
  |  |  |  |  250|   378k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 378k]
  |  |  |  |  ------------------
  |  |  |  |  251|   378k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|   378k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|   378k|	  else							\
  |  |  |  |  254|   378k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|   378k|	  __p;							\
  |  |  |  |  256|   378k|	}))
  |  |  ------------------
  ------------------
  938|       |
  939|  3.40M|      for (i = 0; i < ht_size; i++)
  ------------------
  |  Branch (939:19): [True: 3.02M, False: 378k]
  ------------------
  940|  3.02M|        {
  941|  3.02M|          a_new[i] = GUINT_TO_POINTER (a[i]);
  ------------------
  |  |  104|  3.02M|#define GUINT_TO_POINTER(u)	((gpointer) (gulong) (u))
  ------------------
  942|  3.02M|        }
  943|       |
  944|   378k|      g_free (a);
  945|   378k|      *a_p = a_new;
  946|   378k|      return TRUE;
  ------------------
  |  |  884|   378k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|   378k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  947|   378k|    }
  948|       |
  949|   137k|  return FALSE;
  ------------------
  |  |  880|   137k|#define	FALSE	(0)
  ------------------
  950|   515k|}
ghash.c:entry_is_big:
  924|   515k|{
  925|   515k|  return (((guintptr) v) >> ((BIG_ENTRY_SIZE - SMALL_ENTRY_SIZE) * 8)) != 0;
  ------------------
  |  |  251|   515k|#define BIG_ENTRY_SIZE (SIZEOF_VOID_P)
  |  |  ------------------
  |  |  |  |  392|   515k|#define SIZEOF_VOID_P 8
  |  |  ------------------
  ------------------
                return (((guintptr) v) >> ((BIG_ENTRY_SIZE - SMALL_ENTRY_SIZE) * 8)) != 0;
  ------------------
  |  |  252|   515k|#define SMALL_ENTRY_SIZE (SIZEOF_INT)
  |  |  ------------------
  |  |  |  |  380|   515k|#define SIZEOF_INT 4
  |  |  ------------------
  ------------------
  926|   515k|}
ghash.c:g_hash_table_remove_all_nodes:
  618|  1.68M|{
  619|  1.68M|  int i;
  620|  1.68M|  gpointer key;
  621|  1.68M|  gpointer value;
  622|  1.68M|  gint old_size;
  623|  1.68M|  gpointer *old_keys;
  624|  1.68M|  gpointer *old_values;
  625|  1.68M|  guint    *old_hashes;
  626|  1.68M|  gboolean  old_have_big_keys;
  627|  1.68M|  gboolean  old_have_big_values;
  628|       |
  629|       |  /* If the hash table is already empty, there is nothing to be done. */
  630|  1.68M|  if (hash_table->nnodes == 0)
  ------------------
  |  Branch (630:7): [True: 1.64M, False: 41.5k]
  ------------------
  631|  1.64M|    return;
  632|       |
  633|  41.5k|  hash_table->nnodes = 0;
  634|  41.5k|  hash_table->noccupied = 0;
  635|       |
  636|       |  /* Easy case: no callbacks, so we just zero out the arrays */
  637|  41.5k|  if (!notify ||
  ------------------
  |  Branch (637:7): [True: 0, False: 41.5k]
  ------------------
  638|  41.5k|      (hash_table->key_destroy_func == NULL &&
  ------------------
  |  Branch (638:8): [True: 39.0k, False: 2.40k]
  ------------------
  639|  39.0k|       hash_table->value_destroy_func == NULL))
  ------------------
  |  Branch (639:8): [True: 39.0k, False: 0]
  ------------------
  640|  39.0k|    {
  641|  39.0k|      if (!destruction)
  ------------------
  |  Branch (641:11): [True: 39.0k, False: 0]
  ------------------
  642|  39.0k|        {
  643|  39.0k|          memset (hash_table->hashes, 0, hash_table->size * sizeof (guint));
  644|       |
  645|  39.0k|#ifdef USE_SMALL_ARRAYS
  646|  39.0k|          memset (hash_table->keys, 0, hash_table->size * (hash_table->have_big_keys ? BIG_ENTRY_SIZE : SMALL_ENTRY_SIZE));
  ------------------
  |  |  251|  39.0k|#define BIG_ENTRY_SIZE (SIZEOF_VOID_P)
  |  |  ------------------
  |  |  |  |  392|  39.0k|#define SIZEOF_VOID_P 8
  |  |  ------------------
  ------------------
                        memset (hash_table->keys, 0, hash_table->size * (hash_table->have_big_keys ? BIG_ENTRY_SIZE : SMALL_ENTRY_SIZE));
  ------------------
  |  |  252|      0|#define SMALL_ENTRY_SIZE (SIZEOF_INT)
  |  |  ------------------
  |  |  |  |  380|      0|#define SIZEOF_INT 4
  |  |  ------------------
  ------------------
  |  Branch (646:60): [True: 39.0k, False: 0]
  ------------------
  647|  39.0k|          memset (hash_table->values, 0, hash_table->size * (hash_table->have_big_values ? BIG_ENTRY_SIZE : SMALL_ENTRY_SIZE));
  ------------------
  |  |  251|  39.0k|#define BIG_ENTRY_SIZE (SIZEOF_VOID_P)
  |  |  ------------------
  |  |  |  |  392|  39.0k|#define SIZEOF_VOID_P 8
  |  |  ------------------
  ------------------
                        memset (hash_table->values, 0, hash_table->size * (hash_table->have_big_values ? BIG_ENTRY_SIZE : SMALL_ENTRY_SIZE));
  ------------------
  |  |  252|      0|#define SMALL_ENTRY_SIZE (SIZEOF_INT)
  |  |  ------------------
  |  |  |  |  380|      0|#define SIZEOF_INT 4
  |  |  ------------------
  ------------------
  |  Branch (647:62): [True: 39.0k, False: 0]
  ------------------
  648|       |#else
  649|       |          memset (hash_table->keys, 0, hash_table->size * sizeof (gpointer));
  650|       |          memset (hash_table->values, 0, hash_table->size * sizeof (gpointer));
  651|       |#endif
  652|  39.0k|        }
  653|       |
  654|  39.0k|      return;
  655|  39.0k|    }
  656|       |
  657|       |  /* Hard case: we need to do user callbacks.  There are two
  658|       |   * possibilities here:
  659|       |   *
  660|       |   *   1) there are no outstanding references on the table and therefore
  661|       |   *   nobody should be calling into it again (destroying == true)
  662|       |   *
  663|       |   *   2) there are outstanding references, and there may be future
  664|       |   *   calls into the table, either after we return, or from the destroy
  665|       |   *   notifies that we're about to do (destroying == false)
  666|       |   *
  667|       |   * We handle both cases by taking the current state of the table into
  668|       |   * local variables and replacing it with something else: in the "no
  669|       |   * outstanding references" cases we replace it with a bunch of
  670|       |   * null/zero values so that any access to the table will fail.  In the
  671|       |   * "may receive future calls" case, we reinitialise the struct to
  672|       |   * appear like a newly-created empty table.
  673|       |   *
  674|       |   * In both cases, we take over the references for the current state,
  675|       |   * freeing them below.
  676|       |   */
  677|  2.40k|  old_size = hash_table->size;
  678|  2.40k|  old_have_big_keys = hash_table->have_big_keys;
  679|  2.40k|  old_have_big_values = hash_table->have_big_values;
  680|  2.40k|  old_keys   = g_steal_pointer (&hash_table->keys);
  ------------------
  |  |  231|  2.40k|#define g_steal_pointer(pp) ((glib_typeof (*pp)) (g_steal_pointer) (pp))
  ------------------
  681|  2.40k|  old_values = g_steal_pointer (&hash_table->values);
  ------------------
  |  |  231|  2.40k|#define g_steal_pointer(pp) ((glib_typeof (*pp)) (g_steal_pointer) (pp))
  ------------------
  682|  2.40k|  old_hashes = g_steal_pointer (&hash_table->hashes);
  ------------------
  |  |  231|  2.40k|#define g_steal_pointer(pp) ((glib_typeof (*pp)) (g_steal_pointer) (pp))
  ------------------
  683|       |
  684|  2.40k|  if (!destruction)
  ------------------
  |  Branch (684:7): [True: 2.40k, False: 0]
  ------------------
  685|       |    /* Any accesses will see an empty table */
  686|  2.40k|    g_hash_table_setup_storage (hash_table);
  687|      0|  else
  688|       |    /* Will cause a quick crash on any attempted access */
  689|      0|    hash_table->size = hash_table->mod = hash_table->mask = 0;
  690|       |
  691|       |  /* Now do the actual destroy notifies */
  692|  27.2k|  for (i = 0; i < old_size; i++)
  ------------------
  |  Branch (692:15): [True: 24.8k, False: 2.40k]
  ------------------
  693|  24.8k|    {
  694|  24.8k|      if (HASH_IS_REAL (old_hashes[i]))
  ------------------
  |  |  244|  24.8k|#define HASH_IS_REAL(h_) ((h_) >= 2)
  |  |  ------------------
  |  |  |  Branch (244:26): [True: 7.67k, False: 17.1k]
  |  |  ------------------
  ------------------
  695|  7.67k|        {
  696|  7.67k|          key = g_hash_table_fetch_key_or_value (old_keys, i, old_have_big_keys);
  697|  7.67k|          value = g_hash_table_fetch_key_or_value (old_values, i, old_have_big_values);
  698|       |
  699|  7.67k|          old_hashes[i] = UNUSED_HASH_VALUE;
  ------------------
  |  |  240|  7.67k|#define UNUSED_HASH_VALUE 0
  ------------------
  700|       |
  701|  7.67k|          g_hash_table_assign_key_or_value (old_keys, i, old_have_big_keys, NULL);
  702|  7.67k|          g_hash_table_assign_key_or_value (old_values, i, old_have_big_values, NULL);
  703|       |
  704|  7.67k|          if (hash_table->key_destroy_func != NULL)
  ------------------
  |  Branch (704:15): [True: 7.67k, False: 0]
  ------------------
  705|  7.67k|            hash_table->key_destroy_func (key);
  706|       |
  707|  7.67k|          if (hash_table->value_destroy_func != NULL)
  ------------------
  |  Branch (707:15): [True: 7.67k, False: 0]
  ------------------
  708|  7.67k|            hash_table->value_destroy_func (value);
  709|  7.67k|        }
  710|  24.8k|    }
  711|       |
  712|       |  /* Destroy old storage space. */
  713|  2.40k|  if (old_keys != old_values)
  ------------------
  |  Branch (713:7): [True: 2.40k, False: 0]
  ------------------
  714|  2.40k|    g_free (old_values);
  715|       |
  716|  2.40k|  g_free (old_keys);
  717|  2.40k|  g_free (old_hashes);
  718|  2.40k|}
ghash.c:g_hash_table_lookup_node:
  466|  1.89G|{
  467|  1.89G|  guint node_index;
  468|  1.89G|  guint node_hash;
  469|  1.89G|  guint hash_value;
  470|  1.89G|  guint first_tombstone = 0;
  471|  1.89G|  gboolean have_tombstone = FALSE;
  ------------------
  |  |  880|  1.89G|#define	FALSE	(0)
  ------------------
  472|  1.89G|  guint step = 0;
  473|       |
  474|  1.89G|  hash_value = hash_table->hash_func (key);
  475|  1.89G|  if (G_UNLIKELY (!HASH_IS_REAL (hash_value)))
  ------------------
  |  | 1187|  1.89G|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  1.89G| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  1.89G|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  1.89G|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  1.89G|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 198M, False: 1.69G]
  |  |  |  |  ------------------
  |  |  |  | 1181|  1.89G|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  1.89G|   else                                         \
  |  |  |  | 1183|  1.89G|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  1.89G|   _g_boolean_var_;                             \
  |  |  |  | 1185|  1.89G|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 198M, False: 1.69G]
  |  |  ------------------
  ------------------
  476|   198M|    hash_value = 2;
  477|       |
  478|  1.89G|  *hash_return = hash_value;
  479|       |
  480|  1.89G|  node_index = g_hash_table_hash_to_index (hash_table, hash_value);
  481|  1.89G|  node_hash = hash_table->hashes[node_index];
  482|       |
  483|  2.10G|  while (!HASH_IS_UNUSED (node_hash))
  ------------------
  |  |  242|  2.10G|#define HASH_IS_UNUSED(h_) ((h_) == UNUSED_HASH_VALUE)
  |  |  ------------------
  |  |  |  |  240|  2.10G|#define UNUSED_HASH_VALUE 0
  |  |  ------------------
  ------------------
  |  Branch (483:10): [True: 1.70G, False: 403M]
  ------------------
  484|  1.70G|    {
  485|       |      /* We first check if our full hash values
  486|       |       * are equal so we can avoid calling the full-blown
  487|       |       * key equality function in most cases.
  488|       |       */
  489|  1.70G|      if (node_hash == hash_value)
  ------------------
  |  Branch (489:11): [True: 1.49G, False: 214M]
  ------------------
  490|  1.49G|        {
  491|  1.49G|          gpointer node_key = g_hash_table_fetch_key_or_value (hash_table->keys, node_index, hash_table->have_big_keys);
  492|       |
  493|  1.49G|          if (hash_table->key_equal_func)
  ------------------
  |  Branch (493:15): [True: 1.46G, False: 21.1M]
  ------------------
  494|  1.46G|            {
  495|  1.46G|              if (hash_table->key_equal_func (node_key, key))
  ------------------
  |  Branch (495:19): [True: 1.46G, False: 182]
  ------------------
  496|  1.46G|                return node_index;
  497|  1.46G|            }
  498|  21.1M|          else if (node_key == key)
  ------------------
  |  Branch (498:20): [True: 21.1M, False: 26]
  ------------------
  499|  21.1M|            {
  500|  21.1M|              return node_index;
  501|  21.1M|            }
  502|  1.49G|        }
  503|   214M|      else if (HASH_IS_TOMBSTONE (node_hash) && !have_tombstone)
  ------------------
  |  |  243|   428M|#define HASH_IS_TOMBSTONE(h_) ((h_) == TOMBSTONE_HASH_VALUE)
  |  |  ------------------
  |  |  |  |  241|   214M|#define TOMBSTONE_HASH_VALUE 1
  |  |  ------------------
  |  |  |  Branch (243:31): [True: 1.49M, False: 213M]
  |  |  ------------------
  ------------------
  |  Branch (503:49): [True: 1.23M, False: 255k]
  ------------------
  504|  1.23M|        {
  505|  1.23M|          first_tombstone = node_index;
  506|  1.23M|          have_tombstone = TRUE;
  ------------------
  |  |  884|  1.23M|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  1.23M|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  507|  1.23M|        }
  508|       |
  509|   214M|      step++;
  510|   214M|      node_index += step;
  511|   214M|      node_index &= hash_table->mask;
  512|   214M|      node_hash = hash_table->hashes[node_index];
  513|   214M|    }
  514|       |
  515|   403M|  if (have_tombstone)
  ------------------
  |  Branch (515:7): [True: 1.23M, False: 402M]
  ------------------
  516|  1.23M|    return first_tombstone;
  517|       |
  518|   402M|  return node_index;
  519|   403M|}
ghash.c:g_hash_table_hash_to_index:
  431|  1.89G|{
  432|       |  /* Multiply the hash by a small prime before applying the modulo. This
  433|       |   * prevents the table from becoming densely packed, even with a poor hash
  434|       |   * function. A densely packed table would have poor performance on
  435|       |   * workloads with many failed lookups or a high degree of churn. */
  436|  1.89G|  return (hash * 11) % hash_table->mod;
  437|  1.89G|}
ghash.c:g_hash_table_insert_internal:
 1621|   449k|{
 1622|   449k|  guint key_hash;
 1623|   449k|  guint node_index;
 1624|       |
 1625|   449k|  g_return_val_if_fail (hash_table != NULL, FALSE);
  ------------------
  |  |  652|   449k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   449k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   449k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   449k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   449k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   449k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   449k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   449k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 449k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   449k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   449k|   else                                         \
  |  |  |  |  |  | 1183|   449k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   449k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   449k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 449k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   449k|      { } \
  |  |  655|   449k|    else \
  |  |  656|   449k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   449k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   449k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 449k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1626|       |
 1627|   449k|  node_index = g_hash_table_lookup_node (hash_table, key, &key_hash);
 1628|       |
 1629|   449k|  return g_hash_table_insert_node (hash_table, node_index, key_hash, key, value, keep_new_key, FALSE);
  ------------------
  |  |  880|   449k|#define	FALSE	(0)
  ------------------
 1630|   449k|}
ghash.c:g_hash_table_remove_internal:
 1763|   491k|{
 1764|   491k|  guint node_index;
 1765|   491k|  guint node_hash;
 1766|       |
 1767|   491k|  g_return_val_if_fail (hash_table != NULL, FALSE);
  ------------------
  |  |  652|   491k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   491k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   491k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   491k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   491k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   491k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   491k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   491k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 491k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   491k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   491k|   else                                         \
  |  |  |  |  |  | 1183|   491k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   491k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   491k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 491k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   491k|      { } \
  |  |  655|   491k|    else \
  |  |  656|   491k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   491k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   491k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 491k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1768|       |
 1769|   491k|  node_index = g_hash_table_lookup_node (hash_table, key, &node_hash);
 1770|       |
 1771|   491k|  if (!HASH_IS_REAL (hash_table->hashes[node_index]))
  ------------------
  |  |  244|   491k|#define HASH_IS_REAL(h_) ((h_) >= 2)
  ------------------
  |  Branch (1771:7): [True: 199k, False: 291k]
  ------------------
 1772|   199k|    return FALSE;
  ------------------
  |  |  880|   199k|#define	FALSE	(0)
  ------------------
 1773|       |
 1774|   291k|  g_hash_table_remove_node (hash_table, node_index, notify);
 1775|   291k|  g_hash_table_maybe_resize (hash_table);
 1776|       |
 1777|   291k|#ifndef G_DISABLE_ASSERT
 1778|   291k|  hash_table->version++;
 1779|   291k|#endif
 1780|       |
 1781|   291k|  return TRUE;
  ------------------
  |  |  884|   291k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|   291k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1782|   491k|}
ghash.c:g_hash_table_assign_key_or_value:
  399|  1.67M|{
  400|       |#ifndef USE_SMALL_ARRAYS
  401|       |  is_big = TRUE;
  402|       |#endif
  403|  1.67M|  if (is_big)
  ------------------
  |  Branch (403:7): [True: 1.39M, False: 279k]
  ------------------
  404|  1.39M|    *(((gpointer *) a) + index) = v;
  405|   279k|  else
  406|   279k|    *(((guint *) a) + index) = GPOINTER_TO_UINT (v);
  ------------------
  |  |  101|   279k|#define GPOINTER_TO_UINT(p)	((guint) (gulong) (p))
  ------------------
  407|  1.67M|}
ghash.c:g_hash_table_remove_node:
  537|   291k|{
  538|   291k|  gpointer key;
  539|   291k|  gpointer value;
  540|       |
  541|   291k|  key = g_hash_table_fetch_key_or_value (hash_table->keys, i, hash_table->have_big_keys);
  542|   291k|  value = g_hash_table_fetch_key_or_value (hash_table->values, i, hash_table->have_big_values);
  543|       |
  544|       |  /* Erect tombstone */
  545|   291k|  hash_table->hashes[i] = TOMBSTONE_HASH_VALUE;
  ------------------
  |  |  241|   291k|#define TOMBSTONE_HASH_VALUE 1
  ------------------
  546|       |
  547|       |  /* Be GC friendly */
  548|   291k|  g_hash_table_assign_key_or_value (hash_table->keys, i, hash_table->have_big_keys, NULL);
  549|   291k|  g_hash_table_assign_key_or_value (hash_table->values, i, hash_table->have_big_values, NULL);
  550|       |
  551|   291k|  hash_table->nnodes--;
  552|       |
  553|   291k|  if (notify && hash_table->key_destroy_func)
  ------------------
  |  Branch (553:7): [True: 291k, False: 0]
  |  Branch (553:17): [True: 2, False: 291k]
  ------------------
  554|      2|    hash_table->key_destroy_func (key);
  555|       |
  556|   291k|  if (notify && hash_table->value_destroy_func)
  ------------------
  |  Branch (556:7): [True: 291k, False: 0]
  |  Branch (556:17): [True: 2, False: 291k]
  ------------------
  557|      2|    hash_table->value_destroy_func (value);
  558|       |
  559|   291k|}
ghash.c:g_hash_table_maybe_resize:
  911|  1.89M|{
  912|  1.89M|  gint noccupied = hash_table->noccupied;
  913|  1.89M|  gint size = hash_table->size;
  914|       |
  915|  1.89M|  if ((size > hash_table->nnodes * 4 && size > 1 << HASH_TABLE_MIN_SHIFT) ||
  ------------------
  |  |  238|  1.63M|#define HASH_TABLE_MIN_SHIFT 3  /* 1 << 3 == 8 buckets */
  ------------------
  |  Branch (915:8): [True: 1.63M, False: 252k]
  |  Branch (915:41): [True: 2.41k, False: 1.63M]
  ------------------
  916|  1.88M|      (size <= noccupied + (noccupied / 16)))
  ------------------
  |  Branch (916:7): [True: 4.72k, False: 1.88M]
  ------------------
  917|  7.13k|    g_hash_table_resize (hash_table);
  918|  1.89M|}
ghash.c:g_hash_table_resize:
  854|  7.13k|{
  855|  7.13k|  guint32 *reallocated_buckets_bitmap;
  856|  7.13k|  gsize old_size;
  857|  7.13k|  gboolean is_a_set;
  858|       |
  859|  7.13k|  old_size = hash_table->size;
  860|  7.13k|  is_a_set = hash_table->keys == hash_table->values;
  861|       |
  862|       |  /* The outer checks in g_hash_table_maybe_resize() will only consider
  863|       |   * cleanup/resize when the load factor goes below .25 (1/4, ignoring
  864|       |   * tombstones) or above .9375 (15/16, including tombstones).
  865|       |   *
  866|       |   * Once this happens, tombstones will always be cleaned out. If our
  867|       |   * load sans tombstones is greater than .75 (1/1.333, see below), we'll
  868|       |   * take this opportunity to grow the table too.
  869|       |   *
  870|       |   * Immediately after growing, the load factor will be in the range
  871|       |   * .375 .. .469. After shrinking, it will be exactly .5. */
  872|       |
  873|  7.13k|  g_hash_table_set_shift_from_size (hash_table, hash_table->nnodes * 1.333);
  874|       |
  875|  7.13k|  if (hash_table->size > old_size)
  ------------------
  |  Branch (875:7): [True: 4.67k, False: 2.46k]
  ------------------
  876|  4.67k|    {
  877|  4.67k|      realloc_arrays (hash_table, is_a_set);
  878|  4.67k|      memset (&hash_table->hashes[old_size], 0, (hash_table->size - old_size) * sizeof (guint));
  879|       |
  880|  4.67k|      reallocated_buckets_bitmap = g_new0 (guint32, (hash_table->size + 31) / 32);
  ------------------
  |  |  316|  4.67k|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|  4.67k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  4.67k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|  4.67k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|  4.67k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|  4.67k|	  gpointer __p;						\
  |  |  |  |  248|  4.67k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 4.67k]
  |  |  |  |  ------------------
  |  |  |  |  249|  4.67k|	    __p = g_##func (__n);				\
  |  |  |  |  250|  4.67k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 4.67k]
  |  |  |  |  ------------------
  |  |  |  |  251|  4.67k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|  4.67k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|  4.67k|	  else							\
  |  |  |  |  254|  4.67k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|  4.67k|	  __p;							\
  |  |  |  |  256|  4.67k|	}))
  |  |  ------------------
  ------------------
  881|  4.67k|    }
  882|  2.46k|  else
  883|  2.46k|    {
  884|  2.46k|      reallocated_buckets_bitmap = g_new0 (guint32, (old_size + 31) / 32);
  ------------------
  |  |  316|  2.46k|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|  2.46k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  2.46k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|  2.46k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|  2.46k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|  2.46k|	  gpointer __p;						\
  |  |  |  |  248|  2.46k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 2.46k]
  |  |  |  |  ------------------
  |  |  |  |  249|  2.46k|	    __p = g_##func (__n);				\
  |  |  |  |  250|  2.46k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 2.46k]
  |  |  |  |  ------------------
  |  |  |  |  251|  2.46k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|  2.46k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|  2.46k|	  else							\
  |  |  |  |  254|  2.46k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|  2.46k|	  __p;							\
  |  |  |  |  256|  2.46k|	}))
  |  |  ------------------
  ------------------
  885|  2.46k|    }
  886|       |
  887|  7.13k|  if (is_a_set)
  ------------------
  |  Branch (887:7): [True: 184, False: 6.95k]
  ------------------
  888|    184|    resize_set (hash_table, old_size, reallocated_buckets_bitmap);
  889|  6.95k|  else
  890|  6.95k|    resize_map (hash_table, old_size, reallocated_buckets_bitmap);
  891|       |
  892|  7.13k|  g_free (reallocated_buckets_bitmap);
  893|       |
  894|  7.13k|  if (hash_table->size < old_size)
  ------------------
  |  Branch (894:7): [True: 2.41k, False: 4.72k]
  ------------------
  895|  2.41k|    realloc_arrays (hash_table, is_a_set);
  896|       |
  897|  7.13k|  hash_table->noccupied = hash_table->nnodes;
  898|  7.13k|}
ghash.c:g_hash_table_set_shift_from_size:
  369|  7.13k|{
  370|  7.13k|  gint shift;
  371|       |
  372|  7.13k|  shift = g_hash_table_find_closest_shift (size);
  373|  7.13k|  shift = MAX (shift, HASH_TABLE_MIN_SHIFT);
  ------------------
  |  |  888|  7.13k|#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (888:21): [True: 4.74k, False: 2.39k]
  |  |  ------------------
  ------------------
  374|       |
  375|  7.13k|  g_hash_table_set_shift (hash_table, shift);
  376|  7.13k|}
ghash.c:g_hash_table_find_closest_shift:
  358|  7.13k|{
  359|  7.13k|  gint i;
  360|       |
  361|  29.2k|  for (i = 0; n; i++)
  ------------------
  |  Branch (361:15): [True: 22.0k, False: 7.13k]
  ------------------
  362|  22.0k|    n >>= 1;
  363|       |
  364|  7.13k|  return i;
  365|  7.13k|}
ghash.c:realloc_arrays:
  722|  7.08k|{
  723|  7.08k|  hash_table->hashes = g_renew (guint, hash_table->hashes, hash_table->size);
  ------------------
  |  |  330|  7.08k|#define g_renew(struct_type, mem, n_structs)		_G_RENEW (struct_type, mem, n_structs, realloc)
  |  |  ------------------
  |  |  |  |  258|  7.08k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  7.08k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  259|  7.08k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  260|  7.08k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  261|  7.08k|	  gpointer __p = (gpointer) (mem);			\
  |  |  |  |  262|  7.08k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (262:8): [True: 0, False: 7.08k]
  |  |  |  |  ------------------
  |  |  |  |  263|  7.08k|	    __p = g_##func (__p, __n);				\
  |  |  |  |  264|  7.08k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (264:13): [True: 0, False: 7.08k]
  |  |  |  |  ------------------
  |  |  |  |  265|  7.08k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (265:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (265:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  266|  7.08k|	    __p = g_##func (__p, __n * __s);			\
  |  |  |  |  267|  7.08k|	  else							\
  |  |  |  |  268|  7.08k|	    __p = g_##func##_n (__p, __n, __s);			\
  |  |  |  |  269|  7.08k|	  __p;							\
  |  |  |  |  270|  7.08k|	}))
  |  |  ------------------
  ------------------
  724|  7.08k|  hash_table->keys = g_hash_table_realloc_key_or_value_array (hash_table->keys, hash_table->size, hash_table->have_big_keys);
  725|       |
  726|  7.08k|  if (is_a_set)
  ------------------
  |  Branch (726:7): [True: 184, False: 6.90k]
  ------------------
  727|    184|    hash_table->values = hash_table->keys;
  728|  6.90k|  else
  729|  6.90k|    hash_table->values = g_hash_table_realloc_key_or_value_array (hash_table->values, hash_table->size, hash_table->have_big_values);
  730|  7.08k|}
ghash.c:resize_set:
  757|    184|static void fname (GHashTable *hash_table, guint old_size, guint32 *reallocated_buckets_bitmap) \
  758|    184|{                                                                       \
  759|    184|  guint i;                                                              \
  760|    184|                                                                        \
  761|  2.41k|  for (i = 0; i < old_size; i++)                                        \
  ------------------
  |  Branch (761:15): [True: 2.23k, False: 184]
  ------------------
  762|  2.23k|    {                                                                   \
  763|  2.23k|      guint node_hash = hash_table->hashes[i];                          \
  764|  2.23k|      gpointer key, value G_GNUC_UNUSED;                                \
  765|  2.23k|                                                                        \
  766|  2.23k|      if (!HASH_IS_REAL (node_hash))                                    \
  ------------------
  |  |  244|  2.23k|#define HASH_IS_REAL(h_) ((h_) >= 2)
  ------------------
  |  Branch (766:11): [True: 1.20k, False: 1.02k]
  ------------------
  767|  2.23k|        {                                                               \
  768|  1.20k|          /* Clear tombstones */                                        \
  769|  1.20k|          hash_table->hashes[i] = UNUSED_HASH_VALUE;                    \
  ------------------
  |  |  240|  1.20k|#define UNUSED_HASH_VALUE 0
  ------------------
  770|  1.20k|          continue;                                                     \
  771|  1.20k|        }                                                               \
  772|  2.23k|                                                                        \
  773|  2.23k|      /* Skip entries relocated through eviction */                     \
  774|  2.23k|      if (get_status_bit (reallocated_buckets_bitmap, i))               \
  ------------------
  |  Branch (774:11): [True: 347, False: 677]
  ------------------
  775|  1.02k|        continue;                                                       \
  776|  1.02k|                                                                        \
  777|  1.02k|      hash_table->hashes[i] = UNUSED_HASH_VALUE;                        \
  ------------------
  |  |  240|    677|#define UNUSED_HASH_VALUE 0
  ------------------
  778|    677|      EVICT_KEYVAL (hash_table, i, NULL, NULL, key, value);             \
  ------------------
  |  |  830|    677|#define EVICT_KEYVAL(ht, index, key, value, outkey, outvalue) G_STMT_START{ \
  |  |  ------------------
  |  |  |  |  940|    677|#define G_STMT_START  do
  |  |  ------------------
  |  |  831|    677|    (outkey) = g_hash_table_evict_key_or_value ((ht)->keys, (index), (ht)->have_big_keys, (key)); \
  |  |  832|    677|  }G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    677|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 677]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  779|    677|                                                                        \
  780|    677|      for (;;)                                                          \
  781|  1.02k|        {                                                               \
  782|  1.02k|          guint hash_val;                                               \
  783|  1.02k|          guint replaced_hash;                                          \
  784|  1.02k|          guint step = 0;                                               \
  785|  1.02k|                                                                        \
  786|  1.02k|          hash_val = g_hash_table_hash_to_index (hash_table, node_hash); \
  787|  1.02k|                                                                        \
  788|  1.53k|          while (get_status_bit (reallocated_buckets_bitmap, hash_val)) \
  ------------------
  |  Branch (788:18): [True: 513, False: 1.02k]
  ------------------
  789|  1.02k|            {                                                           \
  790|    513|              step++;                                                   \
  791|    513|              hash_val += step;                                         \
  792|    513|              hash_val &= hash_table->mask;                             \
  793|    513|            }                                                           \
  794|  1.02k|                                                                        \
  795|  1.02k|          set_status_bit (reallocated_buckets_bitmap, hash_val);        \
  796|  1.02k|                                                                        \
  797|  1.02k|          replaced_hash = hash_table->hashes[hash_val];                 \
  798|  1.02k|          hash_table->hashes[hash_val] = node_hash;                     \
  799|  1.02k|          if (!HASH_IS_REAL (replaced_hash))                            \
  ------------------
  |  |  244|  1.02k|#define HASH_IS_REAL(h_) ((h_) >= 2)
  ------------------
  |  Branch (799:15): [True: 677, False: 347]
  ------------------
  800|  1.02k|            {                                                           \
  801|    677|              ASSIGN_KEYVAL (hash_table, hash_val, key, value);         \
  ------------------
  |  |  826|    677|#define ASSIGN_KEYVAL(ht, index, key, value) G_STMT_START{ \
  |  |  ------------------
  |  |  |  |  940|    677|#define G_STMT_START  do
  |  |  ------------------
  |  |  827|    677|    g_hash_table_assign_key_or_value ((ht)->keys, (index), (ht)->have_big_keys, (key)); \
  |  |  828|    677|  }G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    677|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 677]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  802|    677|              break;                                                    \
  803|    677|            }                                                           \
  804|  1.02k|                                                                        \
  805|  1.02k|          node_hash = replaced_hash;                                    \
  806|    347|          EVICT_KEYVAL (hash_table, hash_val, key, value, key, value);  \
  ------------------
  |  |  830|    347|#define EVICT_KEYVAL(ht, index, key, value, outkey, outvalue) G_STMT_START{ \
  |  |  ------------------
  |  |  |  |  940|    347|#define G_STMT_START  do
  |  |  ------------------
  |  |  831|    347|    (outkey) = g_hash_table_evict_key_or_value ((ht)->keys, (index), (ht)->have_big_keys, (key)); \
  |  |  832|    347|  }G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    347|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 347]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  807|    347|        }                                                               \
  808|    677|    }                                                                   \
  809|    184|}
ghash.c:get_status_bit:
  742|   283k|{
  743|   283k|  return (bitmap[index / 32] >> (index % 32)) & 1;
  744|   283k|}
ghash.c:g_hash_table_evict_key_or_value:
  411|   237k|{
  412|       |#ifndef USE_SMALL_ARRAYS
  413|       |  is_big = TRUE;
  414|       |#endif
  415|   237k|  if (is_big)
  ------------------
  |  Branch (415:7): [True: 217k, False: 20.1k]
  ------------------
  416|   217k|    {
  417|   217k|      gpointer r = *(((gpointer *) a) + index);
  418|   217k|      *(((gpointer *) a) + index) = v;
  419|   217k|      return r;
  420|   217k|    }
  421|  20.1k|  else
  422|  20.1k|    {
  423|  20.1k|      gpointer r = GUINT_TO_POINTER (*(((guint *) a) + index));
  ------------------
  |  |  104|  20.1k|#define GUINT_TO_POINTER(u)	((gpointer) (gulong) (u))
  ------------------
  424|  20.1k|      *(((guint *) a) + index) = GPOINTER_TO_UINT (v);
  ------------------
  |  |  101|  20.1k|#define GPOINTER_TO_UINT(p)	((guint) (gulong) (p))
  ------------------
  425|  20.1k|      return r;
  426|  20.1k|    }
  427|   237k|}
ghash.c:set_status_bit:
  748|   119k|{
  749|   119k|  bitmap[index / 32] |= 1U << (index % 32);
  750|   119k|}
ghash.c:resize_map:
  757|  6.95k|static void fname (GHashTable *hash_table, guint old_size, guint32 *reallocated_buckets_bitmap) \
  758|  6.95k|{                                                                       \
  759|  6.95k|  guint i;                                                              \
  760|  6.95k|                                                                        \
  761|   248k|  for (i = 0; i < old_size; i++)                                        \
  ------------------
  |  Branch (761:15): [True: 242k, False: 6.95k]
  ------------------
  762|   242k|    {                                                                   \
  763|   242k|      guint node_hash = hash_table->hashes[i];                          \
  764|   242k|      gpointer key, value G_GNUC_UNUSED;                                \
  765|   242k|                                                                        \
  766|   242k|      if (!HASH_IS_REAL (node_hash))                                    \
  ------------------
  |  |  244|   242k|#define HASH_IS_REAL(h_) ((h_) >= 2)
  ------------------
  |  Branch (766:11): [True: 122k, False: 119k]
  ------------------
  767|   242k|        {                                                               \
  768|   122k|          /* Clear tombstones */                                        \
  769|   122k|          hash_table->hashes[i] = UNUSED_HASH_VALUE;                    \
  ------------------
  |  |  240|   122k|#define UNUSED_HASH_VALUE 0
  ------------------
  770|   122k|          continue;                                                     \
  771|   122k|        }                                                               \
  772|   242k|                                                                        \
  773|   242k|      /* Skip entries relocated through eviction */                     \
  774|   242k|      if (get_status_bit (reallocated_buckets_bitmap, i))               \
  ------------------
  |  Branch (774:11): [True: 31.7k, False: 87.9k]
  ------------------
  775|   119k|        continue;                                                       \
  776|   119k|                                                                        \
  777|   119k|      hash_table->hashes[i] = UNUSED_HASH_VALUE;                        \
  ------------------
  |  |  240|  87.9k|#define UNUSED_HASH_VALUE 0
  ------------------
  778|  87.9k|      EVICT_KEYVAL (hash_table, i, NULL, NULL, key, value);             \
  ------------------
  |  |  816|  87.9k|#define EVICT_KEYVAL(ht, index, key, value, outkey, outvalue) G_STMT_START{ \
  |  |  ------------------
  |  |  |  |  940|  87.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |  817|  87.9k|    (outkey) = g_hash_table_evict_key_or_value ((ht)->keys, (index), (ht)->have_big_keys, (key)); \
  |  |  818|  87.9k|    (outvalue) = g_hash_table_evict_key_or_value ((ht)->values, (index), (ht)->have_big_values, (value)); \
  |  |  819|  87.9k|  }G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  87.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 87.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  779|  87.9k|                                                                        \
  780|  87.9k|      for (;;)                                                          \
  781|   118k|        {                                                               \
  782|   118k|          guint hash_val;                                               \
  783|   118k|          guint replaced_hash;                                          \
  784|   118k|          guint step = 0;                                               \
  785|   118k|                                                                        \
  786|   118k|          hash_val = g_hash_table_hash_to_index (hash_table, node_hash); \
  787|   118k|                                                                        \
  788|   161k|          while (get_status_bit (reallocated_buckets_bitmap, hash_val)) \
  ------------------
  |  Branch (788:18): [True: 43.0k, False: 118k]
  ------------------
  789|   118k|            {                                                           \
  790|  43.0k|              step++;                                                   \
  791|  43.0k|              hash_val += step;                                         \
  792|  43.0k|              hash_val &= hash_table->mask;                             \
  793|  43.0k|            }                                                           \
  794|   118k|                                                                        \
  795|   118k|          set_status_bit (reallocated_buckets_bitmap, hash_val);        \
  796|   118k|                                                                        \
  797|   118k|          replaced_hash = hash_table->hashes[hash_val];                 \
  798|   118k|          hash_table->hashes[hash_val] = node_hash;                     \
  799|   118k|          if (!HASH_IS_REAL (replaced_hash))                            \
  ------------------
  |  |  244|   118k|#define HASH_IS_REAL(h_) ((h_) >= 2)
  ------------------
  |  Branch (799:15): [True: 87.9k, False: 30.4k]
  ------------------
  800|   118k|            {                                                           \
  801|  87.9k|              ASSIGN_KEYVAL (hash_table, hash_val, key, value);         \
  ------------------
  |  |  811|  87.9k|#define ASSIGN_KEYVAL(ht, index, key, value) G_STMT_START{ \
  |  |  ------------------
  |  |  |  |  940|  87.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |  812|  87.9k|    g_hash_table_assign_key_or_value ((ht)->keys, (index), (ht)->have_big_keys, (key)); \
  |  |  813|  87.9k|    g_hash_table_assign_key_or_value ((ht)->values, (index), (ht)->have_big_values, (value)); \
  |  |  814|  87.9k|  }G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  87.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 87.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  802|  87.9k|              break;                                                    \
  803|  87.9k|            }                                                           \
  804|   118k|                                                                        \
  805|   118k|          node_hash = replaced_hash;                                    \
  806|  30.4k|          EVICT_KEYVAL (hash_table, hash_val, key, value, key, value);  \
  ------------------
  |  |  816|  30.4k|#define EVICT_KEYVAL(ht, index, key, value, outkey, outvalue) G_STMT_START{ \
  |  |  ------------------
  |  |  |  |  940|  30.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |  817|  30.4k|    (outkey) = g_hash_table_evict_key_or_value ((ht)->keys, (index), (ht)->have_big_keys, (key)); \
  |  |  818|  30.4k|    (outvalue) = g_hash_table_evict_key_or_value ((ht)->values, (index), (ht)->have_big_values, (value)); \
  |  |  819|  30.4k|  }G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  30.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 30.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  807|  30.4k|        }                                                               \
  808|  87.9k|    }                                                                   \
  809|  6.95k|}
ghash.c:g_hash_table_foreach_remove_or_steal:
 1965|  22.7k|{
 1966|  22.7k|  guint deleted = 0;
 1967|  22.7k|  gsize i;
 1968|  22.7k|#ifndef G_DISABLE_ASSERT
 1969|  22.7k|  gint version = hash_table->version;
 1970|  22.7k|#endif
 1971|       |
 1972|   205k|  for (i = 0; i < hash_table->size; i++)
  ------------------
  |  Branch (1972:15): [True: 182k, False: 22.7k]
  ------------------
 1973|   182k|    {
 1974|   182k|      guint node_hash = hash_table->hashes[i];
 1975|   182k|      gpointer node_key = g_hash_table_fetch_key_or_value (hash_table->keys, i, hash_table->have_big_keys);
 1976|   182k|      gpointer node_value = g_hash_table_fetch_key_or_value (hash_table->values, i, hash_table->have_big_values);
 1977|       |
 1978|   182k|      if (HASH_IS_REAL (node_hash) &&
  ------------------
  |  |  244|   364k|#define HASH_IS_REAL(h_) ((h_) >= 2)
  |  |  ------------------
  |  |  |  Branch (244:26): [True: 0, False: 182k]
  |  |  ------------------
  ------------------
 1979|      0|          (* func) (node_key, node_value, user_data))
  ------------------
  |  Branch (1979:11): [True: 0, False: 0]
  ------------------
 1980|      0|        {
 1981|      0|          g_hash_table_remove_node (hash_table, i, notify);
 1982|      0|          deleted++;
 1983|      0|        }
 1984|       |
 1985|   182k|#ifndef G_DISABLE_ASSERT
 1986|   182k|      g_return_val_if_fail (version == hash_table->version, 0);
  ------------------
  |  |  652|   182k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   182k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   182k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   182k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   182k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   182k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   182k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   182k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 182k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   182k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   182k|   else                                         \
  |  |  |  |  |  | 1183|   182k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   182k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   182k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 182k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   182k|      { } \
  |  |  655|   182k|    else \
  |  |  656|   182k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   182k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   182k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 182k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1987|   182k|#endif
 1988|   182k|    }
 1989|       |
 1990|  22.7k|  g_hash_table_maybe_resize (hash_table);
 1991|       |
 1992|  22.7k|#ifndef G_DISABLE_ASSERT
 1993|  22.7k|  if (deleted > 0)
  ------------------
  |  Branch (1993:7): [True: 0, False: 22.7k]
  ------------------
 1994|      0|    hash_table->version++;
 1995|  22.7k|#endif
 1996|       |
 1997|  22.7k|  return deleted;
 1998|  22.7k|}

g_io_channel_init:
  189|  60.2k|{
  190|  60.2k|  channel->ref_count = 1;
  191|  60.2k|  channel->encoding = g_strdup ("UTF-8");
  192|  60.2k|  channel->line_term = NULL;
  193|  60.2k|  channel->line_term_len = 0;
  194|  60.2k|  channel->buf_size = G_IO_NICE_BUF_SIZE;
  ------------------
  |  |  154|  60.2k|#define G_IO_NICE_BUF_SIZE	1024
  ------------------
  195|  60.2k|  channel->read_cd = (GIConv) -1;
  196|  60.2k|  channel->write_cd = (GIConv) -1;
  197|  60.2k|  channel->read_buf = NULL; /* Lazy allocate buffers */
  198|  60.2k|  channel->encoded_read_buf = NULL;
  199|  60.2k|  channel->write_buf = NULL;
  200|  60.2k|  channel->partial_write_buf[0] = '\0';
  201|  60.2k|  channel->use_buffer = TRUE;
  ------------------
  |  |  884|  60.2k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  60.2k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  202|  60.2k|  channel->do_encode = FALSE;
  ------------------
  |  |  880|  60.2k|#define	FALSE	(0)
  ------------------
  203|  60.2k|  channel->close_on_unref = FALSE;
  ------------------
  |  |  880|  60.2k|#define	FALSE	(0)
  ------------------
  204|  60.2k|}
g_io_channel_ref:
  216|    251|{
  217|    251|  g_return_val_if_fail (channel != NULL, NULL);
  ------------------
  |  |  652|    251|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    251|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    251|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    251|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    251| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    251|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    251|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    251|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 251, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    251|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    251|   else                                         \
  |  |  |  |  |  | 1183|    251|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    251|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    251|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 251, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    251|      { } \
  |  |  655|    251|    else \
  |  |  656|    251|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    251|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    251|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 251]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  218|       |
  219|    251|  g_atomic_int_inc (&channel->ref_count);
  ------------------
  |  |  162|    251|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|    251|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|    251|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|    251|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  164|    251|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded, False: 251]
  |  |  ------------------
  |  |  165|    251|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  166|    251|  }))
  ------------------
  220|       |
  221|    251|  return channel;
  222|    251|}
g_io_channel_unref:
  232|  59.9k|{
  233|  59.9k|  gboolean is_zero;
  234|       |
  235|  59.9k|  g_return_if_fail (channel != NULL);
  ------------------
  |  |  639|  59.9k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  59.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  59.9k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  59.9k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  59.9k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  59.9k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  59.9k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  59.9k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 59.9k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  59.9k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  59.9k|   else                                         \
  |  |  |  |  |  | 1183|  59.9k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  59.9k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  59.9k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 59.9k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  59.9k|      { } \
  |  |  642|  59.9k|    else \
  |  |  643|  59.9k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  59.9k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  59.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 59.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  236|       |
  237|  59.9k|  is_zero = g_atomic_int_dec_and_test (&channel->ref_count);
  ------------------
  |  |  168|  59.9k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|  59.9k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  169|  59.9k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|  59.9k|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  170|  59.9k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (170:13): [Folded, False: 59.9k]
  |  |  ------------------
  |  |  171|  59.9k|    __atomic_fetch_sub ((atomic), 1, __ATOMIC_SEQ_CST) == 1;                 \
  |  |  172|  59.9k|  }))
  ------------------
  238|       |
  239|  59.9k|  if (G_UNLIKELY (is_zero))
  ------------------
  |  | 1187|  59.9k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  59.9k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  59.9k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  59.9k|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  59.9k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 59.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|  59.9k|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  59.9k|   else                                         \
  |  |  |  | 1183|  59.9k|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  59.9k|   _g_boolean_var_;                             \
  |  |  |  | 1185|  59.9k|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 59.9k, False: 0]
  |  |  ------------------
  ------------------
  240|  59.9k|    {
  241|  59.9k|      if (channel->close_on_unref)
  ------------------
  |  Branch (241:11): [True: 30.7k, False: 29.1k]
  ------------------
  242|  30.7k|        g_io_channel_shutdown (channel, TRUE, NULL);
  ------------------
  |  |  884|  30.7k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  30.7k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  243|  29.1k|      else
  244|  29.1k|        g_io_channel_purge (channel);
  245|  59.9k|      g_free (channel->encoding);
  246|  59.9k|      if (channel->read_cd != (GIConv) -1)
  ------------------
  |  Branch (246:11): [True: 0, False: 59.9k]
  ------------------
  247|      0|        g_iconv_close (channel->read_cd);
  248|  59.9k|      if (channel->write_cd != (GIConv) -1)
  ------------------
  |  Branch (248:11): [True: 0, False: 59.9k]
  ------------------
  249|      0|        g_iconv_close (channel->write_cd);
  250|  59.9k|      g_free (channel->line_term);
  251|  59.9k|      if (channel->read_buf)
  ------------------
  |  Branch (251:11): [True: 1.79k, False: 58.1k]
  ------------------
  252|  1.79k|        g_string_free (channel->read_buf, TRUE);
  ------------------
  |  |  884|  1.79k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  1.79k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  253|  59.9k|      if (channel->write_buf)
  ------------------
  |  Branch (253:11): [True: 6.61k, False: 53.3k]
  ------------------
  254|  6.61k|        g_string_free (channel->write_buf, TRUE);
  ------------------
  |  |  884|  6.61k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  6.61k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  255|  59.9k|      if (channel->encoded_read_buf)
  ------------------
  |  Branch (255:11): [True: 0, False: 59.9k]
  ------------------
  256|      0|        g_string_free (channel->encoded_read_buf, TRUE);
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  257|  59.9k|      channel->funcs->io_free (channel);
  258|  59.9k|    }
  259|  59.9k|}
g_io_channel_shutdown:
  489|  59.9k|{
  490|  59.9k|  GIOStatus status, result;
  491|  59.9k|  GError *tmperr = NULL;
  492|       |  
  493|  59.9k|  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  59.9k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  59.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  59.9k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  59.9k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  59.9k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  59.9k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  59.9k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  59.9k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 59.9k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  59.9k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  59.9k|   else                                         \
  |  |  |  |  |  | 1183|  59.9k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  59.9k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  59.9k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 59.9k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  59.9k|      { } \
  |  |  655|  59.9k|    else \
  |  |  656|  59.9k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  59.9k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  59.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 59.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  494|  59.9k|  g_return_val_if_fail (err == NULL || *err == NULL, G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  59.9k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  59.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  59.9k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  59.9k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  59.9k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  59.9k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  59.9k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   119k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 59.9k, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  59.9k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  59.9k|   else                                         \
  |  |  |  |  |  | 1183|  59.9k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  59.9k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  59.9k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 59.9k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  59.9k|      { } \
  |  |  655|  59.9k|    else \
  |  |  656|  59.9k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  59.9k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  59.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 59.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  495|       |
  496|  59.9k|  if (channel->write_buf && channel->write_buf->len > 0)
  ------------------
  |  Branch (496:7): [True: 6.61k, False: 53.3k]
  |  Branch (496:29): [True: 6.61k, False: 0]
  ------------------
  497|  6.61k|    {
  498|  6.61k|      if (flush)
  ------------------
  |  Branch (498:11): [True: 6.61k, False: 0]
  ------------------
  499|  6.61k|        {
  500|  6.61k|          GIOFlags flags;
  501|       |      
  502|       |          /* Set the channel to blocking, to avoid a busy loop
  503|       |           */
  504|  6.61k|          flags = g_io_channel_get_flags (channel);
  505|       |          /* Ignore any errors here, they're irrelevant */
  506|  6.61k|          g_io_channel_set_flags (channel, flags & ~G_IO_FLAG_NONBLOCK, NULL);
  507|       |
  508|  6.61k|          result = g_io_channel_flush (channel, &tmperr);
  509|  6.61k|        }
  510|      0|      else
  511|      0|        result = G_IO_STATUS_NORMAL;
  512|       |
  513|  6.61k|      g_string_truncate(channel->write_buf, 0);
  514|  6.61k|    }
  515|  53.3k|  else
  516|  53.3k|    result = G_IO_STATUS_NORMAL;
  517|       |
  518|  59.9k|  if (channel->partial_write_buf[0] != '\0')
  ------------------
  |  Branch (518:7): [True: 0, False: 59.9k]
  ------------------
  519|      0|    {
  520|      0|      if (flush)
  ------------------
  |  Branch (520:11): [True: 0, False: 0]
  ------------------
  521|      0|        g_warning ("Partial character at end of write buffer not flushed.");
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  522|      0|      channel->partial_write_buf[0] = '\0';
  523|      0|    }
  524|       |
  525|  59.9k|  status = channel->funcs->io_close (channel, err);
  526|       |
  527|  59.9k|  channel->close_on_unref = FALSE; /* Because we already did */
  ------------------
  |  |  880|  59.9k|#define	FALSE	(0)
  ------------------
  528|  59.9k|  channel->is_readable = FALSE;
  ------------------
  |  |  880|  59.9k|#define	FALSE	(0)
  ------------------
  529|  59.9k|  channel->is_writeable = FALSE;
  ------------------
  |  |  880|  59.9k|#define	FALSE	(0)
  ------------------
  530|  59.9k|  channel->is_seekable = FALSE;
  ------------------
  |  |  880|  59.9k|#define	FALSE	(0)
  ------------------
  531|       |
  532|  59.9k|  if (status != G_IO_STATUS_NORMAL)
  ------------------
  |  Branch (532:7): [True: 28.9k, False: 30.9k]
  ------------------
  533|  28.9k|    {
  534|  28.9k|      g_clear_error (&tmperr);
  535|  28.9k|      return status;
  536|  28.9k|    }
  537|  30.9k|  else if (result != G_IO_STATUS_NORMAL)
  ------------------
  |  Branch (537:12): [True: 0, False: 30.9k]
  ------------------
  538|      0|    {
  539|      0|      g_propagate_error (err, tmperr);
  540|      0|      return result;
  541|      0|    }
  542|  30.9k|  else
  543|  30.9k|    return G_IO_STATUS_NORMAL;
  544|  59.9k|}
g_io_create_watch:
  617|    251|{
  618|    251|  g_return_val_if_fail (channel != NULL, NULL);
  ------------------
  |  |  652|    251|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    251|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    251|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    251|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    251| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    251|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    251|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    251|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 251, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    251|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    251|   else                                         \
  |  |  |  |  |  | 1183|    251|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    251|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    251|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 251, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    251|      { } \
  |  |  655|    251|    else \
  |  |  656|    251|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    251|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    251|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 251]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  619|       |
  620|    251|  return channel->funcs->io_create_watch (channel, condition);
  621|    251|}
g_io_add_watch_full:
  648|    251|{
  649|    251|  GSource *source;
  650|    251|  guint id;
  651|       |  
  652|    251|  g_return_val_if_fail (channel != NULL, 0);
  ------------------
  |  |  652|    251|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    251|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    251|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    251|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    251| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    251|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    251|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    251|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 251, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    251|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    251|   else                                         \
  |  |  |  |  |  | 1183|    251|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    251|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    251|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 251, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    251|      { } \
  |  |  655|    251|    else \
  |  |  656|    251|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    251|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    251|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 251]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  653|       |
  654|    251|  source = g_io_create_watch (channel, condition);
  655|       |
  656|    251|  if (priority != G_PRIORITY_DEFAULT)
  ------------------
  |  |  340|    251|#define G_PRIORITY_DEFAULT          0
  ------------------
  |  Branch (656:7): [True: 0, False: 251]
  ------------------
  657|      0|    g_source_set_priority (source, priority);
  658|    251|  g_source_set_callback (source, (GSourceFunc)func, user_data, notify);
  659|       |
  660|    251|  id = g_source_attach (source, NULL);
  661|    251|  g_source_unref (source);
  662|       |
  663|    251|  return id;
  664|    251|}
g_io_channel_error_from_errno:
  756|  42.1k|{
  757|  42.1k|#ifdef EAGAIN
  758|  42.1k|  g_return_val_if_fail (en != EAGAIN, G_IO_CHANNEL_ERROR_FAILED);
  ------------------
  |  |  652|  42.1k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  42.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  42.1k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  42.1k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  42.1k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  42.1k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  42.1k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  42.1k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 42.1k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  42.1k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  42.1k|   else                                         \
  |  |  |  |  |  | 1183|  42.1k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  42.1k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  42.1k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 42.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  42.1k|      { } \
  |  |  655|  42.1k|    else \
  |  |  656|  42.1k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  42.1k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  42.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 42.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  759|  42.1k|#endif
  760|       |
  761|  42.1k|  switch (en)
  762|  42.1k|    {
  763|      0|#ifdef EBADF
  764|  42.1k|    case EBADF:
  ------------------
  |  Branch (764:5): [True: 42.1k, False: 0]
  ------------------
  765|  42.1k|      g_warning ("Invalid file descriptor.");
  ------------------
  |  |  354|  42.1k|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|  42.1k|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|  42.1k|                               __VA_ARGS__)
  ------------------
  766|  42.1k|      return G_IO_CHANNEL_ERROR_FAILED;
  767|      0|#endif
  768|       |
  769|      0|#ifdef EFAULT
  770|      0|    case EFAULT:
  ------------------
  |  Branch (770:5): [True: 0, False: 42.1k]
  ------------------
  771|      0|      g_warning ("Buffer outside valid address space.");
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  772|      0|      return G_IO_CHANNEL_ERROR_FAILED;
  773|      0|#endif
  774|       |
  775|      0|#ifdef EFBIG
  776|      0|    case EFBIG:
  ------------------
  |  Branch (776:5): [True: 0, False: 42.1k]
  ------------------
  777|      0|      return G_IO_CHANNEL_ERROR_FBIG;
  778|      0|#endif
  779|       |
  780|      0|#ifdef EINTR
  781|       |    /* In general, we should catch EINTR before we get here,
  782|       |     * but close() is allowed to return EINTR by POSIX, so
  783|       |     * we need to catch it here; EINTR from close() is
  784|       |     * unrecoverable, because it's undefined whether
  785|       |     * the fd was actually closed or not, so we just return
  786|       |     * a generic error code.
  787|       |     */
  788|      0|    case EINTR:
  ------------------
  |  Branch (788:5): [True: 0, False: 42.1k]
  ------------------
  789|      0|      return G_IO_CHANNEL_ERROR_FAILED;
  790|      0|#endif
  791|       |
  792|      0|#ifdef EINVAL
  793|      0|    case EINVAL:
  ------------------
  |  Branch (793:5): [True: 0, False: 42.1k]
  ------------------
  794|      0|      return G_IO_CHANNEL_ERROR_INVAL;
  795|      0|#endif
  796|       |
  797|      0|#ifdef EIO
  798|      0|    case EIO:
  ------------------
  |  Branch (798:5): [True: 0, False: 42.1k]
  ------------------
  799|      0|      return G_IO_CHANNEL_ERROR_IO;
  800|      0|#endif
  801|       |
  802|      0|#ifdef EISDIR
  803|      0|    case EISDIR:
  ------------------
  |  Branch (803:5): [True: 0, False: 42.1k]
  ------------------
  804|      0|      return G_IO_CHANNEL_ERROR_ISDIR;
  805|      0|#endif
  806|       |
  807|      0|#ifdef ENOSPC
  808|      0|    case ENOSPC:
  ------------------
  |  Branch (808:5): [True: 0, False: 42.1k]
  ------------------
  809|      0|      return G_IO_CHANNEL_ERROR_NOSPC;
  810|      0|#endif
  811|       |
  812|      0|#ifdef ENXIO
  813|      0|    case ENXIO:
  ------------------
  |  Branch (813:5): [True: 0, False: 42.1k]
  ------------------
  814|      0|      return G_IO_CHANNEL_ERROR_NXIO;
  815|      0|#endif
  816|       |
  817|      0|#ifdef EOVERFLOW
  818|      0|#if EOVERFLOW != EFBIG
  819|      0|    case EOVERFLOW:
  ------------------
  |  Branch (819:5): [True: 0, False: 42.1k]
  ------------------
  820|      0|      return G_IO_CHANNEL_ERROR_OVERFLOW;
  821|      0|#endif
  822|      0|#endif
  823|       |
  824|      0|#ifdef EPIPE
  825|      0|    case EPIPE:
  ------------------
  |  Branch (825:5): [True: 0, False: 42.1k]
  ------------------
  826|      0|      return G_IO_CHANNEL_ERROR_PIPE;
  827|      0|#endif
  828|       |
  829|      0|    default:
  ------------------
  |  Branch (829:5): [True: 0, False: 42.1k]
  ------------------
  830|      0|      return G_IO_CHANNEL_ERROR_FAILED;
  831|  42.1k|    }
  832|  42.1k|}
g_io_channel_set_flags:
  979|  6.61k|{
  980|  6.61k|  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  6.61k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  6.61k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  6.61k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  6.61k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  6.61k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  6.61k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  6.61k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  6.61k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6.61k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  6.61k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  6.61k|   else                                         \
  |  |  |  |  |  | 1183|  6.61k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  6.61k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  6.61k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6.61k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  6.61k|      { } \
  |  |  655|  6.61k|    else \
  |  |  656|  6.61k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  6.61k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  6.61k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6.61k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  981|  6.61k|  g_return_val_if_fail ((error == NULL) || (*error == NULL),
  ------------------
  |  |  652|  6.61k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  6.61k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  6.61k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  6.61k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  6.61k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  6.61k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  6.61k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  13.2k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6.61k, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  6.61k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  6.61k|   else                                         \
  |  |  |  |  |  | 1183|  6.61k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  6.61k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  6.61k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6.61k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  6.61k|      { } \
  |  |  655|  6.61k|    else \
  |  |  656|  6.61k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  6.61k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  6.61k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6.61k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  982|  6.61k|			G_IO_STATUS_ERROR);
  983|       |
  984|  6.61k|  return (*channel->funcs->io_set_flags) (channel,
  985|  6.61k|					  flags & G_IO_FLAG_SET_MASK,
  986|  6.61k|					  error);
  987|  6.61k|}
g_io_channel_get_flags:
 1007|  6.61k|{
 1008|  6.61k|  GIOFlags flags;
 1009|       |
 1010|  6.61k|  g_return_val_if_fail (channel != NULL, 0);
  ------------------
  |  |  652|  6.61k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  6.61k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  6.61k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  6.61k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  6.61k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  6.61k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  6.61k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  6.61k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6.61k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  6.61k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  6.61k|   else                                         \
  |  |  |  |  |  | 1183|  6.61k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  6.61k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  6.61k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6.61k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  6.61k|      { } \
  |  |  655|  6.61k|    else \
  |  |  656|  6.61k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  6.61k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  6.61k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6.61k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1011|       |
 1012|  6.61k|  flags = (* channel->funcs->io_get_flags) (channel);
 1013|       |
 1014|       |  /* Cross implementation code */
 1015|       |
 1016|  6.61k|  if (channel->is_seekable)
  ------------------
  |  Branch (1016:7): [True: 6.61k, False: 0]
  ------------------
 1017|  6.61k|    flags |= G_IO_FLAG_IS_SEEKABLE;
 1018|  6.61k|  if (channel->is_readable)
  ------------------
  |  Branch (1018:7): [True: 6.61k, False: 0]
  ------------------
 1019|  6.61k|    flags |= G_IO_FLAG_IS_READABLE;
 1020|  6.61k|  if (channel->is_writeable)
  ------------------
  |  Branch (1020:7): [True: 6.61k, False: 0]
  ------------------
 1021|  6.61k|    flags |= G_IO_FLAG_IS_WRITABLE;
 1022|       |
 1023|  6.61k|  return flags;
 1024|  6.61k|}
g_io_channel_set_close_on_unref:
 1042|  29.4k|{
 1043|  29.4k|  g_return_if_fail (channel != NULL);
  ------------------
  |  |  639|  29.4k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  29.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  29.4k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  29.4k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  29.4k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  29.4k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  29.4k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  29.4k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  29.4k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  29.4k|   else                                         \
  |  |  |  |  |  | 1183|  29.4k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  29.4k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  29.4k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 29.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  29.4k|      { } \
  |  |  642|  29.4k|    else \
  |  |  643|  29.4k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  29.4k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  29.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 29.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1044|       |
 1045|  29.4k|  channel->close_on_unref = do_close;
 1046|  29.4k|}
g_io_channel_seek_position:
 1095|  1.79k|{
 1096|  1.79k|  GIOStatus status;
 1097|       |
 1098|       |  /* For files, only one of the read and write buffers can contain data.
 1099|       |   * For sockets, both can contain data.
 1100|       |   */
 1101|       |
 1102|  1.79k|  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  1.79k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.79k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  1.79k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.79k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.79k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.79k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.79k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.79k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.79k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.79k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.79k|   else                                         \
  |  |  |  |  |  | 1183|  1.79k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.79k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.79k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.79k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  1.79k|      { } \
  |  |  655|  1.79k|    else \
  |  |  656|  1.79k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  1.79k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.79k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1103|  1.79k|  g_return_val_if_fail ((error == NULL) || (*error == NULL),
  ------------------
  |  |  652|  1.79k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.79k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  1.79k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.79k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.79k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.79k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.79k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  3.59k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.79k, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.79k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.79k|   else                                         \
  |  |  |  |  |  | 1183|  1.79k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.79k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.79k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.79k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  1.79k|      { } \
  |  |  655|  1.79k|    else \
  |  |  656|  1.79k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  1.79k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.79k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1104|  1.79k|			G_IO_STATUS_ERROR);
 1105|  1.79k|  g_return_val_if_fail (channel->is_seekable, G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  1.79k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.79k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  1.79k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.79k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.79k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.79k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.79k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.79k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.79k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.79k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.79k|   else                                         \
  |  |  |  |  |  | 1183|  1.79k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.79k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.79k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.79k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  1.79k|      { } \
  |  |  655|  1.79k|    else \
  |  |  656|  1.79k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  1.79k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.79k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1106|       |
 1107|  1.79k|  switch (type)
 1108|  1.79k|    {
 1109|      0|      case G_SEEK_CUR: /* The user is seeking relative to the head of the buffer */
  ------------------
  |  Branch (1109:7): [True: 0, False: 1.79k]
  ------------------
 1110|      0|        if (channel->use_buffer)
  ------------------
  |  Branch (1110:13): [True: 0, False: 0]
  ------------------
 1111|      0|          {
 1112|      0|            if (channel->do_encode && channel->encoded_read_buf
  ------------------
  |  Branch (1112:17): [True: 0, False: 0]
  |  Branch (1112:39): [True: 0, False: 0]
  ------------------
 1113|      0|                && channel->encoded_read_buf->len > 0)
  ------------------
  |  Branch (1113:20): [True: 0, False: 0]
  ------------------
 1114|      0|              {
 1115|      0|                g_warning ("Seek type G_SEEK_CUR not allowed for this"
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 1116|      0|                  " channel's encoding.");
 1117|      0|                return G_IO_STATUS_ERROR;
 1118|      0|              }
 1119|      0|          if (channel->read_buf)
  ------------------
  |  Branch (1119:15): [True: 0, False: 0]
  ------------------
 1120|      0|            offset -= channel->read_buf->len;
 1121|      0|          if (channel->encoded_read_buf)
  ------------------
  |  Branch (1121:15): [True: 0, False: 0]
  ------------------
 1122|      0|            {
 1123|      0|              g_assert (channel->encoded_read_buf->len == 0 || !channel->do_encode);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1124|       |
 1125|       |              /* If there's anything here, it's because the encoding is UTF-8,
 1126|       |               * so we can just subtract the buffer length, the same as for
 1127|       |               * the unencoded data.
 1128|       |               */
 1129|       |
 1130|      0|              offset -= channel->encoded_read_buf->len;
 1131|      0|            }
 1132|      0|          }
 1133|      0|        break;
 1134|  1.79k|      case G_SEEK_SET:
  ------------------
  |  Branch (1134:7): [True: 1.79k, False: 0]
  ------------------
 1135|  1.79k|      case G_SEEK_END:
  ------------------
  |  Branch (1135:7): [True: 0, False: 1.79k]
  ------------------
 1136|  1.79k|        break;
 1137|      0|      default:
  ------------------
  |  Branch (1137:7): [True: 0, False: 1.79k]
  ------------------
 1138|      0|        g_warning ("g_io_channel_seek_position: unknown seek type");
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 1139|      0|        return G_IO_STATUS_ERROR;
 1140|  1.79k|    }
 1141|       |
 1142|  1.79k|  if (channel->use_buffer)
  ------------------
  |  Branch (1142:7): [True: 1.79k, False: 0]
  ------------------
 1143|  1.79k|    {
 1144|  1.79k|      status = g_io_channel_flush (channel, error);
 1145|  1.79k|      if (status != G_IO_STATUS_NORMAL)
  ------------------
  |  Branch (1145:11): [True: 0, False: 1.79k]
  ------------------
 1146|      0|        return status;
 1147|  1.79k|    }
 1148|       |
 1149|  1.79k|  status = channel->funcs->io_seek (channel, offset, type, error);
 1150|       |
 1151|  1.79k|  if ((status == G_IO_STATUS_NORMAL) && (channel->use_buffer))
  ------------------
  |  Branch (1151:7): [True: 1.79k, False: 0]
  |  Branch (1151:41): [True: 1.79k, False: 0]
  ------------------
 1152|  1.79k|    {
 1153|  1.79k|      if (channel->read_buf)
  ------------------
  |  Branch (1153:11): [True: 0, False: 1.79k]
  ------------------
 1154|      0|        g_string_truncate (channel->read_buf, 0);
 1155|       |
 1156|       |      /* Conversion state no longer matches position in file */
 1157|  1.79k|      if (channel->read_cd != (GIConv) -1)
  ------------------
  |  Branch (1157:11): [True: 0, False: 1.79k]
  ------------------
 1158|      0|        g_iconv (channel->read_cd, NULL, NULL, NULL, NULL);
 1159|  1.79k|      if (channel->write_cd != (GIConv) -1)
  ------------------
  |  Branch (1159:11): [True: 0, False: 1.79k]
  ------------------
 1160|      0|        g_iconv (channel->write_cd, NULL, NULL, NULL, NULL);
 1161|       |
 1162|  1.79k|      if (channel->encoded_read_buf)
  ------------------
  |  Branch (1162:11): [True: 0, False: 1.79k]
  ------------------
 1163|      0|        {
 1164|      0|          g_assert (channel->encoded_read_buf->len == 0 || !channel->do_encode);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1165|      0|          g_string_truncate (channel->encoded_read_buf, 0);
 1166|      0|        }
 1167|       |
 1168|  1.79k|      if (channel->partial_write_buf[0] != '\0')
  ------------------
  |  Branch (1168:11): [True: 0, False: 1.79k]
  ------------------
 1169|      0|        {
 1170|      0|          g_warning ("Partial character at end of write buffer not flushed.");
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 1171|      0|          channel->partial_write_buf[0] = '\0';
 1172|      0|        }
 1173|  1.79k|    }
 1174|       |
 1175|  1.79k|  return status;
 1176|  1.79k|}
g_io_channel_flush:
 1192|  8.41k|{
 1193|  8.41k|  GIOStatus status;
 1194|  8.41k|  gsize this_time = 1, bytes_written = 0;
 1195|       |
 1196|  8.41k|  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  8.41k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  8.41k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  8.41k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  8.41k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  8.41k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  8.41k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  8.41k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  8.41k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 8.41k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  8.41k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  8.41k|   else                                         \
  |  |  |  |  |  | 1183|  8.41k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  8.41k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  8.41k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 8.41k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  8.41k|      { } \
  |  |  655|  8.41k|    else \
  |  |  656|  8.41k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  8.41k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  8.41k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 8.41k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1197|  8.41k|  g_return_val_if_fail ((error == NULL) || (*error == NULL), G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  8.41k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  8.41k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  8.41k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  8.41k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  8.41k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  8.41k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  8.41k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  23.4k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.79k, False: 6.61k]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6.61k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  8.41k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  8.41k|   else                                         \
  |  |  |  |  |  | 1183|  8.41k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  8.41k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  8.41k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 8.41k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  8.41k|      { } \
  |  |  655|  8.41k|    else \
  |  |  656|  8.41k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  8.41k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  8.41k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 8.41k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1198|       |
 1199|  8.41k|  if (channel->write_buf == NULL || channel->write_buf->len == 0)
  ------------------
  |  Branch (1199:7): [True: 1.79k, False: 6.61k]
  |  Branch (1199:37): [True: 0, False: 6.61k]
  ------------------
 1200|  1.79k|    return G_IO_STATUS_NORMAL;
 1201|       |
 1202|  6.61k|  do
 1203|  6.61k|    {
 1204|  6.61k|      g_assert (this_time > 0);
  ------------------
  |  |  234|  6.61k|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  6.61k|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  6.61k|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  6.61k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  6.61k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  6.61k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  6.61k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  6.61k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6.61k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  6.61k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  6.61k|   else                                         \
  |  |  |  |  |  | 1183|  6.61k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  6.61k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  6.61k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 6.61k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  6.61k|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  6.61k|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  6.61k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6.61k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1205|       |
 1206|  6.61k|      status = channel->funcs->io_write (channel,
 1207|  6.61k|					 channel->write_buf->str + bytes_written,
 1208|  6.61k|					 channel->write_buf->len - bytes_written,
 1209|  6.61k|					 &this_time, error);
 1210|  6.61k|      bytes_written += this_time;
 1211|  6.61k|    }
 1212|  6.61k|  while ((bytes_written < channel->write_buf->len)
  ------------------
  |  Branch (1212:10): [True: 6.58k, False: 32]
  ------------------
 1213|  6.58k|         && (status == G_IO_STATUS_NORMAL));
  ------------------
  |  Branch (1213:13): [True: 0, False: 6.58k]
  ------------------
 1214|       |
 1215|  6.61k|  g_string_erase (channel->write_buf, 0, bytes_written);
 1216|       |
 1217|  6.61k|  return status;
 1218|  6.61k|}
g_io_channel_set_encoding:
 1327|  31.2k|{
 1328|  31.2k|  GIConv read_cd, write_cd;
 1329|  31.2k|#ifndef G_DISABLE_ASSERT
 1330|  31.2k|  gboolean did_encode;
 1331|  31.2k|#endif
 1332|       |
 1333|  31.2k|  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  31.2k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  31.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  31.2k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  31.2k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  31.2k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  31.2k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  31.2k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  31.2k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 31.2k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  31.2k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  31.2k|   else                                         \
  |  |  |  |  |  | 1183|  31.2k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  31.2k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  31.2k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 31.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  31.2k|      { } \
  |  |  655|  31.2k|    else \
  |  |  656|  31.2k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  31.2k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  31.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 31.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1334|  31.2k|  g_return_val_if_fail ((error == NULL) || (*error == NULL), G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  31.2k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  31.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  31.2k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  31.2k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  31.2k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  31.2k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  31.2k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  62.4k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 31.2k, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  31.2k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  31.2k|   else                                         \
  |  |  |  |  |  | 1183|  31.2k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  31.2k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  31.2k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 31.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  31.2k|      { } \
  |  |  655|  31.2k|    else \
  |  |  656|  31.2k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  31.2k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  31.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 31.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1335|       |
 1336|       |  /* Make sure the encoded buffers are empty */
 1337|       |
 1338|  31.2k|  g_return_val_if_fail (!channel->do_encode || !channel->encoded_read_buf ||
  ------------------
  |  |  652|  31.2k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  31.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  31.2k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  31.2k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  31.2k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  31.2k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  31.2k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  93.6k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 31.2k, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  31.2k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  31.2k|   else                                         \
  |  |  |  |  |  | 1183|  31.2k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  31.2k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  31.2k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 31.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  31.2k|      { } \
  |  |  655|  31.2k|    else \
  |  |  656|  31.2k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  31.2k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  31.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 31.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1339|  31.2k|			channel->encoded_read_buf->len == 0, G_IO_STATUS_ERROR);
 1340|       |
 1341|  31.2k|  if (!channel->use_buffer)
  ------------------
  |  Branch (1341:7): [True: 0, False: 31.2k]
  ------------------
 1342|      0|    {
 1343|      0|      g_warning ("Need to set the channel buffered before setting the encoding.");
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 1344|      0|      g_warning ("Assuming this is what you meant and acting accordingly.");
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 1345|       |
 1346|      0|      channel->use_buffer = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1347|      0|    }
 1348|       |
 1349|  31.2k|  if (channel->partial_write_buf[0] != '\0')
  ------------------
  |  Branch (1349:7): [True: 0, False: 31.2k]
  ------------------
 1350|      0|    {
 1351|      0|      g_warning ("Partial character at end of write buffer not flushed.");
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 1352|      0|      channel->partial_write_buf[0] = '\0';
 1353|      0|    }
 1354|       |
 1355|  31.2k|#ifndef G_DISABLE_ASSERT
 1356|  31.2k|  did_encode = channel->do_encode;
 1357|  31.2k|#endif
 1358|       |
 1359|  31.2k|  if (!encoding || strcmp (encoding, "UTF8") == 0 || strcmp (encoding, "UTF-8") == 0)
  ------------------
  |  Branch (1359:7): [True: 31.2k, False: 0]
  |  Branch (1359:20): [True: 0, False: 0]
  |  Branch (1359:54): [True: 0, False: 0]
  ------------------
 1360|  31.2k|    {
 1361|  31.2k|      channel->do_encode = FALSE;
  ------------------
  |  |  880|  31.2k|#define	FALSE	(0)
  ------------------
 1362|  31.2k|      read_cd = write_cd = (GIConv) -1;
 1363|  31.2k|    }
 1364|      0|  else
 1365|      0|    {
 1366|      0|      gint err = 0;
 1367|      0|      const gchar *from_enc = NULL, *to_enc = NULL;
 1368|       |
 1369|      0|      if (channel->is_readable)
  ------------------
  |  Branch (1369:11): [True: 0, False: 0]
  ------------------
 1370|      0|        {
 1371|      0|          read_cd = g_iconv_open ("UTF-8", encoding);
 1372|       |
 1373|      0|          if (read_cd == (GIConv) -1)
  ------------------
  |  Branch (1373:15): [True: 0, False: 0]
  ------------------
 1374|      0|            {
 1375|      0|              err = errno;
 1376|      0|              from_enc = encoding;
 1377|      0|              to_enc = "UTF-8";
 1378|      0|            }
 1379|      0|        }
 1380|      0|      else
 1381|      0|        read_cd = (GIConv) -1;
 1382|       |
 1383|      0|      if (channel->is_writeable && err == 0)
  ------------------
  |  Branch (1383:11): [True: 0, False: 0]
  |  Branch (1383:36): [True: 0, False: 0]
  ------------------
 1384|      0|        {
 1385|      0|          write_cd = g_iconv_open (encoding, "UTF-8");
 1386|       |
 1387|      0|          if (write_cd == (GIConv) -1)
  ------------------
  |  Branch (1387:15): [True: 0, False: 0]
  ------------------
 1388|      0|            {
 1389|      0|              err = errno;
 1390|      0|              from_enc = "UTF-8";
 1391|      0|              to_enc = encoding;
 1392|      0|            }
 1393|      0|        }
 1394|      0|      else
 1395|      0|        write_cd = (GIConv) -1;
 1396|       |
 1397|      0|      if (err != 0)
  ------------------
  |  Branch (1397:11): [True: 0, False: 0]
  ------------------
 1398|      0|        {
 1399|      0|          g_assert (from_enc);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1400|      0|          g_assert (to_enc);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1401|       |
 1402|      0|          if (err == EINVAL)
  ------------------
  |  Branch (1402:15): [True: 0, False: 0]
  ------------------
 1403|      0|            g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_NO_CONVERSION,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
 1404|      0|                         _("Conversion from character set “%s” to “%s” is not supported"),
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
 1405|      0|                         from_enc, to_enc);
 1406|      0|          else
 1407|      0|            g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
 1408|      0|                         _("Could not open converter from “%s” to “%s”: %s"),
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
 1409|      0|                         from_enc, to_enc, g_strerror (err));
 1410|       |
 1411|      0|          if (read_cd != (GIConv) -1)
  ------------------
  |  Branch (1411:15): [True: 0, False: 0]
  ------------------
 1412|      0|            g_iconv_close (read_cd);
 1413|      0|          if (write_cd != (GIConv) -1)
  ------------------
  |  Branch (1413:15): [True: 0, False: 0]
  ------------------
 1414|      0|            g_iconv_close (write_cd);
 1415|       |
 1416|      0|          return G_IO_STATUS_ERROR;
 1417|      0|        }
 1418|       |
 1419|      0|      channel->do_encode = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1420|      0|    }
 1421|       |
 1422|       |  /* The encoding is ok, so set the fields in channel */
 1423|       |
 1424|  31.2k|  if (channel->read_cd != (GIConv) -1)
  ------------------
  |  Branch (1424:7): [True: 0, False: 31.2k]
  ------------------
 1425|      0|    g_iconv_close (channel->read_cd);
 1426|  31.2k|  if (channel->write_cd != (GIConv) -1)
  ------------------
  |  Branch (1426:7): [True: 0, False: 31.2k]
  ------------------
 1427|      0|    g_iconv_close (channel->write_cd);
 1428|       |
 1429|  31.2k|  if (channel->encoded_read_buf && channel->encoded_read_buf->len > 0)
  ------------------
  |  Branch (1429:7): [True: 0, False: 31.2k]
  |  Branch (1429:36): [True: 0, False: 0]
  ------------------
 1430|      0|    {
 1431|      0|      g_assert (!did_encode); /* Encoding UTF-8, NULL doesn't use encoded_read_buf */
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1432|       |
 1433|       |      /* This is just validated UTF-8, so we can copy it back into read_buf
 1434|       |       * so it can be encoded in whatever the new encoding is.
 1435|       |       */
 1436|       |
 1437|      0|      g_string_prepend_len (channel->read_buf, channel->encoded_read_buf->str,
 1438|      0|                            channel->encoded_read_buf->len);
 1439|      0|      g_string_truncate (channel->encoded_read_buf, 0);
 1440|      0|    }
 1441|       |
 1442|  31.2k|  channel->read_cd = read_cd;
 1443|  31.2k|  channel->write_cd = write_cd;
 1444|       |
 1445|  31.2k|  g_free (channel->encoding);
 1446|  31.2k|  channel->encoding = g_strdup (encoding);
 1447|       |
 1448|  31.2k|  return G_IO_STATUS_NORMAL;
 1449|  31.2k|}
g_io_channel_read_line_string:
 1721|  74.1k|{
 1722|  74.1k|  gsize length;
 1723|  74.1k|  GIOStatus status;
 1724|       |
 1725|  74.1k|  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  74.1k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  74.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  74.1k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  74.1k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  74.1k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  74.1k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  74.1k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  74.1k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 74.1k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  74.1k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  74.1k|   else                                         \
  |  |  |  |  |  | 1183|  74.1k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  74.1k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  74.1k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 74.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  74.1k|      { } \
  |  |  655|  74.1k|    else \
  |  |  656|  74.1k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  74.1k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  74.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 74.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1726|  74.1k|  g_return_val_if_fail (buffer != NULL, G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  74.1k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  74.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  74.1k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  74.1k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  74.1k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  74.1k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  74.1k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  74.1k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 74.1k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  74.1k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  74.1k|   else                                         \
  |  |  |  |  |  | 1183|  74.1k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  74.1k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  74.1k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 74.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  74.1k|      { } \
  |  |  655|  74.1k|    else \
  |  |  656|  74.1k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  74.1k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  74.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 74.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1727|  74.1k|  g_return_val_if_fail ((error == NULL) || (*error == NULL),
  ------------------
  |  |  652|  74.1k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  74.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  74.1k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  74.1k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  74.1k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  74.1k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  74.1k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   148k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 74.1k, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  74.1k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  74.1k|   else                                         \
  |  |  |  |  |  | 1183|  74.1k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  74.1k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  74.1k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 74.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  74.1k|      { } \
  |  |  655|  74.1k|    else \
  |  |  656|  74.1k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  74.1k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  74.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 74.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1728|  74.1k|			G_IO_STATUS_ERROR);
 1729|  74.1k|  g_return_val_if_fail (channel->is_readable, G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  74.1k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  74.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  74.1k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  74.1k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  74.1k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  74.1k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  74.1k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  74.1k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 74.1k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  74.1k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  74.1k|   else                                         \
  |  |  |  |  |  | 1183|  74.1k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  74.1k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  74.1k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 74.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  74.1k|      { } \
  |  |  655|  74.1k|    else \
  |  |  656|  74.1k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  74.1k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  74.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 74.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1730|       |
 1731|  74.1k|  if (buffer->len > 0)
  ------------------
  |  Branch (1731:7): [True: 72.3k, False: 1.79k]
  ------------------
 1732|  72.3k|    g_string_truncate (buffer, 0); /* clear out the buffer */
 1733|       |
 1734|  74.1k|  status = g_io_channel_read_line_backend (channel, &length, terminator_pos, error);
 1735|       |
 1736|  74.1k|  if (status == G_IO_STATUS_NORMAL)
  ------------------
  |  Branch (1736:7): [True: 72.3k, False: 1.79k]
  ------------------
 1737|  72.3k|    {
 1738|  72.3k|      g_assert (USE_BUF (channel));
  ------------------
  |  |  234|  72.3k|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  72.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  72.3k|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  72.3k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  72.3k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  72.3k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  72.3k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   217k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 72.3k]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 72.3k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  72.3k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  72.3k|   else                                         \
  |  |  |  |  |  | 1183|  72.3k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  72.3k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  72.3k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 72.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  72.3k|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  72.3k|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  72.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 72.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1739|  72.3k|      g_string_append_len (buffer, USE_BUF (channel)->str, length);
  ------------------
  |  |  163|  72.3k|#define USE_BUF(channel)	((channel)->encoding ? (channel)->encoded_read_buf \
  |  |  ------------------
  |  |  |  Branch (163:27): [True: 0, False: 72.3k]
  |  |  ------------------
  |  |  164|  72.3k|				 : (channel)->read_buf)
  ------------------
 1740|  72.3k|      g_string_erase (USE_BUF (channel), 0, length);
  ------------------
  |  |  163|  72.3k|#define USE_BUF(channel)	((channel)->encoding ? (channel)->encoded_read_buf \
  |  |  ------------------
  |  |  |  Branch (163:27): [True: 0, False: 72.3k]
  |  |  ------------------
  |  |  164|  72.3k|				 : (channel)->read_buf)
  ------------------
 1741|  72.3k|    }
 1742|       |
 1743|  74.1k|  return status;
 1744|  74.1k|}
g_io_channel_write_chars:
 2205|  62.7k|{
 2206|  62.7k|  gsize count_unsigned;
 2207|  62.7k|  GIOStatus status;
 2208|  62.7k|  gssize wrote_bytes = 0;
 2209|       |
 2210|  62.7k|  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  62.7k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  62.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  62.7k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  62.7k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  62.7k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  62.7k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  62.7k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  62.7k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 62.7k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  62.7k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  62.7k|   else                                         \
  |  |  |  |  |  | 1183|  62.7k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  62.7k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  62.7k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 62.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  62.7k|      { } \
  |  |  655|  62.7k|    else \
  |  |  656|  62.7k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  62.7k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  62.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 62.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2211|  62.7k|  g_return_val_if_fail ((error == NULL) || (*error == NULL),
  ------------------
  |  |  652|  62.7k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  62.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  62.7k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  62.7k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  62.7k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  62.7k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  62.7k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   188k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 62.7k]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 62.7k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  62.7k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  62.7k|   else                                         \
  |  |  |  |  |  | 1183|  62.7k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  62.7k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  62.7k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 62.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  62.7k|      { } \
  |  |  655|  62.7k|    else \
  |  |  656|  62.7k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  62.7k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  62.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 62.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2212|  62.7k|			G_IO_STATUS_ERROR);
 2213|  62.7k|  g_return_val_if_fail (channel->is_writeable, G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  62.7k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  62.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  62.7k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  62.7k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  62.7k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  62.7k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  62.7k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  62.7k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 62.7k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  62.7k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  62.7k|   else                                         \
  |  |  |  |  |  | 1183|  62.7k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  62.7k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  62.7k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 62.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  62.7k|      { } \
  |  |  655|  62.7k|    else \
  |  |  656|  62.7k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  62.7k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  62.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 62.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2214|       |
 2215|  62.7k|  if ((count < 0) && buf)
  ------------------
  |  Branch (2215:7): [True: 0, False: 62.7k]
  |  Branch (2215:22): [True: 0, False: 0]
  ------------------
 2216|      0|    count = strlen (buf);
 2217|  62.7k|  count_unsigned = count;
 2218|       |
 2219|  62.7k|  if (count_unsigned == 0)
  ------------------
  |  Branch (2219:7): [True: 0, False: 62.7k]
  ------------------
 2220|      0|    {
 2221|      0|      if (bytes_written)
  ------------------
  |  Branch (2221:11): [True: 0, False: 0]
  ------------------
 2222|      0|        *bytes_written = 0;
 2223|      0|      return G_IO_STATUS_NORMAL;
 2224|      0|    }
 2225|       |
 2226|  62.7k|  g_return_val_if_fail (buf != NULL, G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  62.7k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  62.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  62.7k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  62.7k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  62.7k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  62.7k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  62.7k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  62.7k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 62.7k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  62.7k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  62.7k|   else                                         \
  |  |  |  |  |  | 1183|  62.7k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  62.7k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  62.7k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 62.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  62.7k|      { } \
  |  |  655|  62.7k|    else \
  |  |  656|  62.7k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  62.7k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  62.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 62.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2227|  62.7k|  g_return_val_if_fail (count_unsigned > 0, G_IO_STATUS_ERROR);
  ------------------
  |  |  652|  62.7k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  62.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  62.7k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  62.7k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  62.7k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  62.7k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  62.7k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  62.7k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 62.7k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  62.7k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  62.7k|   else                                         \
  |  |  |  |  |  | 1183|  62.7k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  62.7k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  62.7k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 62.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  62.7k|      { } \
  |  |  655|  62.7k|    else \
  |  |  656|  62.7k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  62.7k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  62.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 62.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2228|       |
 2229|       |  /* Raw write case */
 2230|       |
 2231|  62.7k|  if (!channel->use_buffer)
  ------------------
  |  Branch (2231:7): [True: 0, False: 62.7k]
  ------------------
 2232|      0|    {
 2233|      0|      gsize tmp_bytes;
 2234|       |      
 2235|      0|      g_assert (!channel->write_buf || channel->write_buf->len == 0);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2236|      0|      g_assert (channel->partial_write_buf[0] == '\0');
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2237|       |      
 2238|      0|      status = channel->funcs->io_write (channel, buf, count_unsigned,
 2239|      0|                                         &tmp_bytes, error);
 2240|       |
 2241|      0|      if (bytes_written)
  ------------------
  |  Branch (2241:11): [True: 0, False: 0]
  ------------------
 2242|      0|	*bytes_written = tmp_bytes;
 2243|       |
 2244|      0|      return status;
 2245|      0|    }
 2246|       |
 2247|       |  /* General case */
 2248|       |
 2249|  62.7k|  if (channel->is_seekable && (( BUF_LEN (channel->read_buf) > 0)
  ------------------
  |  |  165|  62.7k|#define BUF_LEN(string)		((string) ? (string)->len : 0)
  |  |  ------------------
  |  |  |  Branch (165:27): [True: 0, False: 62.7k]
  |  |  ------------------
  ------------------
  |  Branch (2249:7): [True: 62.7k, False: 0]
  |  Branch (2249:32): [True: 0, False: 62.7k]
  ------------------
 2250|  62.7k|    || (BUF_LEN (channel->encoded_read_buf) > 0)))
  ------------------
  |  |  165|  62.7k|#define BUF_LEN(string)		((string) ? (string)->len : 0)
  |  |  ------------------
  |  |  |  Branch (165:27): [True: 0, False: 62.7k]
  |  |  ------------------
  ------------------
  |  Branch (2250:8): [True: 0, False: 62.7k]
  ------------------
 2251|      0|    {
 2252|      0|      if (channel->do_encode && BUF_LEN (channel->encoded_read_buf) > 0)
  ------------------
  |  |  165|      0|#define BUF_LEN(string)		((string) ? (string)->len : 0)
  |  |  ------------------
  |  |  |  Branch (165:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2252:11): [True: 0, False: 0]
  |  Branch (2252:33): [True: 0, False: 0]
  ------------------
 2253|      0|        {
 2254|      0|          g_warning ("Mixed reading and writing not allowed on encoded files");
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 2255|      0|          return G_IO_STATUS_ERROR;
 2256|      0|        }
 2257|      0|      status = g_io_channel_seek_position (channel, 0, G_SEEK_CUR, error);
 2258|      0|      if (status != G_IO_STATUS_NORMAL)
  ------------------
  |  Branch (2258:11): [True: 0, False: 0]
  ------------------
 2259|      0|        {
 2260|      0|          if (bytes_written)
  ------------------
  |  Branch (2260:15): [True: 0, False: 0]
  ------------------
 2261|      0|            *bytes_written = 0;
 2262|      0|          return status;
 2263|      0|        }
 2264|      0|    }
 2265|       |
 2266|  62.7k|  if (!channel->write_buf)
  ------------------
  |  Branch (2266:7): [True: 6.74k, False: 56.0k]
  ------------------
 2267|  6.74k|    channel->write_buf = g_string_sized_new (channel->buf_size);
 2268|       |
 2269|   125k|  while (wrote_bytes < count)
  ------------------
  |  Branch (2269:10): [True: 62.7k, False: 62.7k]
  ------------------
 2270|  62.7k|    {
 2271|  62.7k|      gsize space_in_buf;
 2272|       |
 2273|       |      /* If the buffer is full, try a write immediately. In
 2274|       |       * the nonblocking case, this prevents the user from
 2275|       |       * writing just a little bit to the buffer every time
 2276|       |       * and never receiving an EAGAIN.
 2277|       |       */
 2278|       |
 2279|  62.7k|      if (channel->write_buf->len >= channel->buf_size - MAX_CHAR_SIZE)
  ------------------
  |  |  157|  62.7k|#define MAX_CHAR_SIZE		10
  ------------------
  |  Branch (2279:11): [True: 816, False: 61.9k]
  ------------------
 2280|    816|        {
 2281|    816|          gsize did_write = 0, this_time;
 2282|       |
 2283|    816|          do
 2284|    816|            {
 2285|    816|              status = channel->funcs->io_write (channel, channel->write_buf->str
 2286|    816|                                                 + did_write, channel->write_buf->len
 2287|    816|                                                 - did_write, &this_time, error);
 2288|    816|              did_write += this_time;
 2289|    816|            }
 2290|    816|          while (status == G_IO_STATUS_NORMAL &&
  ------------------
  |  Branch (2290:18): [True: 816, False: 0]
  ------------------
 2291|    816|                 did_write < MIN (channel->write_buf->len, MAX_CHAR_SIZE));
  ------------------
  |  |  891|    816|#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (891:21): [True: 0, False: 816]
  |  |  ------------------
  ------------------
  |  Branch (2291:18): [True: 0, False: 816]
  ------------------
 2292|       |
 2293|    816|          g_string_erase (channel->write_buf, 0, did_write);
 2294|       |
 2295|    816|          if (status != G_IO_STATUS_NORMAL)
  ------------------
  |  Branch (2295:15): [True: 0, False: 816]
  ------------------
 2296|      0|            {
 2297|      0|              if (status == G_IO_STATUS_AGAIN && wrote_bytes > 0)
  ------------------
  |  Branch (2297:19): [True: 0, False: 0]
  |  Branch (2297:50): [True: 0, False: 0]
  ------------------
 2298|      0|                status = G_IO_STATUS_NORMAL;
 2299|      0|              if (bytes_written)
  ------------------
  |  Branch (2299:19): [True: 0, False: 0]
  ------------------
 2300|      0|                *bytes_written = wrote_bytes;
 2301|      0|              return status;
 2302|      0|            }
 2303|    816|        }
 2304|       |
 2305|  62.7k|      space_in_buf = MAX (channel->buf_size, channel->write_buf->allocated_len - 1)
  ------------------
  |  |  888|  62.7k|#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (888:21): [True: 0, False: 62.7k]
  |  |  ------------------
  ------------------
 2306|  62.7k|                     - channel->write_buf->len; /* 1 for NULL */
 2307|       |
 2308|       |      /* This is only true because g_io_channel_set_buffer_size ()
 2309|       |       * ensures that channel->buf_size >= MAX_CHAR_SIZE.
 2310|       |       */
 2311|  62.7k|      g_assert (space_in_buf >= MAX_CHAR_SIZE);
  ------------------
  |  |  234|  62.7k|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  62.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  62.7k|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  62.7k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  62.7k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  62.7k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  62.7k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  62.7k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 62.7k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  62.7k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  62.7k|   else                                         \
  |  |  |  |  |  | 1183|  62.7k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  62.7k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  62.7k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 62.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  62.7k|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  62.7k|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  62.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 62.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2312|       |
 2313|  62.7k|      if (!channel->encoding)
  ------------------
  |  Branch (2313:11): [True: 62.7k, False: 0]
  ------------------
 2314|  62.7k|        {
 2315|  62.7k|          gssize write_this = MIN (space_in_buf, count_unsigned - wrote_bytes);
  ------------------
  |  |  891|  62.7k|#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (891:21): [True: 0, False: 62.7k]
  |  |  ------------------
  ------------------
 2316|       |
 2317|  62.7k|          g_string_append_len (channel->write_buf, buf, write_this);
 2318|  62.7k|          buf += write_this;
 2319|  62.7k|          wrote_bytes += write_this;
 2320|  62.7k|        }
 2321|      0|      else
 2322|      0|        {
 2323|      0|          const gchar *from_buf;
 2324|      0|          gsize from_buf_len, from_buf_old_len, left_len;
 2325|      0|          gsize err;
 2326|      0|          gint errnum;
 2327|       |
 2328|      0|          if (channel->partial_write_buf[0] != '\0')
  ------------------
  |  Branch (2328:15): [True: 0, False: 0]
  ------------------
 2329|      0|            {
 2330|      0|              g_assert (wrote_bytes == 0);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2331|       |
 2332|      0|              from_buf = channel->partial_write_buf;
 2333|      0|              from_buf_old_len = strlen (channel->partial_write_buf);
 2334|      0|              g_assert (from_buf_old_len > 0);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2335|      0|              from_buf_len = MIN (6, from_buf_old_len + count_unsigned);
  ------------------
  |  |  891|      0|#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (891:21): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2336|       |
 2337|      0|              memcpy (channel->partial_write_buf + from_buf_old_len, buf,
 2338|      0|                      from_buf_len - from_buf_old_len);
 2339|      0|            }
 2340|      0|          else
 2341|      0|            {
 2342|      0|              from_buf = buf;
 2343|      0|              from_buf_len = count_unsigned - wrote_bytes;
 2344|      0|              from_buf_old_len = 0;
 2345|      0|            }
 2346|       |
 2347|      0|reconvert:
 2348|       |
 2349|      0|          if (!channel->do_encode) /* UTF-8 encoding */
  ------------------
  |  Branch (2349:15): [True: 0, False: 0]
  ------------------
 2350|      0|            {
 2351|      0|              const gchar *badchar;
 2352|      0|              gsize try_len = MIN (from_buf_len, space_in_buf);
  ------------------
  |  |  891|      0|#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (891:21): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2353|       |
 2354|       |              /* UTF-8, just validate, emulate g_iconv */
 2355|       |
 2356|      0|              if (!g_utf8_validate_len (from_buf, try_len, &badchar))
  ------------------
  |  Branch (2356:19): [True: 0, False: 0]
  ------------------
 2357|      0|                {
 2358|      0|                  gunichar try_char;
 2359|      0|                  gsize incomplete_len = from_buf + try_len - badchar;
 2360|       |
 2361|      0|                  left_len = from_buf + from_buf_len - badchar;
 2362|       |
 2363|      0|                  try_char = g_utf8_get_char_validated (badchar, incomplete_len);
 2364|       |
 2365|      0|                  switch (try_char)
 2366|      0|                    {
 2367|      0|                      case -2:
  ------------------
  |  Branch (2367:23): [True: 0, False: 0]
  ------------------
 2368|      0|                        g_assert (incomplete_len < 6);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2369|      0|                        if (try_len == from_buf_len)
  ------------------
  |  Branch (2369:29): [True: 0, False: 0]
  ------------------
 2370|      0|                          {
 2371|      0|                            errnum = EINVAL;
 2372|      0|                            err = (gsize) -1;
 2373|      0|                          }
 2374|      0|                        else
 2375|      0|                          {
 2376|      0|                            errnum = 0;
 2377|      0|                            err = (gsize) 0;
 2378|      0|                          }
 2379|      0|                        break;
 2380|      0|                      case -1:
  ------------------
  |  Branch (2380:23): [True: 0, False: 0]
  ------------------
 2381|      0|                        g_warning ("Invalid UTF-8 passed to g_io_channel_write_chars().");
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 2382|       |                        /* FIXME bail here? */
 2383|      0|                        errnum = EILSEQ;
 2384|      0|                        err = (gsize) -1;
 2385|      0|                        break;
 2386|      0|                      default:
  ------------------
  |  Branch (2386:23): [True: 0, False: 0]
  ------------------
 2387|      0|                        g_assert_not_reached ();
  ------------------
  |  |  233|      0|#define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2388|      0|                        err = (gsize) -1;
 2389|      0|                        errnum = 0; /* Don't confuse the compiler */
 2390|      0|                    }
 2391|      0|                }
 2392|      0|              else
 2393|      0|                {
 2394|      0|                  err = (gsize) 0;
 2395|      0|                  errnum = 0;
 2396|      0|                  left_len = from_buf_len - try_len;
 2397|      0|                }
 2398|       |
 2399|      0|              g_string_append_len (channel->write_buf, from_buf,
 2400|      0|                                   from_buf_len - left_len);
 2401|      0|              from_buf += from_buf_len - left_len;
 2402|      0|            }
 2403|      0|          else
 2404|      0|            {
 2405|      0|               gchar *outbuf;
 2406|       |
 2407|      0|               left_len = from_buf_len;
 2408|      0|               g_string_set_size (channel->write_buf, channel->write_buf->len
 2409|      0|                                  + space_in_buf);
 2410|      0|               outbuf = channel->write_buf->str + channel->write_buf->len
 2411|      0|                        - space_in_buf;
 2412|      0|               err = g_iconv (channel->write_cd, (gchar **) &from_buf, &left_len,
 2413|      0|                              &outbuf, &space_in_buf);
 2414|      0|               errnum = errno;
 2415|      0|               g_string_truncate (channel->write_buf, channel->write_buf->len
 2416|      0|                                  - space_in_buf);
 2417|      0|            }
 2418|       |
 2419|      0|          if (err == (gsize) -1)
  ------------------
  |  Branch (2419:15): [True: 0, False: 0]
  ------------------
 2420|      0|            {
 2421|      0|              switch (errnum)
 2422|      0|        	{
 2423|      0|                  case EINVAL:
  ------------------
  |  Branch (2423:19): [True: 0, False: 0]
  ------------------
 2424|      0|                    g_assert (left_len < 6);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2425|       |
 2426|      0|                    if (from_buf_old_len == 0)
  ------------------
  |  Branch (2426:25): [True: 0, False: 0]
  ------------------
 2427|      0|                      {
 2428|       |                        /* Not from partial_write_buf */
 2429|       |
 2430|      0|                        memcpy (channel->partial_write_buf, from_buf, left_len);
 2431|      0|                        channel->partial_write_buf[left_len] = '\0';
 2432|      0|                        if (bytes_written)
  ------------------
  |  Branch (2432:29): [True: 0, False: 0]
  ------------------
 2433|      0|                          *bytes_written = count_unsigned;
 2434|      0|                        return G_IO_STATUS_NORMAL;
 2435|      0|                      }
 2436|       |
 2437|       |                    /* Working in partial_write_buf */
 2438|       |
 2439|      0|                    if (left_len == from_buf_len)
  ------------------
  |  Branch (2439:25): [True: 0, False: 0]
  ------------------
 2440|      0|                      {
 2441|       |                        /* Didn't convert anything, must still have
 2442|       |                         * less than a full character
 2443|       |                         */
 2444|       |
 2445|      0|                        g_assert (count_unsigned == from_buf_len - from_buf_old_len);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2446|       |
 2447|      0|                        channel->partial_write_buf[from_buf_len] = '\0';
 2448|       |
 2449|      0|                        if (bytes_written)
  ------------------
  |  Branch (2449:29): [True: 0, False: 0]
  ------------------
 2450|      0|                          *bytes_written = count_unsigned;
 2451|       |
 2452|      0|                        return G_IO_STATUS_NORMAL;
 2453|      0|                      }
 2454|       |
 2455|      0|                    g_assert (from_buf_len - left_len >= from_buf_old_len);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2456|       |
 2457|       |                    /* We converted all the old data. This is fine */
 2458|       |
 2459|      0|                    break;
 2460|      0|                  case E2BIG:
  ------------------
  |  Branch (2460:19): [True: 0, False: 0]
  ------------------
 2461|      0|                    if (from_buf_len == left_len)
  ------------------
  |  Branch (2461:25): [True: 0, False: 0]
  ------------------
 2462|      0|                      {
 2463|       |                        /* Nothing was written, add enough space for
 2464|       |                         * at least one character.
 2465|       |                         */
 2466|      0|                        space_in_buf += MAX_CHAR_SIZE;
  ------------------
  |  |  157|      0|#define MAX_CHAR_SIZE		10
  ------------------
 2467|      0|                        goto reconvert;
 2468|      0|                      }
 2469|      0|                    break;
 2470|      0|                  case EILSEQ:
  ------------------
  |  Branch (2470:19): [True: 0, False: 0]
  ------------------
 2471|      0|                    g_set_error_literal (error, G_CONVERT_ERROR,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
 2472|      0|                      G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
 2473|      0|                      _("Invalid byte sequence in conversion input"));
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
 2474|      0|                    if (from_buf_old_len > 0 && from_buf_len == left_len)
  ------------------
  |  Branch (2474:25): [True: 0, False: 0]
  |  Branch (2474:49): [True: 0, False: 0]
  ------------------
 2475|      0|                      g_warning ("Illegal sequence due to partial character "
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 2476|      0|                                 "at the end of a previous write.");
 2477|      0|                    else
 2478|      0|                      wrote_bytes += from_buf_len - left_len - from_buf_old_len;
 2479|      0|                    if (bytes_written)
  ------------------
  |  Branch (2479:25): [True: 0, False: 0]
  ------------------
 2480|      0|                      *bytes_written = wrote_bytes;
 2481|      0|                    channel->partial_write_buf[0] = '\0';
 2482|      0|                    return G_IO_STATUS_ERROR;
 2483|      0|                  default:
  ------------------
  |  Branch (2483:19): [True: 0, False: 0]
  ------------------
 2484|      0|                    g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
 2485|      0|                      _("Error during conversion: %s"), g_strerror (errnum));
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
 2486|      0|                    if (from_buf_len >= left_len + from_buf_old_len)
  ------------------
  |  Branch (2486:25): [True: 0, False: 0]
  ------------------
 2487|      0|                      wrote_bytes += from_buf_len - left_len - from_buf_old_len;
 2488|      0|                    if (bytes_written)
  ------------------
  |  Branch (2488:25): [True: 0, False: 0]
  ------------------
 2489|      0|                      *bytes_written = wrote_bytes;
 2490|      0|                    channel->partial_write_buf[0] = '\0';
 2491|      0|                    return G_IO_STATUS_ERROR;
 2492|      0|                }
 2493|      0|            }
 2494|       |
 2495|      0|          g_assert (from_buf_len - left_len >= from_buf_old_len);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2496|       |
 2497|      0|          wrote_bytes += from_buf_len - left_len - from_buf_old_len;
 2498|       |
 2499|      0|          if (from_buf_old_len > 0)
  ------------------
  |  Branch (2499:15): [True: 0, False: 0]
  ------------------
 2500|      0|            {
 2501|       |              /* We were working in partial_write_buf */
 2502|       |
 2503|      0|              buf += from_buf_len - left_len - from_buf_old_len;
 2504|      0|              channel->partial_write_buf[0] = '\0';
 2505|      0|            }
 2506|      0|          else
 2507|      0|            buf = from_buf;
 2508|      0|        }
 2509|  62.7k|    }
 2510|       |
 2511|  62.7k|  if (bytes_written)
  ------------------
  |  Branch (2511:7): [True: 62.7k, False: 0]
  ------------------
 2512|  62.7k|    *bytes_written = count_unsigned;
 2513|       |
 2514|  62.7k|  return G_IO_STATUS_NORMAL;
 2515|  62.7k|}
giochannel.c:g_io_channel_purge:
  549|  29.1k|{
  550|  29.1k|  GError *err = NULL;
  551|  29.1k|  GIOStatus status G_GNUC_UNUSED;
  552|       |
  553|  29.1k|  g_return_if_fail (channel != NULL);
  ------------------
  |  |  639|  29.1k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  29.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  29.1k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  29.1k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  29.1k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  29.1k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  29.1k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  29.1k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 29.1k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  29.1k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  29.1k|   else                                         \
  |  |  |  |  |  | 1183|  29.1k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  29.1k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  29.1k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 29.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  29.1k|      { } \
  |  |  642|  29.1k|    else \
  |  |  643|  29.1k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  29.1k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  29.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 29.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  554|       |
  555|  29.1k|  if (channel->write_buf && channel->write_buf->len > 0)
  ------------------
  |  Branch (555:7): [True: 32, False: 29.1k]
  |  Branch (555:29): [True: 0, False: 32]
  ------------------
  556|      0|    {
  557|      0|      GIOFlags flags;
  558|       |
  559|       |      /* Set the channel to blocking, to avoid a busy loop
  560|       |       */
  561|      0|      flags = g_io_channel_get_flags (channel);
  562|      0|      g_io_channel_set_flags (channel, flags & ~G_IO_FLAG_NONBLOCK, NULL);
  563|       |
  564|      0|      status = g_io_channel_flush (channel, &err);
  565|       |
  566|      0|      if (err)
  ------------------
  |  Branch (566:11): [True: 0, False: 0]
  ------------------
  567|      0|        { /* No way to return the error */
  568|      0|          g_warning ("Error flushing string: %s", err->message);
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  569|      0|          g_error_free (err);
  570|      0|        }
  571|      0|    }
  572|       |
  573|       |  /* Flush these in case anyone tries to close without unrefing */
  574|       |
  575|  29.1k|  if (channel->read_buf)
  ------------------
  |  Branch (575:7): [True: 0, False: 29.1k]
  ------------------
  576|      0|    g_string_truncate (channel->read_buf, 0);
  577|  29.1k|  if (channel->write_buf)
  ------------------
  |  Branch (577:7): [True: 32, False: 29.1k]
  ------------------
  578|     32|    g_string_truncate (channel->write_buf, 0);
  579|  29.1k|  if (channel->encoding)
  ------------------
  |  Branch (579:7): [True: 28.9k, False: 176]
  ------------------
  580|  28.9k|    {
  581|  28.9k|      if (channel->encoded_read_buf)
  ------------------
  |  Branch (581:11): [True: 0, False: 28.9k]
  ------------------
  582|      0|        g_string_truncate (channel->encoded_read_buf, 0);
  583|       |
  584|  28.9k|      if (channel->partial_write_buf[0] != '\0')
  ------------------
  |  Branch (584:11): [True: 0, False: 28.9k]
  ------------------
  585|      0|        {
  586|      0|          g_warning ("Partial character at end of write buffer not flushed.");
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  587|      0|          channel->partial_write_buf[0] = '\0';
  588|      0|        }
  589|  28.9k|    }
  590|  29.1k|}
giochannel.c:g_io_channel_read_line_backend:
 1752|  74.1k|{
 1753|  74.1k|  GIOStatus status;
 1754|  74.1k|  gsize checked_to, line_term_len, line_length, got_term_len;
 1755|  74.1k|  gboolean first_time = TRUE;
  ------------------
  |  |  884|  74.1k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  74.1k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1756|       |
 1757|  74.1k|  if (!channel->use_buffer)
  ------------------
  |  Branch (1757:7): [True: 0, False: 74.1k]
  ------------------
 1758|      0|    {
 1759|       |      /* Can't do a raw read in read_line */
 1760|      0|      g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
 1761|      0|                           _("Can’t do a raw read in g_io_channel_read_line_string"));
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
 1762|      0|      return G_IO_STATUS_ERROR;
 1763|      0|    }
 1764|       |
 1765|  74.1k|  status = G_IO_STATUS_NORMAL;
 1766|       |
 1767|  74.1k|  if (channel->line_term)
  ------------------
  |  Branch (1767:7): [True: 0, False: 74.1k]
  ------------------
 1768|      0|    line_term_len = channel->line_term_len;
 1769|  74.1k|  else
 1770|  74.1k|    line_term_len = 3;
 1771|       |    /* This value used for setting checked_to, it's the longest of the four
 1772|       |     * we autodetect for.
 1773|       |     */
 1774|       |
 1775|  74.1k|  checked_to = 0;
 1776|       |
 1777|   120k|  while (TRUE)
  ------------------
  |  |  884|   120k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|   120k|#define	FALSE	(0)
  |  |  ------------------
  |  |  |  Branch (884:14): [True: 120k, Folded]
  |  |  ------------------
  ------------------
 1778|   120k|    {
 1779|   120k|      gchar *nextchar, *lastchar;
 1780|   120k|      GString *use_buf;
 1781|       |
 1782|   120k|      if (!first_time || (BUF_LEN (USE_BUF (channel)) == 0))
  ------------------
  |  |  165|   148k|#define BUF_LEN(string)		((string) ? (string)->len : 0)
  |  |  ------------------
  |  |  |  Branch (165:27): [True: 72.3k, False: 1.79k]
  |  |  |  Branch (165:28): [True: 0, False: 74.1k]
  |  |  |  Branch (165:39): [True: 0, False: 72.3k]
  |  |  ------------------
  ------------------
  |  Branch (1782:11): [True: 46.8k, False: 74.1k]
  |  Branch (1782:26): [True: 3.63k, False: 70.5k]
  ------------------
 1783|  50.4k|        {
 1784|  50.4k|read_again:
 1785|  50.4k|          status = g_io_channel_fill_buffer (channel, error);
 1786|  50.4k|          switch (status)
 1787|  50.4k|            {
 1788|  48.6k|              case G_IO_STATUS_NORMAL:
  ------------------
  |  Branch (1788:15): [True: 48.6k, False: 1.79k]
  ------------------
 1789|  48.6k|                if (BUF_LEN (USE_BUF (channel)) == 0)
  ------------------
  |  |  165|  97.3k|#define BUF_LEN(string)		((string) ? (string)->len : 0)
  |  |  ------------------
  |  |  |  Branch (165:27): [True: 48.6k, False: 0]
  |  |  |  Branch (165:28): [True: 0, False: 48.6k]
  |  |  |  Branch (165:39): [True: 0, False: 48.6k]
  |  |  ------------------
  ------------------
  |  Branch (1789:21): [True: 0, False: 48.6k]
  ------------------
 1790|       |                  /* Can happen when using conversion and only read
 1791|       |                   * part of a character
 1792|       |                   */
 1793|      0|                  {
 1794|      0|                    first_time = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 1795|      0|                    continue;
 1796|      0|                  }
 1797|  48.6k|                break;
 1798|  48.6k|              case G_IO_STATUS_EOF:
  ------------------
  |  Branch (1798:15): [True: 1.79k, False: 48.6k]
  ------------------
 1799|  1.79k|                if (BUF_LEN (USE_BUF (channel)) == 0)
  ------------------
  |  |  165|  3.59k|#define BUF_LEN(string)		((string) ? (string)->len : 0)
  |  |  ------------------
  |  |  |  Branch (165:27): [True: 1.79k, False: 0]
  |  |  |  Branch (165:28): [True: 0, False: 1.79k]
  |  |  |  Branch (165:39): [True: 0, False: 1.79k]
  |  |  ------------------
  ------------------
  |  Branch (1799:21): [True: 1.79k, False: 0]
  ------------------
 1800|  1.79k|                  {
 1801|  1.79k|                    if (length)
  ------------------
  |  Branch (1801:25): [True: 1.79k, False: 0]
  ------------------
 1802|  1.79k|                      *length = 0;
 1803|       |
 1804|  1.79k|                    if (channel->encoding && channel->read_buf->len != 0)
  ------------------
  |  Branch (1804:25): [True: 0, False: 1.79k]
  |  Branch (1804:46): [True: 0, False: 0]
  ------------------
 1805|      0|                      {
 1806|      0|                        g_set_error_literal (error, G_CONVERT_ERROR,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
 1807|      0|                                             G_CONVERT_ERROR_PARTIAL_INPUT,
 1808|      0|                                             _("Leftover unconverted data in "
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
 1809|      0|                                               "read buffer"));
 1810|      0|                        return G_IO_STATUS_ERROR;
 1811|      0|                      }
 1812|  1.79k|                    else
 1813|  1.79k|                      return G_IO_STATUS_EOF;
 1814|  1.79k|                  }
 1815|      0|                break;
 1816|      0|              default:
  ------------------
  |  Branch (1816:15): [True: 0, False: 50.4k]
  ------------------
 1817|      0|                if (length)
  ------------------
  |  Branch (1817:21): [True: 0, False: 0]
  ------------------
 1818|      0|                  *length = 0;
 1819|      0|                return status;
 1820|  50.4k|            }
 1821|  50.4k|        }
 1822|       |
 1823|   120k|      g_assert (BUF_LEN (USE_BUF (channel)) != 0);
  ------------------
  |  |  234|   119k|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   119k|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|   119k|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|   119k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   119k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   119k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   119k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   834k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 119k]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 119k]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 119k, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 119k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   119k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   119k|   else                                         \
  |  |  |  |  |  | 1183|   119k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   119k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   119k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 119k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|   119k|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|   120k|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   120k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 119k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1824|       |
 1825|   119k|      use_buf = USE_BUF (channel); /* The buffer has been created by this point */
  ------------------
  |  |  163|   119k|#define USE_BUF(channel)	((channel)->encoding ? (channel)->encoded_read_buf \
  |  |  ------------------
  |  |  |  Branch (163:27): [True: 0, False: 119k]
  |  |  ------------------
  |  |  164|   119k|				 : (channel)->read_buf)
  ------------------
 1826|       |
 1827|   119k|      first_time = FALSE;
  ------------------
  |  |  880|   119k|#define	FALSE	(0)
  ------------------
 1828|       |
 1829|   119k|      lastchar = use_buf->str + use_buf->len;
 1830|       |
 1831|  48.6M|      for (nextchar = use_buf->str + checked_to; nextchar < lastchar;
  ------------------
  |  Branch (1831:50): [True: 48.5M, False: 46.8k]
  ------------------
 1832|  48.5M|           channel->encoding ? nextchar = g_utf8_next_char (nextchar) : nextchar++)
  ------------------
  |  |  799|      0|#define g_utf8_next_char(p) (char *)((p) + g_utf8_skip[*(const guchar *)(p)])
  ------------------
  |  Branch (1832:12): [True: 0, False: 48.5M]
  ------------------
 1833|  48.5M|        {
 1834|  48.5M|          if (channel->line_term)
  ------------------
  |  Branch (1834:15): [True: 0, False: 48.5M]
  ------------------
 1835|      0|            {
 1836|      0|              if (memcmp (channel->line_term, nextchar, line_term_len) == 0)
  ------------------
  |  Branch (1836:19): [True: 0, False: 0]
  ------------------
 1837|      0|                {
 1838|      0|                  line_length = nextchar - use_buf->str;
 1839|      0|                  got_term_len = line_term_len;
 1840|      0|                  goto done;
 1841|      0|                }
 1842|      0|            }
 1843|  48.5M|          else /* auto detect */
 1844|  48.5M|            {
 1845|  48.5M|              switch (*nextchar)
 1846|  48.5M|                {
 1847|  46.7k|                  case '\n': /* unix */
  ------------------
  |  Branch (1847:19): [True: 46.7k, False: 48.5M]
  ------------------
 1848|  46.7k|                    line_length = nextchar - use_buf->str;
 1849|  46.7k|                    got_term_len = 1;
 1850|  46.7k|                    goto done;
 1851|  25.5k|                  case '\r': /* Warning: do not use with sockets */
  ------------------
  |  Branch (1851:19): [True: 25.5k, False: 48.5M]
  ------------------
 1852|  25.5k|                    line_length = nextchar - use_buf->str;
 1853|  25.5k|                    if ((nextchar == lastchar - 1) && (status != G_IO_STATUS_EOF)
  ------------------
  |  Branch (1853:25): [True: 33, False: 25.5k]
  |  Branch (1853:55): [True: 33, False: 0]
  ------------------
 1854|     33|                       && (lastchar == use_buf->str + use_buf->len))
  ------------------
  |  Branch (1854:27): [True: 33, False: 0]
  ------------------
 1855|     33|                      goto read_again; /* Try to read more data */
 1856|  25.5k|                    if ((nextchar < lastchar - 1) && (*(nextchar + 1) == '\n')) /* dos */
  ------------------
  |  Branch (1856:25): [True: 25.5k, False: 0]
  |  Branch (1856:54): [True: 82, False: 25.4k]
  ------------------
 1857|     82|                      got_term_len = 2;
 1858|  25.4k|                    else /* mac */
 1859|  25.4k|                      got_term_len = 1;
 1860|  25.5k|                    goto done;
 1861|  2.82k|                  case '\xe2': /* Unicode paragraph separator */
  ------------------
  |  Branch (1861:19): [True: 2.82k, False: 48.5M]
  ------------------
 1862|  2.82k|                    if (strncmp ("\xe2\x80\xa9", nextchar, 3) == 0)
  ------------------
  |  Branch (1862:25): [True: 156, False: 2.67k]
  ------------------
 1863|    156|                      {
 1864|    156|                        line_length = nextchar - use_buf->str;
 1865|    156|                        got_term_len = 3;
 1866|    156|                        goto done;
 1867|    156|                      }
 1868|  2.67k|                    break;
 1869|  2.67k|                  case '\0': /* Embedded null in input */
  ------------------
  |  Branch (1869:19): [True: 0, False: 48.5M]
  ------------------
 1870|      0|                    line_length = nextchar - use_buf->str;
 1871|      0|                    got_term_len = 1;
 1872|      0|                    goto done;
 1873|  48.5M|                  default: /* no match */
  ------------------
  |  Branch (1873:19): [True: 48.5M, False: 75.0k]
  ------------------
 1874|  48.5M|                    break;
 1875|  48.5M|                }
 1876|  48.5M|            }
 1877|  48.5M|        }
 1878|       |
 1879|       |      /* If encoding != NULL, valid UTF-8, didn't overshoot */
 1880|   119k|      g_assert (nextchar == lastchar);
  ------------------
  |  |  234|  46.8k|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  46.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  46.8k|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  46.8k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  46.8k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  46.8k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  46.8k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  46.8k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 46.8k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  46.8k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  46.8k|   else                                         \
  |  |  |  |  |  | 1183|  46.8k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  46.8k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  46.8k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 46.8k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  46.8k|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|   119k|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   119k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 46.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1881|       |
 1882|       |      /* Check for EOF */
 1883|       |
 1884|  46.8k|      if (status == G_IO_STATUS_EOF)
  ------------------
  |  Branch (1884:11): [True: 0, False: 46.8k]
  ------------------
 1885|      0|        {
 1886|      0|          if (channel->encoding && channel->read_buf->len > 0)
  ------------------
  |  Branch (1886:15): [True: 0, False: 0]
  |  Branch (1886:36): [True: 0, False: 0]
  ------------------
 1887|      0|            {
 1888|      0|              g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_PARTIAL_INPUT,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
 1889|      0|                                   _("Channel terminates in a partial character"));
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
 1890|      0|              return G_IO_STATUS_ERROR;
 1891|      0|            }
 1892|      0|          line_length = use_buf->len;
 1893|      0|          got_term_len = 0;
 1894|      0|          break;
 1895|      0|        }
 1896|       |
 1897|  46.8k|      if (use_buf->len > line_term_len - 1)
  ------------------
  |  Branch (1897:11): [True: 46.7k, False: 48]
  ------------------
 1898|  46.7k|	checked_to = use_buf->len - (line_term_len - 1);
 1899|     48|      else
 1900|     48|	checked_to = 0;
 1901|  46.8k|    }
 1902|       |
 1903|  72.3k|done:
 1904|       |
 1905|  72.3k|  if (terminator_pos)
  ------------------
  |  Branch (1905:7): [True: 72.3k, False: 0]
  ------------------
 1906|  72.3k|    *terminator_pos = line_length;
 1907|       |
 1908|  72.3k|  if (length)
  ------------------
  |  Branch (1908:7): [True: 72.3k, False: 0]
  ------------------
 1909|  72.3k|    *length = line_length + got_term_len;
 1910|       |
 1911|  72.3k|  return G_IO_STATUS_NORMAL;
 1912|  74.1k|}
giochannel.c:g_io_channel_fill_buffer:
 1473|  50.4k|{
 1474|  50.4k|  gsize read_size, cur_len, oldlen;
 1475|  50.4k|  GIOStatus status;
 1476|       |
 1477|  50.4k|  if (channel->is_seekable && channel->write_buf && channel->write_buf->len > 0)
  ------------------
  |  Branch (1477:7): [True: 50.4k, False: 0]
  |  Branch (1477:31): [True: 0, False: 50.4k]
  |  Branch (1477:53): [True: 0, False: 0]
  ------------------
 1478|      0|    {
 1479|      0|      status = g_io_channel_flush (channel, err);
 1480|      0|      if (status != G_IO_STATUS_NORMAL)
  ------------------
  |  Branch (1480:11): [True: 0, False: 0]
  ------------------
 1481|      0|        return status;
 1482|      0|    }
 1483|  50.4k|  if (channel->is_seekable && channel->partial_write_buf[0] != '\0')
  ------------------
  |  Branch (1483:7): [True: 50.4k, False: 0]
  |  Branch (1483:31): [True: 0, False: 50.4k]
  ------------------
 1484|      0|    {
 1485|      0|      g_warning ("Partial character at end of write buffer not flushed.");
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 1486|      0|      channel->partial_write_buf[0] = '\0';
 1487|      0|    }
 1488|       |
 1489|  50.4k|  if (!channel->read_buf)
  ------------------
  |  Branch (1489:7): [True: 1.79k, False: 48.6k]
  ------------------
 1490|  1.79k|    channel->read_buf = g_string_sized_new (channel->buf_size);
 1491|       |
 1492|  50.4k|  cur_len = channel->read_buf->len;
 1493|       |
 1494|  50.4k|  g_string_set_size (channel->read_buf, channel->read_buf->len + channel->buf_size);
 1495|       |
 1496|  50.4k|  status = channel->funcs->io_read (channel, channel->read_buf->str + cur_len,
 1497|  50.4k|                                    channel->buf_size, &read_size, err);
 1498|       |
 1499|  50.4k|  g_assert ((status == G_IO_STATUS_NORMAL) || (read_size == 0));
  ------------------
  |  |  234|  50.4k|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  50.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  50.4k|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  50.4k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  50.4k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  50.4k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  50.4k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   102k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 48.6k, False: 1.79k]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.79k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  50.4k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  50.4k|   else                                         \
  |  |  |  |  |  | 1183|  50.4k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  50.4k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  50.4k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 50.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  50.4k|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  50.4k|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  50.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 50.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1500|       |
 1501|  50.4k|  g_string_truncate (channel->read_buf, read_size + cur_len);
 1502|       |
 1503|  50.4k|  if ((status != G_IO_STATUS_NORMAL) &&
  ------------------
  |  Branch (1503:7): [True: 1.79k, False: 48.6k]
  ------------------
 1504|  1.79k|      ((status != G_IO_STATUS_EOF) || (channel->read_buf->len == 0)))
  ------------------
  |  Branch (1504:8): [True: 0, False: 1.79k]
  |  Branch (1504:39): [True: 1.79k, False: 0]
  ------------------
 1505|  1.79k|    return status;
 1506|       |
 1507|  50.4k|  g_assert (channel->read_buf->len > 0);
  ------------------
  |  |  234|  48.6k|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  48.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  48.6k|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  48.6k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  48.6k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  48.6k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  48.6k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  48.6k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 48.6k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  48.6k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  48.6k|   else                                         \
  |  |  |  |  |  | 1183|  48.6k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  48.6k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  48.6k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 48.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  48.6k|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  50.4k|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  50.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 48.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1508|       |
 1509|  48.6k|  if (channel->encoded_read_buf)
  ------------------
  |  Branch (1509:7): [True: 0, False: 48.6k]
  ------------------
 1510|      0|    oldlen = channel->encoded_read_buf->len;
 1511|  48.6k|  else
 1512|  48.6k|    {
 1513|  48.6k|      oldlen = 0;
 1514|  48.6k|      if (channel->encoding)
  ------------------
  |  Branch (1514:11): [True: 0, False: 48.6k]
  ------------------
 1515|      0|        channel->encoded_read_buf = g_string_sized_new (channel->buf_size);
 1516|  48.6k|    }
 1517|       |
 1518|  48.6k|  if (channel->do_encode)
  ------------------
  |  Branch (1518:7): [True: 0, False: 48.6k]
  ------------------
 1519|      0|    {
 1520|      0|      gsize errnum, inbytes_left, outbytes_left;
 1521|      0|      gchar *inbuf, *outbuf;
 1522|      0|      int errval;
 1523|       |
 1524|      0|      g_assert (channel->encoded_read_buf);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1525|       |
 1526|      0|reencode:
 1527|       |
 1528|      0|      inbytes_left = channel->read_buf->len;
 1529|      0|      outbytes_left = MAX (channel->read_buf->len,
  ------------------
  |  |  888|      0|#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (888:21): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1530|      0|                           channel->encoded_read_buf->allocated_len
 1531|      0|                           - channel->encoded_read_buf->len - 1); /* 1 for NULL */
 1532|      0|      outbytes_left = MAX (outbytes_left, 6);
  ------------------
  |  |  888|      0|#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (888:21): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1533|       |
 1534|      0|      inbuf = channel->read_buf->str;
 1535|      0|      g_string_set_size (channel->encoded_read_buf,
 1536|      0|                         channel->encoded_read_buf->len + outbytes_left);
 1537|      0|      outbuf = channel->encoded_read_buf->str + channel->encoded_read_buf->len
 1538|      0|               - outbytes_left;
 1539|       |
 1540|      0|      errnum = g_iconv (channel->read_cd, &inbuf, &inbytes_left,
 1541|      0|			&outbuf, &outbytes_left);
 1542|      0|      errval = errno;
 1543|       |
 1544|      0|      g_assert (inbuf + inbytes_left == channel->read_buf->str
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1545|      0|                + channel->read_buf->len);
 1546|      0|      g_assert (outbuf + outbytes_left == channel->encoded_read_buf->str
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1547|      0|                + channel->encoded_read_buf->len);
 1548|       |
 1549|      0|      g_string_erase (channel->read_buf, 0,
 1550|      0|		      channel->read_buf->len - inbytes_left);
 1551|      0|      g_string_truncate (channel->encoded_read_buf,
 1552|      0|			 channel->encoded_read_buf->len - outbytes_left);
 1553|       |
 1554|      0|      if (errnum == (gsize) -1)
  ------------------
  |  Branch (1554:11): [True: 0, False: 0]
  ------------------
 1555|      0|        {
 1556|      0|          switch (errval)
 1557|      0|            {
 1558|      0|              case EINVAL:
  ------------------
  |  Branch (1558:15): [True: 0, False: 0]
  ------------------
 1559|      0|                if ((oldlen == channel->encoded_read_buf->len)
  ------------------
  |  Branch (1559:21): [True: 0, False: 0]
  ------------------
 1560|      0|                  && (status == G_IO_STATUS_EOF))
  ------------------
  |  Branch (1560:22): [True: 0, False: 0]
  ------------------
 1561|      0|                  status = G_IO_STATUS_EOF;
 1562|      0|                else
 1563|      0|                  status = G_IO_STATUS_NORMAL;
 1564|      0|                break;
 1565|      0|              case E2BIG:
  ------------------
  |  Branch (1565:15): [True: 0, False: 0]
  ------------------
 1566|       |                /* Buffer size at least 6, wrote at least on character */
 1567|      0|                g_assert (inbuf != channel->read_buf->str);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1568|      0|                goto reencode;
 1569|      0|              case EILSEQ:
  ------------------
  |  Branch (1569:15): [True: 0, False: 0]
  ------------------
 1570|      0|                if (oldlen < channel->encoded_read_buf->len)
  ------------------
  |  Branch (1570:21): [True: 0, False: 0]
  ------------------
 1571|      0|                  status = G_IO_STATUS_NORMAL;
 1572|      0|                else
 1573|      0|                  {
 1574|      0|                    g_set_error_literal (err, G_CONVERT_ERROR,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
 1575|      0|                      G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
 1576|      0|                      _("Invalid byte sequence in conversion input"));
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
 1577|      0|                    return G_IO_STATUS_ERROR;
 1578|      0|                  }
 1579|      0|                break;
 1580|      0|              default:
  ------------------
  |  Branch (1580:15): [True: 0, False: 0]
  ------------------
 1581|      0|                g_assert (errval != EBADF); /* The converter should be open */
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1582|      0|                g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
 1583|      0|                  _("Error during conversion: %s"), g_strerror (errval));
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
 1584|      0|                return G_IO_STATUS_ERROR;
 1585|      0|            }
 1586|      0|        }
 1587|      0|      g_assert ((status != G_IO_STATUS_NORMAL)
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1588|      0|               || (channel->encoded_read_buf->len > 0));
 1589|      0|    }
 1590|  48.6k|  else if (channel->encoding) /* UTF-8 */
  ------------------
  |  Branch (1590:12): [True: 0, False: 48.6k]
  ------------------
 1591|      0|    {
 1592|      0|      gchar *nextchar, *lastchar;
 1593|       |
 1594|      0|      g_assert (channel->encoded_read_buf);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1595|       |
 1596|      0|      nextchar = channel->read_buf->str;
 1597|      0|      lastchar = channel->read_buf->str + channel->read_buf->len;
 1598|       |
 1599|      0|      while (nextchar < lastchar)
  ------------------
  |  Branch (1599:14): [True: 0, False: 0]
  ------------------
 1600|      0|        {
 1601|      0|          gunichar val_char;
 1602|       |
 1603|      0|          val_char = g_utf8_get_char_validated (nextchar, lastchar - nextchar);
 1604|       |
 1605|      0|          switch (val_char)
 1606|      0|            {
 1607|      0|              case -2:
  ------------------
  |  Branch (1607:15): [True: 0, False: 0]
  ------------------
 1608|       |                /* stop, leave partial character in buffer */
 1609|      0|                lastchar = nextchar;
 1610|      0|                break;
 1611|      0|              case -1:
  ------------------
  |  Branch (1611:15): [True: 0, False: 0]
  ------------------
 1612|      0|                if (oldlen < channel->encoded_read_buf->len)
  ------------------
  |  Branch (1612:21): [True: 0, False: 0]
  ------------------
 1613|      0|                  status = G_IO_STATUS_NORMAL;
 1614|      0|                else
 1615|      0|                  {
 1616|      0|                    g_set_error_literal (err, G_CONVERT_ERROR,
  ------------------
  |  |   75|      0|#define G_CONVERT_ERROR g_convert_error_quark()
  ------------------
 1617|      0|                      G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
 1618|      0|                      _("Invalid byte sequence in conversion input"));
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
 1619|      0|                    status = G_IO_STATUS_ERROR;
 1620|      0|                  }
 1621|      0|                lastchar = nextchar;
 1622|      0|                break;
 1623|      0|              default:
  ------------------
  |  Branch (1623:15): [True: 0, False: 0]
  ------------------
 1624|      0|                nextchar = g_utf8_next_char (nextchar);
  ------------------
  |  |  799|      0|#define g_utf8_next_char(p) (char *)((p) + g_utf8_skip[*(const guchar *)(p)])
  ------------------
 1625|      0|                break;
 1626|      0|            }
 1627|      0|        }
 1628|       |
 1629|      0|      if (lastchar > channel->read_buf->str)
  ------------------
  |  Branch (1629:11): [True: 0, False: 0]
  ------------------
 1630|      0|        {
 1631|      0|          gint copy_len = lastchar - channel->read_buf->str;
 1632|       |
 1633|      0|          g_string_append_len (channel->encoded_read_buf, channel->read_buf->str,
 1634|      0|                               copy_len);
 1635|      0|          g_string_erase (channel->read_buf, 0, copy_len);
 1636|      0|        }
 1637|      0|    }
 1638|       |
 1639|  48.6k|  return status;
 1640|  48.6k|}

g_io_channel_new_file:
  451|  1.79k|{
  452|  1.79k|  int fid, flags;
  453|  1.79k|  mode_t create_mode;
  454|  1.79k|  GIOChannel *channel;
  455|  1.79k|  enum { /* Cheesy hack */
  456|  1.79k|    MODE_R = 1 << 0,
  457|  1.79k|    MODE_W = 1 << 1,
  458|  1.79k|    MODE_A = 1 << 2,
  459|  1.79k|    MODE_PLUS = 1 << 3,
  460|  1.79k|    MODE_R_PLUS = MODE_R | MODE_PLUS,
  461|  1.79k|    MODE_W_PLUS = MODE_W | MODE_PLUS,
  462|  1.79k|    MODE_A_PLUS = MODE_A | MODE_PLUS
  463|  1.79k|  } mode_num;
  464|  1.79k|  struct stat buffer;
  465|       |
  466|  1.79k|  g_return_val_if_fail (filename != NULL, NULL);
  ------------------
  |  |  652|  1.79k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.79k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  1.79k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.79k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.79k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.79k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.79k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.79k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.79k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.79k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.79k|   else                                         \
  |  |  |  |  |  | 1183|  1.79k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.79k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.79k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.79k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  1.79k|      { } \
  |  |  655|  1.79k|    else \
  |  |  656|  1.79k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  1.79k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.79k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  467|  1.79k|  g_return_val_if_fail (mode != NULL, NULL);
  ------------------
  |  |  652|  1.79k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.79k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  1.79k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.79k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.79k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.79k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.79k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.79k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.79k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.79k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.79k|   else                                         \
  |  |  |  |  |  | 1183|  1.79k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.79k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.79k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.79k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  1.79k|      { } \
  |  |  655|  1.79k|    else \
  |  |  656|  1.79k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  1.79k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.79k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  468|  1.79k|  g_return_val_if_fail ((error == NULL) || (*error == NULL), NULL);
  ------------------
  |  |  652|  1.79k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.79k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  1.79k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.79k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.79k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.79k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.79k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  3.59k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.79k, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.79k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.79k|   else                                         \
  |  |  |  |  |  | 1183|  1.79k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.79k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.79k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.79k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  1.79k|      { } \
  |  |  655|  1.79k|    else \
  |  |  656|  1.79k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  1.79k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.79k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  469|       |
  470|  1.79k|  switch (mode[0])
  471|  1.79k|    {
  472|  1.79k|      case 'r':
  ------------------
  |  Branch (472:7): [True: 1.79k, False: 0]
  ------------------
  473|  1.79k|        mode_num = MODE_R;
  474|  1.79k|        break;
  475|      0|      case 'w':
  ------------------
  |  Branch (475:7): [True: 0, False: 1.79k]
  ------------------
  476|      0|        mode_num = MODE_W;
  477|      0|        break;
  478|      0|      case 'a':
  ------------------
  |  Branch (478:7): [True: 0, False: 1.79k]
  ------------------
  479|      0|        mode_num = MODE_A;
  480|      0|        break;
  481|      0|      default:
  ------------------
  |  Branch (481:7): [True: 0, False: 1.79k]
  ------------------
  482|      0|        g_warning ("Invalid GIOFileMode %s.", mode);
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  483|      0|        return NULL;
  484|  1.79k|    }
  485|       |
  486|  1.79k|  switch (mode[1])
  487|  1.79k|    {
  488|  1.79k|      case '\0':
  ------------------
  |  Branch (488:7): [True: 1.79k, False: 0]
  ------------------
  489|  1.79k|        break;
  490|      0|      case '+':
  ------------------
  |  Branch (490:7): [True: 0, False: 1.79k]
  ------------------
  491|      0|        if (mode[2] == '\0')
  ------------------
  |  Branch (491:13): [True: 0, False: 0]
  ------------------
  492|      0|          {
  493|      0|            mode_num |= MODE_PLUS;
  494|      0|            break;
  495|      0|          }
  496|      0|        G_GNUC_FALLTHROUGH;
  ------------------
  |  |  638|      0|#define G_GNUC_FALLTHROUGH __attribute__((fallthrough)) \
  |  |  639|      0|  GLIB_AVAILABLE_MACRO_IN_2_60
  ------------------
  497|      0|      default:
  ------------------
  |  Branch (497:7): [True: 0, False: 1.79k]
  ------------------
  498|      0|        g_warning ("Invalid GIOFileMode %s.", mode);
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  499|      0|        return NULL;
  500|  1.79k|    }
  501|       |
  502|  1.79k|  switch (mode_num)
  503|  1.79k|    {
  504|  1.79k|      case MODE_R:
  ------------------
  |  Branch (504:7): [True: 1.79k, False: 0]
  ------------------
  505|  1.79k|        flags = O_RDONLY;
  506|  1.79k|        break;
  507|      0|      case MODE_W:
  ------------------
  |  Branch (507:7): [True: 0, False: 1.79k]
  ------------------
  508|      0|        flags = O_WRONLY | O_TRUNC | O_CREAT;
  509|      0|        break;
  510|      0|      case MODE_A:
  ------------------
  |  Branch (510:7): [True: 0, False: 1.79k]
  ------------------
  511|      0|        flags = O_WRONLY | O_APPEND | O_CREAT;
  512|      0|        break;
  513|      0|      case MODE_R_PLUS:
  ------------------
  |  Branch (513:7): [True: 0, False: 1.79k]
  ------------------
  514|      0|        flags = O_RDWR;
  515|      0|        break;
  516|      0|      case MODE_W_PLUS:
  ------------------
  |  Branch (516:7): [True: 0, False: 1.79k]
  ------------------
  517|      0|        flags = O_RDWR | O_TRUNC | O_CREAT;
  518|      0|        break;
  519|      0|      case MODE_A_PLUS:
  ------------------
  |  Branch (519:7): [True: 0, False: 1.79k]
  ------------------
  520|      0|        flags = O_RDWR | O_APPEND | O_CREAT;
  521|      0|        break;
  522|      0|      case MODE_PLUS:
  ------------------
  |  Branch (522:7): [True: 0, False: 1.79k]
  ------------------
  523|      0|      default:
  ------------------
  |  Branch (523:7): [True: 0, False: 1.79k]
  ------------------
  524|      0|        g_assert_not_reached ();
  ------------------
  |  |  233|      0|#define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  525|      0|        flags = 0;
  526|  1.79k|    }
  527|       |
  528|  1.79k|  create_mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
  529|       |
  530|  1.79k|  fid = g_open (filename, flags, create_mode);
  ------------------
  |  |   72|  1.79k|#define g_open    open
  ------------------
  531|  1.79k|  if (fid == -1)
  ------------------
  |  Branch (531:7): [True: 0, False: 1.79k]
  ------------------
  532|      0|    {
  533|      0|      int err = errno;
  534|      0|      g_set_error_literal (error, G_FILE_ERROR,
  ------------------
  |  |   33|      0|#define G_FILE_ERROR g_file_error_quark ()
  ------------------
  535|      0|                           g_file_error_from_errno (err),
  536|      0|                           g_strerror (err));
  537|      0|      return (GIOChannel *)NULL;
  538|      0|    }
  539|       |
  540|  1.79k|  if (fstat (fid, &buffer) == -1) /* In case someone opens a FIFO */
  ------------------
  |  Branch (540:7): [True: 0, False: 1.79k]
  ------------------
  541|      0|    {
  542|      0|      int err = errno;
  543|      0|      close (fid);
  544|      0|      g_set_error_literal (error, G_FILE_ERROR,
  ------------------
  |  |   33|      0|#define G_FILE_ERROR g_file_error_quark ()
  ------------------
  545|      0|                           g_file_error_from_errno (err),
  546|      0|                           g_strerror (err));
  547|      0|      return (GIOChannel *)NULL;
  548|      0|    }
  549|       |
  550|  1.79k|  channel = (GIOChannel *) g_new (GIOUnixChannel, 1);
  ------------------
  |  |  299|  1.79k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  244|  1.79k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  1.79k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|  1.79k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|  1.79k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|  1.79k|	  gpointer __p;						\
  |  |  |  |  248|  1.79k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 1.79k]
  |  |  |  |  ------------------
  |  |  |  |  249|  1.79k|	    __p = g_##func (__n);				\
  |  |  |  |  250|  1.79k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 1.79k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|  1.79k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|  1.79k|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|  1.79k|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 1.79k]
  |  |  |  |  |  Branch (251:26): [True: 1.79k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|  1.79k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|  1.79k|	  else							\
  |  |  |  |  254|  1.79k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|  1.79k|	  __p;							\
  |  |  |  |  256|  1.79k|	}))
  |  |  ------------------
  ------------------
  551|       |
  552|  1.79k|  channel->is_seekable = S_ISREG (buffer.st_mode) || S_ISCHR (buffer.st_mode)
  ------------------
  |  Branch (552:26): [True: 1.79k, False: 0]
  |  Branch (552:54): [True: 0, False: 0]
  ------------------
  553|  1.79k|                         || S_ISBLK (buffer.st_mode);
  ------------------
  |  Branch (553:29): [True: 0, False: 0]
  ------------------
  554|       |
  555|  1.79k|  switch (mode_num)
  556|  1.79k|    {
  557|  1.79k|      case MODE_R:
  ------------------
  |  Branch (557:7): [True: 1.79k, False: 0]
  ------------------
  558|  1.79k|        channel->is_readable = TRUE;
  ------------------
  |  |  884|  1.79k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  1.79k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  559|  1.79k|        channel->is_writeable = FALSE;
  ------------------
  |  |  880|  1.79k|#define	FALSE	(0)
  ------------------
  560|  1.79k|        break;
  561|      0|      case MODE_W:
  ------------------
  |  Branch (561:7): [True: 0, False: 1.79k]
  ------------------
  562|      0|      case MODE_A:
  ------------------
  |  Branch (562:7): [True: 0, False: 1.79k]
  ------------------
  563|      0|        channel->is_readable = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  564|      0|        channel->is_writeable = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  565|      0|        break;
  566|      0|      case MODE_R_PLUS:
  ------------------
  |  Branch (566:7): [True: 0, False: 1.79k]
  ------------------
  567|      0|      case MODE_W_PLUS:
  ------------------
  |  Branch (567:7): [True: 0, False: 1.79k]
  ------------------
  568|      0|      case MODE_A_PLUS:
  ------------------
  |  Branch (568:7): [True: 0, False: 1.79k]
  ------------------
  569|      0|        channel->is_readable = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  570|      0|        channel->is_writeable = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  571|      0|        break;
  572|      0|      case MODE_PLUS:
  ------------------
  |  Branch (572:7): [True: 0, False: 1.79k]
  ------------------
  573|      0|      default:
  ------------------
  |  Branch (573:7): [True: 0, False: 1.79k]
  ------------------
  574|      0|        g_assert_not_reached ();
  ------------------
  |  |  233|      0|#define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  575|  1.79k|    }
  576|       |
  577|  1.79k|  g_io_channel_init (channel);
  578|  1.79k|  channel->close_on_unref = TRUE; /* must be after g_io_channel_init () */
  ------------------
  |  |  884|  1.79k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  1.79k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  579|  1.79k|  channel->funcs = &unix_channel_funcs;
  580|       |
  581|  1.79k|  ((GIOUnixChannel *) channel)->fd = fid;
  582|  1.79k|  return channel;
  583|  1.79k|}
g_io_channel_unix_new:
  616|  29.4k|{
  617|  29.4k|  struct stat buffer;
  618|  29.4k|  GIOUnixChannel *unix_channel = g_new (GIOUnixChannel, 1);
  ------------------
  |  |  299|  29.4k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  244|  29.4k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  29.4k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|  29.4k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|  29.4k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|  29.4k|	  gpointer __p;						\
  |  |  |  |  248|  29.4k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 29.4k]
  |  |  |  |  ------------------
  |  |  |  |  249|  29.4k|	    __p = g_##func (__n);				\
  |  |  |  |  250|  29.4k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 29.4k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|  29.4k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|  29.4k|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|  29.4k|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 29.4k]
  |  |  |  |  |  Branch (251:26): [True: 29.4k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|  29.4k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|  29.4k|	  else							\
  |  |  |  |  254|  29.4k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|  29.4k|	  __p;							\
  |  |  |  |  256|  29.4k|	}))
  |  |  ------------------
  ------------------
  619|  29.4k|  GIOChannel *channel = (GIOChannel *)unix_channel;
  620|       |
  621|  29.4k|  g_io_channel_init (channel);
  622|  29.4k|  channel->funcs = &unix_channel_funcs;
  623|       |
  624|  29.4k|  unix_channel->fd = fd;
  625|       |
  626|       |  /* I'm not sure if fstat on a non-file (e.g., socket) works
  627|       |   * it should be safe to say if it fails, the fd isn't seekable.
  628|       |   */
  629|       |  /* Newer UNIX versions support S_ISSOCK(), fstat() will probably
  630|       |   * succeed in most cases.
  631|       |   */
  632|  29.4k|  if (fstat (unix_channel->fd, &buffer) == 0)
  ------------------
  |  Branch (632:7): [True: 29.4k, False: 0]
  ------------------
  633|  29.4k|    channel->is_seekable = S_ISREG (buffer.st_mode) || S_ISCHR (buffer.st_mode)
  ------------------
  |  Branch (633:28): [True: 0, False: 29.4k]
  |  Branch (633:56): [True: 29.4k, False: 0]
  ------------------
  634|  29.4k|                           || S_ISBLK (buffer.st_mode);
  ------------------
  |  Branch (634:31): [True: 0, False: 0]
  ------------------
  635|      0|  else /* Assume not seekable */
  636|      0|    channel->is_seekable = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  637|       |
  638|  29.4k|  g_io_unix_get_flags (channel); /* Sets is_readable, is_writeable */
  639|       |
  640|  29.4k|  return channel;
  641|  29.4k|}
g_io_channel_unix_get_fd:
  656|  28.9k|{
  657|  28.9k|  GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
  658|  28.9k|  return unix_channel->fd;
  659|  28.9k|}
giounix.c:g_io_unix_read:
  187|  50.4k|{
  188|  50.4k|  GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
  189|  50.4k|  gssize result;
  190|       |
  191|  50.4k|  if (count > SSIZE_MAX) /* At least according to the Debian manpage for read */
  ------------------
  |  Branch (191:7): [True: 0, False: 50.4k]
  ------------------
  192|      0|    count = SSIZE_MAX;
  193|       |
  194|  50.4k| retry:
  195|  50.4k|  result = read (unix_channel->fd, buf, count);
  196|       |
  197|  50.4k|  if (result < 0)
  ------------------
  |  Branch (197:7): [True: 0, False: 50.4k]
  ------------------
  198|      0|    {
  199|      0|      int errsv = errno;
  200|      0|      *bytes_read = 0;
  201|       |
  202|      0|      switch (errsv)
  203|      0|        {
  204|      0|#ifdef EINTR
  205|      0|          case EINTR:
  ------------------
  |  Branch (205:11): [True: 0, False: 0]
  ------------------
  206|      0|            goto retry;
  207|      0|#endif
  208|      0|#ifdef EAGAIN
  209|      0|          case EAGAIN:
  ------------------
  |  Branch (209:11): [True: 0, False: 0]
  ------------------
  210|      0|            return G_IO_STATUS_AGAIN;
  211|      0|#endif
  212|      0|          default:
  ------------------
  |  Branch (212:11): [True: 0, False: 0]
  ------------------
  213|      0|            g_set_error_literal (err, G_IO_CHANNEL_ERROR,
  ------------------
  |  |   54|      0|#define G_IO_CHANNEL_ERROR g_io_channel_error_quark()
  ------------------
  214|      0|                                 g_io_channel_error_from_errno (errsv),
  215|      0|                                 g_strerror (errsv));
  216|      0|            return G_IO_STATUS_ERROR;
  217|      0|        }
  218|      0|    }
  219|       |
  220|  50.4k|  *bytes_read = result;
  221|       |
  222|  50.4k|  return (result > 0) ? G_IO_STATUS_NORMAL : G_IO_STATUS_EOF;
  ------------------
  |  Branch (222:10): [True: 48.6k, False: 1.79k]
  ------------------
  223|  50.4k|}
giounix.c:g_io_unix_write:
  231|  7.43k|{
  232|  7.43k|  GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
  233|  7.43k|  gssize result;
  234|       |
  235|  7.43k| retry:
  236|  7.43k|  result = write (unix_channel->fd, buf, count);
  237|       |
  238|  7.43k|  if (result < 0)
  ------------------
  |  Branch (238:7): [True: 6.58k, False: 848]
  ------------------
  239|  6.58k|    {
  240|  6.58k|      int errsv = errno;
  241|  6.58k|      *bytes_written = 0;
  242|       |
  243|  6.58k|      switch (errsv)
  244|  6.58k|        {
  245|      0|#ifdef EINTR
  246|      0|          case EINTR:
  ------------------
  |  Branch (246:11): [True: 0, False: 6.58k]
  ------------------
  247|      0|            goto retry;
  248|      0|#endif
  249|      0|#ifdef EAGAIN
  250|      0|          case EAGAIN:
  ------------------
  |  Branch (250:11): [True: 0, False: 6.58k]
  ------------------
  251|      0|            return G_IO_STATUS_AGAIN;
  252|      0|#endif
  253|  6.58k|          default:
  ------------------
  |  Branch (253:11): [True: 6.58k, False: 0]
  ------------------
  254|  6.58k|            g_set_error_literal (err, G_IO_CHANNEL_ERROR,
  ------------------
  |  |   54|  6.58k|#define G_IO_CHANNEL_ERROR g_io_channel_error_quark()
  ------------------
  255|  6.58k|                                 g_io_channel_error_from_errno (errsv),
  256|  6.58k|                                 g_strerror (errsv));
  257|  6.58k|            return G_IO_STATUS_ERROR;
  258|  6.58k|        }
  259|  6.58k|    }
  260|       |
  261|    848|  *bytes_written = result;
  262|       |
  263|    848|  return G_IO_STATUS_NORMAL;
  264|  7.43k|}
giounix.c:g_io_unix_seek:
  271|  1.79k|{
  272|  1.79k|  GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
  273|  1.79k|  int whence;
  274|  1.79k|  off_t tmp_offset;
  275|  1.79k|  off_t result;
  276|       |
  277|  1.79k|  switch (type)
  278|  1.79k|    {
  279|  1.79k|    case G_SEEK_SET:
  ------------------
  |  Branch (279:5): [True: 1.79k, False: 0]
  ------------------
  280|  1.79k|      whence = SEEK_SET;
  281|  1.79k|      break;
  282|      0|    case G_SEEK_CUR:
  ------------------
  |  Branch (282:5): [True: 0, False: 1.79k]
  ------------------
  283|      0|      whence = SEEK_CUR;
  284|      0|      break;
  285|      0|    case G_SEEK_END:
  ------------------
  |  Branch (285:5): [True: 0, False: 1.79k]
  ------------------
  286|      0|      whence = SEEK_END;
  287|      0|      break;
  288|      0|    default:
  ------------------
  |  Branch (288:5): [True: 0, False: 1.79k]
  ------------------
  289|      0|      whence = -1; /* Shut the compiler up */
  290|      0|      g_assert_not_reached ();
  ------------------
  |  |  233|      0|#define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  291|  1.79k|    }
  292|       |
  293|  1.79k|  tmp_offset = offset;
  294|  1.79k|  if (tmp_offset != offset)
  ------------------
  |  Branch (294:7): [True: 0, False: 1.79k]
  ------------------
  295|      0|    {
  296|      0|      g_set_error_literal (err, G_IO_CHANNEL_ERROR,
  ------------------
  |  |   54|      0|#define G_IO_CHANNEL_ERROR g_io_channel_error_quark()
  ------------------
  297|      0|                           g_io_channel_error_from_errno (EINVAL),
  298|      0|                           g_strerror (EINVAL));
  299|      0|      return G_IO_STATUS_ERROR;
  300|      0|    }
  301|       |  
  302|  1.79k|  result = lseek (unix_channel->fd, tmp_offset, whence);
  303|       |
  304|  1.79k|  if (result < 0)
  ------------------
  |  Branch (304:7): [True: 0, False: 1.79k]
  ------------------
  305|      0|    {
  306|      0|      int errsv = errno;
  307|      0|      g_set_error_literal (err, G_IO_CHANNEL_ERROR,
  ------------------
  |  |   54|      0|#define G_IO_CHANNEL_ERROR g_io_channel_error_quark()
  ------------------
  308|      0|                           g_io_channel_error_from_errno (errsv),
  309|      0|                           g_strerror (errsv));
  310|      0|      return G_IO_STATUS_ERROR;
  311|      0|    }
  312|       |
  313|  1.79k|  return G_IO_STATUS_NORMAL;
  314|  1.79k|}
giounix.c:g_io_unix_close:
  320|  59.9k|{
  321|  59.9k|  GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
  322|       |
  323|  59.9k|  if (close (unix_channel->fd) < 0)
  ------------------
  |  Branch (323:7): [True: 28.9k, False: 30.9k]
  ------------------
  324|  28.9k|    {
  325|  28.9k|      int errsv = errno;
  326|  28.9k|      g_set_error_literal (err, G_IO_CHANNEL_ERROR,
  ------------------
  |  |   54|  28.9k|#define G_IO_CHANNEL_ERROR g_io_channel_error_quark()
  ------------------
  327|  28.9k|                           g_io_channel_error_from_errno (errsv),
  328|  28.9k|                           g_strerror (errsv));
  329|  28.9k|      return G_IO_STATUS_ERROR;
  330|  28.9k|    }
  331|       |
  332|  30.9k|  return G_IO_STATUS_NORMAL;
  333|  59.9k|}
giounix.c:g_io_unix_create_watch:
  346|    251|{
  347|    251|  GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
  348|    251|  GSource *source;
  349|    251|  GIOUnixWatch *watch;
  350|       |
  351|       |
  352|    251|  source = g_source_new (&g_io_watch_funcs, sizeof (GIOUnixWatch));
  353|    251|  g_source_set_static_name (source, "GIOChannel (Unix)");
  354|    251|  watch = (GIOUnixWatch *)source;
  355|       |  
  356|    251|  watch->channel = channel;
  357|    251|  g_io_channel_ref (channel);
  358|       |  
  359|    251|  watch->condition = condition;
  360|       |
  361|    251|  watch->pollfd.fd = unix_channel->fd;
  362|    251|  watch->pollfd.events = condition;
  363|       |
  364|    251|  g_source_add_poll (source, &watch->pollfd);
  365|       |
  366|    251|  return source;
  367|    251|}
giounix.c:g_io_unix_free:
  337|  30.9k|{
  338|  30.9k|  GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
  339|       |
  340|  30.9k|  g_free (unix_channel);
  341|  30.9k|}
giounix.c:g_io_unix_set_flags:
  373|  6.61k|{
  374|  6.61k|  glong fcntl_flags;
  375|  6.61k|  GIOUnixChannel *unix_channel = (GIOUnixChannel *) channel;
  376|       |
  377|  6.61k|  fcntl_flags = 0;
  378|       |
  379|  6.61k|  if (flags & G_IO_FLAG_APPEND)
  ------------------
  |  Branch (379:7): [True: 0, False: 6.61k]
  ------------------
  380|      0|    fcntl_flags |= O_APPEND;
  381|  6.61k|  if (flags & G_IO_FLAG_NONBLOCK)
  ------------------
  |  Branch (381:7): [True: 0, False: 6.61k]
  ------------------
  382|      0|#ifdef O_NONBLOCK
  383|      0|    fcntl_flags |= O_NONBLOCK;
  384|       |#else
  385|       |    fcntl_flags |= O_NDELAY;
  386|       |#endif
  387|       |
  388|  6.61k|  if (fcntl (unix_channel->fd, F_SETFL, fcntl_flags) == -1)
  ------------------
  |  Branch (388:7): [True: 6.58k, False: 32]
  ------------------
  389|  6.58k|    {
  390|  6.58k|      int errsv = errno;
  391|  6.58k|      g_set_error_literal (err, G_IO_CHANNEL_ERROR,
  ------------------
  |  |   54|  6.58k|#define G_IO_CHANNEL_ERROR g_io_channel_error_quark()
  ------------------
  392|  6.58k|                           g_io_channel_error_from_errno (errsv),
  393|  6.58k|                           g_strerror (errsv));
  394|  6.58k|      return G_IO_STATUS_ERROR;
  395|  6.58k|    }
  396|       |
  397|     32|  return G_IO_STATUS_NORMAL;
  398|  6.61k|}
giounix.c:g_io_unix_get_flags:
  402|  36.0k|{
  403|  36.0k|  GIOFlags flags = G_IO_FLAG_NONE;
  404|  36.0k|  glong fcntl_flags;
  405|  36.0k|  GIOUnixChannel *unix_channel = (GIOUnixChannel *) channel;
  406|       |
  407|  36.0k|  fcntl_flags = fcntl (unix_channel->fd, F_GETFL);
  408|       |
  409|  36.0k|  if (fcntl_flags == -1)
  ------------------
  |  Branch (409:7): [True: 6.58k, False: 29.4k]
  ------------------
  410|  6.58k|    {
  411|  6.58k|      int err = errno;
  412|  6.58k|      g_warning (G_STRLOC "Error while getting flags for FD: %s (%d)",
  ------------------
  |  |  354|  6.58k|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|  6.58k|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|  6.58k|                               __VA_ARGS__)
  ------------------
  413|  6.58k|		 g_strerror (err), err);
  414|  6.58k|      return 0;
  415|  6.58k|    }
  416|       |
  417|  29.4k|  if (fcntl_flags & O_APPEND)
  ------------------
  |  Branch (417:7): [True: 0, False: 29.4k]
  ------------------
  418|      0|    flags |= G_IO_FLAG_APPEND;
  419|  29.4k|#ifdef O_NONBLOCK
  420|  29.4k|  if (fcntl_flags & O_NONBLOCK)
  ------------------
  |  Branch (420:7): [True: 0, False: 29.4k]
  ------------------
  421|       |#else
  422|       |  if (fcntl_flags & O_NDELAY)
  423|       |#endif
  424|      0|    flags |= G_IO_FLAG_NONBLOCK;
  425|       |
  426|  29.4k|  switch (fcntl_flags & (O_RDONLY | O_WRONLY | O_RDWR))
  427|  29.4k|    {
  428|      0|      case O_RDONLY:
  ------------------
  |  Branch (428:7): [True: 0, False: 29.4k]
  ------------------
  429|      0|        channel->is_readable = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  430|      0|        channel->is_writeable = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  431|      0|        break;
  432|      0|      case O_WRONLY:
  ------------------
  |  Branch (432:7): [True: 0, False: 29.4k]
  ------------------
  433|      0|        channel->is_readable = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  434|      0|        channel->is_writeable = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  435|      0|        break;
  436|  29.4k|      case O_RDWR:
  ------------------
  |  Branch (436:7): [True: 29.4k, False: 0]
  ------------------
  437|  29.4k|        channel->is_readable = TRUE;
  ------------------
  |  |  884|  29.4k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  29.4k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  438|  29.4k|        channel->is_writeable = TRUE;
  ------------------
  |  |  884|  29.4k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  29.4k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  439|  29.4k|        break;
  440|      0|      default:
  ------------------
  |  Branch (440:7): [True: 0, False: 29.4k]
  ------------------
  441|      0|        g_assert_not_reached ();
  ------------------
  |  |  233|      0|#define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  442|  29.4k|    }
  443|       |
  444|  29.4k|  return flags;
  445|  29.4k|}

glib_init:
  331|      4|{
  332|      4|  static gboolean glib_inited;
  333|       |
  334|      4|  if (glib_inited)
  ------------------
  |  Branch (334:7): [True: 2, False: 2]
  ------------------
  335|      2|    return;
  336|       |
  337|      2|  glib_inited = TRUE;
  ------------------
  |  |  884|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  338|       |
  339|      2|  g_messages_prefixed_init ();
  340|      2|  g_debug_init ();
  341|      2|  g_quark_init ();
  342|      2|  g_error_init ();
  343|      2|}
glib-init.c:glib_init_ctor:
  454|      2|{
  455|      2|  glib_init ();
  456|      2|}
glib-init.c:g_messages_prefixed_init:
  299|      2|{
  300|      2|  const GDebugKey keys[] = {
  301|      2|    { "error", G_LOG_LEVEL_ERROR },
  302|      2|    { "critical", G_LOG_LEVEL_CRITICAL },
  303|      2|    { "warning", G_LOG_LEVEL_WARNING },
  304|      2|    { "message", G_LOG_LEVEL_MESSAGE },
  305|      2|    { "info", G_LOG_LEVEL_INFO },
  306|      2|    { "debug", G_LOG_LEVEL_DEBUG }
  307|      2|  };
  308|       |
  309|      2|  g_log_msg_prefix = g_parse_debug_envvar ("G_MESSAGES_PREFIXED", keys, G_N_ELEMENTS (keys), g_log_msg_prefix);
  ------------------
  |  |  906|      2|#define G_N_ELEMENTS(arr)		(sizeof (arr) / sizeof ((arr)[0]))
  ------------------
  310|      2|}
glib-init.c:g_parse_debug_envvar:
  276|      4|{
  277|      4|  const gchar *value;
  278|       |
  279|       |#ifdef OS_WIN32
  280|       |  /* "fatal-warnings,fatal-criticals,all,help" is pretty short */
  281|       |  gchar buffer[100];
  282|       |
  283|       |  if (GetEnvironmentVariable (envvar, buffer, 100) < 100)
  284|       |    value = buffer;
  285|       |  else
  286|       |    return 0;
  287|       |#else
  288|      4|  value = getenv (envvar);
  289|      4|#endif
  290|       |
  291|      4|  if (value == NULL)
  ------------------
  |  Branch (291:7): [True: 4, False: 0]
  ------------------
  292|      4|    return default_value;
  293|       |
  294|      0|  return g_parse_debug_string (value, keys, n_keys);
  295|      4|}
glib-init.c:g_debug_init:
  314|      2|{
  315|      2|  const GDebugKey keys[] = {
  316|      2|    { "gc-friendly", 1 },
  317|      2|    {"fatal-warnings",  G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL },
  318|      2|    {"fatal-criticals", G_LOG_LEVEL_CRITICAL }
  319|      2|  };
  320|      2|  GLogLevelFlags flags;
  321|       |
  322|      2|  flags = g_parse_debug_envvar ("G_DEBUG", keys, G_N_ELEMENTS (keys), 0);
  ------------------
  |  |  906|      2|#define G_N_ELEMENTS(arr)		(sizeof (arr) / sizeof ((arr)[0]))
  ------------------
  323|       |
  324|      2|  g_log_always_fatal |= flags & G_LOG_LEVEL_MASK;
  325|       |
  326|      2|  g_mem_gc_friendly = flags & 1;
  327|      2|}

glib__private__:
   36|      2|{
   37|      2|  static GLibPrivateVTable table = {
   38|      2|    g_wakeup_new,
   39|      2|    g_wakeup_free,
   40|      2|    g_wakeup_get_pollfd,
   41|      2|    g_wakeup_signal,
   42|      2|    g_wakeup_acknowledge,
   43|       |
   44|      2|    g_get_worker_context,
   45|       |
   46|      2|    g_check_setuid,
   47|      2|    g_main_context_new_with_next_id,
   48|       |
   49|      2|    g_dir_open_with_errno,
   50|      2|    g_dir_new_from_dirp,
   51|       |
   52|      2|    glib_init,
   53|       |
   54|       |#ifdef G_OS_WIN32
   55|       |    g_win32_stat_utf8,
   56|       |    g_win32_lstat_utf8,
   57|       |    g_win32_readlink_utf8,
   58|       |    g_win32_fstat,
   59|       |    g_win32_find_helper_executable_path,
   60|       |    g_win32_reopen_noninherited,
   61|       |    g_win32_handle_is_socket,
   62|       |#endif
   63|      2|  };
   64|       |
   65|      2|  return &table;
   66|      2|}

g_list_free:
  195|  29.4k|{
  196|       |  g_slice_free_chain (GList, list, next);
  ------------------
  |  |   86|  29.4k|#define g_slice_free_chain(type, mem_chain, next)               \
  |  |  ------------------
  |  |  |  |  940|  29.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |   87|  29.4k|G_STMT_START {                                                  \
  |  |   88|  29.4k|  if (1) g_slice_free_chain_with_offset (sizeof (type),		\
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 29.4k, Folded]
  |  |  ------------------
  |  |   89|  29.4k|                 (mem_chain), G_STRUCT_OFFSET (type, next)); 	\
  |  |  ------------------
  |  |  |  |  919|  29.4k|      ((glong) offsetof (struct_type, member))
  |  |  ------------------
  |  |   90|  29.4k|  else   (void) ((type*) 0 == (mem_chain));			\
  |  |   91|  29.4k|} G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  29.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 29.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|  29.4k|}
g_list_free_1:
  216|  60.7k|{
  217|  60.7k|  _g_list_free1 (list);
  ------------------
  |  |  159|  60.7k|#define _g_list_free1(list)     g_slice_free (GList, list)
  |  |  ------------------
  |  |  |  |   81|  60.7k|#define g_slice_free(type, mem)                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  940|  60.7k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   82|  60.7k|G_STMT_START {                                                  \
  |  |  |  |   83|  60.7k|  if (1) g_slice_free1 (sizeof (type), (mem));			\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (83:7): [True: 60.7k, Folded]
  |  |  |  |  ------------------
  |  |  |  |   84|  60.7k|  else   (void) ((type*) 0 == (mem)); 				\
  |  |  |  |   85|  60.7k|} G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  948|  60.7k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (948:30): [Folded, False: 60.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  218|  60.7k|}
g_list_free_full:
  245|      2|{
  246|       |  g_list_foreach (list, (GFunc) free_func, NULL);
  247|      2|  g_list_free (list);
  248|      2|}
g_list_append:
  283|  67.5k|{
  284|  67.5k|  GList *new_list;
  285|  67.5k|  GList *last;
  286|       |  
  287|  67.5k|  new_list = _g_list_alloc ();
  ------------------
  |  |  157|  67.5k|#define _g_list_alloc()         g_slice_new (GList)
  |  |  ------------------
  |  |  |  |   48|  67.5k|#define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
  |  |  ------------------
  ------------------
  288|  67.5k|  new_list->data = data;
  289|  67.5k|  new_list->next = NULL;
  290|       |  
  291|  67.5k|  if (list)
  ------------------
  |  Branch (291:7): [True: 0, False: 67.5k]
  ------------------
  292|      0|    {
  293|      0|      last = g_list_last (list);
  294|       |      /* g_assert (last != NULL); */
  295|      0|      last->next = new_list;
  296|      0|      new_list->prev = last;
  297|       |
  298|      0|      return list;
  299|      0|    }
  300|  67.5k|  else
  301|  67.5k|    {
  302|       |      new_list->prev = NULL;
  303|  67.5k|      return new_list;
  304|  67.5k|    }
  305|  67.5k|}
g_list_foreach:
 1088|      2|{
 1089|      2|  while (list)
  ------------------
  |  Branch (1089:10): [True: 0, False: 2]
  ------------------
 1090|      0|    {
 1091|      0|      GList *next = list->next;
 1092|      0|      (*func) (list->data, user_data);
 1093|      0|      list = next;
 1094|      0|    }
 1095|      2|}

g_main_context_new:
  712|      2|{
  713|      2|  return g_main_context_new_with_flags (G_MAIN_CONTEXT_FLAGS_NONE);
  714|      2|}
g_main_context_new_with_flags:
  729|      2|{
  730|      2|  static gsize initialised;
  731|      2|  GMainContext *context;
  732|       |
  733|      2|  if (g_once_init_enter (&initialised))
  ------------------
  |  |  259|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (259:3): [True: 2, False: 0]
  |  |  ------------------
  |  |  260|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  824|      2|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  261|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (261:13): [Folded, False: 2]
  |  |  ------------------
  |  |  262|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  127|      4|  (G_GNUC_EXTENSION ({                                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  128|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));               \
  |  |  |  |  ------------------
  |  |  |  |  |  |  824|      2|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  |  |  ------------------
  |  |  |  |  129|      4|    glib_typeof (*(atomic)) gapg_temp_newval;                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      2|#define glib_typeof(t) __typeof__ (t)
  |  |  |  |  ------------------
  |  |  |  |  130|      4|    glib_typeof ((atomic)) gapg_temp_atomic = (atomic);                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      2|#define glib_typeof(t) __typeof__ (t)
  |  |  |  |  ------------------
  |  |  |  |  131|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  |  |  132|      4|    gapg_temp_newval;                                                      \
  |  |  |  |  133|      4|  }))
  |  |  ------------------
  |  |  |  Branch (262:6): [True: 2, False: 0]
  |  |  ------------------
  |  |  263|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (263:6): [True: 2, False: 0]
  |  |  ------------------
  |  |  264|      2|  }))
  ------------------
  734|      2|    {
  735|       |#ifdef G_MAIN_POLL_DEBUG
  736|       |      if (g_getenv ("G_MAIN_POLL_DEBUG") != NULL)
  737|       |        _g_main_poll_debug = TRUE;
  738|       |#endif
  739|       |
  740|      2|      g_once_init_leave (&initialised, TRUE);
  ------------------
  |  |  266|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  267|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  824|      2|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  268|      2|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (268:5): [Folded, False: 2]
  |  |  ------------------
  |  |  269|      2|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  270|      2|  }))
  ------------------
  741|      2|    }
  742|       |
  743|      2|  context = g_new0 (GMainContext, 1);
  ------------------
  |  |  316|      2|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|      2|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      2|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      2|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      2|	  gpointer __p;						\
  |  |  |  |  248|      2|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  249|      2|	    __p = g_##func (__n);				\
  |  |  |  |  250|      2|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      2|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      2|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      2|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 2]
  |  |  |  |  |  Branch (251:26): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      2|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      2|	  else							\
  |  |  |  |  254|      2|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      2|	  __p;							\
  |  |  |  |  256|      2|	}))
  |  |  ------------------
  ------------------
  744|       |
  745|      2|  TRACE (GLIB_MAIN_CONTEXT_NEW (context));
  746|       |
  747|      2|  g_mutex_init (&context->mutex);
  748|      2|  g_cond_init (&context->cond);
  749|       |
  750|      2|  context->sources = g_hash_table_new (NULL, NULL);
  751|      2|  context->owner = NULL;
  752|      2|  context->flags = flags;
  753|      2|  context->waiters = NULL;
  754|       |
  755|      2|  context->ref_count = 1;
  756|       |
  757|      2|  context->next_id = 1;
  758|       |  
  759|      2|  context->source_lists = NULL;
  760|       |  
  761|      2|  context->poll_func = g_poll;
  762|       |  
  763|      2|  context->cached_poll_array = NULL;
  764|      2|  context->cached_poll_array_size = 0;
  765|       |  
  766|      2|  context->pending_dispatches = g_ptr_array_new ();
  767|       |  
  768|      2|  context->time_is_fresh = FALSE;
  ------------------
  |  |  880|      2|#define	FALSE	(0)
  ------------------
  769|       |  
  770|      2|  context->wakeup = g_wakeup_new ();
  771|      2|  g_wakeup_get_pollfd (context->wakeup, &context->wake_up_rec);
  772|      2|  g_main_context_add_poll_unlocked (context, 0, &context->wake_up_rec);
  773|       |
  774|      2|  G_LOCK (main_context_list);
  ------------------
  |  |  137|      2|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      2|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  775|      2|  main_context_list = g_slist_append (main_context_list, context);
  776|       |
  777|       |#ifdef G_MAIN_POLL_DEBUG
  778|       |  if (_g_main_poll_debug)
  779|       |    g_print ("created context=%p\n", context);
  780|       |#endif
  781|       |
  782|      2|  G_UNLOCK (main_context_list);
  ------------------
  |  |  138|      2|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      2|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  783|       |
  784|      2|  return context;
  785|      2|}
g_main_context_default:
  799|  10.6k|{
  800|  10.6k|  static GMainContext *default_main_context = NULL;
  801|       |
  802|  10.6k|  if (g_once_init_enter (&default_main_context))
  ------------------
  |  |  259|  10.6k|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   62|  10.6k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (259:3): [True: 2, False: 10.6k]
  |  |  ------------------
  |  |  260|  10.6k|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  824|  10.6k|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  261|  10.6k|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (261:13): [Folded, False: 10.6k]
  |  |  ------------------
  |  |  262|  10.6k|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  127|  21.3k|  (G_GNUC_EXTENSION ({                                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  10.6k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  128|  21.3k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));               \
  |  |  |  |  ------------------
  |  |  |  |  |  |  824|  10.6k|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  |  |  ------------------
  |  |  |  |  129|  21.3k|    glib_typeof (*(atomic)) gapg_temp_newval;                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  10.6k|#define glib_typeof(t) __typeof__ (t)
  |  |  |  |  ------------------
  |  |  |  |  130|  21.3k|    glib_typeof ((atomic)) gapg_temp_atomic = (atomic);                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  10.6k|#define glib_typeof(t) __typeof__ (t)
  |  |  |  |  ------------------
  |  |  |  |  131|  21.3k|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  |  |  132|  21.3k|    gapg_temp_newval;                                                      \
  |  |  |  |  133|  21.3k|  }))
  |  |  ------------------
  |  |  |  Branch (262:6): [True: 2, False: 10.6k]
  |  |  ------------------
  |  |  263|  10.6k|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (263:6): [True: 2, False: 0]
  |  |  ------------------
  |  |  264|  10.6k|  }))
  ------------------
  803|      2|    {
  804|      2|      GMainContext *context;
  805|       |
  806|      2|      context = g_main_context_new ();
  807|       |
  808|      2|      TRACE (GLIB_MAIN_CONTEXT_DEFAULT (context));
  809|       |
  810|       |#ifdef G_MAIN_POLL_DEBUG
  811|       |      if (_g_main_poll_debug)
  812|       |        g_print ("default context=%p\n", context);
  813|       |#endif
  814|       |
  815|      2|      g_once_init_leave (&default_main_context, context);
  ------------------
  |  |  266|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  267|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  824|      2|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  268|      2|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (268:5): [Folded, False: 2]
  |  |  ------------------
  |  |  269|      2|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  270|      2|  }))
  ------------------
  816|      2|    }
  817|       |
  818|  10.6k|  return default_main_context;
  819|  10.6k|}
g_source_new:
 1023|  5.48k|{
 1024|  5.48k|  GSource *source;
 1025|       |
 1026|  5.48k|  g_return_val_if_fail (source_funcs != NULL, NULL);
  ------------------
  |  |  652|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.48k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  5.48k|      { } \
  |  |  655|  5.48k|    else \
  |  |  656|  5.48k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1027|  5.48k|  g_return_val_if_fail (struct_size >= sizeof (GSource), NULL);
  ------------------
  |  |  652|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.48k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  5.48k|      { } \
  |  |  655|  5.48k|    else \
  |  |  656|  5.48k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1028|       |  
 1029|  5.48k|  source = (GSource*) g_malloc0 (struct_size);
 1030|  5.48k|  source->priv = g_slice_new0 (GSourcePrivate);
  ------------------
  |  |   54|  5.48k|  (type *) (G_GNUC_EXTENSION ({                                 \
  |  |  ------------------
  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |   55|  5.48k|    gsize __s = sizeof (type);                                  \
  |  |   56|  5.48k|    gpointer __p;                                               \
  |  |   57|  5.48k|    __p = g_slice_alloc (__s);                                  \
  |  |   58|  5.48k|    memset (__p, 0, __s);                                       \
  |  |   59|  5.48k|    __p;                                                        \
  |  |   60|  5.48k|  }))
  ------------------
 1031|  5.48k|  source->source_funcs = source_funcs;
 1032|  5.48k|  source->ref_count = 1;
 1033|       |  
 1034|  5.48k|  source->priority = G_PRIORITY_DEFAULT;
  ------------------
  |  |  340|  5.48k|#define G_PRIORITY_DEFAULT          0
  ------------------
 1035|       |
 1036|  5.48k|  source->flags = G_HOOK_FLAG_ACTIVE;
 1037|       |
 1038|  5.48k|  source->priv->ready_time = -1;
 1039|       |
 1040|       |  /* NULL/0 initialization for all other fields */
 1041|       |
 1042|  5.48k|  TRACE (GLIB_SOURCE_NEW (source, source_funcs->prepare, source_funcs->check,
 1043|  5.48k|                          source_funcs->dispatch, source_funcs->finalize,
 1044|  5.48k|                          struct_size));
 1045|       |
 1046|  5.48k|  return source;
 1047|  5.48k|}
g_source_attach:
 1353|  5.48k|{
 1354|  5.48k|  guint result = 0;
 1355|       |
 1356|  5.48k|  g_return_val_if_fail (source != NULL, 0);
  ------------------
  |  |  652|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.48k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  5.48k|      { } \
  |  |  655|  5.48k|    else \
  |  |  656|  5.48k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1357|  5.48k|  g_return_val_if_fail (g_atomic_int_get (&source->ref_count) > 0, 0);
  ------------------
  |  |  652|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  16.4k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [Folded, False: 5.48k]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  5.48k|      { } \
  |  |  655|  5.48k|    else \
  |  |  656|  5.48k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1358|  5.48k|  g_return_val_if_fail (source->context == NULL, 0);
  ------------------
  |  |  652|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.48k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  5.48k|      { } \
  |  |  655|  5.48k|    else \
  |  |  656|  5.48k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1359|  5.48k|  g_return_val_if_fail (!SOURCE_DESTROYED (source), 0);
  ------------------
  |  |  652|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.48k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  5.48k|      { } \
  |  |  655|  5.48k|    else \
  |  |  656|  5.48k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1360|       |  
 1361|  5.48k|  if (!context)
  ------------------
  |  Branch (1361:7): [True: 5.48k, False: 0]
  ------------------
 1362|  5.48k|    context = g_main_context_default ();
 1363|       |
 1364|  5.48k|  LOCK_CONTEXT (context);
  ------------------
  |  |  428|  5.48k|#define LOCK_CONTEXT(context) g_mutex_lock (&context->mutex)
  ------------------
 1365|       |
 1366|  5.48k|  result = g_source_attach_unlocked (source, context, TRUE);
  ------------------
  |  |  884|  5.48k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  5.48k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1367|       |
 1368|  5.48k|  TRACE (GLIB_MAIN_SOURCE_ATTACH (g_source_get_name (source), source, context,
 1369|  5.48k|                                  result));
 1370|       |
 1371|  5.48k|  UNLOCK_CONTEXT (context);
  ------------------
  |  |  429|  5.48k|#define UNLOCK_CONTEXT(context) g_mutex_unlock (&context->mutex)
  ------------------
 1372|       |
 1373|  5.48k|  return result;
 1374|  5.48k|}
g_source_destroy:
 1455|  5.20k|{
 1456|  5.20k|  GMainContext *context;
 1457|       |  
 1458|  5.20k|  g_return_if_fail (source != NULL);
  ------------------
  |  |  639|  5.20k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.20k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  5.20k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.20k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.20k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.20k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.20k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.20k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.20k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.20k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.20k|   else                                         \
  |  |  |  |  |  | 1183|  5.20k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.20k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.20k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.20k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  5.20k|      { } \
  |  |  642|  5.20k|    else \
  |  |  643|  5.20k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  5.20k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.20k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.20k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1459|  5.20k|  g_return_if_fail (g_atomic_int_get (&source->ref_count) > 0);
  ------------------
  |  |  639|  5.20k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.20k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  5.20k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.20k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.20k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.20k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.20k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  15.6k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [Folded, False: 5.20k]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.20k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.20k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.20k|   else                                         \
  |  |  |  |  |  | 1183|  5.20k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.20k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.20k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.20k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  5.20k|      { } \
  |  |  642|  5.20k|    else \
  |  |  643|  5.20k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  5.20k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.20k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.20k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1460|       |  
 1461|  5.20k|  context = source->context;
 1462|       |  
 1463|  5.20k|  if (context)
  ------------------
  |  Branch (1463:7): [True: 5.20k, False: 0]
  ------------------
 1464|  5.20k|    g_source_destroy_internal (source, context, FALSE);
  ------------------
  |  |  880|  5.20k|#define	FALSE	(0)
  ------------------
 1465|      0|  else
 1466|      0|    source->flags &= ~G_HOOK_FLAG_ACTIVE;
 1467|  5.20k|}
g_source_add_poll:
 1550|    251|{
 1551|    251|  GMainContext *context;
 1552|       |  
 1553|    251|  g_return_if_fail (source != NULL);
  ------------------
  |  |  639|    251|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    251|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|    251|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    251|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    251| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    251|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    251|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    251|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 251, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    251|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    251|   else                                         \
  |  |  |  |  |  | 1183|    251|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    251|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    251|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 251, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|    251|      { } \
  |  |  642|    251|    else \
  |  |  643|    251|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|    251|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    251|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 251]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1554|    251|  g_return_if_fail (g_atomic_int_get (&source->ref_count) > 0);
  ------------------
  |  |  639|    251|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    251|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|    251|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    251|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    251| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    251|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    251|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    753|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [Folded, False: 251]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 251, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    251|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    251|   else                                         \
  |  |  |  |  |  | 1183|    251|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    251|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    251|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 251, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|    251|      { } \
  |  |  642|    251|    else \
  |  |  643|    251|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|    251|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    251|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 251]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1555|    251|  g_return_if_fail (fd != NULL);
  ------------------
  |  |  639|    251|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    251|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|    251|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    251|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    251| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    251|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    251|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    251|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 251, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    251|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    251|   else                                         \
  |  |  |  |  |  | 1183|    251|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    251|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    251|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 251, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|    251|      { } \
  |  |  642|    251|    else \
  |  |  643|    251|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|    251|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    251|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 251]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1556|    251|  g_return_if_fail (!SOURCE_DESTROYED (source));
  ------------------
  |  |  639|    251|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    251|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|    251|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    251|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    251| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    251|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    251|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    251|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 251, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    251|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    251|   else                                         \
  |  |  |  |  |  | 1183|    251|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    251|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    251|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 251, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|    251|      { } \
  |  |  642|    251|    else \
  |  |  643|    251|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|    251|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    251|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 251]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1557|       |  
 1558|    251|  context = source->context;
 1559|       |
 1560|    251|  if (context)
  ------------------
  |  Branch (1560:7): [True: 0, False: 251]
  ------------------
 1561|      0|    LOCK_CONTEXT (context);
  ------------------
  |  |  428|      0|#define LOCK_CONTEXT(context) g_mutex_lock (&context->mutex)
  ------------------
 1562|       |  
 1563|    251|  source->poll_fds = g_slist_prepend (source->poll_fds, fd);
 1564|       |
 1565|    251|  if (context)
  ------------------
  |  Branch (1565:7): [True: 0, False: 251]
  ------------------
 1566|      0|    {
 1567|      0|      if (!SOURCE_BLOCKED (source))
  ------------------
  |  |  433|      0|#define SOURCE_BLOCKED(source) (((source)->flags & G_SOURCE_BLOCKED) != 0)
  ------------------
  |  Branch (1567:11): [True: 0, False: 0]
  ------------------
 1568|      0|	g_main_context_add_poll_unlocked (context, source->priority, fd);
 1569|      0|      UNLOCK_CONTEXT (context);
  ------------------
  |  |  429|      0|#define UNLOCK_CONTEXT(context) g_mutex_unlock (&context->mutex)
  ------------------
 1570|      0|    }
 1571|    251|}
g_source_set_callback_indirect:
 1784|  5.48k|{
 1785|  5.48k|  GMainContext *context;
 1786|  5.48k|  gpointer old_cb_data;
 1787|  5.48k|  GSourceCallbackFuncs *old_cb_funcs;
 1788|       |  
 1789|  5.48k|  g_return_if_fail (source != NULL);
  ------------------
  |  |  639|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.48k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  5.48k|      { } \
  |  |  642|  5.48k|    else \
  |  |  643|  5.48k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1790|  5.48k|  g_return_if_fail (g_atomic_int_get (&source->ref_count) > 0);
  ------------------
  |  |  639|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  16.4k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [Folded, False: 5.48k]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  5.48k|      { } \
  |  |  642|  5.48k|    else \
  |  |  643|  5.48k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1791|  5.48k|  g_return_if_fail (callback_funcs != NULL || callback_data == NULL);
  ------------------
  |  |  639|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  10.9k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  5.48k|      { } \
  |  |  642|  5.48k|    else \
  |  |  643|  5.48k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1792|       |
 1793|  5.48k|  context = source->context;
 1794|       |
 1795|  5.48k|  if (context)
  ------------------
  |  Branch (1795:7): [True: 0, False: 5.48k]
  ------------------
 1796|      0|    LOCK_CONTEXT (context);
  ------------------
  |  |  428|      0|#define LOCK_CONTEXT(context) g_mutex_lock (&context->mutex)
  ------------------
 1797|       |
 1798|  5.48k|  if (callback_funcs != &g_source_callback_funcs)
  ------------------
  |  Branch (1798:7): [True: 0, False: 5.48k]
  ------------------
 1799|      0|    {
 1800|      0|      TRACE (GLIB_SOURCE_SET_CALLBACK_INDIRECT (source, callback_data,
 1801|      0|                                                callback_funcs->ref,
 1802|      0|                                                callback_funcs->unref,
 1803|      0|                                                callback_funcs->get));
 1804|      0|    }
 1805|       |
 1806|  5.48k|  old_cb_data = source->callback_data;
 1807|  5.48k|  old_cb_funcs = source->callback_funcs;
 1808|       |
 1809|  5.48k|  source->callback_data = callback_data;
 1810|  5.48k|  source->callback_funcs = callback_funcs;
 1811|       |  
 1812|  5.48k|  if (context)
  ------------------
  |  Branch (1812:7): [True: 0, False: 5.48k]
  ------------------
 1813|      0|    UNLOCK_CONTEXT (context);
  ------------------
  |  |  429|      0|#define UNLOCK_CONTEXT(context) g_mutex_unlock (&context->mutex)
  ------------------
 1814|       |  
 1815|  5.48k|  if (old_cb_funcs)
  ------------------
  |  Branch (1815:7): [True: 0, False: 5.48k]
  ------------------
 1816|      0|    old_cb_funcs->unref (old_cb_data);
 1817|  5.48k|}
g_source_set_callback:
 1852|  5.48k|{
 1853|  5.48k|  GSourceCallback *new_callback;
 1854|       |
 1855|  5.48k|  g_return_if_fail (source != NULL);
  ------------------
  |  |  639|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.48k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  5.48k|      { } \
  |  |  642|  5.48k|    else \
  |  |  643|  5.48k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1856|  5.48k|  g_return_if_fail (g_atomic_int_get (&source->ref_count) > 0);
  ------------------
  |  |  639|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  16.4k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [Folded, False: 5.48k]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  5.48k|      { } \
  |  |  642|  5.48k|    else \
  |  |  643|  5.48k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1857|       |
 1858|  5.48k|  TRACE (GLIB_SOURCE_SET_CALLBACK (source, func, data, notify));
 1859|       |
 1860|  5.48k|  new_callback = g_new (GSourceCallback, 1);
  ------------------
  |  |  299|  5.48k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  244|  5.48k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|  5.48k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|  5.48k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|  5.48k|	  gpointer __p;						\
  |  |  |  |  248|  5.48k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 5.48k]
  |  |  |  |  ------------------
  |  |  |  |  249|  5.48k|	    __p = g_##func (__n);				\
  |  |  |  |  250|  5.48k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|  5.48k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|  5.48k|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|  5.48k|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 5.48k]
  |  |  |  |  |  Branch (251:26): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|  5.48k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|  5.48k|	  else							\
  |  |  |  |  254|  5.48k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|  5.48k|	  __p;							\
  |  |  |  |  256|  5.48k|	}))
  |  |  ------------------
  ------------------
 1861|       |
 1862|  5.48k|  new_callback->ref_count = 1;
 1863|  5.48k|  new_callback->func = func;
 1864|  5.48k|  new_callback->data = data;
 1865|  5.48k|  new_callback->notify = notify;
 1866|       |
 1867|  5.48k|  g_source_set_callback_indirect (source, new_callback, &g_source_callback_funcs);
 1868|  5.48k|}
g_source_set_ready_time:
 2033|  5.23k|{
 2034|  5.23k|  GMainContext *context;
 2035|       |
 2036|  5.23k|  g_return_if_fail (source != NULL);
  ------------------
  |  |  639|  5.23k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.23k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  5.23k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.23k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.23k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.23k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.23k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.23k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.23k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.23k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.23k|   else                                         \
  |  |  |  |  |  | 1183|  5.23k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.23k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.23k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.23k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  5.23k|      { } \
  |  |  642|  5.23k|    else \
  |  |  643|  5.23k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  5.23k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.23k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.23k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2037|  5.23k|  g_return_if_fail (g_atomic_int_get (&source->ref_count) > 0);
  ------------------
  |  |  639|  5.23k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.23k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  5.23k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.23k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.23k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.23k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.23k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  15.6k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [Folded, False: 5.23k]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.23k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.23k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.23k|   else                                         \
  |  |  |  |  |  | 1183|  5.23k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.23k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.23k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.23k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  5.23k|      { } \
  |  |  642|  5.23k|    else \
  |  |  643|  5.23k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  5.23k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.23k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.23k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2038|       |
 2039|  5.23k|  context = source->context;
 2040|       |
 2041|  5.23k|  if (context)
  ------------------
  |  Branch (2041:7): [True: 0, False: 5.23k]
  ------------------
 2042|      0|    LOCK_CONTEXT (context);
  ------------------
  |  |  428|      0|#define LOCK_CONTEXT(context) g_mutex_lock (&context->mutex)
  ------------------
 2043|       |
 2044|  5.23k|  if (source->priv->ready_time == ready_time)
  ------------------
  |  Branch (2044:7): [True: 0, False: 5.23k]
  ------------------
 2045|      0|    {
 2046|      0|      if (context)
  ------------------
  |  Branch (2046:11): [True: 0, False: 0]
  ------------------
 2047|      0|        UNLOCK_CONTEXT (context);
  ------------------
  |  |  429|      0|#define UNLOCK_CONTEXT(context) g_mutex_unlock (&context->mutex)
  ------------------
 2048|       |
 2049|      0|      return;
 2050|      0|    }
 2051|       |
 2052|  5.23k|  source->priv->ready_time = ready_time;
 2053|       |
 2054|  5.23k|  TRACE (GLIB_SOURCE_SET_READY_TIME (source, ready_time));
 2055|       |
 2056|  5.23k|  if (context)
  ------------------
  |  Branch (2056:7): [True: 0, False: 5.23k]
  ------------------
 2057|      0|    {
 2058|       |      /* Quite likely that we need to change the timeout on the poll */
 2059|      0|      if (!SOURCE_BLOCKED (source))
  ------------------
  |  |  433|      0|#define SOURCE_BLOCKED(source) (((source)->flags & G_SOURCE_BLOCKED) != 0)
  ------------------
  |  Branch (2059:11): [True: 0, False: 0]
  ------------------
 2060|      0|        g_wakeup_signal (context->wakeup);
 2061|      0|      UNLOCK_CONTEXT (context);
  ------------------
  |  |  429|      0|#define UNLOCK_CONTEXT(context) g_mutex_unlock (&context->mutex)
  ------------------
 2062|      0|    }
 2063|  5.23k|}
g_source_set_static_name:
 2220|    251|{
 2221|    251|  g_source_set_name_full (source, name, TRUE);
  ------------------
  |  |  884|    251|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|    251|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2222|    251|}
g_source_ref:
 2294|  5.48k|{
 2295|  5.48k|  g_return_val_if_fail (source != NULL, NULL);
  ------------------
  |  |  652|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.48k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  5.48k|      { } \
  |  |  655|  5.48k|    else \
  |  |  656|  5.48k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2296|       |  /* We allow ref_count == 0 here to allow the dispose function to resurrect
 2297|       |   * the GSource if needed */
 2298|  5.48k|  g_return_val_if_fail (g_atomic_int_get (&source->ref_count) >= 0, NULL);
  ------------------
  |  |  652|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  16.4k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [Folded, False: 5.48k]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  5.48k|      { } \
  |  |  655|  5.48k|    else \
  |  |  656|  5.48k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2299|       |
 2300|  5.48k|  g_atomic_int_inc (&source->ref_count);
  ------------------
  |  |  162|  5.48k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|  5.48k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|  5.48k|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  164|  5.48k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded, False: 5.48k]
  |  |  ------------------
  |  |  165|  5.48k|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  166|  5.48k|  }))
  ------------------
 2301|       |
 2302|  5.48k|  return source;
 2303|  5.48k|}
g_source_unref:
 2436|  5.48k|{
 2437|  5.48k|  g_return_if_fail (source != NULL);
  ------------------
  |  |  639|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.48k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  5.48k|      { } \
  |  |  642|  5.48k|    else \
  |  |  643|  5.48k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2438|  5.48k|  g_return_if_fail (g_atomic_int_get (&source->ref_count) > 0);
  ------------------
  |  |  639|  5.48k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.48k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  5.48k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.48k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.48k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.48k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.48k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  16.4k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [Folded, False: 5.48k]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.48k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.48k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.48k|   else                                         \
  |  |  |  |  |  | 1183|  5.48k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.48k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.48k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.48k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  5.48k|      { } \
  |  |  642|  5.48k|    else \
  |  |  643|  5.48k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  5.48k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.48k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2439|       |
 2440|  5.48k|  g_source_unref_internal (source, source->context, FALSE);
  ------------------
  |  |  880|  5.48k|#define	FALSE	(0)
  ------------------
 2441|  5.48k|}
g_main_context_find_source_by_id:
 2466|  5.20k|{
 2467|  5.20k|  GSource *source;
 2468|       |
 2469|  5.20k|  g_return_val_if_fail (source_id > 0, NULL);
  ------------------
  |  |  652|  5.20k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.20k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  5.20k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.20k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.20k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.20k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.20k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.20k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.20k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.20k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.20k|   else                                         \
  |  |  |  |  |  | 1183|  5.20k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.20k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.20k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.20k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  5.20k|      { } \
  |  |  655|  5.20k|    else \
  |  |  656|  5.20k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  5.20k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.20k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.20k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2470|       |
 2471|  5.20k|  if (context == NULL)
  ------------------
  |  Branch (2471:7): [True: 5.20k, False: 0]
  ------------------
 2472|  5.20k|    context = g_main_context_default ();
 2473|       |
 2474|  5.20k|  LOCK_CONTEXT (context);
  ------------------
  |  |  428|  5.20k|#define LOCK_CONTEXT(context) g_mutex_lock (&context->mutex)
  ------------------
 2475|  5.20k|  source = g_hash_table_lookup (context->sources, GUINT_TO_POINTER (source_id));
  ------------------
  |  |  104|  5.20k|#define GUINT_TO_POINTER(u)	((gpointer) (gulong) (u))
  ------------------
 2476|  5.20k|  UNLOCK_CONTEXT (context);
  ------------------
  |  |  429|  5.20k|#define UNLOCK_CONTEXT(context) g_mutex_unlock (&context->mutex)
  ------------------
 2477|       |
 2478|  5.20k|  if (source && SOURCE_DESTROYED (source))
  ------------------
  |  |  432|  5.20k|#define SOURCE_DESTROYED(source) (((source)->flags & G_HOOK_FLAG_ACTIVE) == 0)
  |  |  ------------------
  |  |  |  Branch (432:34): [True: 0, False: 5.20k]
  |  |  ------------------
  ------------------
  |  Branch (2478:7): [True: 5.20k, False: 0]
  ------------------
 2479|      0|    source = NULL;
 2480|       |
 2481|  5.20k|  return source;
 2482|  5.20k|}
g_source_remove:
 2607|  34.1k|{
 2608|  34.1k|  GSource *source;
 2609|       |
 2610|  34.1k|  g_return_val_if_fail (tag > 0, FALSE);
  ------------------
  |  |  652|  34.1k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  34.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  34.1k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  34.1k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  34.1k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  34.1k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  34.1k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  34.1k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.20k, False: 28.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  34.1k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  34.1k|   else                                         \
  |  |  |  |  |  | 1183|  34.1k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  34.1k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  34.1k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.20k, False: 28.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  34.1k|      { } \
  |  |  655|  34.1k|    else \
  |  |  656|  34.1k|      { \
  |  |  657|  28.9k|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|  28.9k|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|  28.9k|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|  28.9k|                                  #expr); \
  |  |  660|  28.9k|        return (val); \
  |  |  661|  28.9k|      } \
  |  |  662|  34.1k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  34.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.20k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2611|       |
 2612|  5.20k|  source = g_main_context_find_source_by_id (NULL, tag);
 2613|  5.20k|  if (source)
  ------------------
  |  Branch (2613:7): [True: 5.20k, False: 0]
  ------------------
 2614|  5.20k|    g_source_destroy (source);
 2615|      0|  else
 2616|      0|    g_critical ("Source ID %u was not found when attempting to remove it", tag);
  ------------------
  |  |  351|      0|#define g_critical(...) g_log (G_LOG_DOMAIN,         \
  |  |  352|      0|                               G_LOG_LEVEL_CRITICAL, \
  |  |  353|      0|                               __VA_ARGS__)
  ------------------
 2617|       |
 2618|       |  return source != NULL;
 2619|  34.1k|}
g_get_current_time:
 2906|  9.01k|{
 2907|  9.01k|  gint64 tv;
 2908|       |
 2909|  9.01k|  g_return_if_fail (result != NULL);
  ------------------
  |  |  639|  9.01k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  9.01k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  9.01k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  9.01k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  9.01k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  9.01k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  9.01k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  9.01k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 9.01k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  9.01k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  9.01k|   else                                         \
  |  |  |  |  |  | 1183|  9.01k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  9.01k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  9.01k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 9.01k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  9.01k|      { } \
  |  |  642|  9.01k|    else \
  |  |  643|  9.01k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  9.01k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  9.01k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 9.01k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2910|       |
 2911|  9.01k|  tv = g_get_real_time ();
 2912|       |
 2913|  9.01k|  result->tv_sec = tv / 1000000;
 2914|  9.01k|  result->tv_usec = tv % 1000000;
 2915|  9.01k|}
g_get_real_time:
 2937|  1.74M|{
 2938|  1.74M|#ifndef G_OS_WIN32
 2939|  1.74M|  struct timeval r;
 2940|       |
 2941|       |  /* this is required on alpha, there the timeval structs are ints
 2942|       |   * not longs and a cast only would fail horribly */
 2943|  1.74M|  gettimeofday (&r, NULL);
 2944|       |
 2945|  1.74M|  return (((gint64) r.tv_sec) * 1000000) + r.tv_usec;
 2946|       |#else
 2947|       |  FILETIME ft;
 2948|       |  guint64 time64;
 2949|       |
 2950|       |  GetSystemTimeAsFileTime (&ft);
 2951|       |  memmove (&time64, &ft, sizeof (FILETIME));
 2952|       |
 2953|       |  /* Convert from 100s of nanoseconds since 1601-01-01
 2954|       |   * to Unix epoch. This is Y2038 safe.
 2955|       |   */
 2956|       |  time64 -= G_GINT64_CONSTANT (116444736000000000);
 2957|       |  time64 /= 10;
 2958|       |
 2959|       |  return time64;
 2960|       |#endif
 2961|  1.74M|}
g_get_monotonic_time:
 3064|  5.23k|{
 3065|  5.23k|  struct timespec ts;
 3066|  5.23k|  gint result;
 3067|       |
 3068|  5.23k|  result = clock_gettime (CLOCK_MONOTONIC, &ts);
 3069|       |
 3070|  5.23k|  if G_UNLIKELY (result != 0)
  ------------------
  |  | 1187|  5.23k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  5.23k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  5.23k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  5.23k|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  5.23k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 5.23k]
  |  |  |  |  ------------------
  |  |  |  | 1181|  5.23k|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  5.23k|   else                                         \
  |  |  |  | 1183|  5.23k|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  5.23k|   _g_boolean_var_;                             \
  |  |  |  | 1185|  5.23k|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 0, False: 5.23k]
  |  |  ------------------
  ------------------
 3071|  5.23k|    g_error ("GLib requires working CLOCK_MONOTONIC");
  ------------------
  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  346|      0|                        for (;;) ;                   \
  |  |  347|      0|                      } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3072|       |
 3073|  5.23k|  return (((gint64) ts.tv_sec) * 1000000) + (ts.tv_nsec / 1000);
 3074|  5.23k|}
g_timeout_add_full:
 5164|  5.23k|{
 5165|  5.23k|  return timeout_add_full (priority, interval, FALSE, FALSE, function, data, notify);
  ------------------
  |  |  880|  5.23k|#define	FALSE	(0)
  ------------------
                return timeout_add_full (priority, interval, FALSE, FALSE, function, data, notify);
  ------------------
  |  |  880|  5.23k|#define	FALSE	(0)
  ------------------
 5166|  5.23k|}
g_timeout_add:
 5214|  5.23k|{
 5215|  5.23k|  return g_timeout_add_full (G_PRIORITY_DEFAULT, 
  ------------------
  |  |  340|  5.23k|#define G_PRIORITY_DEFAULT          0
  ------------------
 5216|       |			     interval, function, data, NULL);
 5217|  5.23k|}
gmain.c:g_source_attach_unlocked:
 1278|  5.48k|{
 1279|  5.48k|  GSList *tmp_list;
 1280|  5.48k|  guint id;
 1281|       |
 1282|       |  /* The counter may have wrapped, so we must ensure that we do not
 1283|       |   * reuse the source id of an existing source.
 1284|       |   */
 1285|  5.48k|  do
 1286|  5.48k|    id = context->next_id++;
 1287|  5.48k|  while (id == 0 || g_hash_table_contains (context->sources, GUINT_TO_POINTER (id)));
  ------------------
  |  |  104|  5.48k|#define GUINT_TO_POINTER(u)	((gpointer) (gulong) (u))
  ------------------
  |  Branch (1287:10): [True: 0, False: 5.48k]
  |  Branch (1287:21): [True: 0, False: 5.48k]
  ------------------
 1288|       |
 1289|  5.48k|  source->context = context;
 1290|  5.48k|  source->source_id = id;
 1291|  5.48k|  g_source_ref (source);
 1292|       |
 1293|  5.48k|  g_hash_table_insert (context->sources, GUINT_TO_POINTER (id), source);
  ------------------
  |  |  104|  5.48k|#define GUINT_TO_POINTER(u)	((gpointer) (gulong) (u))
  ------------------
 1294|       |
 1295|  5.48k|  source_add_to_context (source, context);
 1296|       |
 1297|  5.48k|  if (!SOURCE_BLOCKED (source))
  ------------------
  |  |  433|  5.48k|#define SOURCE_BLOCKED(source) (((source)->flags & G_SOURCE_BLOCKED) != 0)
  ------------------
  |  Branch (1297:7): [True: 5.48k, False: 0]
  ------------------
 1298|  5.48k|    {
 1299|  5.48k|      tmp_list = source->poll_fds;
 1300|  5.73k|      while (tmp_list)
  ------------------
  |  Branch (1300:14): [True: 251, False: 5.48k]
  ------------------
 1301|    251|        {
 1302|    251|          g_main_context_add_poll_unlocked (context, source->priority, tmp_list->data);
 1303|    251|          tmp_list = tmp_list->next;
 1304|    251|        }
 1305|       |
 1306|  5.48k|      for (tmp_list = source->priv->fds; tmp_list; tmp_list = tmp_list->next)
  ------------------
  |  Branch (1306:42): [True: 0, False: 5.48k]
  ------------------
 1307|      0|        g_main_context_add_poll_unlocked (context, source->priority, tmp_list->data);
 1308|  5.48k|    }
 1309|       |
 1310|  5.48k|  tmp_list = source->priv->child_sources;
 1311|  5.48k|  while (tmp_list)
  ------------------
  |  Branch (1311:10): [True: 0, False: 5.48k]
  ------------------
 1312|      0|    {
 1313|      0|      g_source_attach_unlocked (tmp_list->data, context, FALSE);
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 1314|      0|      tmp_list = tmp_list->next;
 1315|      0|    }
 1316|       |
 1317|       |  /* If another thread has acquired the context, wake it up since it
 1318|       |   * might be in poll() right now.
 1319|       |   */
 1320|  5.48k|  if (do_wakeup &&
  ------------------
  |  Branch (1320:7): [True: 5.48k, False: 0]
  ------------------
 1321|  5.48k|      (context->flags & G_MAIN_CONTEXT_FLAGS_OWNERLESS_POLLING ||
  ------------------
  |  Branch (1321:8): [True: 0, False: 5.48k]
  ------------------
 1322|  5.48k|       (context->owner && context->owner != G_THREAD_SELF)))
  ------------------
  |  |  430|      0|#define G_THREAD_SELF g_thread_self ()
  ------------------
  |  Branch (1322:9): [True: 0, False: 5.48k]
  |  Branch (1322:27): [True: 0, False: 0]
  ------------------
 1323|      0|    {
 1324|      0|      g_wakeup_signal (context->wakeup);
 1325|      0|    }
 1326|       |
 1327|  5.48k|  g_trace_mark (G_TRACE_CURRENT_TIME, 0,
 1328|  5.48k|                "GLib", "g_source_attach",
 1329|  5.48k|                "%s to context %p",
 1330|  5.48k|                (g_source_get_name (source) != NULL) ? g_source_get_name (source) : "(unnamed)",
 1331|  5.48k|                context);
 1332|       |
 1333|  5.48k|  return source->source_id;
 1334|  5.48k|}
gmain.c:source_add_to_context:
 1210|  5.48k|{
 1211|  5.48k|  GSourceList *source_list;
 1212|  5.48k|  GSource *prev, *next;
 1213|       |
 1214|  5.48k|  source_list = find_source_list_for_priority (context, source->priority, TRUE);
  ------------------
  |  |  884|  5.48k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  5.48k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1215|       |
 1216|  5.48k|  if (source->priv->parent_source)
  ------------------
  |  Branch (1216:7): [True: 0, False: 5.48k]
  ------------------
 1217|      0|    {
 1218|      0|      g_assert (source_list->head != NULL);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1219|       |
 1220|       |      /* Put the source immediately before its parent */
 1221|      0|      prev = source->priv->parent_source->prev;
 1222|      0|      next = source->priv->parent_source;
 1223|      0|    }
 1224|  5.48k|  else
 1225|  5.48k|    {
 1226|  5.48k|      prev = source_list->tail;
 1227|  5.48k|      next = NULL;
 1228|  5.48k|    }
 1229|       |
 1230|  5.48k|  source->next = next;
 1231|  5.48k|  if (next)
  ------------------
  |  Branch (1231:7): [True: 0, False: 5.48k]
  ------------------
 1232|      0|    next->prev = source;
 1233|  5.48k|  else
 1234|  5.48k|    source_list->tail = source;
 1235|       |  
 1236|  5.48k|  source->prev = prev;
 1237|  5.48k|  if (prev)
  ------------------
  |  Branch (1237:7): [True: 5.48k, False: 2]
  ------------------
 1238|  5.48k|    prev->next = source;
 1239|      2|  else
 1240|      2|    source_list->head = source;
 1241|  5.48k|}
gmain.c:find_source_list_for_priority:
 1160|  10.6k|{
 1161|  10.6k|  GList *iter, *last;
 1162|  10.6k|  GSourceList *source_list;
 1163|       |
 1164|  10.6k|  last = NULL;
 1165|  10.6k|  for (iter = context->source_lists; iter != NULL; last = iter, iter = iter->next)
  ------------------
  |  Branch (1165:38): [True: 10.6k, False: 2]
  ------------------
 1166|  10.6k|    {
 1167|  10.6k|      source_list = iter->data;
 1168|       |
 1169|  10.6k|      if (source_list->priority == priority)
  ------------------
  |  Branch (1169:11): [True: 10.6k, False: 0]
  ------------------
 1170|  10.6k|	return source_list;
 1171|       |
 1172|      0|      if (source_list->priority > priority)
  ------------------
  |  Branch (1172:11): [True: 0, False: 0]
  ------------------
 1173|      0|	{
 1174|      0|	  if (!create)
  ------------------
  |  Branch (1174:8): [True: 0, False: 0]
  ------------------
 1175|      0|	    return NULL;
 1176|       |
 1177|      0|	  source_list = g_slice_new0 (GSourceList);
  ------------------
  |  |   54|      0|  (type *) (G_GNUC_EXTENSION ({                                 \
  |  |  ------------------
  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |   55|      0|    gsize __s = sizeof (type);                                  \
  |  |   56|      0|    gpointer __p;                                               \
  |  |   57|      0|    __p = g_slice_alloc (__s);                                  \
  |  |   58|      0|    memset (__p, 0, __s);                                       \
  |  |   59|      0|    __p;                                                        \
  |  |   60|      0|  }))
  ------------------
 1178|      0|	  source_list->priority = priority;
 1179|      0|	  context->source_lists = g_list_insert_before (context->source_lists,
 1180|      0|							iter,
 1181|      0|							source_list);
 1182|      0|	  return source_list;
 1183|      0|	}
 1184|      0|    }
 1185|       |
 1186|      2|  if (!create)
  ------------------
  |  Branch (1186:7): [True: 0, False: 2]
  ------------------
 1187|      0|    return NULL;
 1188|       |
 1189|      2|  source_list = g_slice_new0 (GSourceList);
  ------------------
  |  |   54|      2|  (type *) (G_GNUC_EXTENSION ({                                 \
  |  |  ------------------
  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |   55|      2|    gsize __s = sizeof (type);                                  \
  |  |   56|      2|    gpointer __p;                                               \
  |  |   57|      2|    __p = g_slice_alloc (__s);                                  \
  |  |   58|      2|    memset (__p, 0, __s);                                       \
  |  |   59|      2|    __p;                                                        \
  |  |   60|      2|  }))
  ------------------
 1190|      2|  source_list->priority = priority;
 1191|       |
 1192|      2|  if (!last)
  ------------------
  |  Branch (1192:7): [True: 2, False: 0]
  ------------------
 1193|      2|    context->source_lists = g_list_append (NULL, source_list);
 1194|      0|  else
 1195|      0|    {
 1196|       |      /* This just appends source_list to the end of
 1197|       |       * context->source_lists without having to walk the list again.
 1198|       |       */
 1199|      0|      last = g_list_append (last, source_list);
 1200|      0|      (void) last;
 1201|      0|    }
 1202|      2|  return source_list;
 1203|      2|}
gmain.c:g_source_destroy_internal:
 1380|  5.20k|{
 1381|  5.20k|  TRACE (GLIB_MAIN_SOURCE_DESTROY (g_source_get_name (source), source,
 1382|  5.20k|                                   context));
 1383|       |
 1384|  5.20k|  if (!have_lock)
  ------------------
  |  Branch (1384:7): [True: 5.20k, False: 0]
  ------------------
 1385|  5.20k|    LOCK_CONTEXT (context);
  ------------------
  |  |  428|  5.20k|#define LOCK_CONTEXT(context) g_mutex_lock (&context->mutex)
  ------------------
 1386|       |  
 1387|  5.20k|  if (!SOURCE_DESTROYED (source))
  ------------------
  |  |  432|  5.20k|#define SOURCE_DESTROYED(source) (((source)->flags & G_HOOK_FLAG_ACTIVE) == 0)
  ------------------
  |  Branch (1387:7): [True: 5.20k, False: 0]
  ------------------
 1388|  5.20k|    {
 1389|  5.20k|      GSList *tmp_list;
 1390|  5.20k|      gpointer old_cb_data;
 1391|  5.20k|      GSourceCallbackFuncs *old_cb_funcs;
 1392|       |      
 1393|  5.20k|      source->flags &= ~G_HOOK_FLAG_ACTIVE;
 1394|       |
 1395|  5.20k|      old_cb_data = source->callback_data;
 1396|  5.20k|      old_cb_funcs = source->callback_funcs;
 1397|       |
 1398|  5.20k|      source->callback_data = NULL;
 1399|  5.20k|      source->callback_funcs = NULL;
 1400|       |
 1401|  5.20k|      if (old_cb_funcs)
  ------------------
  |  Branch (1401:11): [True: 5.20k, False: 0]
  ------------------
 1402|  5.20k|	{
 1403|  5.20k|	  UNLOCK_CONTEXT (context);
  ------------------
  |  |  429|  5.20k|#define UNLOCK_CONTEXT(context) g_mutex_unlock (&context->mutex)
  ------------------
 1404|  5.20k|	  old_cb_funcs->unref (old_cb_data);
 1405|  5.20k|	  LOCK_CONTEXT (context);
  ------------------
  |  |  428|  5.20k|#define LOCK_CONTEXT(context) g_mutex_lock (&context->mutex)
  ------------------
 1406|  5.20k|	}
 1407|       |
 1408|  5.20k|      if (!SOURCE_BLOCKED (source))
  ------------------
  |  |  433|  5.20k|#define SOURCE_BLOCKED(source) (((source)->flags & G_SOURCE_BLOCKED) != 0)
  ------------------
  |  Branch (1408:11): [True: 5.20k, False: 0]
  ------------------
 1409|  5.20k|	{
 1410|  5.20k|	  tmp_list = source->poll_fds;
 1411|  5.20k|	  while (tmp_list)
  ------------------
  |  Branch (1411:11): [True: 0, False: 5.20k]
  ------------------
 1412|      0|	    {
 1413|      0|	      g_main_context_remove_poll_unlocked (context, tmp_list->data);
 1414|      0|	      tmp_list = tmp_list->next;
 1415|      0|	    }
 1416|       |
 1417|  5.20k|          for (tmp_list = source->priv->fds; tmp_list; tmp_list = tmp_list->next)
  ------------------
  |  Branch (1417:46): [True: 0, False: 5.20k]
  ------------------
 1418|      0|            g_main_context_remove_poll_unlocked (context, tmp_list->data);
 1419|  5.20k|	}
 1420|       |
 1421|  5.20k|      while (source->priv->child_sources)
  ------------------
  |  Branch (1421:14): [True: 0, False: 5.20k]
  ------------------
 1422|      0|        g_child_source_remove_internal (source->priv->child_sources->data, context);
 1423|       |
 1424|  5.20k|      if (source->priv->parent_source)
  ------------------
  |  Branch (1424:11): [True: 0, False: 5.20k]
  ------------------
 1425|      0|        g_child_source_remove_internal (source, context);
 1426|       |	  
 1427|  5.20k|      g_source_unref_internal (source, context, TRUE);
  ------------------
  |  |  884|  5.20k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  5.20k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1428|  5.20k|    }
 1429|       |
 1430|  5.20k|  if (!have_lock)
  ------------------
  |  Branch (1430:7): [True: 5.20k, False: 0]
  ------------------
 1431|  5.20k|    UNLOCK_CONTEXT (context);
  ------------------
  |  |  429|  5.20k|#define UNLOCK_CONTEXT(context) g_mutex_unlock (&context->mutex)
  ------------------
 1432|  5.20k|}
gmain.c:g_source_callback_unref:
 1733|  5.20k|{
 1734|  5.20k|  GSourceCallback *callback = cb_data;
 1735|       |
 1736|  5.20k|  if (g_atomic_int_dec_and_test (&callback->ref_count))
  ------------------
  |  |  168|  5.20k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|  5.20k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (168:3): [True: 5.20k, False: 0]
  |  |  ------------------
  |  |  169|  5.20k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|  5.20k|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  170|  5.20k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (170:13): [Folded, False: 5.20k]
  |  |  ------------------
  |  |  171|  5.20k|    __atomic_fetch_sub ((atomic), 1, __ATOMIC_SEQ_CST) == 1;                 \
  |  |  172|  5.20k|  }))
  ------------------
 1737|  5.20k|    {
 1738|  5.20k|      if (callback->notify)
  ------------------
  |  Branch (1738:11): [True: 0, False: 5.20k]
  ------------------
 1739|      0|        callback->notify (callback->data);
 1740|  5.20k|      g_free (callback);
 1741|  5.20k|    }
 1742|  5.20k|}
gmain.c:source_remove_from_context:
 1248|  5.20k|{
 1249|  5.20k|  GSourceList *source_list;
 1250|       |
 1251|  5.20k|  source_list = find_source_list_for_priority (context, source->priority, FALSE);
  ------------------
  |  |  880|  5.20k|#define	FALSE	(0)
  ------------------
 1252|  5.20k|  g_return_if_fail (source_list != NULL);
  ------------------
  |  |  639|  5.20k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.20k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  5.20k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.20k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.20k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.20k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.20k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.20k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.20k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.20k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.20k|   else                                         \
  |  |  |  |  |  | 1183|  5.20k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.20k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.20k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.20k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  5.20k|      { } \
  |  |  642|  5.20k|    else \
  |  |  643|  5.20k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  5.20k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.20k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.20k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1253|       |
 1254|  5.20k|  if (source->prev)
  ------------------
  |  Branch (1254:7): [True: 5.20k, False: 0]
  ------------------
 1255|  5.20k|    source->prev->next = source->next;
 1256|      0|  else
 1257|      0|    source_list->head = source->next;
 1258|       |
 1259|  5.20k|  if (source->next)
  ------------------
  |  Branch (1259:7): [True: 0, False: 5.20k]
  ------------------
 1260|      0|    source->next->prev = source->prev;
 1261|  5.20k|  else
 1262|  5.20k|    source_list->tail = source->prev;
 1263|       |
 1264|  5.20k|  source->prev = NULL;
 1265|  5.20k|  source->next = NULL;
 1266|       |
 1267|  5.20k|  if (source_list->head == NULL)
  ------------------
  |  Branch (1267:7): [True: 0, False: 5.20k]
  ------------------
 1268|      0|    {
 1269|      0|      context->source_lists = g_list_remove (context->source_lists, source_list);
 1270|      0|      g_slice_free (GSourceList, source_list);
  ------------------
  |  |   81|      0|#define g_slice_free(type, mem)                                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   82|      0|G_STMT_START {                                                  \
  |  |   83|      0|  if (1) g_slice_free1 (sizeof (type), (mem));			\
  |  |  ------------------
  |  |  |  Branch (83:7): [True: 0, Folded]
  |  |  ------------------
  |  |   84|      0|  else   (void) ((type*) 0 == (mem)); 				\
  |  |   85|      0|} G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1271|      0|    }
 1272|  5.20k|}
gmain.c:g_source_set_name_full:
 2141|    251|{
 2142|    251|  GMainContext *context;
 2143|       |
 2144|    251|  g_return_if_fail (source != NULL);
  ------------------
  |  |  639|    251|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    251|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|    251|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    251|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    251| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    251|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    251|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    251|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 251, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    251|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    251|   else                                         \
  |  |  |  |  |  | 1183|    251|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    251|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    251|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 251, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|    251|      { } \
  |  |  642|    251|    else \
  |  |  643|    251|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|    251|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    251|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 251]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2145|    251|  g_return_if_fail (g_atomic_int_get (&source->ref_count) > 0);
  ------------------
  |  |  639|    251|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    251|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|    251|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    251|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    251| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    251|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    251|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    753|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [Folded, False: 251]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 251, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    251|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    251|   else                                         \
  |  |  |  |  |  | 1183|    251|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    251|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    251|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 251, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|    251|      { } \
  |  |  642|    251|    else \
  |  |  643|    251|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|    251|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    251|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 251]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2146|       |
 2147|    251|  context = source->context;
 2148|       |
 2149|    251|  if (context)
  ------------------
  |  Branch (2149:7): [True: 0, False: 251]
  ------------------
 2150|      0|    LOCK_CONTEXT (context);
  ------------------
  |  |  428|      0|#define LOCK_CONTEXT(context) g_mutex_lock (&context->mutex)
  ------------------
 2151|       |
 2152|    251|  TRACE (GLIB_SOURCE_SET_NAME (source, name));
 2153|       |
 2154|       |  /* setting back to NULL is allowed, just because it's
 2155|       |   * weird if get_name can return NULL but you can't
 2156|       |   * set that.
 2157|       |   */
 2158|       |
 2159|    251|  if (!source->priv->static_name)
  ------------------
  |  Branch (2159:7): [True: 251, False: 0]
  ------------------
 2160|    251|    g_free (source->name);
 2161|       |
 2162|    251|  if (is_static)
  ------------------
  |  Branch (2162:7): [True: 251, False: 0]
  ------------------
 2163|    251|    source->name = (char *)name;
 2164|      0|  else
 2165|      0|    source->name = g_strdup (name);
 2166|       |
 2167|    251|  source->priv->static_name = is_static;
 2168|       |
 2169|    251|  if (context)
  ------------------
  |  Branch (2169:7): [True: 0, False: 251]
  ------------------
 2170|      0|    UNLOCK_CONTEXT (context);
  ------------------
  |  |  429|      0|#define UNLOCK_CONTEXT(context) g_mutex_unlock (&context->mutex)
  ------------------
 2171|    251|}
gmain.c:g_source_unref_internal:
 2311|  10.6k|{
 2312|  10.6k|  gpointer old_cb_data = NULL;
 2313|  10.6k|  GSourceCallbackFuncs *old_cb_funcs = NULL;
 2314|       |
 2315|  10.6k|  g_return_if_fail (source != NULL);
  ------------------
  |  |  639|  10.6k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  10.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  10.6k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  10.6k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  10.6k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  10.6k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  10.6k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  10.6k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 10.6k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  10.6k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  10.6k|   else                                         \
  |  |  |  |  |  | 1183|  10.6k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  10.6k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  10.6k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 10.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  10.6k|      { } \
  |  |  642|  10.6k|    else \
  |  |  643|  10.6k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  10.6k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  10.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 10.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2316|       |
 2317|  10.6k|  if (!have_lock && context)
  ------------------
  |  Branch (2317:7): [True: 5.48k, False: 5.20k]
  |  Branch (2317:21): [True: 5.48k, False: 0]
  ------------------
 2318|  5.48k|    LOCK_CONTEXT (context);
  ------------------
  |  |  428|  5.48k|#define LOCK_CONTEXT(context) g_mutex_lock (&context->mutex)
  ------------------
 2319|       |
 2320|  10.6k|  if (g_atomic_int_dec_and_test (&source->ref_count))
  ------------------
  |  |  168|  10.6k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|  10.6k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (168:3): [True: 5.20k, False: 5.48k]
  |  |  ------------------
  |  |  169|  10.6k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|  10.6k|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  170|  10.6k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (170:13): [Folded, False: 10.6k]
  |  |  ------------------
  |  |  171|  10.6k|    __atomic_fetch_sub ((atomic), 1, __ATOMIC_SEQ_CST) == 1;                 \
  |  |  172|  10.6k|  }))
  ------------------
 2321|  5.20k|    {
 2322|       |      /* If there's a dispose function, call this first */
 2323|  5.20k|      if (source->priv->dispose)
  ------------------
  |  Branch (2323:11): [True: 0, False: 5.20k]
  ------------------
 2324|      0|        {
 2325|       |          /* Temporarily increase the ref count again so that GSource methods
 2326|       |           * can be called from dispose(). */
 2327|      0|          g_atomic_int_inc (&source->ref_count);
  ------------------
  |  |  162|      0|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|      0|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|      0|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  164|      0|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded, False: 0]
  |  |  ------------------
  |  |  165|      0|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  166|      0|  }))
  ------------------
 2328|      0|          if (context)
  ------------------
  |  Branch (2328:15): [True: 0, False: 0]
  ------------------
 2329|      0|            UNLOCK_CONTEXT (context);
  ------------------
  |  |  429|      0|#define UNLOCK_CONTEXT(context) g_mutex_unlock (&context->mutex)
  ------------------
 2330|      0|          source->priv->dispose (source);
 2331|      0|          if (context)
  ------------------
  |  Branch (2331:15): [True: 0, False: 0]
  ------------------
 2332|      0|            LOCK_CONTEXT (context);
  ------------------
  |  |  428|      0|#define LOCK_CONTEXT(context) g_mutex_lock (&context->mutex)
  ------------------
 2333|       |
 2334|       |          /* Now the reference count might be bigger than 0 again, in which
 2335|       |           * case we simply return from here before freeing the source */
 2336|      0|          if (!g_atomic_int_dec_and_test (&source->ref_count))
  ------------------
  |  |  168|      0|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  169|      0|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|      0|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  170|      0|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (170:13): [Folded, False: 0]
  |  |  ------------------
  |  |  171|      0|    __atomic_fetch_sub ((atomic), 1, __ATOMIC_SEQ_CST) == 1;                 \
  |  |  172|      0|  }))
  ------------------
  |  Branch (2336:15): [True: 0, False: 0]
  ------------------
 2337|      0|            {
 2338|      0|              if (!have_lock && context)
  ------------------
  |  Branch (2338:19): [True: 0, False: 0]
  |  Branch (2338:33): [True: 0, False: 0]
  ------------------
 2339|      0|                UNLOCK_CONTEXT (context);
  ------------------
  |  |  429|      0|#define UNLOCK_CONTEXT(context) g_mutex_unlock (&context->mutex)
  ------------------
 2340|      0|              return;
 2341|      0|            }
 2342|      0|        }
 2343|       |
 2344|  5.20k|      TRACE (GLIB_SOURCE_BEFORE_FREE (source, context,
 2345|  5.20k|                                      source->source_funcs->finalize));
 2346|       |
 2347|  5.20k|      old_cb_data = source->callback_data;
 2348|  5.20k|      old_cb_funcs = source->callback_funcs;
 2349|       |
 2350|  5.20k|      source->callback_data = NULL;
 2351|  5.20k|      source->callback_funcs = NULL;
 2352|       |
 2353|  5.20k|      if (context)
  ------------------
  |  Branch (2353:11): [True: 5.20k, False: 0]
  ------------------
 2354|  5.20k|	{
 2355|  5.20k|	  if (!SOURCE_DESTROYED (source))
  ------------------
  |  |  432|  5.20k|#define SOURCE_DESTROYED(source) (((source)->flags & G_HOOK_FLAG_ACTIVE) == 0)
  ------------------
  |  Branch (2355:8): [True: 0, False: 5.20k]
  ------------------
 2356|      0|	    g_warning (G_STRLOC ": ref_count == 0, but source was still attached to a context!");
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 2357|  5.20k|	  source_remove_from_context (source, context);
 2358|       |
 2359|  5.20k|          g_hash_table_remove (context->sources, GUINT_TO_POINTER (source->source_id));
  ------------------
  |  |  104|  5.20k|#define GUINT_TO_POINTER(u)	((gpointer) (gulong) (u))
  ------------------
 2360|  5.20k|	}
 2361|       |
 2362|  5.20k|      if (source->source_funcs->finalize)
  ------------------
  |  Branch (2362:11): [True: 0, False: 5.20k]
  ------------------
 2363|      0|	{
 2364|      0|          gint old_ref_count;
 2365|       |
 2366|       |          /* Temporarily increase the ref count again so that GSource methods
 2367|       |           * can be called from finalize(). */
 2368|      0|          g_atomic_int_inc (&source->ref_count);
  ------------------
  |  |  162|      0|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|      0|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|      0|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  164|      0|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded, False: 0]
  |  |  ------------------
  |  |  165|      0|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  166|      0|  }))
  ------------------
 2369|      0|	  if (context)
  ------------------
  |  Branch (2369:8): [True: 0, False: 0]
  ------------------
 2370|      0|	    UNLOCK_CONTEXT (context);
  ------------------
  |  |  429|      0|#define UNLOCK_CONTEXT(context) g_mutex_unlock (&context->mutex)
  ------------------
 2371|      0|	  source->source_funcs->finalize (source);
 2372|      0|	  if (context)
  ------------------
  |  Branch (2372:8): [True: 0, False: 0]
  ------------------
 2373|      0|	    LOCK_CONTEXT (context);
  ------------------
  |  |  428|      0|#define LOCK_CONTEXT(context) g_mutex_lock (&context->mutex)
  ------------------
 2374|      0|          old_ref_count = g_atomic_int_add (&source->ref_count, -1);
  ------------------
  |  |  209|      0|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  210|      0|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|      0|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  211|      0|    (void) (0 ? *(atomic) ^ (val) : 1);                                      \
  |  |  ------------------
  |  |  |  Branch (211:13): [Folded, False: 0]
  |  |  ------------------
  |  |  212|      0|    (gint) __atomic_fetch_add ((atomic), (val), __ATOMIC_SEQ_CST);           \
  |  |  213|      0|  }))
  ------------------
 2375|      0|          g_warn_if_fail (old_ref_count == 1);
  ------------------
  |  |  550|      0|  do { \
  |  |  551|      0|    if G_LIKELY (expr) ; \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  552|      0|    else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, #expr); \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  553|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (553:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2376|      0|	}
 2377|       |
 2378|  5.20k|      if (old_cb_funcs)
  ------------------
  |  Branch (2378:11): [True: 0, False: 5.20k]
  ------------------
 2379|      0|        {
 2380|      0|          gint old_ref_count;
 2381|       |
 2382|       |          /* Temporarily increase the ref count again so that GSource methods
 2383|       |           * can be called from callback_funcs.unref(). */
 2384|      0|          g_atomic_int_inc (&source->ref_count);
  ------------------
  |  |  162|      0|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|      0|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|      0|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  164|      0|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded, False: 0]
  |  |  ------------------
  |  |  165|      0|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  166|      0|  }))
  ------------------
 2385|      0|          if (context)
  ------------------
  |  Branch (2385:15): [True: 0, False: 0]
  ------------------
 2386|      0|            UNLOCK_CONTEXT (context);
  ------------------
  |  |  429|      0|#define UNLOCK_CONTEXT(context) g_mutex_unlock (&context->mutex)
  ------------------
 2387|       |
 2388|      0|          old_cb_funcs->unref (old_cb_data);
 2389|       |
 2390|      0|          if (context)
  ------------------
  |  Branch (2390:15): [True: 0, False: 0]
  ------------------
 2391|      0|            LOCK_CONTEXT (context);
  ------------------
  |  |  428|      0|#define LOCK_CONTEXT(context) g_mutex_lock (&context->mutex)
  ------------------
 2392|      0|          old_ref_count = g_atomic_int_add (&source->ref_count, -1);
  ------------------
  |  |  209|      0|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  210|      0|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|      0|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  211|      0|    (void) (0 ? *(atomic) ^ (val) : 1);                                      \
  |  |  ------------------
  |  |  |  Branch (211:13): [Folded, False: 0]
  |  |  ------------------
  |  |  212|      0|    (gint) __atomic_fetch_add ((atomic), (val), __ATOMIC_SEQ_CST);           \
  |  |  213|      0|  }))
  ------------------
 2393|      0|          g_warn_if_fail (old_ref_count == 1);
  ------------------
  |  |  550|      0|  do { \
  |  |  551|      0|    if G_LIKELY (expr) ; \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  552|      0|    else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, #expr); \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  553|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (553:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2394|      0|        }
 2395|       |
 2396|  5.20k|      if (!source->priv->static_name)
  ------------------
  |  Branch (2396:11): [True: 5.20k, False: 0]
  ------------------
 2397|  5.20k|        g_free (source->name);
 2398|  5.20k|      source->name = NULL;
 2399|       |
 2400|  5.20k|      g_slist_free (source->poll_fds);
 2401|  5.20k|      source->poll_fds = NULL;
 2402|       |
 2403|  5.20k|      g_slist_free_full (source->priv->fds, g_free);
 2404|       |
 2405|  5.20k|      while (source->priv->child_sources)
  ------------------
  |  Branch (2405:14): [True: 0, False: 5.20k]
  ------------------
 2406|      0|        {
 2407|      0|          GSource *child_source = source->priv->child_sources->data;
 2408|       |
 2409|      0|          source->priv->child_sources =
 2410|      0|            g_slist_remove (source->priv->child_sources, child_source);
 2411|      0|          child_source->priv->parent_source = NULL;
 2412|       |
 2413|      0|          g_source_unref_internal (child_source, context, TRUE);
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2414|      0|        }
 2415|       |
 2416|  5.20k|      g_slice_free (GSourcePrivate, source->priv);
  ------------------
  |  |   81|  5.20k|#define g_slice_free(type, mem)                                 \
  |  |  ------------------
  |  |  |  |  940|  5.20k|#define G_STMT_START  do
  |  |  ------------------
  |  |   82|  5.20k|G_STMT_START {                                                  \
  |  |   83|  5.20k|  if (1) g_slice_free1 (sizeof (type), (mem));			\
  |  |  ------------------
  |  |  |  Branch (83:7): [True: 5.20k, Folded]
  |  |  ------------------
  |  |   84|  5.20k|  else   (void) ((type*) 0 == (mem)); 				\
  |  |   85|  5.20k|} G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.20k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.20k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2417|  5.20k|      source->priv = NULL;
 2418|       |
 2419|  5.20k|      g_free (source);
 2420|  5.20k|    }
 2421|       |
 2422|  10.6k|  if (!have_lock && context)
  ------------------
  |  Branch (2422:7): [True: 5.48k, False: 5.20k]
  |  Branch (2422:21): [True: 5.48k, False: 0]
  ------------------
 2423|  5.48k|    UNLOCK_CONTEXT (context);
  ------------------
  |  |  429|  5.48k|#define UNLOCK_CONTEXT(context) g_mutex_unlock (&context->mutex)
  ------------------
 2424|  10.6k|}
gmain.c:g_main_context_add_poll_unlocked:
 4647|    253|{
 4648|    253|  GPollRec *prevrec, *nextrec;
 4649|    253|  GPollRec *newrec = g_slice_new (GPollRec);
  ------------------
  |  |   48|    253|#define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
  ------------------
 4650|       |
 4651|       |  /* This file descriptor may be checked before we ever poll */
 4652|    253|  fd->revents = 0;
 4653|    253|  newrec->fd = fd;
 4654|    253|  newrec->priority = priority;
 4655|       |
 4656|       |  /* Poll records are incrementally sorted by file descriptor identifier. */
 4657|    253|  prevrec = NULL;
 4658|    253|  nextrec = context->poll_records;
 4659|  31.7k|  while (nextrec)
  ------------------
  |  Branch (4659:10): [True: 31.5k, False: 226]
  ------------------
 4660|  31.5k|    {
 4661|  31.5k|      if (nextrec->fd->fd > fd->fd)
  ------------------
  |  Branch (4661:11): [True: 27, False: 31.5k]
  ------------------
 4662|     27|        break;
 4663|  31.5k|      prevrec = nextrec;
 4664|  31.5k|      nextrec = nextrec->next;
 4665|  31.5k|    }
 4666|       |
 4667|    253|  if (prevrec)
  ------------------
  |  Branch (4667:7): [True: 251, False: 2]
  ------------------
 4668|    251|    prevrec->next = newrec;
 4669|      2|  else
 4670|      2|    context->poll_records = newrec;
 4671|       |
 4672|    253|  newrec->prev = prevrec;
 4673|    253|  newrec->next = nextrec;
 4674|       |
 4675|    253|  if (nextrec)
  ------------------
  |  Branch (4675:7): [True: 27, False: 226]
  ------------------
 4676|     27|    nextrec->prev = newrec;
 4677|       |
 4678|    253|  context->n_poll_records++;
 4679|       |
 4680|    253|  context->poll_changed = TRUE;
  ------------------
  |  |  884|    253|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|    253|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 4681|       |
 4682|       |  /* Now wake up the main loop if it is waiting in the poll() */
 4683|    253|  if (fd != &context->wake_up_rec)
  ------------------
  |  Branch (4683:7): [True: 251, False: 2]
  ------------------
 4684|    251|    g_wakeup_signal (context->wakeup);
 4685|    253|}
gmain.c:g_timeout_set_expiration:
 4945|  5.23k|{
 4946|  5.23k|  gint64 expiration;
 4947|       |
 4948|  5.23k|  if (timeout_source->seconds)
  ------------------
  |  Branch (4948:7): [True: 0, False: 5.23k]
  ------------------
 4949|      0|    {
 4950|      0|      gint64 remainder;
 4951|      0|      static gint timer_perturb = -1;
 4952|       |
 4953|      0|      if (timer_perturb == -1)
  ------------------
  |  Branch (4953:11): [True: 0, False: 0]
  ------------------
 4954|      0|        {
 4955|       |          /*
 4956|       |           * we want a per machine/session unique 'random' value; try the dbus
 4957|       |           * address first, that has a UUID in it. If there is no dbus, use the
 4958|       |           * hostname for hashing.
 4959|       |           */
 4960|      0|          const char *session_bus_address = g_getenv ("DBUS_SESSION_BUS_ADDRESS");
 4961|      0|          if (!session_bus_address)
  ------------------
  |  Branch (4961:15): [True: 0, False: 0]
  ------------------
 4962|      0|            session_bus_address = g_getenv ("HOSTNAME");
 4963|      0|          if (session_bus_address)
  ------------------
  |  Branch (4963:15): [True: 0, False: 0]
  ------------------
 4964|      0|            timer_perturb = ABS ((gint) g_str_hash (session_bus_address)) % 1000000;
  ------------------
  |  |  894|      0|#define ABS(a)	   (((a) < 0) ? -(a) : (a))
  |  |  ------------------
  |  |  |  Branch (894:20): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4965|      0|          else
 4966|      0|            timer_perturb = 0;
 4967|      0|        }
 4968|       |
 4969|      0|      expiration = current_time + (guint64) timeout_source->interval * 1000 * 1000;
 4970|       |
 4971|       |      /* We want the microseconds part of the timeout to land on the
 4972|       |       * 'timer_perturb' mark, but we need to make sure we don't try to
 4973|       |       * set the timeout in the past.  We do this by ensuring that we
 4974|       |       * always only *increase* the expiration time by adding a full
 4975|       |       * second in the case that the microsecond portion decreases.
 4976|       |       */
 4977|      0|      expiration -= timer_perturb;
 4978|       |
 4979|      0|      remainder = expiration % 1000000;
 4980|      0|      if (remainder >= 1000000/4)
  ------------------
  |  Branch (4980:11): [True: 0, False: 0]
  ------------------
 4981|      0|        expiration += 1000000;
 4982|       |
 4983|      0|      expiration -= remainder;
 4984|      0|      expiration += timer_perturb;
 4985|      0|    }
 4986|  5.23k|  else
 4987|  5.23k|    {
 4988|  5.23k|      expiration = current_time + (guint64) timeout_source->interval * 1000;
 4989|  5.23k|    }
 4990|       |
 4991|  5.23k|  g_source_set_ready_time ((GSource *) timeout_source, expiration);
 4992|  5.23k|}
gmain.c:timeout_source_new:
 5032|  5.23k|{
 5033|  5.23k|  GSource *source = g_source_new (&g_timeout_funcs, sizeof (GTimeoutSource));
 5034|  5.23k|  GTimeoutSource *timeout_source = (GTimeoutSource *)source;
 5035|       |
 5036|  5.23k|  timeout_source->interval = interval;
 5037|  5.23k|  timeout_source->seconds = seconds;
 5038|  5.23k|  timeout_source->one_shot = one_shot;
 5039|       |
 5040|  5.23k|  g_timeout_set_expiration (timeout_source, g_get_monotonic_time ());
 5041|       |
 5042|  5.23k|  return source;
 5043|  5.23k|}
gmain.c:timeout_add_full:
 5100|  5.23k|{
 5101|  5.23k|  GSource *source;
 5102|  5.23k|  guint id;
 5103|       |
 5104|  5.23k|  g_return_val_if_fail (function != NULL, 0);
  ------------------
  |  |  652|  5.23k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.23k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  5.23k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.23k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.23k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.23k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.23k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.23k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.23k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.23k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.23k|   else                                         \
  |  |  |  |  |  | 1183|  5.23k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.23k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.23k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.23k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  5.23k|      { } \
  |  |  655|  5.23k|    else \
  |  |  656|  5.23k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  5.23k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.23k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.23k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5105|       |
 5106|  5.23k|  source = timeout_source_new (interval, seconds, one_shot);
 5107|       |
 5108|  5.23k|  if (priority != G_PRIORITY_DEFAULT)
  ------------------
  |  |  340|  5.23k|#define G_PRIORITY_DEFAULT          0
  ------------------
  |  Branch (5108:7): [True: 0, False: 5.23k]
  ------------------
 5109|      0|    g_source_set_priority (source, priority);
 5110|       |
 5111|  5.23k|  g_source_set_callback (source, function, data, notify);
 5112|  5.23k|  id = g_source_attach (source, NULL);
 5113|       |
 5114|  5.23k|  TRACE (GLIB_TIMEOUT_ADD (source, g_main_context_default (), id, priority, interval, function, data));
 5115|       |
 5116|  5.23k|  g_source_unref (source);
 5117|       |
 5118|  5.23k|  return id;
 5119|  5.23k|}

g_mapped_file_new:
  248|    123|{
  249|    123|  GMappedFile *file;
  250|    123|  int fd;
  251|       |
  252|    123|  g_return_val_if_fail (filename != NULL, NULL);
  ------------------
  |  |  652|    123|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    123|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    123|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    123|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    123| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    123|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    123|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    123|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 123, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    123|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    123|   else                                         \
  |  |  |  |  |  | 1183|    123|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    123|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    123|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 123, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    123|      { } \
  |  |  655|    123|    else \
  |  |  656|    123|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    123|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    123|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 123]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  253|    123|  g_return_val_if_fail (!error || *error == NULL, NULL);
  ------------------
  |  |  652|    123|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    123|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    123|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    123|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    123| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    123|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    123|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    246|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 123, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    123|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    123|   else                                         \
  |  |  |  |  |  | 1183|    123|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    123|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    123|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 123, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    123|      { } \
  |  |  655|    123|    else \
  |  |  656|    123|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    123|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    123|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 123]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|       |
  255|    123|  fd = g_open (filename, (writable ? O_RDWR : O_RDONLY) | _O_BINARY, 0);
  ------------------
  |  |   72|    123|#define g_open    open
  ------------------
                fd = g_open (filename, (writable ? O_RDWR : O_RDONLY) | _O_BINARY, 0);
  ------------------
  |  |   67|    123|#define _O_BINARY 0
  ------------------
  |  Branch (255:27): [True: 0, False: 123]
  ------------------
  256|    123|  if (fd == -1)
  ------------------
  |  Branch (256:7): [True: 123, False: 0]
  ------------------
  257|    123|    {
  258|    123|      int save_errno = errno;
  259|    123|      gchar *display_filename = g_filename_display_name (filename);
  260|       |
  261|    123|      g_set_error (error,
  262|    123|                   G_FILE_ERROR,
  ------------------
  |  |   33|    123|#define G_FILE_ERROR g_file_error_quark ()
  ------------------
  263|    123|                   g_file_error_from_errno (save_errno),
  264|    123|                   _("Failed to open file “%s”: open() failed: %s"),
  ------------------
  |  |   17|    123|#define _(String) glib_gettext(String)
  ------------------
  265|    123|                   display_filename,
  266|    123|		   g_strerror (save_errno));
  267|    123|      g_free (display_filename);
  268|    123|      return NULL;
  269|    123|    }
  270|       |
  271|      0|  file = mapped_file_new_from_fd (fd, writable, filename, error);
  272|       |
  273|      0|  close (fd);
  274|       |
  275|      0|  return file;
  276|    123|}

g_malloc:
  125|  26.7M|{
  126|  26.7M|  if (G_LIKELY (n_bytes))
  ------------------
  |  | 1186|  26.7M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|  26.7M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  26.7M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  26.7M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  26.7M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 26.7M, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|  26.7M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  26.7M|   else                                         \
  |  |  |  | 1183|  26.7M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  26.7M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  26.7M|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 26.7M, False: 0]
  |  |  ------------------
  ------------------
  127|  26.7M|    {
  128|  26.7M|      gpointer mem;
  129|       |
  130|  26.7M|      mem = malloc (n_bytes);
  131|  26.7M|      TRACE (GLIB_MEM_ALLOC((void*) mem, (unsigned int) n_bytes, 0, 0));
  132|  26.7M|      if (mem)
  ------------------
  |  Branch (132:11): [True: 26.7M, False: 0]
  ------------------
  133|  26.7M|	return mem;
  134|       |
  135|  26.7M|      g_error ("%s: failed to allocate %"G_GSIZE_FORMAT" bytes",
  ------------------
  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  346|      0|                        for (;;) ;                   \
  |  |  347|  26.7M|                      } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  26.7M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  136|      0|               G_STRLOC, n_bytes);
  137|      0|    }
  138|       |
  139|      0|  TRACE(GLIB_MEM_ALLOC((void*) NULL, (int) n_bytes, 0, 0));
  140|       |
  141|       |  return NULL;
  142|  26.7M|}
g_malloc0:
  158|  1.68M|{
  159|  1.68M|  if (G_LIKELY (n_bytes))
  ------------------
  |  | 1186|  1.68M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|  1.68M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  1.68M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  1.68M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  1.68M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 1.68M, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|  1.68M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  1.68M|   else                                         \
  |  |  |  | 1183|  1.68M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  1.68M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  1.68M|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 1.68M, False: 0]
  |  |  ------------------
  ------------------
  160|  1.68M|    {
  161|  1.68M|      gpointer mem;
  162|       |
  163|  1.68M|      mem = calloc (1, n_bytes);
  164|  1.68M|      TRACE (GLIB_MEM_ALLOC((void*) mem, (unsigned int) n_bytes, 1, 0));
  165|  1.68M|      if (mem)
  ------------------
  |  Branch (165:11): [True: 1.68M, False: 0]
  ------------------
  166|  1.68M|	return mem;
  167|       |
  168|  1.68M|      g_error ("%s: failed to allocate %"G_GSIZE_FORMAT" bytes",
  ------------------
  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  346|      0|                        for (;;) ;                   \
  |  |  347|  1.68M|                      } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.68M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  169|      0|               G_STRLOC, n_bytes);
  170|      0|    }
  171|       |
  172|      0|  TRACE(GLIB_MEM_ALLOC((void*) NULL, (int) n_bytes, 1, 0));
  173|       |
  174|       |  return NULL;
  175|  1.68M|}
g_realloc:
  196|  6.51M|{
  197|  6.51M|  gpointer newmem;
  198|       |
  199|  6.51M|  if (G_LIKELY (n_bytes))
  ------------------
  |  | 1186|  6.51M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|  6.51M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  6.51M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  6.51M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  6.51M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 6.51M, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|  6.51M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  6.51M|   else                                         \
  |  |  |  | 1183|  6.51M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  6.51M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  6.51M|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 6.51M, False: 0]
  |  |  ------------------
  ------------------
  200|  6.51M|    {
  201|  6.51M|      newmem = realloc (mem, n_bytes);
  202|  6.51M|      TRACE (GLIB_MEM_REALLOC((void*) newmem, (void*)mem, (unsigned int) n_bytes, 0));
  203|  6.51M|      if (newmem)
  ------------------
  |  Branch (203:11): [True: 6.51M, False: 0]
  ------------------
  204|  6.51M|	return newmem;
  205|       |
  206|  6.51M|      g_error ("%s: failed to allocate %"G_GSIZE_FORMAT" bytes",
  ------------------
  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  346|      0|                        for (;;) ;                   \
  |  |  347|  6.51M|                      } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  6.51M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  207|      0|               G_STRLOC, n_bytes);
  208|      0|    }
  209|       |
  210|      0|  free (mem);
  211|       |
  212|      0|  TRACE (GLIB_MEM_REALLOC((void*) NULL, (void*)mem, 0, 0));
  213|       |
  214|       |  return NULL;
  215|  6.51M|}
g_free:
  228|  41.1M|{
  229|  41.1M|  free (mem);
  230|  41.1M|  TRACE(GLIB_MEM_FREE((void*) mem));
  231|  41.1M|}
g_try_realloc:
  334|      2|{
  335|      2|  gpointer newmem;
  336|       |
  337|      2|  if (G_LIKELY (n_bytes))
  ------------------
  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      2|   else                                         \
  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  | 1185|      2|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  338|      2|    newmem = realloc (mem, n_bytes);
  339|      0|  else
  340|      0|    {
  341|      0|      newmem = NULL;
  342|      0|      free (mem);
  343|      0|    }
  344|       |
  345|      2|  TRACE (GLIB_MEM_REALLOC((void*) newmem, (void*)mem, (unsigned int) n_bytes, 1));
  346|       |
  347|      2|  return newmem;
  348|      2|}
g_malloc_n:
  370|   382k|{
  371|   382k|  if (SIZE_OVERFLOWS (n_blocks, n_block_bytes))
  ------------------
  |  |  351|   382k|#define SIZE_OVERFLOWS(a,b) (G_UNLIKELY ((b) > 0 && (a) > G_MAXSIZE / (b)))
  |  |  ------------------
  |  |  |  | 1187|   382k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   382k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   382k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   382k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.14M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 382k, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 382k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   382k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   382k|   else                                         \
  |  |  |  |  |  | 1183|   382k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   382k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   382k|})
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (351:29): [True: 0, False: 382k]
  |  |  ------------------
  ------------------
  372|      0|    {
  373|      0|      g_error ("%s: overflow allocating %"G_GSIZE_FORMAT"*%"G_GSIZE_FORMAT" bytes",
  ------------------
  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  346|      0|                        for (;;) ;                   \
  |  |  347|      0|                      } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  374|      0|               G_STRLOC, n_blocks, n_block_bytes);
  375|      0|    }
  376|       |
  377|   382k|  return g_malloc (n_blocks * n_block_bytes);
  378|   382k|}
g_malloc0_n:
  397|   472k|{
  398|   472k|  if (SIZE_OVERFLOWS (n_blocks, n_block_bytes))
  ------------------
  |  |  351|   472k|#define SIZE_OVERFLOWS(a,b) (G_UNLIKELY ((b) > 0 && (a) > G_MAXSIZE / (b)))
  |  |  ------------------
  |  |  |  | 1187|   472k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   472k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   472k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   472k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.41M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 472k, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 472k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   472k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   472k|   else                                         \
  |  |  |  |  |  | 1183|   472k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   472k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   472k|})
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (351:29): [True: 0, False: 472k]
  |  |  ------------------
  ------------------
  399|      0|    {
  400|      0|      g_error ("%s: overflow allocating %"G_GSIZE_FORMAT"*%"G_GSIZE_FORMAT" bytes",
  ------------------
  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  346|      0|                        for (;;) ;                   \
  |  |  347|      0|                      } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  401|      0|               G_STRLOC, n_blocks, n_block_bytes);
  402|      0|    }
  403|       |
  404|   472k|  return g_malloc0 (n_blocks * n_block_bytes);
  405|   472k|}
g_realloc_n:
  426|  7.23k|{
  427|  7.23k|  if (SIZE_OVERFLOWS (n_blocks, n_block_bytes))
  ------------------
  |  |  351|  7.23k|#define SIZE_OVERFLOWS(a,b) (G_UNLIKELY ((b) > 0 && (a) > G_MAXSIZE / (b)))
  |  |  ------------------
  |  |  |  | 1187|  7.23k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  7.23k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  7.23k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  7.23k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  21.7k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 7.23k, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 7.23k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  7.23k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  7.23k|   else                                         \
  |  |  |  |  |  | 1183|  7.23k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  7.23k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  7.23k|})
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (351:29): [True: 0, False: 7.23k]
  |  |  ------------------
  ------------------
  428|      0|    {
  429|      0|      g_error ("%s: overflow allocating %"G_GSIZE_FORMAT"*%"G_GSIZE_FORMAT" bytes",
  ------------------
  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  346|      0|                        for (;;) ;                   \
  |  |  347|      0|                      } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  430|      0|               G_STRLOC, n_blocks, n_block_bytes);
  431|      0|    }
  432|       |
  433|  7.23k|  return g_realloc (mem, n_blocks * n_block_bytes);
  434|  7.23k|}

ghash.c:g_steal_pointer:
  219|  7.22k|{
  220|  7.22k|  gpointer *ptr = (gpointer *) pp;
  221|  7.22k|  gpointer ref;
  222|       |
  223|  7.22k|  ref = *ptr;
  224|  7.22k|  *ptr = NULL;
  225|       |
  226|  7.22k|  return ref;
  227|  7.22k|}
gthread.c:g_steal_pointer:
  219|      5|{
  220|      5|  gpointer *ptr = (gpointer *) pp;
  221|      5|  gpointer ref;
  222|       |
  223|      5|  ref = *ptr;
  224|      5|  *ptr = NULL;
  225|       |
  226|      5|  return ref;
  227|      5|}
gutils.c:g_steal_pointer:
  219|      2|{
  220|      2|  gpointer *ptr = (gpointer *) pp;
  221|      2|  gpointer ref;
  222|       |
  223|      2|  ref = *ptr;
  224|      2|  *ptr = NULL;
  225|       |
  226|      2|  return ref;
  227|      2|}

g_log_set_default_handler:
  946|      2|{
  947|      2|  GLogFunc old_log_func;
  948|       |  
  949|      2|  g_mutex_lock (&g_messages_lock);
  950|      2|  old_log_func = default_log_func;
  951|      2|  default_log_func = log_func;
  952|      2|  default_log_data = user_data;
  953|      2|  g_mutex_unlock (&g_messages_lock);
  954|       |  
  955|      2|  return old_log_func;
  956|      2|}
g_logv:
 1309|  1.35M|{
 1310|  1.35M|  gboolean was_fatal = (log_level & G_LOG_FLAG_FATAL) != 0;
 1311|  1.35M|  gboolean was_recursion = (log_level & G_LOG_FLAG_RECURSION) != 0;
 1312|  1.35M|  gchar buffer[1025], *msg, *msg_alloc = NULL;
 1313|  1.35M|  gint i;
 1314|       |
 1315|  1.35M|  log_level &= G_LOG_LEVEL_MASK;
 1316|  1.35M|  if (!log_level)
  ------------------
  |  Branch (1316:7): [True: 0, False: 1.35M]
  ------------------
 1317|      0|    return;
 1318|       |
 1319|  1.35M|  if (log_level & G_LOG_FLAG_RECURSION)
  ------------------
  |  Branch (1319:7): [True: 0, False: 1.35M]
  ------------------
 1320|      0|    {
 1321|       |      /* we use a stack buffer of fixed size, since we're likely
 1322|       |       * in an out-of-memory situation
 1323|       |       */
 1324|      0|      gsize size G_GNUC_UNUSED;
 1325|       |
 1326|      0|      size = _g_vsnprintf (buffer, 1024, format, args);
  ------------------
  |  |   40|      0|#define _g_vsnprintf vsnprintf
  ------------------
 1327|      0|      msg = buffer;
 1328|      0|    }
 1329|  1.35M|  else
 1330|  1.35M|    msg = msg_alloc = g_strdup_vprintf (format, args);
 1331|       |
 1332|  1.35M|  if (expected_messages)
  ------------------
  |  Branch (1332:7): [True: 0, False: 1.35M]
  ------------------
 1333|      0|    {
 1334|      0|      GTestExpectedMessage *expected = expected_messages->data;
 1335|       |
 1336|      0|      if (g_strcmp0 (expected->log_domain, log_domain) == 0 &&
  ------------------
  |  Branch (1336:11): [True: 0, False: 0]
  ------------------
 1337|      0|          ((log_level & expected->log_level) == expected->log_level) &&
  ------------------
  |  Branch (1337:11): [True: 0, False: 0]
  ------------------
 1338|      0|          g_pattern_match_simple (expected->pattern, msg))
  ------------------
  |  Branch (1338:11): [True: 0, False: 0]
  ------------------
 1339|      0|        {
 1340|      0|          expected_messages = g_slist_delete_link (expected_messages,
 1341|      0|                                                   expected_messages);
 1342|      0|          g_free (expected->log_domain);
 1343|      0|          g_free (expected->pattern);
 1344|      0|          g_free (expected);
 1345|      0|          g_free (msg_alloc);
 1346|      0|          return;
 1347|      0|        }
 1348|      0|      else if ((log_level & G_LOG_LEVEL_DEBUG) != G_LOG_LEVEL_DEBUG)
  ------------------
  |  Branch (1348:16): [True: 0, False: 0]
  ------------------
 1349|      0|        {
 1350|      0|          gchar level_prefix[STRING_BUFFER_SIZE];
 1351|      0|          gchar *expected_message;
 1352|       |
 1353|      0|          mklevel_prefix (level_prefix, expected->log_level, FALSE);
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 1354|      0|          expected_message = g_strdup_printf ("Did not see expected message %s-%s: %s",
 1355|      0|                                              expected->log_domain ? expected->log_domain : "**",
  ------------------
  |  Branch (1355:47): [True: 0, False: 0]
  ------------------
 1356|      0|                                              level_prefix, expected->pattern);
 1357|      0|          g_log_default_handler (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, expected_message, NULL);
 1358|      0|          g_free (expected_message);
 1359|       |
 1360|      0|          log_level |= G_LOG_FLAG_FATAL;
 1361|      0|        }
 1362|      0|    }
 1363|       |
 1364|  2.71M|  for (i = g_bit_nth_msf (log_level, -1); i >= 0; i = g_bit_nth_msf (log_level, i))
  ------------------
  |  |  375|  1.35M|#define g_bit_nth_msf(mask, nth_bit) g_bit_nth_msf_impl(mask, nth_bit)
  ------------------
                for (i = g_bit_nth_msf (log_level, -1); i >= 0; i = g_bit_nth_msf (log_level, i))
  ------------------
  |  |  375|  1.35M|#define g_bit_nth_msf(mask, nth_bit) g_bit_nth_msf_impl(mask, nth_bit)
  ------------------
  |  Branch (1364:43): [True: 1.35M, False: 1.35M]
  ------------------
 1365|  1.35M|    {
 1366|  1.35M|      GLogLevelFlags test_level;
 1367|       |
 1368|  1.35M|      test_level = 1L << i;
 1369|  1.35M|      if (log_level & test_level)
  ------------------
  |  Branch (1369:11): [True: 1.35M, False: 0]
  ------------------
 1370|  1.35M|	{
 1371|  1.35M|	  GLogDomain *domain;
 1372|  1.35M|	  GLogFunc log_func;
 1373|  1.35M|	  GLogLevelFlags domain_fatal_mask;
 1374|  1.35M|	  gpointer data = NULL;
 1375|  1.35M|          gboolean masquerade_fatal = FALSE;
  ------------------
  |  |  880|  1.35M|#define	FALSE	(0)
  ------------------
 1376|  1.35M|          guint depth;
 1377|       |
 1378|  1.35M|	  if (was_fatal)
  ------------------
  |  Branch (1378:8): [True: 0, False: 1.35M]
  ------------------
 1379|      0|	    test_level |= G_LOG_FLAG_FATAL;
 1380|  1.35M|	  if (was_recursion)
  ------------------
  |  Branch (1380:8): [True: 0, False: 1.35M]
  ------------------
 1381|      0|	    test_level |= G_LOG_FLAG_RECURSION;
 1382|       |
 1383|       |	  /* check recursion and lookup handler */
 1384|  1.35M|	  g_mutex_lock (&g_messages_lock);
 1385|  1.35M|          depth = GPOINTER_TO_UINT (g_private_get (&g_log_depth));
  ------------------
  |  |  101|  1.35M|#define GPOINTER_TO_UINT(p)	((guint) (gulong) (p))
  ------------------
 1386|  1.35M|	  domain = g_log_find_domain_L (log_domain ? log_domain : "");
  ------------------
  |  Branch (1386:34): [True: 386k, False: 969k]
  ------------------
 1387|  1.35M|	  if (depth)
  ------------------
  |  Branch (1387:8): [True: 0, False: 1.35M]
  ------------------
 1388|      0|	    test_level |= G_LOG_FLAG_RECURSION;
 1389|  1.35M|	  depth++;
 1390|  1.35M|	  domain_fatal_mask = domain ? domain->fatal_mask : G_LOG_FATAL_MASK;
  ------------------
  |  |   73|  2.71M|#define G_LOG_FATAL_MASK        (G_LOG_FLAG_RECURSION | G_LOG_LEVEL_ERROR)
  ------------------
  |  Branch (1390:24): [True: 0, False: 1.35M]
  ------------------
 1391|  1.35M|	  if ((domain_fatal_mask | g_log_always_fatal) & test_level)
  ------------------
  |  Branch (1391:8): [True: 0, False: 1.35M]
  ------------------
 1392|      0|	    test_level |= G_LOG_FLAG_FATAL;
 1393|  1.35M|	  if (test_level & G_LOG_FLAG_RECURSION)
  ------------------
  |  Branch (1393:8): [True: 0, False: 1.35M]
  ------------------
 1394|      0|	    log_func = _g_log_fallback_handler;
 1395|  1.35M|	  else
 1396|  1.35M|	    log_func = g_log_domain_get_handler_L (domain, test_level, &data);
 1397|  1.35M|	  domain = NULL;
 1398|  1.35M|	  g_mutex_unlock (&g_messages_lock);
 1399|       |
 1400|  1.35M|	  g_private_set (&g_log_depth, GUINT_TO_POINTER (depth));
  ------------------
  |  |  104|  1.35M|#define GUINT_TO_POINTER(u)	((gpointer) (gulong) (u))
  ------------------
 1401|       |
 1402|  1.35M|          log_func (log_domain, test_level, msg, data);
 1403|       |
 1404|  1.35M|          if ((test_level & G_LOG_FLAG_FATAL)
  ------------------
  |  Branch (1404:15): [True: 0, False: 1.35M]
  ------------------
 1405|      0|              && !(test_level & G_LOG_LEVEL_ERROR))
  ------------------
  |  Branch (1405:18): [True: 0, False: 0]
  ------------------
 1406|      0|            {
 1407|      0|              masquerade_fatal = fatal_log_func
  ------------------
  |  Branch (1407:34): [True: 0, False: 0]
  ------------------
 1408|      0|                && !fatal_log_func (log_domain, test_level, msg, fatal_log_data);
  ------------------
  |  Branch (1408:20): [True: 0, False: 0]
  ------------------
 1409|      0|            }
 1410|       |
 1411|  1.35M|          if ((test_level & G_LOG_FLAG_FATAL) && !masquerade_fatal)
  ------------------
  |  Branch (1411:15): [True: 0, False: 1.35M]
  |  Branch (1411:50): [True: 0, False: 0]
  ------------------
 1412|      0|            {
 1413|       |              /* MessageBox is allowed on UWP apps only when building against
 1414|       |               * the debug CRT, which will set -D_DEBUG */
 1415|       |#if defined(G_OS_WIN32) && (defined(_DEBUG) || !defined(G_WINAPI_ONLY_APP))
 1416|       |              if (win32_keep_fatal_message)
 1417|       |                {
 1418|       |                  WCHAR *wide_msg;
 1419|       |
 1420|       |                  wide_msg = g_utf8_to_utf16 (fatal_msg_buf, -1, NULL, NULL, NULL);
 1421|       |
 1422|       |                  MessageBoxW (NULL, wide_msg, NULL,
 1423|       |                               MB_ICONERROR | MB_SETFOREGROUND);
 1424|       |
 1425|       |                  g_free (wide_msg);
 1426|       |                }
 1427|       |#endif
 1428|       |
 1429|      0|              _g_log_abort (!(test_level & G_LOG_FLAG_RECURSION));
 1430|      0|	    }
 1431|       |	  
 1432|  1.35M|	  depth--;
 1433|  1.35M|	  g_private_set (&g_log_depth, GUINT_TO_POINTER (depth));
  ------------------
  |  |  104|  1.35M|#define GUINT_TO_POINTER(u)	((gpointer) (gulong) (u))
  ------------------
 1434|  1.35M|	}
 1435|  1.35M|    }
 1436|       |
 1437|  1.35M|  g_free (msg_alloc);
 1438|  1.35M|}
g_log:
 1467|  1.35M|{
 1468|  1.35M|  va_list args;
 1469|       |  
 1470|  1.35M|  va_start (args, format);
 1471|  1.35M|  g_logv (log_domain, log_level, format, args);
 1472|       |  va_end (args);
 1473|  1.35M|}
g_return_if_fail_warning:
 2958|  1.20M|{
 2959|  1.20M|  g_log (log_domain,
 2960|  1.20M|	 G_LOG_LEVEL_CRITICAL,
 2961|  1.20M|	 "%s: assertion '%s' failed",
 2962|  1.20M|	 pretty_function,
 2963|  1.20M|	 expression);
 2964|  1.20M|}
g_warn_message:
 2983|    959|{
 2984|    959|  char *s, lstr[32];
 2985|    959|  g_snprintf (lstr, 32, "%d", line);
 2986|    959|  if (warnexpr)
  ------------------
  |  Branch (2986:7): [True: 0, False: 959]
  ------------------
 2987|      0|    s = g_strconcat ("(", file, ":", lstr, "):",
 2988|      0|                     func, func[0] ? ":" : "",
  ------------------
  |  Branch (2988:28): [True: 0, False: 0]
  ------------------
 2989|      0|                     " runtime check failed: (", warnexpr, ")", NULL);
 2990|    959|  else
 2991|    959|    s = g_strconcat ("(", file, ":", lstr, "):",
 2992|    959|                     func, func[0] ? ":" : "",
  ------------------
  |  Branch (2992:28): [True: 959, False: 0]
  ------------------
 2993|       |                     " ", "code should not be reached", NULL);
 2994|    959|  g_log (domain, G_LOG_LEVEL_WARNING, "%s", s);
 2995|    959|  g_free (s);
 2996|    959|}
gmessages.c:g_log_find_domain_L:
  630|  1.35M|{
  631|  1.35M|  GLogDomain *domain;
  632|       |  
  633|  1.35M|  domain = g_log_domains;
  634|  1.35M|  while (domain)
  ------------------
  |  Branch (634:10): [True: 0, False: 1.35M]
  ------------------
  635|      0|    {
  636|      0|      if (strcmp (domain->log_domain, log_domain) == 0)
  ------------------
  |  Branch (636:11): [True: 0, False: 0]
  ------------------
  637|      0|	return domain;
  638|      0|      domain = domain->next;
  639|      0|    }
  640|  1.35M|  return NULL;
  641|  1.35M|}
gmessages.c:g_log_domain_get_handler_L:
  692|  1.35M|{
  693|  1.35M|  if (domain && log_level)
  ------------------
  |  Branch (693:7): [True: 0, False: 1.35M]
  |  Branch (693:17): [True: 0, False: 0]
  ------------------
  694|      0|    {
  695|      0|      GLogHandler *handler;
  696|       |      
  697|      0|      handler = domain->handlers;
  698|      0|      while (handler)
  ------------------
  |  Branch (698:14): [True: 0, False: 0]
  ------------------
  699|      0|	{
  700|      0|	  if ((handler->log_level & log_level) == log_level)
  ------------------
  |  Branch (700:8): [True: 0, False: 0]
  ------------------
  701|      0|	    {
  702|      0|	      *data = handler->data;
  703|      0|	      return handler->log_func;
  704|      0|	    }
  705|      0|	  handler = handler->next;
  706|      0|	}
  707|      0|    }
  708|       |
  709|  1.35M|  *data = default_log_data;
  710|  1.35M|  return default_log_func;
  711|  1.35M|}

g_option_context_new:
  364|      2|{
  365|      2|  GOptionContext *context;
  366|       |
  367|      2|  context = g_new0 (GOptionContext, 1);
  ------------------
  |  |  316|      2|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|      2|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      2|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      2|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      2|	  gpointer __p;						\
  |  |  |  |  248|      2|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  249|      2|	    __p = g_##func (__n);				\
  |  |  |  |  250|      2|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      2|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      2|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      2|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 2]
  |  |  |  |  |  Branch (251:26): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      2|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      2|	  else							\
  |  |  |  |  254|      2|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      2|	  __p;							\
  |  |  |  |  256|      2|	}))
  |  |  ------------------
  ------------------
  368|       |
  369|       |  /* Clear the empty string to NULL, otherwise we end up calling gettext(""),
  370|       |   * which returns the translation header. */
  371|      2|  if (parameter_string != NULL && *parameter_string == '\0')
  ------------------
  |  Branch (371:7): [True: 2, False: 0]
  |  Branch (371:35): [True: 2, False: 0]
  ------------------
  372|      2|    parameter_string = NULL;
  373|       |
  374|      2|  context->parameter_string = g_strdup (parameter_string);
  375|      2|  context->strict_posix = FALSE;
  ------------------
  |  |  880|      2|#define	FALSE	(0)
  ------------------
  376|      2|  context->help_enabled = TRUE;
  ------------------
  |  |  884|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  377|      2|  context->ignore_unknown = FALSE;
  ------------------
  |  |  880|      2|#define	FALSE	(0)
  ------------------
  378|       |
  379|      2|  return context;
  380|      2|}
g_option_context_free:
  395|      2|{
  396|      2|  g_return_if_fail (context != NULL);
  ------------------
  |  |  639|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      2|      { } \
  |  |  642|      2|    else \
  |  |  643|      2|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  397|       |
  398|      2|  g_list_free_full (context->groups, (GDestroyNotify) g_option_group_unref);
  399|       |
  400|      2|  if (context->main_group)
  ------------------
  |  Branch (400:7): [True: 2, False: 0]
  ------------------
  401|      2|    g_option_group_unref (context->main_group);
  402|       |
  403|      2|  free_changes_list (context, FALSE);
  ------------------
  |  |  880|      2|#define	FALSE	(0)
  ------------------
  404|      2|  free_pending_nulls (context, FALSE);
  ------------------
  |  |  880|      2|#define	FALSE	(0)
  ------------------
  405|       |
  406|      2|  g_free (context->parameter_string);
  407|      2|  g_free (context->summary);
  408|      2|  g_free (context->description);
  409|       |
  410|      2|  if (context->translate_notify)
  ------------------
  |  Branch (410:7): [True: 0, False: 2]
  ------------------
  411|      0|    (* context->translate_notify) (context->translate_data);
  412|       |
  413|      2|  g_free (context);
  414|      2|}
g_option_context_add_main_entries:
  664|      6|{
  665|      6|  g_return_if_fail (context != NULL);
  ------------------
  |  |  639|      6|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      6|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      6|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      6|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      6|   else                                         \
  |  |  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      6|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      6|      { } \
  |  |  642|      6|    else \
  |  |  643|      6|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      6|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      6|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  666|      6|  g_return_if_fail (entries != NULL);
  ------------------
  |  |  639|      6|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      6|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      6|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      6|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      6|   else                                         \
  |  |  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      6|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      6|      { } \
  |  |  642|      6|    else \
  |  |  643|      6|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      6|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      6|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  667|       |
  668|      6|  if (!context->main_group)
  ------------------
  |  Branch (668:7): [True: 2, False: 4]
  ------------------
  669|      2|    context->main_group = g_option_group_new (NULL, NULL, NULL, NULL, NULL);
  670|       |
  671|      6|  g_option_group_add_entries (context->main_group, entries);
  672|      6|  g_option_group_set_translation_domain (context->main_group, translation_domain);
  673|      6|}
g_option_context_parse:
 1960|      2|{
 1961|      2|  gint i, j, k;
 1962|      2|  GList *list;
 1963|       |
 1964|      2|  g_return_val_if_fail (context != NULL, FALSE);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1965|       |
 1966|       |  /* Set program name */
 1967|      2|  if (!g_get_prgname())
  ------------------
  |  Branch (1967:7): [True: 2, False: 0]
  ------------------
 1968|      2|    {
 1969|      2|      gchar *prgname;
 1970|       |
 1971|      2|      if (argc && argv && *argc)
  ------------------
  |  Branch (1971:11): [True: 2, False: 0]
  |  Branch (1971:19): [True: 2, False: 0]
  |  Branch (1971:27): [True: 0, False: 2]
  ------------------
 1972|      0|	prgname = g_path_get_basename ((*argv)[0]);
 1973|      2|      else
 1974|      2|	prgname = platform_get_argv0 ();
 1975|       |
 1976|      2|      if (prgname)
  ------------------
  |  Branch (1976:11): [True: 2, False: 0]
  ------------------
 1977|      2|	g_set_prgname (prgname);
 1978|      0|      else
 1979|      0|	g_set_prgname ("<unknown>");
 1980|       |
 1981|      2|      g_free (prgname);
 1982|      2|    }
 1983|       |
 1984|       |  /* Call pre-parse hooks */
 1985|      2|  list = context->groups;
 1986|      2|  while (list)
  ------------------
  |  Branch (1986:10): [True: 0, False: 2]
  ------------------
 1987|      0|    {
 1988|      0|      GOptionGroup *group = list->data;
 1989|       |
 1990|      0|      if (group->pre_parse_func)
  ------------------
  |  Branch (1990:11): [True: 0, False: 0]
  ------------------
 1991|      0|        {
 1992|      0|          if (!(* group->pre_parse_func) (context, group,
  ------------------
  |  Branch (1992:15): [True: 0, False: 0]
  ------------------
 1993|      0|                                          group->user_data, error))
 1994|      0|            goto fail;
 1995|      0|        }
 1996|       |
 1997|      0|      list = list->next;
 1998|      0|    }
 1999|       |
 2000|      2|  if (context->main_group && context->main_group->pre_parse_func)
  ------------------
  |  Branch (2000:7): [True: 2, False: 0]
  |  Branch (2000:30): [True: 0, False: 2]
  ------------------
 2001|      0|    {
 2002|      0|      if (!(* context->main_group->pre_parse_func) (context, context->main_group,
  ------------------
  |  Branch (2002:11): [True: 0, False: 0]
  ------------------
 2003|      0|                                                    context->main_group->user_data, error))
 2004|      0|        goto fail;
 2005|      0|    }
 2006|       |
 2007|      2|  if (argc && argv)
  ------------------
  |  Branch (2007:7): [True: 2, False: 0]
  |  Branch (2007:15): [True: 2, False: 0]
  ------------------
 2008|      2|    {
 2009|      2|      gboolean stop_parsing = FALSE;
  ------------------
  |  |  880|      2|#define	FALSE	(0)
  ------------------
 2010|      2|      gboolean has_unknown = FALSE;
  ------------------
  |  |  880|      2|#define	FALSE	(0)
  ------------------
 2011|      2|      gint separator_pos = 0;
 2012|       |
 2013|      2|      for (i = 1; i < *argc; i++)
  ------------------
  |  Branch (2013:19): [True: 0, False: 2]
  ------------------
 2014|      0|        {
 2015|      0|          gchar *arg, *dash;
 2016|      0|          gboolean parsed = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 2017|       |
 2018|      0|          if ((*argv)[i][0] == '-' && (*argv)[i][1] != '\0' && !stop_parsing)
  ------------------
  |  Branch (2018:15): [True: 0, False: 0]
  |  Branch (2018:39): [True: 0, False: 0]
  |  Branch (2018:64): [True: 0, False: 0]
  ------------------
 2019|      0|            {
 2020|      0|              if ((*argv)[i][1] == '-')
  ------------------
  |  Branch (2020:19): [True: 0, False: 0]
  ------------------
 2021|      0|                {
 2022|       |                  /* -- option */
 2023|       |
 2024|      0|                  arg = (*argv)[i] + 2;
 2025|       |
 2026|       |                  /* '--' terminates list of arguments */
 2027|      0|                  if (*arg == 0)
  ------------------
  |  Branch (2027:23): [True: 0, False: 0]
  ------------------
 2028|      0|                    {
 2029|      0|                      separator_pos = i;
 2030|      0|                      stop_parsing = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2031|      0|                      continue;
 2032|      0|                    }
 2033|       |
 2034|       |                  /* Handle help options */
 2035|      0|                  if (context->help_enabled)
  ------------------
  |  Branch (2035:23): [True: 0, False: 0]
  ------------------
 2036|      0|                    {
 2037|      0|                      if (strcmp (arg, "help") == 0)
  ------------------
  |  Branch (2037:27): [True: 0, False: 0]
  ------------------
 2038|      0|                        print_help (context, TRUE, NULL);
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2039|      0|                      else if (strcmp (arg, "help-all") == 0)
  ------------------
  |  Branch (2039:32): [True: 0, False: 0]
  ------------------
 2040|      0|                        print_help (context, FALSE, NULL);
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 2041|      0|                      else if (strncmp (arg, "help-", 5) == 0)
  ------------------
  |  Branch (2041:32): [True: 0, False: 0]
  ------------------
 2042|      0|                        {
 2043|      0|                          list = context->groups;
 2044|       |
 2045|      0|                          while (list)
  ------------------
  |  Branch (2045:34): [True: 0, False: 0]
  ------------------
 2046|      0|                            {
 2047|      0|                              GOptionGroup *group = list->data;
 2048|       |
 2049|      0|                              if (strcmp (arg + 5, group->name) == 0)
  ------------------
  |  Branch (2049:35): [True: 0, False: 0]
  ------------------
 2050|      0|                                print_help (context, FALSE, group);
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 2051|       |
 2052|      0|                              list = list->next;
 2053|      0|                            }
 2054|      0|                        }
 2055|      0|                    }
 2056|       |
 2057|      0|                  if (context->main_group &&
  ------------------
  |  Branch (2057:23): [True: 0, False: 0]
  ------------------
 2058|      0|                      !parse_long_option (context, context->main_group, &i, arg,
  ------------------
  |  Branch (2058:23): [True: 0, False: 0]
  ------------------
 2059|      0|                                          FALSE, argc, argv, error, &parsed))
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 2060|      0|                    goto fail;
 2061|       |
 2062|      0|                  if (parsed)
  ------------------
  |  Branch (2062:23): [True: 0, False: 0]
  ------------------
 2063|      0|                    continue;
 2064|       |
 2065|       |                  /* Try the groups */
 2066|      0|                  list = context->groups;
 2067|      0|                  while (list)
  ------------------
  |  Branch (2067:26): [True: 0, False: 0]
  ------------------
 2068|      0|                    {
 2069|      0|                      GOptionGroup *group = list->data;
 2070|       |
 2071|      0|                      if (!parse_long_option (context, group, &i, arg,
  ------------------
  |  Branch (2071:27): [True: 0, False: 0]
  ------------------
 2072|      0|                                              FALSE, argc, argv, error, &parsed))
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 2073|      0|                        goto fail;
 2074|       |
 2075|      0|                      if (parsed)
  ------------------
  |  Branch (2075:27): [True: 0, False: 0]
  ------------------
 2076|      0|                        break;
 2077|       |
 2078|      0|                      list = list->next;
 2079|      0|                    }
 2080|       |
 2081|      0|                  if (parsed)
  ------------------
  |  Branch (2081:23): [True: 0, False: 0]
  ------------------
 2082|      0|                    continue;
 2083|       |
 2084|       |                  /* Now look for --<group>-<option> */
 2085|      0|                  dash = strchr (arg, '-');
 2086|      0|                  if (dash && arg < dash)
  ------------------
  |  Branch (2086:23): [True: 0, False: 0]
  |  Branch (2086:31): [True: 0, False: 0]
  ------------------
 2087|      0|                    {
 2088|       |                      /* Try the groups */
 2089|      0|                      list = context->groups;
 2090|      0|                      while (list)
  ------------------
  |  Branch (2090:30): [True: 0, False: 0]
  ------------------
 2091|      0|                        {
 2092|      0|                          GOptionGroup *group = list->data;
 2093|       |
 2094|      0|                          if (strncmp (group->name, arg, dash - arg) == 0)
  ------------------
  |  Branch (2094:31): [True: 0, False: 0]
  ------------------
 2095|      0|                            {
 2096|      0|                              if (!parse_long_option (context, group, &i, dash + 1,
  ------------------
  |  Branch (2096:35): [True: 0, False: 0]
  ------------------
 2097|      0|                                                      TRUE, argc, argv, error, &parsed))
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2098|      0|                                goto fail;
 2099|       |
 2100|      0|                              if (parsed)
  ------------------
  |  Branch (2100:35): [True: 0, False: 0]
  ------------------
 2101|      0|                                break;
 2102|      0|                            }
 2103|       |
 2104|      0|                          list = list->next;
 2105|      0|                        }
 2106|      0|                    }
 2107|       |
 2108|      0|                  if (context->ignore_unknown)
  ------------------
  |  Branch (2108:23): [True: 0, False: 0]
  ------------------
 2109|      0|                    continue;
 2110|      0|                }
 2111|      0|              else
 2112|      0|                { /* short option */
 2113|      0|                  gint new_i = i, arg_length;
 2114|      0|                  gboolean *nulled_out = NULL;
 2115|      0|                  gboolean has_h_entry = context_has_h_entry (context);
 2116|      0|                  arg = (*argv)[i] + 1;
 2117|      0|                  arg_length = strlen (arg);
 2118|      0|                  nulled_out = g_newa0 (gboolean, arg_length);
  ------------------
  |  |  145|      0|#define g_newa0(struct_type, n_structs)  ((struct_type*) g_alloca0 (sizeof (struct_type) * (gsize) (n_structs)))
  |  |  ------------------
  |  |  |  |  114|      0|#define g_alloca0(size)  ((size) == 0 ? NULL : memset (g_alloca (size), 0, (size)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   99|      0|#define g_alloca(size)		 alloca (size)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   42|      0|# define alloca(size)   __builtin_alloca (size)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:27): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2119|      0|                  for (j = 0; j < arg_length; j++)
  ------------------
  |  Branch (2119:31): [True: 0, False: 0]
  ------------------
 2120|      0|                    {
 2121|      0|                      if (context->help_enabled && (arg[j] == '?' ||
  ------------------
  |  Branch (2121:27): [True: 0, False: 0]
  |  Branch (2121:53): [True: 0, False: 0]
  ------------------
 2122|      0|                        (arg[j] == 'h' && !has_h_entry)))
  ------------------
  |  Branch (2122:26): [True: 0, False: 0]
  |  Branch (2122:43): [True: 0, False: 0]
  ------------------
 2123|      0|                        print_help (context, TRUE, NULL);
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2124|      0|                      parsed = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 2125|      0|                      if (context->main_group &&
  ------------------
  |  Branch (2125:27): [True: 0, False: 0]
  ------------------
 2126|      0|                          !parse_short_option (context, context->main_group,
  ------------------
  |  Branch (2126:27): [True: 0, False: 0]
  ------------------
 2127|      0|                                               i, &new_i, arg[j],
 2128|      0|                                               argc, argv, error, &parsed))
 2129|      0|                        goto fail;
 2130|      0|                      if (!parsed)
  ------------------
  |  Branch (2130:27): [True: 0, False: 0]
  ------------------
 2131|      0|                        {
 2132|       |                          /* Try the groups */
 2133|      0|                          list = context->groups;
 2134|      0|                          while (list)
  ------------------
  |  Branch (2134:34): [True: 0, False: 0]
  ------------------
 2135|      0|                            {
 2136|      0|                              GOptionGroup *group = list->data;
 2137|      0|                              if (!parse_short_option (context, group, i, &new_i, arg[j],
  ------------------
  |  Branch (2137:35): [True: 0, False: 0]
  ------------------
 2138|      0|                                                       argc, argv, error, &parsed))
 2139|      0|                                goto fail;
 2140|      0|                              if (parsed)
  ------------------
  |  Branch (2140:35): [True: 0, False: 0]
  ------------------
 2141|      0|                                break;
 2142|      0|                              list = list->next;
 2143|      0|                            }
 2144|      0|                        }
 2145|       |
 2146|      0|                      if (context->ignore_unknown && parsed)
  ------------------
  |  Branch (2146:27): [True: 0, False: 0]
  |  Branch (2146:54): [True: 0, False: 0]
  ------------------
 2147|      0|                        nulled_out[j] = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2148|      0|                      else if (context->ignore_unknown)
  ------------------
  |  Branch (2148:32): [True: 0, False: 0]
  ------------------
 2149|      0|                        continue;
 2150|      0|                      else if (!parsed)
  ------------------
  |  Branch (2150:32): [True: 0, False: 0]
  ------------------
 2151|      0|                        break;
 2152|       |                      /* !context->ignore_unknown && parsed */
 2153|      0|                    }
 2154|      0|                  if (context->ignore_unknown)
  ------------------
  |  Branch (2154:23): [True: 0, False: 0]
  ------------------
 2155|      0|                    {
 2156|      0|                      gchar *new_arg = NULL;
 2157|      0|                      gint arg_index = 0;
 2158|      0|                      for (j = 0; j < arg_length; j++)
  ------------------
  |  Branch (2158:35): [True: 0, False: 0]
  ------------------
 2159|      0|                        {
 2160|      0|                          if (!nulled_out[j])
  ------------------
  |  Branch (2160:31): [True: 0, False: 0]
  ------------------
 2161|      0|                            {
 2162|      0|                              if (!new_arg)
  ------------------
  |  Branch (2162:35): [True: 0, False: 0]
  ------------------
 2163|      0|                                new_arg = g_malloc (arg_length + 1);
 2164|      0|                              new_arg[arg_index++] = arg[j];
 2165|      0|                            }
 2166|      0|                        }
 2167|      0|                      if (new_arg)
  ------------------
  |  Branch (2167:27): [True: 0, False: 0]
  ------------------
 2168|      0|                        new_arg[arg_index] = '\0';
 2169|      0|                      add_pending_null (context, &((*argv)[i]), new_arg);
 2170|      0|                      i = new_i;
 2171|      0|                    }
 2172|      0|                  else if (parsed)
  ------------------
  |  Branch (2172:28): [True: 0, False: 0]
  ------------------
 2173|      0|                    {
 2174|      0|                      add_pending_null (context, &((*argv)[i]), NULL);
 2175|      0|                      i = new_i;
 2176|      0|                    }
 2177|      0|                }
 2178|       |
 2179|      0|              if (!parsed)
  ------------------
  |  Branch (2179:19): [True: 0, False: 0]
  ------------------
 2180|      0|                has_unknown = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2181|       |
 2182|      0|              if (!parsed && !context->ignore_unknown)
  ------------------
  |  Branch (2182:19): [True: 0, False: 0]
  |  Branch (2182:30): [True: 0, False: 0]
  ------------------
 2183|      0|                {
 2184|      0|                  g_set_error (error,
 2185|      0|                               G_OPTION_ERROR, G_OPTION_ERROR_UNKNOWN_OPTION,
  ------------------
  |  |  197|      0|#define G_OPTION_ERROR (g_option_error_quark ())
  ------------------
 2186|      0|                                   _("Unknown option %s"), (*argv)[i]);
  ------------------
  |  |   17|      0|#define _(String) glib_gettext(String)
  ------------------
 2187|      0|                  goto fail;
 2188|      0|                }
 2189|      0|            }
 2190|      0|          else
 2191|      0|            {
 2192|      0|              if (context->strict_posix)
  ------------------
  |  Branch (2192:19): [True: 0, False: 0]
  ------------------
 2193|      0|                stop_parsing = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2194|       |
 2195|       |              /* Collect remaining args */
 2196|      0|              if (context->main_group &&
  ------------------
  |  Branch (2196:19): [True: 0, False: 0]
  ------------------
 2197|      0|                  !parse_remaining_arg (context, context->main_group, &i,
  ------------------
  |  Branch (2197:19): [True: 0, False: 0]
  ------------------
 2198|      0|                                        argc, argv, error, &parsed))
 2199|      0|                goto fail;
 2200|       |
 2201|      0|              if (!parsed && (has_unknown || (*argv)[i][0] == '-'))
  ------------------
  |  Branch (2201:19): [True: 0, False: 0]
  |  Branch (2201:31): [True: 0, False: 0]
  |  Branch (2201:46): [True: 0, False: 0]
  ------------------
 2202|      0|                separator_pos = 0;
 2203|      0|            }
 2204|      0|        }
 2205|       |
 2206|      2|      if (separator_pos > 0)
  ------------------
  |  Branch (2206:11): [True: 0, False: 2]
  ------------------
 2207|      0|        add_pending_null (context, &((*argv)[separator_pos]), NULL);
 2208|       |
 2209|      2|    }
 2210|       |
 2211|       |  /* Call post-parse hooks */
 2212|      2|  list = context->groups;
 2213|      2|  while (list)
  ------------------
  |  Branch (2213:10): [True: 0, False: 2]
  ------------------
 2214|      0|    {
 2215|      0|      GOptionGroup *group = list->data;
 2216|       |
 2217|      0|      if (group->post_parse_func)
  ------------------
  |  Branch (2217:11): [True: 0, False: 0]
  ------------------
 2218|      0|        {
 2219|      0|          if (!(* group->post_parse_func) (context, group,
  ------------------
  |  Branch (2219:15): [True: 0, False: 0]
  ------------------
 2220|      0|                                           group->user_data, error))
 2221|      0|            goto fail;
 2222|      0|        }
 2223|       |
 2224|      0|      list = list->next;
 2225|      0|    }
 2226|       |
 2227|      2|  if (context->main_group && context->main_group->post_parse_func)
  ------------------
  |  Branch (2227:7): [True: 2, False: 0]
  |  Branch (2227:30): [True: 0, False: 2]
  ------------------
 2228|      0|    {
 2229|      0|      if (!(* context->main_group->post_parse_func) (context, context->main_group,
  ------------------
  |  Branch (2229:11): [True: 0, False: 0]
  ------------------
 2230|      0|                                                     context->main_group->user_data, error))
 2231|      0|        goto fail;
 2232|      0|    }
 2233|       |
 2234|      2|  if (argc && argv)
  ------------------
  |  Branch (2234:7): [True: 2, False: 0]
  |  Branch (2234:15): [True: 2, False: 0]
  ------------------
 2235|      2|    {
 2236|      2|      free_pending_nulls (context, TRUE);
  ------------------
  |  |  884|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2237|       |
 2238|      2|      for (i = 1; i < *argc; i++)
  ------------------
  |  Branch (2238:19): [True: 0, False: 2]
  ------------------
 2239|      0|        {
 2240|      0|          for (k = i; k < *argc; k++)
  ------------------
  |  Branch (2240:23): [True: 0, False: 0]
  ------------------
 2241|      0|            if ((*argv)[k] != NULL)
  ------------------
  |  Branch (2241:17): [True: 0, False: 0]
  ------------------
 2242|      0|              break;
 2243|       |
 2244|      0|          if (k > i)
  ------------------
  |  Branch (2244:15): [True: 0, False: 0]
  ------------------
 2245|      0|            {
 2246|      0|              k -= i;
 2247|      0|              for (j = i + k; j < *argc; j++)
  ------------------
  |  Branch (2247:31): [True: 0, False: 0]
  ------------------
 2248|      0|                {
 2249|      0|                  (*argv)[j-k] = (*argv)[j];
 2250|      0|                  (*argv)[j] = NULL;
 2251|      0|                }
 2252|      0|              *argc -= k;
 2253|      0|            }
 2254|      0|        }
 2255|      2|    }
 2256|       |
 2257|      2|  return TRUE;
  ------------------
  |  |  884|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2258|       |
 2259|      0| fail:
 2260|       |
 2261|       |  /* Call error hooks */
 2262|      0|  list = context->groups;
 2263|      0|  while (list)
  ------------------
  |  Branch (2263:10): [True: 0, False: 0]
  ------------------
 2264|      0|    {
 2265|      0|      GOptionGroup *group = list->data;
 2266|       |
 2267|      0|      if (group->error_func)
  ------------------
  |  Branch (2267:11): [True: 0, False: 0]
  ------------------
 2268|      0|        (* group->error_func) (context, group,
 2269|      0|                               group->user_data, error);
 2270|       |
 2271|      0|      list = list->next;
 2272|      0|    }
 2273|       |
 2274|      0|  if (context->main_group && context->main_group->error_func)
  ------------------
  |  Branch (2274:7): [True: 0, False: 0]
  |  Branch (2274:30): [True: 0, False: 0]
  ------------------
 2275|      0|    (* context->main_group->error_func) (context, context->main_group,
 2276|      0|                                         context->main_group->user_data, error);
 2277|       |
 2278|      0|  free_changes_list (context, TRUE);
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2279|      0|  free_pending_nulls (context, FALSE);
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 2280|       |
 2281|      0|  return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 2282|      2|}
g_option_group_new:
 2312|      2|{
 2313|      2|  GOptionGroup *group;
 2314|       |
 2315|      2|  group = g_new0 (GOptionGroup, 1);
  ------------------
  |  |  316|      2|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|      2|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      2|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      2|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      2|	  gpointer __p;						\
  |  |  |  |  248|      2|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  249|      2|	    __p = g_##func (__n);				\
  |  |  |  |  250|      2|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      2|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      2|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      2|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 2]
  |  |  |  |  |  Branch (251:26): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      2|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      2|	  else							\
  |  |  |  |  254|      2|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      2|	  __p;							\
  |  |  |  |  256|      2|	}))
  |  |  ------------------
  ------------------
 2316|      2|  group->ref_count = 1;
 2317|      2|  group->name = g_strdup (name);
 2318|      2|  group->description = g_strdup (description);
 2319|      2|  group->help_description = g_strdup (help_description);
 2320|      2|  group->user_data = user_data;
 2321|      2|  group->destroy_notify = destroy;
 2322|       |
 2323|      2|  return group;
 2324|      2|}
g_option_group_unref:
 2376|      2|{
 2377|      2|  g_return_if_fail (group != NULL);
  ------------------
  |  |  639|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      2|      { } \
  |  |  642|      2|    else \
  |  |  643|      2|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2378|       |
 2379|      2|  if (--group->ref_count == 0)
  ------------------
  |  Branch (2379:7): [True: 2, False: 0]
  ------------------
 2380|      2|    {
 2381|      2|      g_free (group->name);
 2382|      2|      g_free (group->description);
 2383|      2|      g_free (group->help_description);
 2384|       |
 2385|      2|      g_free (group->entries);
 2386|       |
 2387|      2|      if (group->destroy_notify)
  ------------------
  |  Branch (2387:11): [True: 0, False: 2]
  ------------------
 2388|      0|        (* group->destroy_notify) (group->user_data);
 2389|       |
 2390|      2|      if (group->translate_notify)
  ------------------
  |  Branch (2390:11): [True: 2, False: 0]
  ------------------
 2391|      2|        (* group->translate_notify) (group->translate_data);
 2392|       |
 2393|      2|      g_free (group);
 2394|      2|    }
 2395|      2|}
g_option_group_add_entries:
 2409|      6|{
 2410|      6|  gsize i, n_entries;
 2411|       |
 2412|      6|  g_return_if_fail (group != NULL);
  ------------------
  |  |  639|      6|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      6|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      6|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      6|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      6|   else                                         \
  |  |  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      6|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      6|      { } \
  |  |  642|      6|    else \
  |  |  643|      6|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      6|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      6|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2413|      6|  g_return_if_fail (entries != NULL);
  ------------------
  |  |  639|      6|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      6|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      6|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      6|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      6|   else                                         \
  |  |  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      6|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      6|      { } \
  |  |  642|      6|    else \
  |  |  643|      6|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      6|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      6|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2414|       |
 2415|     24|  for (n_entries = 0; entries[n_entries].long_name != NULL; n_entries++) ;
  ------------------
  |  Branch (2415:23): [True: 18, False: 6]
  ------------------
 2416|       |
 2417|      6|  g_return_if_fail (n_entries <= G_MAXSIZE - group->n_entries);
  ------------------
  |  |  639|      6|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      6|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      6|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      6|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      6|   else                                         \
  |  |  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      6|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      6|      { } \
  |  |  642|      6|    else \
  |  |  643|      6|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      6|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      6|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2418|       |
 2419|      6|  group->entries = g_renew (GOptionEntry, group->entries, group->n_entries + n_entries);
  ------------------
  |  |  330|      6|#define g_renew(struct_type, mem, n_structs)		_G_RENEW (struct_type, mem, n_structs, realloc)
  |  |  ------------------
  |  |  |  |  258|      6|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  259|      6|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  260|      6|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  261|      6|	  gpointer __p = (gpointer) (mem);			\
  |  |  |  |  262|      6|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (262:8): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  263|      6|	    __p = g_##func (__p, __n);				\
  |  |  |  |  264|      6|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (264:13): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  265|      6|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (265:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (265:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  266|      6|	    __p = g_##func (__p, __n * __s);			\
  |  |  |  |  267|      6|	  else							\
  |  |  |  |  268|      6|	    __p = g_##func##_n (__p, __n, __s);			\
  |  |  |  |  269|      6|	  __p;							\
  |  |  |  |  270|      6|	}))
  |  |  ------------------
  ------------------
 2420|       |
 2421|       |  /* group->entries could be NULL in the trivial case where we add no
 2422|       |   * entries to no entries */
 2423|      6|  if (n_entries != 0)
  ------------------
  |  Branch (2423:7): [True: 6, False: 0]
  ------------------
 2424|      6|    memcpy (group->entries + group->n_entries, entries, sizeof (GOptionEntry) * n_entries);
 2425|       |
 2426|     24|  for (i = group->n_entries; i < group->n_entries + n_entries; i++)
  ------------------
  |  Branch (2426:30): [True: 18, False: 6]
  ------------------
 2427|     18|    {
 2428|     18|      gchar c = group->entries[i].short_name;
 2429|       |
 2430|     18|      if (c == '-' || (c != 0 && !g_ascii_isprint (c)))
  ------------------
  |  |   77|     12|  ((g_ascii_table[(guchar) (c)] & G_ASCII_PRINT) != 0)
  ------------------
  |  Branch (2430:11): [True: 0, False: 18]
  |  Branch (2430:24): [True: 12, False: 6]
  |  Branch (2430:34): [True: 0, False: 12]
  ------------------
 2431|      0|        {
 2432|      0|          g_warning (G_STRLOC ": ignoring invalid short option '%c' (%d) in entry %s:%s",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 2433|      0|              c, c, group->name, group->entries[i].long_name);
 2434|      0|          group->entries[i].short_name = '\0';
 2435|      0|        }
 2436|       |
 2437|     18|      if (group->entries[i].arg != G_OPTION_ARG_NONE &&
  ------------------
  |  Branch (2437:11): [True: 16, False: 2]
  ------------------
 2438|     16|          (group->entries[i].flags & G_OPTION_FLAG_REVERSE) != 0)
  ------------------
  |  Branch (2438:11): [True: 0, False: 16]
  ------------------
 2439|      0|        {
 2440|      0|          g_warning (G_STRLOC ": ignoring reverse flag on option of arg-type %d in entry %s:%s",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 2441|      0|              group->entries[i].arg, group->name, group->entries[i].long_name);
 2442|       |
 2443|      0|          group->entries[i].flags &= ~G_OPTION_FLAG_REVERSE;
 2444|      0|        }
 2445|       |
 2446|     18|      if (group->entries[i].arg != G_OPTION_ARG_CALLBACK &&
  ------------------
  |  Branch (2446:11): [True: 18, False: 0]
  ------------------
 2447|     18|          (group->entries[i].flags & (G_OPTION_FLAG_NO_ARG|G_OPTION_FLAG_OPTIONAL_ARG|G_OPTION_FLAG_FILENAME)) != 0)
  ------------------
  |  Branch (2447:11): [True: 0, False: 18]
  ------------------
 2448|      0|        {
 2449|      0|          g_warning (G_STRLOC ": ignoring no-arg, optional-arg or filename flags (%d) on option of arg-type %d in entry %s:%s",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 2450|      0|              group->entries[i].flags, group->entries[i].arg, group->name, group->entries[i].long_name);
 2451|       |
 2452|      0|          group->entries[i].flags &= ~(G_OPTION_FLAG_NO_ARG|G_OPTION_FLAG_OPTIONAL_ARG|G_OPTION_FLAG_FILENAME);
 2453|      0|        }
 2454|     18|    }
 2455|       |
 2456|      6|  group->n_entries += n_entries;
 2457|      6|}
g_option_group_set_translate_func:
 2530|      6|{
 2531|      6|  g_return_if_fail (group != NULL);
  ------------------
  |  |  639|      6|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      6|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      6|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      6|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      6|   else                                         \
  |  |  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      6|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      6|      { } \
  |  |  642|      6|    else \
  |  |  643|      6|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      6|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      6|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|       |
 2533|      6|  if (group->translate_notify)
  ------------------
  |  Branch (2533:7): [True: 4, False: 2]
  ------------------
 2534|      4|    group->translate_notify (group->translate_data);
 2535|       |
 2536|      6|  group->translate_func = func;
 2537|      6|  group->translate_data = data;
 2538|      6|  group->translate_notify = destroy_notify;
 2539|      6|}
g_option_group_set_translation_domain:
 2561|      6|{
 2562|      6|  g_return_if_fail (group != NULL);
  ------------------
  |  |  639|      6|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      6|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      6|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      6|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      6|   else                                         \
  |  |  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      6|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      6|      { } \
  |  |  642|      6|    else \
  |  |  643|      6|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      6|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      6|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2563|       |
 2564|      6|  g_option_group_set_translate_func (group,
 2565|      6|                                     (GTranslateFunc)dgettext_swapped,
 2566|      6|                                     g_strdup (domain),
 2567|      6|                                     g_free);
 2568|      6|}
goption.c:free_changes_list:
 1735|      2|{
 1736|      2|  GList *list;
 1737|       |
 1738|      2|  for (list = context->changes; list != NULL; list = list->next)
  ------------------
  |  Branch (1738:33): [True: 0, False: 2]
  ------------------
 1739|      0|    {
 1740|      0|      Change *change = list->data;
 1741|       |
 1742|      0|      if (revert)
  ------------------
  |  Branch (1742:11): [True: 0, False: 0]
  ------------------
 1743|      0|        {
 1744|      0|          switch (change->arg_type)
 1745|      0|            {
 1746|      0|            case G_OPTION_ARG_NONE:
  ------------------
  |  Branch (1746:13): [True: 0, False: 0]
  ------------------
 1747|      0|              *(gboolean *)change->arg_data = change->prev.bool;
 1748|      0|              break;
 1749|      0|            case G_OPTION_ARG_INT:
  ------------------
  |  Branch (1749:13): [True: 0, False: 0]
  ------------------
 1750|      0|              *(gint *)change->arg_data = change->prev.integer;
 1751|      0|              break;
 1752|      0|            case G_OPTION_ARG_STRING:
  ------------------
  |  Branch (1752:13): [True: 0, False: 0]
  ------------------
 1753|      0|            case G_OPTION_ARG_FILENAME:
  ------------------
  |  Branch (1753:13): [True: 0, False: 0]
  ------------------
 1754|      0|              g_free (change->allocated.str);
 1755|      0|              *(gchar **)change->arg_data = change->prev.str;
 1756|      0|              break;
 1757|      0|            case G_OPTION_ARG_STRING_ARRAY:
  ------------------
  |  Branch (1757:13): [True: 0, False: 0]
  ------------------
 1758|      0|            case G_OPTION_ARG_FILENAME_ARRAY:
  ------------------
  |  Branch (1758:13): [True: 0, False: 0]
  ------------------
 1759|      0|              g_strfreev (change->allocated.array.data);
 1760|      0|              *(gchar ***)change->arg_data = change->prev.array;
 1761|      0|              break;
 1762|      0|            case G_OPTION_ARG_DOUBLE:
  ------------------
  |  Branch (1762:13): [True: 0, False: 0]
  ------------------
 1763|      0|              *(gdouble *)change->arg_data = change->prev.dbl;
 1764|      0|              break;
 1765|      0|            case G_OPTION_ARG_INT64:
  ------------------
  |  Branch (1765:13): [True: 0, False: 0]
  ------------------
 1766|      0|              *(gint64 *)change->arg_data = change->prev.int64;
 1767|      0|              break;
 1768|      0|            default:
  ------------------
  |  Branch (1768:13): [True: 0, False: 0]
  ------------------
 1769|      0|              g_assert_not_reached ();
  ------------------
  |  |  233|      0|#define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1770|      0|            }
 1771|      0|        }
 1772|       |
 1773|      0|      g_free (change);
 1774|      0|    }
 1775|       |
 1776|      2|  g_list_free (context->changes);
 1777|       |  context->changes = NULL;
 1778|      2|}
goption.c:free_pending_nulls:
 1783|      4|{
 1784|      4|  GList *list;
 1785|       |
 1786|      4|  for (list = context->pending_nulls; list != NULL; list = list->next)
  ------------------
  |  Branch (1786:39): [True: 0, False: 4]
  ------------------
 1787|      0|    {
 1788|      0|      PendingNull *n = list->data;
 1789|       |
 1790|      0|      if (perform_nulls)
  ------------------
  |  Branch (1790:11): [True: 0, False: 0]
  ------------------
 1791|      0|        {
 1792|      0|          if (n->value)
  ------------------
  |  Branch (1792:15): [True: 0, False: 0]
  ------------------
 1793|      0|            {
 1794|       |              /* Copy back the short options */
 1795|      0|              *(n->ptr)[0] = '-';
 1796|      0|              strcpy (*n->ptr + 1, n->value);
 1797|      0|            }
 1798|      0|          else
 1799|      0|            {
 1800|      0|              if (context->strv_mode)
  ------------------
  |  Branch (1800:19): [True: 0, False: 0]
  ------------------
 1801|      0|                g_free (*n->ptr);
 1802|       |
 1803|      0|              *n->ptr = NULL;
 1804|      0|            }
 1805|      0|        }
 1806|       |
 1807|      0|      g_free (n->value);
 1808|      0|      g_free (n);
 1809|      0|    }
 1810|       |
 1811|      4|  g_list_free (context->pending_nulls);
 1812|       |  context->pending_nulls = NULL;
 1813|      4|}
goption.c:platform_get_argv0:
 1822|      2|{
 1823|      2|#ifdef HAVE_PROC_SELF_CMDLINE
 1824|      2|  char *cmdline;
 1825|      2|  char *base_arg0;
 1826|      2|  gsize len;
 1827|       |
 1828|      2|  if (!g_file_get_contents ("/proc/self/cmdline",
  ------------------
  |  Branch (1828:7): [True: 0, False: 2]
  ------------------
 1829|      2|			    &cmdline,
 1830|      2|			    &len,
 1831|      2|			    NULL))
 1832|      0|    return NULL;
 1833|       |
 1834|       |  /* g_file_get_contents() guarantees to put a NUL immediately after the
 1835|       |   * file's contents (at cmdline[len] here), even if the file itself was
 1836|       |   * not NUL-terminated. */
 1837|      2|  g_assert (memchr (cmdline, 0, len + 1));
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1838|       |
 1839|       |  /* We could just return cmdline, but I think it's better
 1840|       |   * to hold on to a smaller malloc block; the arguments
 1841|       |   * could be large.
 1842|       |   */
 1843|      2|  base_arg0 = g_path_get_basename (cmdline);
 1844|      2|  g_free (cmdline);
 1845|      2|  return base_arg0;
 1846|       |#elif defined __OpenBSD__
 1847|       |  char **cmdline;
 1848|       |  char *base_arg0;
 1849|       |  gsize len;
 1850|       |
 1851|       |  int mib[] = { CTL_KERN, KERN_PROC_ARGS, getpid(), KERN_PROC_ARGV };
 1852|       |
 1853|       |  if (sysctl (mib, G_N_ELEMENTS (mib), NULL, &len, NULL, 0) == -1)
 1854|       |      return NULL;
 1855|       |
 1856|       |  cmdline = g_malloc0 (len);
 1857|       |
 1858|       |  if (sysctl (mib, G_N_ELEMENTS (mib), cmdline, &len, NULL, 0) == -1)
 1859|       |    {
 1860|       |      g_free (cmdline);
 1861|       |      return NULL;
 1862|       |    }
 1863|       |
 1864|       |  /* We could just return cmdline, but I think it's better
 1865|       |   * to hold on to a smaller malloc block; the arguments
 1866|       |   * could be large.
 1867|       |   */
 1868|       |  base_arg0 = g_path_get_basename (*cmdline);
 1869|       |  g_free (cmdline);
 1870|       |  return base_arg0;
 1871|       |#elif defined G_OS_WIN32
 1872|       |  const wchar_t *cmdline;
 1873|       |  wchar_t **wargv;
 1874|       |  int wargc;
 1875|       |  gchar *utf8_buf = NULL;
 1876|       |  char *base_arg0 = NULL;
 1877|       |
 1878|       |  /* Pretend it's const, since we're not allowed to free it */
 1879|       |  cmdline = (const wchar_t *) GetCommandLineW ();
 1880|       |  if (G_UNLIKELY (cmdline == NULL))
 1881|       |    return NULL;
 1882|       |
 1883|       |  /* Skip leading whitespace. CommandLineToArgvW() is documented
 1884|       |   * to behave weirdly with that. The character codes below
 1885|       |   * correspond to the *only* unicode characters that are
 1886|       |   * considered to be spaces by CommandLineToArgvW(). The rest
 1887|       |   * (such as 0xa0 - NO-BREAK SPACE) are treated as
 1888|       |   * normal characters.
 1889|       |   */
 1890|       |  while (cmdline[0] == 0x09 ||
 1891|       |         cmdline[0] == 0x0a ||
 1892|       |         cmdline[0] == 0x0c ||
 1893|       |         cmdline[0] == 0x0d ||
 1894|       |         cmdline[0] == 0x20)
 1895|       |    cmdline++;
 1896|       |
 1897|       |  wargv = CommandLineToArgvW (cmdline, &wargc);
 1898|       |  if (G_UNLIKELY (wargv == NULL))
 1899|       |    return NULL;
 1900|       |
 1901|       |  if (wargc > 0)
 1902|       |    utf8_buf = g_utf16_to_utf8 (wargv[0], -1, NULL, NULL, NULL);
 1903|       |
 1904|       |  LocalFree (wargv);
 1905|       |
 1906|       |  if (G_UNLIKELY (utf8_buf == NULL))
 1907|       |    return NULL;
 1908|       |
 1909|       |  /* We could just return cmdline, but I think it's better
 1910|       |   * to hold on to a smaller malloc block; the arguments
 1911|       |   * could be large.
 1912|       |   */
 1913|       |  base_arg0 = g_path_get_basename (utf8_buf);
 1914|       |  g_free (utf8_buf);
 1915|       |  return base_arg0;
 1916|       |#endif
 1917|       |
 1918|      0|  return NULL;
 1919|      2|}

g_snprintf:
  168|  4.98M|{
  169|  4.98M|  va_list args;
  170|  4.98M|  gint retval;
  171|       |
  172|  4.98M|  va_start (args, format);
  173|  4.98M|  retval = g_vsnprintf (string, n, format, args);
  174|  4.98M|  va_end (args);
  175|       |  
  176|  4.98M|  return retval;
  177|  4.98M|}
g_vsnprintf:
  291|  4.98M|{
  292|  4.98M|  g_return_val_if_fail (n == 0 || string != NULL, -1);
  ------------------
  |  |  652|  4.98M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  4.98M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  4.98M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  4.98M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  4.98M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  4.98M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  4.98M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  14.9M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 4.98M]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 4.98M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  4.98M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  4.98M|   else                                         \
  |  |  |  |  |  | 1183|  4.98M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  4.98M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  4.98M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 4.98M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  4.98M|      { } \
  |  |  655|  4.98M|    else \
  |  |  656|  4.98M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  4.98M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  4.98M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 4.98M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  293|  4.98M|  g_return_val_if_fail (format != NULL, -1);
  ------------------
  |  |  652|  4.98M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  4.98M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  4.98M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  4.98M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  4.98M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  4.98M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  4.98M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  4.98M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 4.98M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  4.98M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  4.98M|   else                                         \
  |  |  |  |  |  | 1183|  4.98M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  4.98M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  4.98M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 4.98M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  4.98M|      { } \
  |  |  655|  4.98M|    else \
  |  |  656|  4.98M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  4.98M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  4.98M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 4.98M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  294|       |
  295|  4.98M|  return _g_vsnprintf (string, n, format, args);
  ------------------
  |  |   40|  4.98M|#define _g_vsnprintf vsnprintf
  ------------------
  296|  4.98M|}
g_vasprintf:
  326|  2.67M|{
  327|  2.67M|  gint len;
  328|  2.67M|  g_return_val_if_fail (string != NULL, -1);
  ------------------
  |  |  652|  2.67M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  2.67M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  2.67M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  2.67M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  2.67M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  2.67M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  2.67M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  2.67M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2.67M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  2.67M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  2.67M|   else                                         \
  |  |  |  |  |  | 1183|  2.67M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  2.67M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  2.67M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2.67M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  2.67M|      { } \
  |  |  655|  2.67M|    else \
  |  |  656|  2.67M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  2.67M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  2.67M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2.67M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  329|       |
  330|       |#if !defined(USE_SYSTEM_PRINTF)
  331|       |
  332|       |  len = _g_gnulib_vasprintf (string, format, args);
  333|       |  if (len < 0)
  334|       |    *string = NULL;
  335|       |
  336|       |#elif defined (HAVE_VASPRINTF)
  337|       |
  338|  2.67M|  {
  339|  2.67M|    int saved_errno;
  340|  2.67M|    len = vasprintf (string, format, args);
  341|  2.67M|    saved_errno = errno;
  342|  2.67M|    if (len < 0)
  ------------------
  |  Branch (342:9): [True: 0, False: 2.67M]
  ------------------
  343|      0|      {
  344|      0|        if (saved_errno == ENOMEM)
  ------------------
  |  Branch (344:13): [True: 0, False: 0]
  ------------------
  345|      0|          g_error ("%s: failed to allocate memory", G_STRLOC);
  ------------------
  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  346|      0|                        for (;;) ;                   \
  |  |  347|      0|                      } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  346|      0|        else
  347|      0|          *string = NULL;
  348|      0|      }
  349|  2.67M|  }
  350|       |
  351|       |#else
  352|       |
  353|       |  {
  354|       |    va_list args2;
  355|       |
  356|       |    G_VA_COPY (args2, args);
  357|       |
  358|       |    *string = g_new (gchar, g_printf_string_upper_bound (format, args));
  359|       |
  360|       |    len = _g_vsprintf (*string, format, args2);
  361|       |    va_end (args2);
  362|       |
  363|       |    if (len < 0)
  364|       |      {
  365|       |        g_free (*string);
  366|       |        *string = NULL;
  367|       |      }
  368|       |  }
  369|       |#endif
  370|       |
  371|  2.67M|  return len;
  372|  2.67M|}

g_quark_init:
   61|      2|{
   62|      2|  g_assert (quark_seq_id == 0);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   63|      2|  quark_ht = g_hash_table_new (g_str_hash, g_str_equal);
   64|      2|  quarks = g_new (gchar*, QUARK_BLOCK_SIZE);
  ------------------
  |  |  299|      2|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  244|      2|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      2|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      2|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      2|	  gpointer __p;						\
  |  |  |  |  248|      2|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  249|      2|	    __p = g_##func (__n);				\
  |  |  |  |  250|      2|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      2|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      2|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      2|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 2]
  |  |  |  |  |  Branch (251:26): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      2|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      2|	  else							\
  |  |  |  |  254|      2|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      2|	  __p;							\
  |  |  |  |  256|      2|	}))
  |  |  ------------------
  ------------------
   65|       |  quarks[0] = NULL;
   66|      2|  quark_seq_id = 1;
   67|      2|}
g_quark_from_string:
  230|     96|{
  231|     96|  return quark_from_string_locked (string, TRUE);
  ------------------
  |  |  884|     96|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|     96|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  232|     96|}
g_quark_from_static_string:
  259|      9|{
  260|      9|  return quark_from_string_locked (string, FALSE);
  ------------------
  |  |  880|      9|#define	FALSE	(0)
  ------------------
  261|      9|}
g_quark_to_string:
  273|    142|{
  274|    142|  gchar* result = NULL;
  275|    142|  gchar **strings;
  276|    142|  guint seq_id;
  277|       |
  278|    142|  seq_id = (guint) g_atomic_int_get (&quark_seq_id);
  ------------------
  |  |  110|    142|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|    142|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  111|    142|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|    142|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  112|    142|    gint gaig_temp;                                                          \
  |  |  113|    142|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (113:13): [Folded, False: 142]
  |  |  ------------------
  |  |  114|    142|    __atomic_load ((gint *)(atomic), &gaig_temp, __ATOMIC_SEQ_CST);          \
  |  |  115|    142|    (gint) gaig_temp;                                                        \
  |  |  116|    142|  }))
  ------------------
  279|    142|  strings = g_atomic_pointer_get (&quarks);
  ------------------
  |  |  127|    142|  (G_GNUC_EXTENSION ({                                                     \
  |  |  ------------------
  |  |  |  |   62|    142|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  128|    142|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));               \
  |  |  ------------------
  |  |  |  |  824|    142|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  129|    142|    glib_typeof (*(atomic)) gapg_temp_newval;                              \
  |  |  ------------------
  |  |  |  |   39|    142|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  130|    142|    glib_typeof ((atomic)) gapg_temp_atomic = (atomic);                    \
  |  |  ------------------
  |  |  |  |   39|    142|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  131|    142|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  132|    142|    gapg_temp_newval;                                                      \
  |  |  133|    142|  }))
  ------------------
  280|       |
  281|    142|  if (quark < seq_id)
  ------------------
  |  Branch (281:7): [True: 142, False: 0]
  ------------------
  282|    142|    result = strings[quark];
  283|       |
  284|    142|  return result;
  285|    142|}
g_intern_static_string:
  374|     94|{
  375|     94|  return quark_intern_string_locked (string, FALSE);
  ------------------
  |  |  880|     94|#define	FALSE	(0)
  ------------------
  376|     94|}
gquark.c:quark_from_string_locked:
  201|    105|{
  202|    105|  GQuark quark = 0;
  203|       |
  204|    105|  if (!string)
  ------------------
  |  Branch (204:7): [True: 0, False: 105]
  ------------------
  205|      0|    return 0;
  206|       |
  207|    105|  G_LOCK (quark_global);
  ------------------
  |  |  137|    105|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|    105|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  208|    105|  quark = quark_from_string (string, duplicate);
  209|    105|  G_UNLOCK (quark_global);
  ------------------
  |  |  138|    105|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|    105|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  210|       |
  211|    105|  return quark;
  212|    105|}
gquark.c:quark_from_string:
  184|    199|{
  185|    199|  GQuark quark = 0;
  186|       |
  187|    199|  quark = GPOINTER_TO_UINT (g_hash_table_lookup (quark_ht, string));
  ------------------
  |  |  101|    199|#define GPOINTER_TO_UINT(p)	((guint) (gulong) (p))
  ------------------
  188|       |
  189|    199|  if (!quark)
  ------------------
  |  Branch (189:7): [True: 105, False: 94]
  ------------------
  190|    105|    {
  191|    105|      quark = quark_new (duplicate ? quark_strdup (string) : (gchar *)string);
  ------------------
  |  Branch (191:26): [True: 2, False: 103]
  ------------------
  192|    105|      TRACE(GLIB_QUARK_NEW(string, quark));
  193|    105|    }
  194|       |
  195|    199|  return quark;
  196|    199|}
gquark.c:quark_new:
  290|    105|{
  291|    105|  GQuark quark;
  292|    105|  gchar **quarks_new;
  293|       |
  294|    105|  if (quark_seq_id % QUARK_BLOCK_SIZE == 0)
  ------------------
  |  |   47|    105|#define QUARK_BLOCK_SIZE         2048
  ------------------
  |  Branch (294:7): [True: 0, False: 105]
  ------------------
  295|      0|    {
  296|      0|      quarks_new = g_new (gchar*, quark_seq_id + QUARK_BLOCK_SIZE);
  ------------------
  |  |  299|      0|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  244|      0|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      0|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      0|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      0|	  gpointer __p;						\
  |  |  |  |  248|      0|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  249|      0|	    __p = g_##func (__n);				\
  |  |  |  |  250|      0|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      0|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      0|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      0|	  else							\
  |  |  |  |  254|      0|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      0|	  __p;							\
  |  |  |  |  256|      0|	}))
  |  |  ------------------
  ------------------
  297|      0|      if (quark_seq_id != 0)
  ------------------
  |  Branch (297:11): [True: 0, False: 0]
  ------------------
  298|      0|        memcpy (quarks_new, quarks, sizeof (char *) * quark_seq_id);
  299|      0|      memset (quarks_new + quark_seq_id, 0, sizeof (char *) * QUARK_BLOCK_SIZE);
  ------------------
  |  |   47|      0|#define QUARK_BLOCK_SIZE         2048
  ------------------
  300|       |      /* This leaks the old quarks array. Its unfortunate, but it allows
  301|       |       * us to do lockless lookup of the arrays, and there shouldn't be that
  302|       |       * many quarks in an app
  303|       |       */
  304|      0|      g_atomic_pointer_set (&quarks, quarks_new);
  ------------------
  |  |  135|      0|  (G_GNUC_EXTENSION ({                                                      \
  |  |  ------------------
  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  136|      0|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                \
  |  |  ------------------
  |  |  |  |  824|      0|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  137|      0|    glib_typeof ((atomic)) gaps_temp_atomic = (atomic);                     \
  |  |  ------------------
  |  |  |  |   39|      0|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  138|      0|    glib_typeof (*(atomic)) gaps_temp_newval = (newval);                    \
  |  |  ------------------
  |  |  |  |   39|      0|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  139|      0|    (void) (0 ? (gpointer) * (atomic) : NULL);                              \
  |  |  ------------------
  |  |  |  Branch (139:13): [Folded, False: 0]
  |  |  ------------------
  |  |  140|      0|    __atomic_store (gaps_temp_atomic, &gaps_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  141|      0|  }))
  ------------------
  305|      0|    }
  306|       |
  307|    105|  quark = quark_seq_id;
  308|    105|  g_atomic_pointer_set (&quarks[quark], string);
  ------------------
  |  |  135|    105|  (G_GNUC_EXTENSION ({                                                      \
  |  |  ------------------
  |  |  |  |   62|    105|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  136|    105|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                \
  |  |  ------------------
  |  |  |  |  824|    105|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  137|    105|    glib_typeof ((atomic)) gaps_temp_atomic = (atomic);                     \
  |  |  ------------------
  |  |  |  |   39|    105|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  138|    105|    glib_typeof (*(atomic)) gaps_temp_newval = (newval);                    \
  |  |  ------------------
  |  |  |  |   39|    105|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  139|    105|    (void) (0 ? (gpointer) * (atomic) : NULL);                              \
  |  |  ------------------
  |  |  |  Branch (139:13): [Folded, False: 105]
  |  |  ------------------
  |  |  140|    105|    __atomic_store (gaps_temp_atomic, &gaps_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  141|    105|  }))
  ------------------
  309|    105|  g_hash_table_insert (quark_ht, string, GUINT_TO_POINTER (quark));
  ------------------
  |  |  104|    105|#define GUINT_TO_POINTER(u)	((gpointer) (gulong) (u))
  ------------------
  310|    105|  g_atomic_int_inc (&quark_seq_id);
  ------------------
  |  |  162|    105|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|    105|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|    105|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|    105|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  164|    105|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded, False: 105]
  |  |  ------------------
  |  |  165|    105|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  166|    105|  }))
  ------------------
  311|       |
  312|    105|  return quark;
  313|    105|}
gquark.c:quark_strdup:
  155|      2|{
  156|      2|  gchar *copy;
  157|      2|  gsize len;
  158|       |
  159|      2|  len = strlen (string) + 1;
  160|       |
  161|       |  /* For strings longer than half the block size, fall back
  162|       |     to strdup so that we fill our blocks at least 50%. */
  163|      2|  if (len > QUARK_STRING_BLOCK_SIZE / 2)
  ------------------
  |  |   48|      2|#define QUARK_STRING_BLOCK_SIZE (4096 - sizeof (gsize))
  ------------------
  |  Branch (163:7): [True: 0, False: 2]
  ------------------
  164|      0|    return g_strdup (string);
  165|       |
  166|      2|  if (quark_block == NULL ||
  ------------------
  |  Branch (166:7): [True: 2, False: 0]
  ------------------
  167|      0|      QUARK_STRING_BLOCK_SIZE - quark_block_offset < len)
  ------------------
  |  |   48|      0|#define QUARK_STRING_BLOCK_SIZE (4096 - sizeof (gsize))
  ------------------
  |  Branch (167:7): [True: 0, False: 0]
  ------------------
  168|      2|    {
  169|      2|      quark_block = g_malloc (QUARK_STRING_BLOCK_SIZE);
  ------------------
  |  |   48|      2|#define QUARK_STRING_BLOCK_SIZE (4096 - sizeof (gsize))
  ------------------
  170|      2|      quark_block_offset = 0;
  171|      2|    }
  172|       |
  173|      2|  copy = quark_block + quark_block_offset;
  174|      2|  memcpy (copy, string, len);
  175|      2|  quark_block_offset += len;
  176|       |
  177|      2|  return copy;
  178|      2|}
gquark.c:quark_intern_string_locked:
  318|     94|{
  319|     94|  const gchar *result;
  320|     94|  GQuark quark;
  321|       |
  322|     94|  if (!string)
  ------------------
  |  Branch (322:7): [True: 0, False: 94]
  ------------------
  323|      0|    return NULL;
  324|       |
  325|     94|  G_LOCK (quark_global);
  ------------------
  |  |  137|     94|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|     94|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  326|     94|  quark = quark_from_string (string, duplicate);
  327|     94|  result = quarks[quark];
  328|     94|  G_UNLOCK (quark_global);
  ------------------
  |  |  138|     94|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|     94|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  329|       |
  330|     94|  return result;
  331|     94|}

g_convert_error_quark:
   53|    454|q_n##_quark (void)                                                      \
   54|    454|{                                                                       \
   55|    454|  static GQuark q;                                                      \
   56|    454|                                                                        \
   57|    454|  if G_UNLIKELY (q == 0)                                                \
  ------------------
  |  | 1187|    454|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|    454| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    454|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|    454|   int _g_boolean_var_;                         \
  |  |  |  | 1180|    454|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 1, False: 453]
  |  |  |  |  ------------------
  |  |  |  | 1181|    454|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|    454|   else                                         \
  |  |  |  | 1183|    454|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|    454|   _g_boolean_var_;                             \
  |  |  |  | 1185|    454|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 1, False: 453]
  |  |  ------------------
  ------------------
   58|    454|    q = g_quark_from_static_string (#QN);                               \
   59|    454|                                                                        \
   60|    454|  return q;                                                             \
   61|    454|}
g_file_error_quark:
   53|    123|q_n##_quark (void)                                                      \
   54|    123|{                                                                       \
   55|    123|  static GQuark q;                                                      \
   56|    123|                                                                        \
   57|    123|  if G_UNLIKELY (q == 0)                                                \
  ------------------
  |  | 1187|    123|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|    123| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    123|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|    123|   int _g_boolean_var_;                         \
  |  |  |  | 1180|    123|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 1, False: 122]
  |  |  |  |  ------------------
  |  |  |  | 1181|    123|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|    123|   else                                         \
  |  |  |  | 1183|    123|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|    123|   _g_boolean_var_;                             \
  |  |  |  | 1185|    123|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 1, False: 122]
  |  |  ------------------
  ------------------
   58|    123|    q = g_quark_from_static_string (#QN);                               \
   59|    123|                                                                        \
   60|    123|  return q;                                                             \
   61|    123|}
g_io_channel_error_quark:
   53|  42.1k|q_n##_quark (void)                                                      \
   54|  42.1k|{                                                                       \
   55|  42.1k|  static GQuark q;                                                      \
   56|  42.1k|                                                                        \
   57|  42.1k|  if G_UNLIKELY (q == 0)                                                \
  ------------------
  |  | 1187|  42.1k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  42.1k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  42.1k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  42.1k|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  42.1k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 1, False: 42.1k]
  |  |  |  |  ------------------
  |  |  |  | 1181|  42.1k|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  42.1k|   else                                         \
  |  |  |  | 1183|  42.1k|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  42.1k|   _g_boolean_var_;                             \
  |  |  |  | 1185|  42.1k|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 1, False: 42.1k]
  |  |  ------------------
  ------------------
   58|  42.1k|    q = g_quark_from_static_string (#QN);                               \
   59|  42.1k|                                                                        \
   60|  42.1k|  return q;                                                             \
   61|  42.1k|}

g_queue_new:
   72|  29.4k|{
   73|  29.4k|  return g_slice_new0 (GQueue);
  ------------------
  |  |   54|  29.4k|  (type *) (G_GNUC_EXTENSION ({                                 \
  |  |  ------------------
  |  |  |  |   62|  29.4k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |   55|  29.4k|    gsize __s = sizeof (type);                                  \
  |  |   56|  29.4k|    gpointer __p;                                               \
  |  |   57|  29.4k|    __p = g_slice_alloc (__s);                                  \
  |  |   58|  29.4k|    memset (__p, 0, __s);                                       \
  |  |   59|  29.4k|    __p;                                                        \
  |  |   60|  29.4k|  }))
  ------------------
   74|  29.4k|}
g_queue_free:
   89|  29.4k|{
   90|  29.4k|  g_return_if_fail (queue != NULL);
  ------------------
  |  |  639|  29.4k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  29.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  29.4k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  29.4k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  29.4k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  29.4k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  29.4k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  29.4k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  29.4k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  29.4k|   else                                         \
  |  |  |  |  |  | 1183|  29.4k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  29.4k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  29.4k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 29.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  29.4k|      { } \
  |  |  642|  29.4k|    else \
  |  |  643|  29.4k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  29.4k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  29.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 29.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   91|       |
   92|  29.4k|  g_list_free (queue->head);
   93|  29.4k|  g_slice_free (GQueue, queue);
  ------------------
  |  |   81|  29.4k|#define g_slice_free(type, mem)                                 \
  |  |  ------------------
  |  |  |  |  940|  29.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |   82|  29.4k|G_STMT_START {                                                  \
  |  |   83|  29.4k|  if (1) g_slice_free1 (sizeof (type), (mem));			\
  |  |  ------------------
  |  |  |  Branch (83:7): [True: 29.4k, Folded]
  |  |  ------------------
  |  |   84|  29.4k|  else   (void) ((type*) 0 == (mem)); 				\
  |  |   85|  29.4k|} G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  29.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 29.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   94|  29.4k|}
g_queue_foreach:
  274|  29.4k|{
  275|  29.4k|  GList *list;
  276|       |
  277|  29.4k|  g_return_if_fail (queue != NULL);
  ------------------
  |  |  639|  29.4k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  29.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  29.4k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  29.4k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  29.4k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  29.4k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  29.4k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  29.4k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  29.4k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  29.4k|   else                                         \
  |  |  |  |  |  | 1183|  29.4k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  29.4k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  29.4k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 29.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  29.4k|      { } \
  |  |  642|  29.4k|    else \
  |  |  643|  29.4k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  29.4k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  29.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 29.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  278|  29.4k|  g_return_if_fail (func != NULL);
  ------------------
  |  |  639|  29.4k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  29.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  29.4k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  29.4k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  29.4k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  29.4k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  29.4k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  29.4k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 29.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  29.4k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  29.4k|   else                                         \
  |  |  |  |  |  | 1183|  29.4k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  29.4k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  29.4k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 29.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  29.4k|      { } \
  |  |  642|  29.4k|    else \
  |  |  643|  29.4k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  29.4k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  29.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 29.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  279|       |  
  280|  29.4k|  list = queue->head;
  281|  36.1k|  while (list)
  ------------------
  |  Branch (281:10): [True: 6.74k, False: 29.4k]
  ------------------
  282|  6.74k|    {
  283|  6.74k|      GList *next = list->next;
  284|  6.74k|      func (list->data, user_data);
  285|  6.74k|      list = next;
  286|  6.74k|    }
  287|  29.4k|}
g_queue_push_tail:
  444|  67.5k|{
  445|  67.5k|  g_return_if_fail (queue != NULL);
  ------------------
  |  |  639|  67.5k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  67.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  67.5k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  67.5k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  67.5k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  67.5k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  67.5k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  67.5k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 67.5k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  67.5k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  67.5k|   else                                         \
  |  |  |  |  |  | 1183|  67.5k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  67.5k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  67.5k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 67.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  67.5k|      { } \
  |  |  642|  67.5k|    else \
  |  |  643|  67.5k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  67.5k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  67.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 67.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  446|       |
  447|  67.5k|  queue->tail = g_list_append (queue->tail, data);
  448|  67.5k|  if (queue->tail->next)
  ------------------
  |  Branch (448:7): [True: 0, False: 67.5k]
  ------------------
  449|      0|    queue->tail = queue->tail->next;
  450|  67.5k|  else
  451|  67.5k|    queue->head = queue->tail;
  452|  67.5k|  queue->length++;
  453|  67.5k|}
g_queue_pop_head:
  544|  60.7k|{
  545|  60.7k|  g_return_val_if_fail (queue != NULL, NULL);
  ------------------
  |  |  652|  60.7k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  60.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  60.7k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  60.7k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  60.7k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  60.7k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  60.7k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  60.7k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 60.7k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  60.7k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  60.7k|   else                                         \
  |  |  |  |  |  | 1183|  60.7k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  60.7k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  60.7k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 60.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  60.7k|      { } \
  |  |  655|  60.7k|    else \
  |  |  656|  60.7k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  60.7k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  60.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 60.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  546|       |
  547|  60.7k|  if (queue->head)
  ------------------
  |  Branch (547:7): [True: 60.7k, False: 0]
  ------------------
  548|  60.7k|    {
  549|  60.7k|      GList *node = queue->head;
  550|  60.7k|      gpointer data = node->data;
  551|       |
  552|  60.7k|      queue->head = node->next;
  553|  60.7k|      if (queue->head)
  ------------------
  |  Branch (553:11): [True: 0, False: 60.7k]
  ------------------
  554|      0|        queue->head->prev = NULL;
  555|  60.7k|      else
  556|  60.7k|        queue->tail = NULL;
  557|  60.7k|      g_list_free_1 (node);
  558|  60.7k|      queue->length--;
  559|       |
  560|  60.7k|      return data;
  561|  60.7k|    }
  562|       |
  563|      0|  return NULL;
  564|  60.7k|}

g_rc_box_alloc_full:
  177|  2.86k|{
  178|       |  /* We don't do an (atomic ? G_ARC_BOX_SIZE : G_RC_BOX_SIZE) check, here
  179|       |   * because we have a static assertion that sizeof(GArcBox) == sizeof(GRcBox)
  180|       |   * inside grcboxprivate.h, and we don't want the compiler to unnecessarily
  181|       |   * warn about both branches of the conditional yielding identical results
  182|       |   */
  183|  2.86k|  gsize private_size = G_ARC_BOX_SIZE;
  ------------------
  |  |   66|  2.86k|#define G_ARC_BOX_SIZE sizeof (GArcBox)
  ------------------
  184|  2.86k|  gsize private_offset = 0;
  185|  2.86k|  gsize real_size;
  186|  2.86k|  char *allocated;
  187|       |
  188|  2.86k|  g_assert (alignment != 0);
  ------------------
  |  |  234|  2.86k|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  2.86k|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  2.86k|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  2.86k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  2.86k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  2.86k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  2.86k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  2.86k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2.86k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  2.86k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  2.86k|   else                                         \
  |  |  |  |  |  | 1183|  2.86k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  2.86k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  2.86k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2.86k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  2.86k|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  2.86k|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  2.86k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2.86k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|       |
  190|       |  /* We need to ensure that the private data is aligned */
  191|  2.86k|  if (private_size % alignment != 0)
  ------------------
  |  Branch (191:7): [True: 0, False: 2.86k]
  ------------------
  192|      0|    {
  193|      0|      private_offset = private_size % alignment;
  194|      0|      private_size += (alignment - private_offset);
  195|      0|    }
  196|       |
  197|  2.86k|  g_assert (block_size < (G_MAXSIZE - private_size));
  ------------------
  |  |  234|  2.86k|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  2.86k|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  2.86k|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  2.86k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  2.86k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  2.86k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  2.86k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  2.86k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2.86k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  2.86k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  2.86k|   else                                         \
  |  |  |  |  |  | 1183|  2.86k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  2.86k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  2.86k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2.86k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  2.86k|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  2.86k|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  2.86k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2.86k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|  2.86k|  real_size = private_size + block_size;
  199|       |
  200|       |  /* The real allocated size must be a multiple of @alignment, to
  201|       |   * maintain the alignment of block_size
  202|       |   */
  203|  2.86k|  if (real_size % alignment != 0)
  ------------------
  |  Branch (203:7): [True: 2.77k, False: 84]
  ------------------
  204|  2.77k|    {
  205|  2.77k|      gsize offset = real_size % alignment;
  206|  2.77k|      g_assert (real_size < (G_MAXSIZE - (alignment - offset)));
  ------------------
  |  |  234|  2.77k|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  2.77k|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  2.77k|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  2.77k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  2.77k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  2.77k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  2.77k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  2.77k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2.77k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  2.77k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  2.77k|   else                                         \
  |  |  |  |  |  | 1183|  2.77k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  2.77k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  2.77k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2.77k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  2.77k|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  2.77k|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  2.77k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2.77k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  207|  2.77k|      real_size += (alignment - offset);
  208|  2.77k|    }
  209|       |
  210|       |#ifdef ENABLE_VALGRIND
  211|       |  if (RUNNING_ON_VALGRIND)
  212|       |    {
  213|       |      /* When running under Valgrind we massage the memory allocation
  214|       |       * to include a pointer at the tail end of the block; the pointer
  215|       |       * is then set to the start of the block. This trick allows
  216|       |       * Valgrind to keep track of the over-allocation and not be
  217|       |       * confused when passing the pointer around
  218|       |       */
  219|       |      g_assert (private_size < (G_MAXSIZE - ALIGN_STRUCT (1)));
  220|       |      private_size += ALIGN_STRUCT (1);
  221|       |
  222|       |      if (clear)
  223|       |        allocated = g_malloc0 (real_size + sizeof (gpointer));
  224|       |      else
  225|       |        allocated = g_malloc (real_size + sizeof (gpointer));
  226|       |
  227|       |      *(gpointer *) (allocated + private_size + block_size) = allocated + ALIGN_STRUCT (1);
  228|       |
  229|       |      VALGRIND_MALLOCLIKE_BLOCK (allocated + private_size, block_size + sizeof (gpointer), 0, TRUE);
  230|       |      VALGRIND_MALLOCLIKE_BLOCK (allocated + ALIGN_STRUCT (1), private_size - ALIGN_STRUCT (1), 0, TRUE);
  231|       |    }
  232|       |  else
  233|       |#endif /* ENABLE_VALGRIND */
  234|  2.86k|    {
  235|  2.86k|      if (clear)
  ------------------
  |  Branch (235:11): [True: 0, False: 2.86k]
  ------------------
  236|      0|        allocated = g_malloc0 (real_size);
  237|  2.86k|      else
  238|  2.86k|        allocated = g_malloc (real_size);
  239|  2.86k|    }
  240|       |
  241|  2.86k|  if (atomic)
  ------------------
  |  Branch (241:7): [True: 2.86k, False: 0]
  ------------------
  242|  2.86k|    {
  243|       |      /* We leave the alignment padding at the top of the allocation,
  244|       |       * so we have an in memory layout of:
  245|       |       *
  246|       |       *  |[ offset ][ sizeof(GArcBox) ]||[ block_size ]|
  247|       |       */
  248|  2.86k|      GArcBox *real_box = (GArcBox *) (allocated + private_offset);
  249|       |      /* Store the real size */
  250|  2.86k|      real_box->mem_size = block_size;
  251|       |      /* Store the alignment offset, to be used when freeing the
  252|       |       * allocated block
  253|       |       */
  254|  2.86k|      real_box->private_offset = private_offset;
  255|  2.86k|#ifndef G_DISABLE_ASSERT
  256|  2.86k|      real_box->magic = G_BOX_MAGIC;
  ------------------
  |  |   53|  2.86k|#define G_BOX_MAGIC             0x44ae2bf0
  ------------------
  257|  2.86k|#endif
  258|  2.86k|      g_atomic_ref_count_init (&real_box->ref_count);
  259|  2.86k|    }
  260|      0|  else
  261|      0|    {
  262|       |      /* We leave the alignment padding at the top of the allocation,
  263|       |       * so we have an in memory layout of:
  264|       |       *
  265|       |       *  |[ offset ][ sizeof(GRcBox) ]||[ block_size ]|
  266|       |       */
  267|      0|      GRcBox *real_box = (GRcBox *) (allocated + private_offset);
  268|       |      /* Store the real size */
  269|      0|      real_box->mem_size = block_size;
  270|       |      /* Store the alignment offset, to be used when freeing the
  271|       |       * allocated block
  272|       |       */
  273|      0|      real_box->private_offset = private_offset;
  274|      0|#ifndef G_DISABLE_ASSERT
  275|      0|      real_box->magic = G_BOX_MAGIC;
  ------------------
  |  |   53|      0|#define G_BOX_MAGIC             0x44ae2bf0
  ------------------
  276|      0|#endif
  277|      0|      g_ref_count_init (&real_box->ref_count);
  278|      0|    }
  279|       |
  280|  2.86k|  TRACE (GLIB_RCBOX_ALLOC (allocated, block_size, atomic, clear));
  281|       |
  282|  2.86k|  return allocated + private_size;
  283|  2.86k|}

g_atomic_ref_count_init:
  214|  1.22M|{
  215|  1.22M|  g_return_if_fail (arc != NULL);
  ------------------
  |  |  639|  1.22M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.22M|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  1.22M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.22M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.22M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.22M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.22M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.22M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.22M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.22M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.22M|   else                                         \
  |  |  |  |  |  | 1183|  1.22M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.22M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.22M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.22M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  1.22M|      { } \
  |  |  642|  1.22M|    else \
  |  |  643|  1.22M|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  1.22M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.22M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.22M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  216|       |
  217|       |  /* Atomic refcounting is implemented using the positive range
  218|       |   * of signed integers:
  219|       |   *
  220|       |   * G_MININT                 Z¯< 0 > Z⁺                G_MAXINT
  221|       |   * |----------------------------|----------------------------|
  222|       |   *
  223|       |   * Acquiring a reference moves us towards MAXINT, and releasing a
  224|       |   * reference moves us towards 0.
  225|       |   */
  226|  1.22M|  *arc = 1;
  227|  1.22M|}
g_atomic_ref_count_inc:
  239|    387|{
  240|    387|  gint old_value;
  241|       |
  242|    387|  g_return_if_fail (arc != NULL);
  ------------------
  |  |  639|    387|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    387|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|    387|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    387|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    387| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    387|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    387|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    387|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 387, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    387|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    387|   else                                         \
  |  |  |  |  |  | 1183|    387|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    387|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    387|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 387, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|    387|      { } \
  |  |  642|    387|    else \
  |  |  643|    387|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|    387|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    387|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 387]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|    387|  old_value = g_atomic_int_add (arc, 1);
  ------------------
  |  |  209|    387|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|    387|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  210|    387|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|    387|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  211|    387|    (void) (0 ? *(atomic) ^ (val) : 1);                                      \
  |  |  ------------------
  |  |  |  Branch (211:13): [Folded, False: 387]
  |  |  ------------------
  |  |  212|    387|    (gint) __atomic_fetch_add ((atomic), (val), __ATOMIC_SEQ_CST);           \
  |  |  213|    387|  }))
  ------------------
  244|    387|  g_return_if_fail (old_value > 0);
  ------------------
  |  |  639|    387|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    387|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|    387|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    387|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    387| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    387|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    387|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    387|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 387, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    387|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    387|   else                                         \
  |  |  |  |  |  | 1183|    387|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    387|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    387|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 387, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|    387|      { } \
  |  |  642|    387|    else \
  |  |  643|    387|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|    387|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    387|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 387]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  245|       |
  246|    387|  if (old_value == G_MAXINT)
  ------------------
  |  |   36|    387|#define G_MAXINT	INT_MAX
  ------------------
  |  Branch (246:7): [True: 0, False: 387]
  ------------------
  247|      0|    g_critical ("Reference count has reached saturation");
  ------------------
  |  |  351|      0|#define g_critical(...) g_log (G_LOG_DOMAIN,         \
  |  |  352|      0|                               G_LOG_LEVEL_CRITICAL, \
  |  |  353|      0|                               __VA_ARGS__)
  ------------------
  248|    387|}
g_atomic_ref_count_dec:
  266|  1.19M|{
  267|  1.19M|  gint old_value;
  268|       |
  269|  1.19M|  g_return_val_if_fail (arc != NULL, FALSE);
  ------------------
  |  |  652|  1.19M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.19M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  1.19M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.19M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.19M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.19M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.19M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.19M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.19M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.19M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.19M|   else                                         \
  |  |  |  |  |  | 1183|  1.19M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.19M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.19M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.19M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  1.19M|      { } \
  |  |  655|  1.19M|    else \
  |  |  656|  1.19M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  1.19M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.19M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.19M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  270|  1.19M|  old_value = g_atomic_int_add (arc, -1);
  ------------------
  |  |  209|  1.19M|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|  1.19M|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  210|  1.19M|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|  1.19M|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  211|  1.19M|    (void) (0 ? *(atomic) ^ (val) : 1);                                      \
  |  |  ------------------
  |  |  |  Branch (211:13): [Folded, False: 1.19M]
  |  |  ------------------
  |  |  212|  1.19M|    (gint) __atomic_fetch_add ((atomic), (val), __ATOMIC_SEQ_CST);           \
  |  |  213|  1.19M|  }))
  ------------------
  271|  1.19M|  g_return_val_if_fail (old_value > 0, FALSE);
  ------------------
  |  |  652|  1.19M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.19M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  1.19M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.19M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.19M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.19M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.19M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.19M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.19M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.19M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.19M|   else                                         \
  |  |  |  |  |  | 1183|  1.19M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.19M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.19M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.19M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  1.19M|      { } \
  |  |  655|  1.19M|    else \
  |  |  656|  1.19M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  1.19M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.19M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.19M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  272|       |
  273|  1.19M|  return old_value == 1;
  274|  1.19M|}

g_ref_string_new:
  121|  2.86k|{
  122|  2.86k|  char *res;
  123|  2.86k|  gsize len;
  124|       |
  125|  2.86k|  g_return_val_if_fail (str != NULL, NULL);
  ------------------
  |  |  652|  2.86k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  2.86k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  2.86k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  2.86k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  2.86k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  2.86k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  2.86k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  2.86k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2.86k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  2.86k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  2.86k|   else                                         \
  |  |  |  |  |  | 1183|  2.86k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  2.86k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  2.86k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2.86k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  2.86k|      { } \
  |  |  655|  2.86k|    else \
  |  |  656|  2.86k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  2.86k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  2.86k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2.86k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  126|       |  
  127|  2.86k|  len = strlen (str);
  128|       |  
  129|  2.86k|  res = (char *) g_atomic_rc_box_dup (sizeof (char) * len + 1, str);
  ------------------
  |  |   88|  2.86k|  ((glib_typeof (mem_block)) (g_atomic_rc_box_dup) (block_size, mem_block))
  ------------------
  130|       |
  131|  2.86k|  return res;
  132|  2.86k|}
g_ref_string_new_intern:
  205|  3.24k|{
  206|  3.24k|  char *res;
  207|       |
  208|  3.24k|  g_return_val_if_fail (str != NULL, NULL);
  ------------------
  |  |  652|  3.24k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  3.24k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  3.24k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  3.24k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  3.24k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  3.24k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  3.24k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  3.24k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 3.24k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  3.24k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  3.24k|   else                                         \
  |  |  |  |  |  | 1183|  3.24k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  3.24k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  3.24k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 3.24k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  3.24k|      { } \
  |  |  655|  3.24k|    else \
  |  |  656|  3.24k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  3.24k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  3.24k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 3.24k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|       |
  210|  3.24k|  G_LOCK (interned_ref_strings);
  ------------------
  |  |  137|  3.24k|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|  3.24k|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  211|       |
  212|  3.24k|  if (G_UNLIKELY (interned_ref_strings == NULL))
  ------------------
  |  | 1187|  3.24k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  3.24k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  3.24k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  3.24k|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  3.24k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 1.73k, False: 1.50k]
  |  |  |  |  ------------------
  |  |  |  | 1181|  3.24k|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  3.24k|   else                                         \
  |  |  |  | 1183|  3.24k|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  3.24k|   _g_boolean_var_;                             \
  |  |  |  | 1185|  3.24k|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 1.73k, False: 1.50k]
  |  |  ------------------
  ------------------
  213|  1.73k|    interned_ref_strings = g_hash_table_new (g_str_hash, interned_str_equal);
  214|       |
  215|  3.24k|  res = g_hash_table_lookup (interned_ref_strings, str);
  216|  3.24k|  if (res != NULL)
  ------------------
  |  Branch (216:7): [True: 387, False: 2.86k]
  ------------------
  217|    387|    {
  218|       |      /* We acquire the reference while holding the lock, to
  219|       |       * avoid a potential race between releasing the lock on
  220|       |       * the hash table and another thread releasing the reference
  221|       |       * on the same string
  222|       |       */
  223|    387|      g_atomic_rc_box_acquire (res);
  ------------------
  |  |   82|    387|  ((glib_typeof (mem_block)) (g_atomic_rc_box_acquire) (mem_block))
  ------------------
  224|    387|      G_UNLOCK (interned_ref_strings);
  ------------------
  |  |  138|    387|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|    387|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  225|    387|      return res;
  226|    387|    }
  227|       |
  228|  2.86k|  res = g_ref_string_new (str);
  229|  2.86k|  g_hash_table_add (interned_ref_strings, res);
  230|  2.86k|  G_UNLOCK (interned_ref_strings);
  ------------------
  |  |  138|  2.86k|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|  2.86k|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  231|       |
  232|  2.86k|  return res;
  233|  3.24k|}
g_ref_string_release:
  282|  3.24k|{
  283|  3.24k|  g_return_if_fail (str != NULL);
  ------------------
  |  |  639|  3.24k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  3.24k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  3.24k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  3.24k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  3.24k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  3.24k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  3.24k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  3.24k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 3.24k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  3.24k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  3.24k|   else                                         \
  |  |  |  |  |  | 1183|  3.24k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  3.24k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  3.24k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 3.24k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  3.24k|      { } \
  |  |  642|  3.24k|    else \
  |  |  643|  3.24k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  3.24k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  3.24k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 3.24k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|       |
  285|  3.24k|  g_atomic_rc_box_release_full (str, remove_if_interned);
  286|  3.24k|}
grefstring.c:interned_str_equal:
  177|  3.27k|{
  178|  3.27k|  const char *str1 = v1;
  179|  3.27k|  const char *str2 = v2;
  180|       |
  181|  3.27k|  if (v1 == v2)
  ------------------
  |  Branch (181:7): [True: 2.86k, False: 415]
  ------------------
  182|  2.86k|    return TRUE;
  ------------------
  |  |  884|  2.86k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  2.86k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  183|       |
  184|    415|  return strcmp (str1, str2) == 0;
  185|  3.27k|}
grefstring.c:remove_if_interned:
  255|  2.86k|{
  256|  2.86k|  char *str = data;
  257|       |
  258|  2.86k|  G_LOCK (interned_ref_strings);
  ------------------
  |  |  137|  2.86k|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|  2.86k|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  259|       |
  260|  2.86k|  if (G_LIKELY (interned_ref_strings != NULL))
  ------------------
  |  | 1186|  2.86k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|  2.86k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  2.86k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  2.86k|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  2.86k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 2.86k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|  2.86k|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  2.86k|   else                                         \
  |  |  |  | 1183|  2.86k|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  2.86k|   _g_boolean_var_;                             \
  |  |  |  | 1185|  2.86k|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 2.86k, False: 0]
  |  |  ------------------
  ------------------
  261|  2.86k|    {
  262|  2.86k|      g_hash_table_remove (interned_ref_strings, str);
  263|       |
  264|  2.86k|      if (g_hash_table_size (interned_ref_strings) == 0)
  ------------------
  |  Branch (264:11): [True: 1.73k, False: 1.12k]
  ------------------
  265|  2.86k|        g_clear_pointer (&interned_ref_strings, g_hash_table_destroy);
  ------------------
  |  |  129|  1.73k|  G_STMT_START                                           \
  |  |  ------------------
  |  |  |  |  940|  1.73k|#define G_STMT_START  do
  |  |  ------------------
  |  |  130|  1.73k|  {                                                      \
  |  |  131|  1.73k|    G_STATIC_ASSERT (sizeof *(pp) == sizeof (gpointer)); \
  |  |  ------------------
  |  |  |  |  824|  1.73k|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  132|  1.73k|    glib_typeof ((pp)) _pp = (pp);                       \
  |  |  ------------------
  |  |  |  |   39|  1.73k|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  133|  1.73k|    glib_typeof (*(pp)) _ptr = *_pp;                     \
  |  |  ------------------
  |  |  |  |   39|  1.73k|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  134|  1.73k|    *_pp = NULL;                                         \
  |  |  135|  1.73k|    if (_ptr)                                            \
  |  |  ------------------
  |  |  |  Branch (135:9): [True: 1.73k, False: 0]
  |  |  ------------------
  |  |  136|  1.73k|      (destroy) (_ptr);                                  \
  |  |  137|  1.73k|  }                                                      \
  |  |  138|  1.73k|  G_STMT_END                                             \
  |  |  ------------------
  |  |  |  |  948|  1.73k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.73k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|  2.86k|  GLIB_AVAILABLE_MACRO_IN_2_34
  ------------------
  266|  2.86k|    }
  267|       |
  268|  2.86k|  G_UNLOCK (interned_ref_strings);
  ------------------
  |  |  138|  2.86k|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|  2.86k|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  269|  2.86k|}

g_scanner_new:
  413|      6|{
  414|      6|  GScanner *scanner;
  415|       |  
  416|      6|  if (!config_templ)
  ------------------
  |  Branch (416:7): [True: 6, False: 0]
  ------------------
  417|      6|    config_templ = &g_scanner_config_template;
  418|       |  
  419|      6|  scanner = g_new0 (GScanner, 1);
  ------------------
  |  |  316|      6|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|      6|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      6|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      6|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      6|	  gpointer __p;						\
  |  |  |  |  248|      6|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  249|      6|	    __p = g_##func (__n);				\
  |  |  |  |  250|      6|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      6|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      6|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      6|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 6]
  |  |  |  |  |  Branch (251:26): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      6|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      6|	  else							\
  |  |  |  |  254|      6|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      6|	  __p;							\
  |  |  |  |  256|      6|	}))
  |  |  ------------------
  ------------------
  420|       |  
  421|      6|  scanner->user_data = NULL;
  422|      6|  scanner->max_parse_errors = 1;
  423|      6|  scanner->parse_errors	= 0;
  424|      6|  scanner->input_name = NULL;
  425|      6|  g_datalist_init (&scanner->qdata);
  426|       |  
  427|      6|  scanner->config = g_new0 (GScannerConfig, 1);
  ------------------
  |  |  316|      6|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|      6|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      6|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      6|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      6|	  gpointer __p;						\
  |  |  |  |  248|      6|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  249|      6|	    __p = g_##func (__n);				\
  |  |  |  |  250|      6|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      6|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      6|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      6|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 6]
  |  |  |  |  |  Branch (251:26): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      6|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      6|	  else							\
  |  |  |  |  254|      6|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      6|	  __p;							\
  |  |  |  |  256|      6|	}))
  |  |  ------------------
  ------------------
  428|       |  
  429|      6|  scanner->config->case_sensitive	 = config_templ->case_sensitive;
  430|      6|  scanner->config->cset_skip_characters	 = config_templ->cset_skip_characters;
  431|      6|  if (!scanner->config->cset_skip_characters)
  ------------------
  |  Branch (431:7): [True: 0, False: 6]
  ------------------
  432|      0|    scanner->config->cset_skip_characters = "";
  433|      6|  scanner->config->cset_identifier_first = config_templ->cset_identifier_first;
  434|      6|  scanner->config->cset_identifier_nth	 = config_templ->cset_identifier_nth;
  435|      6|  scanner->config->cpair_comment_single	 = config_templ->cpair_comment_single;
  436|      6|  scanner->config->skip_comment_multi	 = config_templ->skip_comment_multi;
  437|      6|  scanner->config->skip_comment_single	 = config_templ->skip_comment_single;
  438|      6|  scanner->config->scan_comment_multi	 = config_templ->scan_comment_multi;
  439|      6|  scanner->config->scan_identifier	 = config_templ->scan_identifier;
  440|      6|  scanner->config->scan_identifier_1char = config_templ->scan_identifier_1char;
  441|      6|  scanner->config->scan_identifier_NULL	 = config_templ->scan_identifier_NULL;
  442|      6|  scanner->config->scan_symbols		 = config_templ->scan_symbols;
  443|      6|  scanner->config->scan_binary		 = config_templ->scan_binary;
  444|      6|  scanner->config->scan_octal		 = config_templ->scan_octal;
  445|      6|  scanner->config->scan_float		 = config_templ->scan_float;
  446|      6|  scanner->config->scan_hex		 = config_templ->scan_hex;
  447|      6|  scanner->config->scan_hex_dollar	 = config_templ->scan_hex_dollar;
  448|      6|  scanner->config->scan_string_sq	 = config_templ->scan_string_sq;
  449|      6|  scanner->config->scan_string_dq	 = config_templ->scan_string_dq;
  450|      6|  scanner->config->numbers_2_int	 = config_templ->numbers_2_int;
  451|      6|  scanner->config->int_2_float		 = config_templ->int_2_float;
  452|      6|  scanner->config->identifier_2_string	 = config_templ->identifier_2_string;
  453|      6|  scanner->config->char_2_token		 = config_templ->char_2_token;
  454|      6|  scanner->config->symbol_2_token	 = config_templ->symbol_2_token;
  455|      6|  scanner->config->scope_0_fallback	 = config_templ->scope_0_fallback;
  456|      6|  scanner->config->store_int64		 = config_templ->store_int64;
  457|       |  
  458|      6|  scanner->token = G_TOKEN_NONE;
  459|      6|  scanner->value.v_int64 = 0;
  460|      6|  scanner->line = 1;
  461|      6|  scanner->position = 0;
  462|       |  
  463|      6|  scanner->next_token = G_TOKEN_NONE;
  464|      6|  scanner->next_value.v_int64 = 0;
  465|      6|  scanner->next_line = 1;
  466|      6|  scanner->next_position = 0;
  467|       |  
  468|      6|  scanner->symbol_table = g_hash_table_new (g_scanner_key_hash, g_scanner_key_equal);
  469|      6|  scanner->input_fd = -1;
  470|      6|  scanner->text = NULL;
  471|      6|  scanner->text_end = NULL;
  472|      6|  scanner->buffer = NULL;
  473|      6|  scanner->scope_id = 0;
  474|       |  
  475|      6|  scanner->msg_handler = g_scanner_msg_handler;
  476|       |  
  477|      6|  return scanner;
  478|      6|}
g_scanner_destroy:
  520|      6|{
  521|      6|  g_return_if_fail (scanner != NULL);
  ------------------
  |  |  639|      6|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      6|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      6|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      6|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      6|   else                                         \
  |  |  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      6|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      6|      { } \
  |  |  642|      6|    else \
  |  |  643|      6|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      6|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      6|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  522|       |  
  523|      6|  g_datalist_clear (&scanner->qdata);
  524|      6|  g_hash_table_foreach (scanner->symbol_table, 
  525|       |			g_scanner_destroy_symbol_table_entry, NULL);
  526|      6|  g_hash_table_destroy (scanner->symbol_table);
  527|      6|  g_scanner_free_value (&scanner->token, &scanner->value);
  528|      6|  g_scanner_free_value (&scanner->next_token, &scanner->next_value);
  529|      6|  g_free (scanner->config);
  530|      6|  g_free (scanner->buffer);
  531|      6|  g_free (scanner);
  532|      6|}
g_scanner_peek_next_token:
  952|  4.80k|{
  953|  4.80k|  g_return_val_if_fail (scanner != NULL, G_TOKEN_EOF);
  ------------------
  |  |  652|  4.80k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  4.80k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  4.80k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  4.80k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  4.80k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  4.80k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  4.80k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  4.80k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 4.80k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  4.80k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  4.80k|   else                                         \
  |  |  |  |  |  | 1183|  4.80k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  4.80k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  4.80k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 4.80k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  4.80k|      { } \
  |  |  655|  4.80k|    else \
  |  |  656|  4.80k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  4.80k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  4.80k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 4.80k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  954|       |  
  955|  4.80k|  if (scanner->next_token == G_TOKEN_NONE)
  ------------------
  |  Branch (955:7): [True: 4.79k, False: 4]
  ------------------
  956|  4.79k|    {
  957|  4.79k|      scanner->next_line = scanner->line;
  958|  4.79k|      scanner->next_position = scanner->position;
  959|  4.79k|      g_scanner_get_token_i (scanner,
  960|  4.79k|			     &scanner->next_token,
  961|  4.79k|			     &scanner->next_value,
  962|  4.79k|			     &scanner->next_line,
  963|  4.79k|			     &scanner->next_position);
  964|  4.79k|    }
  965|       |  
  966|  4.80k|  return scanner->next_token;
  967|  4.80k|}
g_scanner_get_next_token:
  982|  5.73k|{
  983|  5.73k|  g_return_val_if_fail (scanner != NULL, G_TOKEN_EOF);
  ------------------
  |  |  652|  5.73k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.73k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  5.73k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  5.73k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.73k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.73k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.73k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  5.73k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.73k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.73k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.73k|   else                                         \
  |  |  |  |  |  | 1183|  5.73k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.73k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.73k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 5.73k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  5.73k|      { } \
  |  |  655|  5.73k|    else \
  |  |  656|  5.73k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  5.73k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.73k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.73k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  984|       |  
  985|  5.73k|  if (scanner->next_token != G_TOKEN_NONE)
  ------------------
  |  Branch (985:7): [True: 4.79k, False: 946]
  ------------------
  986|  4.79k|    {
  987|  4.79k|      g_scanner_free_value (&scanner->token, &scanner->value);
  988|       |      
  989|  4.79k|      scanner->token = scanner->next_token;
  990|  4.79k|      scanner->value = scanner->next_value;
  991|  4.79k|      scanner->line = scanner->next_line;
  992|  4.79k|      scanner->position = scanner->next_position;
  993|  4.79k|      scanner->next_token = G_TOKEN_NONE;
  994|  4.79k|    }
  995|    946|  else
  996|    946|    g_scanner_get_token_i (scanner,
  997|    946|			   &scanner->token,
  998|    946|			   &scanner->value,
  999|    946|			   &scanner->line,
 1000|    946|			   &scanner->position);
 1001|       |  
 1002|  5.73k|  return scanner->token;
 1003|  5.73k|}
g_scanner_input_text:
 1144|      6|{
 1145|      6|  g_return_if_fail (scanner != NULL);
  ------------------
  |  |  639|      6|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      6|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      6|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      6|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      6|   else                                         \
  |  |  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      6|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      6|      { } \
  |  |  642|      6|    else \
  |  |  643|      6|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      6|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      6|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1146|      6|  if (text_len)
  ------------------
  |  Branch (1146:7): [True: 6, False: 0]
  ------------------
 1147|      6|    g_return_if_fail (text != NULL);
  ------------------
  |  |  639|      6|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      6|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      6|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      6|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 6, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      6|   else                                         \
  |  |  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      6|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      6|      { } \
  |  |  642|      6|    else \
  |  |  643|      6|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      6|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      6|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1148|      0|  else
 1149|      0|    text = NULL;
 1150|       |
 1151|      6|  if (scanner->input_fd >= 0)
  ------------------
  |  Branch (1151:7): [True: 0, False: 6]
  ------------------
 1152|      0|    g_scanner_sync_file_offset (scanner);
 1153|       |
 1154|      6|  scanner->token = G_TOKEN_NONE;
 1155|      6|  scanner->value.v_int64 = 0;
 1156|      6|  scanner->line = 1;
 1157|      6|  scanner->position = 0;
 1158|      6|  scanner->next_token = G_TOKEN_NONE;
 1159|       |
 1160|      6|  scanner->input_fd = -1;
 1161|      6|  scanner->text = text;
 1162|      6|  scanner->text_end = text + text_len;
 1163|       |
 1164|      6|  if (scanner->buffer)
  ------------------
  |  Branch (1164:7): [True: 0, False: 6]
  ------------------
 1165|      0|    {
 1166|      0|      g_free (scanner->buffer);
 1167|       |      scanner->buffer = NULL;
 1168|      0|    }
 1169|      6|}
gscanner.c:g_scanner_free_value:
  483|  17.4k|{
  484|  17.4k|  switch (*token_p)
  485|  17.4k|    {
  486|  1.78k|    case G_TOKEN_STRING:
  ------------------
  |  Branch (486:5): [True: 1.78k, False: 15.6k]
  ------------------
  487|  1.78k|    case G_TOKEN_IDENTIFIER:
  ------------------
  |  Branch (487:5): [True: 0, False: 17.4k]
  ------------------
  488|  1.78k|    case G_TOKEN_IDENTIFIER_NULL:
  ------------------
  |  Branch (488:5): [True: 0, False: 17.4k]
  ------------------
  489|  2.32k|    case G_TOKEN_COMMENT_SINGLE:
  ------------------
  |  Branch (489:5): [True: 540, False: 16.8k]
  ------------------
  490|  2.32k|    case G_TOKEN_COMMENT_MULTI:
  ------------------
  |  Branch (490:5): [True: 0, False: 17.4k]
  ------------------
  491|  2.32k|      g_free (value_p->v_string);
  492|  2.32k|      break;
  493|       |      
  494|  15.0k|    default:
  ------------------
  |  Branch (494:5): [True: 15.0k, False: 2.32k]
  ------------------
  495|  15.0k|      break;
  496|  17.4k|    }
  497|       |  
  498|  17.4k|  *token_p = G_TOKEN_NONE;
  499|  17.4k|}
gscanner.c:g_scanner_key_hash:
  625|    942|{
  626|    942|  const GScannerKey *key = v;
  627|    942|  gchar *c;
  628|    942|  guint h;
  629|       |  
  630|    942|  h = key->scope_id;
  631|  8.15k|  for (c = key->symbol; *c; c++)
  ------------------
  |  Branch (631:25): [True: 7.20k, False: 942]
  ------------------
  632|  7.20k|    h = (h << 5) - h + *c;
  633|       |  
  634|    942|  return h;
  635|    942|}
gscanner.c:g_scanner_lookup_internal:
  641|    942|{
  642|    942|  GScannerKey	*key_p;
  643|    942|  GScannerKey key;
  644|       |  
  645|    942|  key.scope_id = scope_id;
  646|       |  
  647|    942|  if (!scanner->config->case_sensitive)
  ------------------
  |  Branch (647:7): [True: 942, False: 0]
  ------------------
  648|    942|    {
  649|    942|      gchar *d;
  650|    942|      const gchar *c;
  651|       |      
  652|    942|      key.symbol = g_new (gchar, strlen (symbol) + 1);
  ------------------
  |  |  299|    942|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  244|    942|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    942|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|    942|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|    942|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|    942|	  gpointer __p;						\
  |  |  |  |  248|    942|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 942, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  249|    942|	    __p = g_##func (__n);				\
  |  |  |  |  250|    942|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      0|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      0|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      0|	  else							\
  |  |  |  |  254|      0|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|    942|	  __p;							\
  |  |  |  |  256|    942|	}))
  |  |  ------------------
  ------------------
  653|  8.15k|      for (d = key.symbol, c = symbol; *c; c++, d++)
  ------------------
  |  Branch (653:40): [True: 7.20k, False: 942]
  ------------------
  654|  7.20k|	*d = to_lower (*c);
  ------------------
  |  |  280|  7.20k|#define	to_lower(c)				( \
  |  |  281|  7.20k|	(guchar) (							\
  |  |  282|  7.20k|	  ( (((guchar)(c))>='A' && ((guchar)(c))<='Z') * ('a'-'A') ) |	\
  |  |  ------------------
  |  |  |  Branch (282:7): [True: 7.20k, False: 0]
  |  |  |  Branch (282:29): [True: 482, False: 6.72k]
  |  |  ------------------
  |  |  283|  7.20k|	  ( (((guchar)(c))>=192 && ((guchar)(c))<=214) * (224-192) ) |	\
  |  |  ------------------
  |  |  |  Branch (283:7): [True: 0, False: 7.20k]
  |  |  |  Branch (283:29): [True: 0, False: 0]
  |  |  ------------------
  |  |  284|  7.20k|	  ( (((guchar)(c))>=216 && ((guchar)(c))<=222) * (248-216) ) |	\
  |  |  ------------------
  |  |  |  Branch (284:7): [True: 0, False: 7.20k]
  |  |  |  Branch (284:29): [True: 0, False: 0]
  |  |  ------------------
  |  |  285|  7.20k|	  ((guchar)(c))							\
  |  |  286|  7.20k|	)								\
  |  |  287|  7.20k|)
  ------------------
  655|    942|      *d = 0;
  656|    942|      key_p = g_hash_table_lookup (scanner->symbol_table, &key);
  657|    942|      g_free (key.symbol);
  658|    942|    }
  659|      0|  else
  660|      0|    {
  661|      0|      key.symbol = (gchar*) symbol;
  662|      0|      key_p = g_hash_table_lookup (scanner->symbol_table, &key);
  663|      0|    }
  664|       |  
  665|    942|  return key_p;
  666|    942|}
gscanner.c:g_scanner_get_token_i:
 1659|  5.74k|{
 1660|  5.74k|  do
 1661|  12.6k|    {
 1662|  12.6k|      g_scanner_free_value (token_p, value_p);
 1663|  12.6k|      g_scanner_get_token_ll (scanner, token_p, value_p, line_p, position_p);
 1664|  12.6k|    }
 1665|  12.6k|  while (((*token_p > 0 && *token_p < 256) &&
  ------------------
  |  Branch (1665:12): [True: 12.6k, False: 6]
  |  Branch (1665:28): [True: 10.2k, False: 2.32k]
  ------------------
 1666|  10.2k|	  strchr (scanner->config->cset_skip_characters, *token_p)) ||
  ------------------
  |  Branch (1666:4): [True: 6.86k, False: 3.41k]
  ------------------
 1667|  5.74k|	 (*token_p == G_TOKEN_CHAR &&
  ------------------
  |  Branch (1667:4): [True: 0, False: 5.74k]
  ------------------
 1668|      0|	  strchr (scanner->config->cset_skip_characters, value_p->v_char)) ||
  ------------------
  |  Branch (1668:4): [True: 0, False: 0]
  ------------------
 1669|  5.74k|	 (*token_p == G_TOKEN_COMMENT_MULTI &&
  ------------------
  |  Branch (1669:4): [True: 0, False: 5.74k]
  ------------------
 1670|      0|	  scanner->config->skip_comment_multi) ||
  ------------------
  |  Branch (1670:4): [True: 0, False: 0]
  ------------------
 1671|  5.74k|	 (*token_p == G_TOKEN_COMMENT_SINGLE &&
  ------------------
  |  Branch (1671:4): [True: 540, False: 5.20k]
  ------------------
 1672|    540|	  scanner->config->skip_comment_single));
  ------------------
  |  Branch (1672:4): [True: 0, False: 540]
  ------------------
 1673|       |  
 1674|  5.74k|  switch (*token_p)
 1675|  5.74k|    {
 1676|    942|    case G_TOKEN_IDENTIFIER:
  ------------------
  |  Branch (1676:5): [True: 942, False: 4.80k]
  ------------------
 1677|    942|      if (scanner->config->identifier_2_string)
  ------------------
  |  Branch (1677:11): [True: 942, False: 0]
  ------------------
 1678|    942|	*token_p = G_TOKEN_STRING;
 1679|    942|      break;
 1680|       |      
 1681|      0|    case G_TOKEN_SYMBOL:
  ------------------
  |  Branch (1681:5): [True: 0, False: 5.74k]
  ------------------
 1682|      0|      if (scanner->config->symbol_2_token)
  ------------------
  |  Branch (1682:11): [True: 0, False: 0]
  ------------------
 1683|      0|        *token_p = (GTokenType) ((size_t) value_p->v_symbol);
 1684|      0|      break;
 1685|       |      
 1686|      0|    case G_TOKEN_BINARY:
  ------------------
  |  Branch (1686:5): [True: 0, False: 5.74k]
  ------------------
 1687|      0|    case G_TOKEN_OCTAL:
  ------------------
  |  Branch (1687:5): [True: 0, False: 5.74k]
  ------------------
 1688|      0|    case G_TOKEN_HEX:
  ------------------
  |  Branch (1688:5): [True: 0, False: 5.74k]
  ------------------
 1689|      0|      if (scanner->config->numbers_2_int)
  ------------------
  |  Branch (1689:11): [True: 0, False: 0]
  ------------------
 1690|      0|	*token_p = G_TOKEN_INT;
 1691|      0|      break;
 1692|       |      
 1693|  4.80k|    default:
  ------------------
  |  Branch (1693:5): [True: 4.80k, False: 942]
  ------------------
 1694|  4.80k|      break;
 1695|  5.74k|    }
 1696|       |  
 1697|  5.74k|  if (*token_p == G_TOKEN_INT &&
  ------------------
  |  Branch (1697:7): [True: 0, False: 5.74k]
  ------------------
 1698|      0|      scanner->config->int_2_float)
  ------------------
  |  Branch (1698:7): [True: 0, False: 0]
  ------------------
 1699|      0|    {
 1700|      0|      *token_p = G_TOKEN_FLOAT;
 1701|       |
 1702|       |      /* Have to assign through a temporary variable to avoid undefined behaviour
 1703|       |       * by copying between potentially-overlapping union members. */
 1704|      0|      if (scanner->config->store_int64)
  ------------------
  |  Branch (1704:11): [True: 0, False: 0]
  ------------------
 1705|      0|        {
 1706|      0|          gint64 temp = value_p->v_int64;
 1707|      0|          value_p->v_float = temp;
 1708|      0|        }
 1709|      0|      else
 1710|      0|        {
 1711|      0|          gint temp = value_p->v_int;
 1712|      0|          value_p->v_float = temp;
 1713|      0|        }
 1714|      0|    }
 1715|       |  
 1716|       |  errno = 0;
 1717|  5.74k|}
gscanner.c:g_scanner_get_token_ll:
 1725|  12.6k|{
 1726|  12.6k|  GScannerConfig *config;
 1727|  12.6k|  GTokenType	   token;
 1728|  12.6k|  gboolean	   in_comment_multi;
 1729|  12.6k|  gboolean	   in_comment_single;
 1730|  12.6k|  gboolean	   in_string_sq;
 1731|  12.6k|  gboolean	   in_string_dq;
 1732|  12.6k|  GString	  *gstring;
 1733|  12.6k|  GTokenValue	   value;
 1734|  12.6k|  guchar	   ch;
 1735|       |  
 1736|  12.6k|  config = scanner->config;
 1737|  12.6k|  (*value_p).v_int64 = 0;
 1738|       |  
 1739|  12.6k|  if ((scanner->text >= scanner->text_end && scanner->input_fd < 0) ||
  ------------------
  |  Branch (1739:8): [True: 6, False: 12.6k]
  |  Branch (1739:46): [True: 6, False: 0]
  ------------------
 1740|  12.6k|      scanner->token == G_TOKEN_EOF)
  ------------------
  |  Branch (1740:7): [True: 0, False: 12.6k]
  ------------------
 1741|      6|    {
 1742|      6|      *token_p = G_TOKEN_EOF;
 1743|      6|      return;
 1744|      6|    }
 1745|       |  
 1746|  12.6k|  in_comment_multi = FALSE;
  ------------------
  |  |  880|  12.6k|#define	FALSE	(0)
  ------------------
 1747|  12.6k|  in_comment_single = FALSE;
  ------------------
  |  |  880|  12.6k|#define	FALSE	(0)
  ------------------
 1748|  12.6k|  in_string_sq = FALSE;
  ------------------
  |  |  880|  12.6k|#define	FALSE	(0)
  ------------------
 1749|  12.6k|  in_string_dq = FALSE;
  ------------------
  |  |  880|  12.6k|#define	FALSE	(0)
  ------------------
 1750|  12.6k|  gstring = NULL;
 1751|       |  
 1752|  12.6k|  do /* while (ch != 0) */
 1753|  12.6k|    {
 1754|  12.6k|      gboolean dotted_float = FALSE;
  ------------------
  |  |  880|  12.6k|#define	FALSE	(0)
  ------------------
 1755|       |      
 1756|  12.6k|      ch = g_scanner_get_char (scanner, line_p, position_p);
 1757|       |      
 1758|  12.6k|      value.v_int64 = 0;
 1759|  12.6k|      token = G_TOKEN_NONE;
 1760|       |      
 1761|       |      /* this is *evil*, but needed ;(
 1762|       |       * we first check for identifier first character, because	 it
 1763|       |       * might interfere with other key chars like slashes or numbers
 1764|       |       */
 1765|  12.6k|      if (config->scan_identifier &&
  ------------------
  |  Branch (1765:11): [True: 12.6k, False: 0]
  ------------------
 1766|  12.6k|	  ch && strchr (config->cset_identifier_first, ch))
  ------------------
  |  Branch (1766:4): [True: 12.6k, False: 0]
  |  Branch (1766:10): [True: 942, False: 11.6k]
  ------------------
 1767|    942|	goto identifier_precedence;
 1768|       |      
 1769|  11.6k|      switch (ch)
 1770|  11.6k|	{
 1771|      0|	case 0:
  ------------------
  |  Branch (1771:2): [True: 0, False: 11.6k]
  ------------------
 1772|      0|	  token = G_TOKEN_EOF;
 1773|      0|	  (*position_p)++;
 1774|       |	  /* ch = 0; */
 1775|      0|	  break;
 1776|       |	  
 1777|      0|	case '/':
  ------------------
  |  Branch (1777:2): [True: 0, False: 11.6k]
  ------------------
 1778|      0|	  if (!config->scan_comment_multi ||
  ------------------
  |  Branch (1778:8): [True: 0, False: 0]
  ------------------
 1779|      0|	      g_scanner_peek_next_char (scanner) != '*')
  ------------------
  |  Branch (1779:8): [True: 0, False: 0]
  ------------------
 1780|      0|	    goto default_case;
 1781|      0|	  g_scanner_get_char (scanner, line_p, position_p);
 1782|      0|	  token = G_TOKEN_COMMENT_MULTI;
 1783|      0|	  in_comment_multi = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1784|      0|	  gstring = g_string_new (NULL);
 1785|      0|	  while ((ch = g_scanner_get_char (scanner, line_p, position_p)) != 0)
  ------------------
  |  Branch (1785:11): [True: 0, False: 0]
  ------------------
 1786|      0|	    {
 1787|      0|	      if (ch == '*' && g_scanner_peek_next_char (scanner) == '/')
  ------------------
  |  Branch (1787:12): [True: 0, False: 0]
  |  Branch (1787:25): [True: 0, False: 0]
  ------------------
 1788|      0|		{
 1789|      0|		  g_scanner_get_char (scanner, line_p, position_p);
 1790|      0|		  in_comment_multi = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 1791|      0|		  break;
 1792|      0|		}
 1793|      0|	      else
 1794|      0|		gstring = g_string_append_c (gstring, ch);
  ------------------
  |  |  180|      0|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 1795|      0|	    }
 1796|      0|	  ch = 0;
 1797|      0|	  break;
 1798|       |	  
 1799|      0|	case '\'':
  ------------------
  |  Branch (1799:2): [True: 0, False: 11.6k]
  ------------------
 1800|      0|	  if (!config->scan_string_sq)
  ------------------
  |  Branch (1800:8): [True: 0, False: 0]
  ------------------
 1801|      0|	    goto default_case;
 1802|      0|	  token = G_TOKEN_STRING;
 1803|      0|	  in_string_sq = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1804|      0|	  gstring = g_string_new (NULL);
 1805|      0|	  while ((ch = g_scanner_get_char (scanner, line_p, position_p)) != 0)
  ------------------
  |  Branch (1805:11): [True: 0, False: 0]
  ------------------
 1806|      0|	    {
 1807|      0|	      if (ch == '\'')
  ------------------
  |  Branch (1807:12): [True: 0, False: 0]
  ------------------
 1808|      0|		{
 1809|      0|		  in_string_sq = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 1810|      0|		  break;
 1811|      0|		}
 1812|      0|	      else
 1813|      0|		gstring = g_string_append_c (gstring, ch);
  ------------------
  |  |  180|      0|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 1814|      0|	    }
 1815|      0|	  ch = 0;
 1816|      0|	  break;
 1817|       |	  
 1818|    844|	case '"':
  ------------------
  |  Branch (1818:2): [True: 844, False: 10.8k]
  ------------------
 1819|    844|	  if (!config->scan_string_dq)
  ------------------
  |  Branch (1819:8): [True: 0, False: 844]
  ------------------
 1820|      0|	    goto default_case;
 1821|    844|	  token = G_TOKEN_STRING;
 1822|    844|	  in_string_dq = TRUE;
  ------------------
  |  |  884|    844|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|    844|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1823|    844|	  gstring = g_string_new (NULL);
 1824|  7.93k|	  while ((ch = g_scanner_get_char (scanner, line_p, position_p)) != 0)
  ------------------
  |  Branch (1824:11): [True: 7.93k, False: 0]
  ------------------
 1825|  7.93k|	    {
 1826|  7.93k|	      if (ch == '"')
  ------------------
  |  Branch (1826:12): [True: 844, False: 7.09k]
  ------------------
 1827|    844|		{
 1828|    844|		  in_string_dq = FALSE;
  ------------------
  |  |  880|    844|#define	FALSE	(0)
  ------------------
 1829|    844|		  break;
 1830|    844|		}
 1831|  7.09k|	      else
 1832|  7.09k|		{
 1833|  7.09k|		  if (ch == '\\')
  ------------------
  |  Branch (1833:9): [True: 22, False: 7.07k]
  ------------------
 1834|     22|		    {
 1835|     22|		      ch = g_scanner_get_char (scanner, line_p, position_p);
 1836|     22|		      switch (ch)
 1837|     22|			{
 1838|      0|			  guint	i;
 1839|      0|			  guint	fchar;
 1840|       |			  
 1841|      0|			case 0:
  ------------------
  |  Branch (1841:4): [True: 0, False: 22]
  ------------------
 1842|      0|			  break;
 1843|       |			  
 1844|     18|			case '\\':
  ------------------
  |  Branch (1844:4): [True: 18, False: 4]
  ------------------
 1845|     18|			  gstring = g_string_append_c (gstring, '\\');
  ------------------
  |  |  180|     18|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 1846|     18|			  break;
 1847|       |			  
 1848|      0|			case 'n':
  ------------------
  |  Branch (1848:4): [True: 0, False: 22]
  ------------------
 1849|      0|			  gstring = g_string_append_c (gstring, '\n');
  ------------------
  |  |  180|      0|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 1850|      0|			  break;
 1851|       |			  
 1852|      0|			case 't':
  ------------------
  |  Branch (1852:4): [True: 0, False: 22]
  ------------------
 1853|      0|			  gstring = g_string_append_c (gstring, '\t');
  ------------------
  |  |  180|      0|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 1854|      0|			  break;
 1855|       |			  
 1856|      0|			case 'r':
  ------------------
  |  Branch (1856:4): [True: 0, False: 22]
  ------------------
 1857|      0|			  gstring = g_string_append_c (gstring, '\r');
  ------------------
  |  |  180|      0|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 1858|      0|			  break;
 1859|       |			  
 1860|      0|			case 'b':
  ------------------
  |  Branch (1860:4): [True: 0, False: 22]
  ------------------
 1861|      0|			  gstring = g_string_append_c (gstring, '\b');
  ------------------
  |  |  180|      0|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 1862|      0|			  break;
 1863|       |			  
 1864|      0|			case 'f':
  ------------------
  |  Branch (1864:4): [True: 0, False: 22]
  ------------------
 1865|      0|			  gstring = g_string_append_c (gstring, '\f');
  ------------------
  |  |  180|      0|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 1866|      0|			  break;
 1867|       |			  
 1868|      0|			case '0':
  ------------------
  |  Branch (1868:4): [True: 0, False: 22]
  ------------------
 1869|      0|			case '1':
  ------------------
  |  Branch (1869:4): [True: 0, False: 22]
  ------------------
 1870|      0|			case '2':
  ------------------
  |  Branch (1870:4): [True: 0, False: 22]
  ------------------
 1871|      0|			case '3':
  ------------------
  |  Branch (1871:4): [True: 0, False: 22]
  ------------------
 1872|      0|			case '4':
  ------------------
  |  Branch (1872:4): [True: 0, False: 22]
  ------------------
 1873|      0|			case '5':
  ------------------
  |  Branch (1873:4): [True: 0, False: 22]
  ------------------
 1874|      0|			case '6':
  ------------------
  |  Branch (1874:4): [True: 0, False: 22]
  ------------------
 1875|      0|			case '7':
  ------------------
  |  Branch (1875:4): [True: 0, False: 22]
  ------------------
 1876|      0|			  i = ch - '0';
 1877|      0|			  fchar = g_scanner_peek_next_char (scanner);
 1878|      0|			  if (fchar >= '0' && fchar <= '7')
  ------------------
  |  Branch (1878:10): [True: 0, False: 0]
  |  Branch (1878:26): [True: 0, False: 0]
  ------------------
 1879|      0|			    {
 1880|      0|			      ch = g_scanner_get_char (scanner, line_p, position_p);
 1881|      0|			      i = i * 8 + ch - '0';
 1882|      0|			      fchar = g_scanner_peek_next_char (scanner);
 1883|      0|			      if (fchar >= '0' && fchar <= '7')
  ------------------
  |  Branch (1883:14): [True: 0, False: 0]
  |  Branch (1883:30): [True: 0, False: 0]
  ------------------
 1884|      0|				{
 1885|      0|				  ch = g_scanner_get_char (scanner, line_p, position_p);
 1886|      0|				  i = i * 8 + ch - '0';
 1887|      0|				}
 1888|      0|			    }
 1889|      0|			  gstring = g_string_append_c (gstring, i);
  ------------------
  |  |  180|      0|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 1890|      0|			  break;
 1891|       |			  
 1892|      4|			default:
  ------------------
  |  Branch (1892:4): [True: 4, False: 18]
  ------------------
 1893|      4|			  gstring = g_string_append_c (gstring, ch);
  ------------------
  |  |  180|      4|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 1894|      4|			  break;
 1895|     22|			}
 1896|     22|		    }
 1897|  7.07k|		  else
 1898|  7.07k|		    gstring = g_string_append_c (gstring, ch);
  ------------------
  |  |  180|  7.07k|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 1899|  7.09k|		}
 1900|  7.93k|	    }
 1901|    844|	  ch = 0;
 1902|    844|	  break;
 1903|       |	  
 1904|      0|	case '.':
  ------------------
  |  Branch (1904:2): [True: 0, False: 11.6k]
  ------------------
 1905|      0|	  if (!config->scan_float)
  ------------------
  |  Branch (1905:8): [True: 0, False: 0]
  ------------------
 1906|      0|	    goto default_case;
 1907|      0|	  token = G_TOKEN_FLOAT;
 1908|      0|	  dotted_float = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1909|      0|	  ch = g_scanner_get_char (scanner, line_p, position_p);
 1910|      0|	  goto number_parsing;
 1911|       |	  
 1912|      0|	case '$':
  ------------------
  |  Branch (1912:2): [True: 0, False: 11.6k]
  ------------------
 1913|      0|	  if (!config->scan_hex_dollar)
  ------------------
  |  Branch (1913:8): [True: 0, False: 0]
  ------------------
 1914|      0|	    goto default_case;
 1915|      0|	  token = G_TOKEN_HEX;
 1916|      0|	  ch = g_scanner_get_char (scanner, line_p, position_p);
 1917|      0|	  goto number_parsing;
 1918|       |	  
 1919|      0|	case '0':
  ------------------
  |  Branch (1919:2): [True: 0, False: 11.6k]
  ------------------
 1920|      0|	  if (config->scan_octal)
  ------------------
  |  Branch (1920:8): [True: 0, False: 0]
  ------------------
 1921|      0|	    token = G_TOKEN_OCTAL;
 1922|      0|	  else
 1923|      0|	    token = G_TOKEN_INT;
 1924|      0|	  ch = g_scanner_peek_next_char (scanner);
 1925|      0|	  if (config->scan_hex && (ch == 'x' || ch == 'X'))
  ------------------
  |  Branch (1925:8): [True: 0, False: 0]
  |  Branch (1925:29): [True: 0, False: 0]
  |  Branch (1925:42): [True: 0, False: 0]
  ------------------
 1926|      0|	    {
 1927|      0|	      token = G_TOKEN_HEX;
 1928|      0|	      g_scanner_get_char (scanner, line_p, position_p);
 1929|      0|	      ch = g_scanner_get_char (scanner, line_p, position_p);
 1930|      0|	      if (ch == 0)
  ------------------
  |  Branch (1930:12): [True: 0, False: 0]
  ------------------
 1931|      0|		{
 1932|      0|		  token = G_TOKEN_ERROR;
 1933|      0|		  value.v_error = G_ERR_UNEXP_EOF;
 1934|      0|		  (*position_p)++;
 1935|      0|		  break;
 1936|      0|		}
 1937|      0|	      if (g_scanner_char_2_num (ch, 16) < 0)
  ------------------
  |  Branch (1937:12): [True: 0, False: 0]
  ------------------
 1938|      0|		{
 1939|      0|		  token = G_TOKEN_ERROR;
 1940|      0|		  value.v_error = G_ERR_DIGIT_RADIX;
 1941|      0|		  ch = 0;
 1942|      0|		  break;
 1943|      0|		}
 1944|      0|	    }
 1945|      0|	  else if (config->scan_binary && (ch == 'b' || ch == 'B'))
  ------------------
  |  Branch (1945:13): [True: 0, False: 0]
  |  Branch (1945:37): [True: 0, False: 0]
  |  Branch (1945:50): [True: 0, False: 0]
  ------------------
 1946|      0|	    {
 1947|      0|	      token = G_TOKEN_BINARY;
 1948|      0|	      g_scanner_get_char (scanner, line_p, position_p);
 1949|      0|	      ch = g_scanner_get_char (scanner, line_p, position_p);
 1950|      0|	      if (ch == 0)
  ------------------
  |  Branch (1950:12): [True: 0, False: 0]
  ------------------
 1951|      0|		{
 1952|      0|		  token = G_TOKEN_ERROR;
 1953|      0|		  value.v_error = G_ERR_UNEXP_EOF;
 1954|      0|		  (*position_p)++;
 1955|      0|		  break;
 1956|      0|		}
 1957|      0|	      if (g_scanner_char_2_num (ch, 10) < 0)
  ------------------
  |  Branch (1957:12): [True: 0, False: 0]
  ------------------
 1958|      0|		{
 1959|      0|		  token = G_TOKEN_ERROR;
 1960|      0|		  value.v_error = G_ERR_NON_DIGIT_IN_CONST;
 1961|      0|		  ch = 0;
 1962|      0|		  break;
 1963|      0|		}
 1964|      0|	    }
 1965|      0|	  else
 1966|      0|	    ch = '0';
 1967|      0|          G_GNUC_FALLTHROUGH;
  ------------------
  |  |  638|      0|#define G_GNUC_FALLTHROUGH __attribute__((fallthrough)) \
  |  |  639|      0|  GLIB_AVAILABLE_MACRO_IN_2_60
  ------------------
 1968|      0|	case '1':
  ------------------
  |  Branch (1968:2): [True: 0, False: 11.6k]
  ------------------
 1969|      0|	case '2':
  ------------------
  |  Branch (1969:2): [True: 0, False: 11.6k]
  ------------------
 1970|      0|	case '3':
  ------------------
  |  Branch (1970:2): [True: 0, False: 11.6k]
  ------------------
 1971|      0|	case '4':
  ------------------
  |  Branch (1971:2): [True: 0, False: 11.6k]
  ------------------
 1972|      0|	case '5':
  ------------------
  |  Branch (1972:2): [True: 0, False: 11.6k]
  ------------------
 1973|      0|	case '6':
  ------------------
  |  Branch (1973:2): [True: 0, False: 11.6k]
  ------------------
 1974|      0|	case '7':
  ------------------
  |  Branch (1974:2): [True: 0, False: 11.6k]
  ------------------
 1975|      0|	case '8':
  ------------------
  |  Branch (1975:2): [True: 0, False: 11.6k]
  ------------------
 1976|      0|	case '9':
  ------------------
  |  Branch (1976:2): [True: 0, False: 11.6k]
  ------------------
 1977|      0|	number_parsing:
 1978|      0|	{
 1979|      0|          gboolean in_number = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1980|      0|	  gchar *endptr;
 1981|       |	  
 1982|      0|	  if (token == G_TOKEN_NONE)
  ------------------
  |  Branch (1982:8): [True: 0, False: 0]
  ------------------
 1983|      0|	    token = G_TOKEN_INT;
 1984|       |	  
 1985|      0|	  gstring = g_string_new (dotted_float ? "0." : "");
  ------------------
  |  Branch (1985:28): [True: 0, False: 0]
  ------------------
 1986|      0|	  gstring = g_string_append_c (gstring, ch);
  ------------------
  |  |  180|      0|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 1987|       |	  
 1988|      0|	  do /* while (in_number) */
 1989|      0|	    {
 1990|      0|	      gboolean is_E;
 1991|       |	      
 1992|      0|	      is_E = token == G_TOKEN_FLOAT && (ch == 'e' || ch == 'E');
  ------------------
  |  Branch (1992:15): [True: 0, False: 0]
  |  Branch (1992:42): [True: 0, False: 0]
  |  Branch (1992:55): [True: 0, False: 0]
  ------------------
 1993|       |	      
 1994|      0|	      ch = g_scanner_peek_next_char (scanner);
 1995|       |	      
 1996|      0|	      if (g_scanner_char_2_num (ch, 36) >= 0 ||
  ------------------
  |  Branch (1996:12): [True: 0, False: 0]
  ------------------
 1997|      0|		  (config->scan_float && ch == '.') ||
  ------------------
  |  Branch (1997:6): [True: 0, False: 0]
  |  Branch (1997:28): [True: 0, False: 0]
  ------------------
 1998|      0|		  (is_E && (ch == '+' || ch == '-')))
  ------------------
  |  Branch (1998:6): [True: 0, False: 0]
  |  Branch (1998:15): [True: 0, False: 0]
  |  Branch (1998:28): [True: 0, False: 0]
  ------------------
 1999|      0|		{
 2000|      0|		  ch = g_scanner_get_char (scanner, line_p, position_p);
 2001|       |		  
 2002|      0|		  switch (ch)
 2003|      0|		    {
 2004|      0|		    case '.':
  ------------------
  |  Branch (2004:7): [True: 0, False: 0]
  ------------------
 2005|      0|		      if (token != G_TOKEN_INT && token != G_TOKEN_OCTAL)
  ------------------
  |  Branch (2005:13): [True: 0, False: 0]
  |  Branch (2005:37): [True: 0, False: 0]
  ------------------
 2006|      0|			{
 2007|      0|			  value.v_error = token == G_TOKEN_FLOAT ? G_ERR_FLOAT_MALFORMED : G_ERR_FLOAT_RADIX;
  ------------------
  |  Branch (2007:22): [True: 0, False: 0]
  ------------------
 2008|      0|			  token = G_TOKEN_ERROR;
 2009|      0|			  in_number = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 2010|      0|			}
 2011|      0|		      else
 2012|      0|			{
 2013|      0|			  token = G_TOKEN_FLOAT;
 2014|      0|			  gstring = g_string_append_c (gstring, ch);
  ------------------
  |  |  180|      0|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 2015|      0|			}
 2016|      0|		      break;
 2017|       |		      
 2018|      0|		    case '0':
  ------------------
  |  Branch (2018:7): [True: 0, False: 0]
  ------------------
 2019|      0|		    case '1':
  ------------------
  |  Branch (2019:7): [True: 0, False: 0]
  ------------------
 2020|      0|		    case '2':
  ------------------
  |  Branch (2020:7): [True: 0, False: 0]
  ------------------
 2021|      0|		    case '3':
  ------------------
  |  Branch (2021:7): [True: 0, False: 0]
  ------------------
 2022|      0|		    case '4':
  ------------------
  |  Branch (2022:7): [True: 0, False: 0]
  ------------------
 2023|      0|		    case '5':
  ------------------
  |  Branch (2023:7): [True: 0, False: 0]
  ------------------
 2024|      0|		    case '6':
  ------------------
  |  Branch (2024:7): [True: 0, False: 0]
  ------------------
 2025|      0|		    case '7':
  ------------------
  |  Branch (2025:7): [True: 0, False: 0]
  ------------------
 2026|      0|		    case '8':
  ------------------
  |  Branch (2026:7): [True: 0, False: 0]
  ------------------
 2027|      0|		    case '9':
  ------------------
  |  Branch (2027:7): [True: 0, False: 0]
  ------------------
 2028|      0|		      gstring = g_string_append_c (gstring, ch);
  ------------------
  |  |  180|      0|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 2029|      0|		      break;
 2030|       |		      
 2031|      0|		    case '-':
  ------------------
  |  Branch (2031:7): [True: 0, False: 0]
  ------------------
 2032|      0|		    case '+':
  ------------------
  |  Branch (2032:7): [True: 0, False: 0]
  ------------------
 2033|      0|		      if (token != G_TOKEN_FLOAT)
  ------------------
  |  Branch (2033:13): [True: 0, False: 0]
  ------------------
 2034|      0|			{
 2035|      0|			  token = G_TOKEN_ERROR;
 2036|      0|			  value.v_error = G_ERR_NON_DIGIT_IN_CONST;
 2037|      0|			  in_number = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 2038|      0|			}
 2039|      0|		      else
 2040|      0|			gstring = g_string_append_c (gstring, ch);
  ------------------
  |  |  180|      0|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 2041|      0|		      break;
 2042|       |		      
 2043|      0|		    case 'e':
  ------------------
  |  Branch (2043:7): [True: 0, False: 0]
  ------------------
 2044|      0|		    case 'E':
  ------------------
  |  Branch (2044:7): [True: 0, False: 0]
  ------------------
 2045|      0|		      if ((token != G_TOKEN_HEX && !config->scan_float) ||
  ------------------
  |  Branch (2045:14): [True: 0, False: 0]
  |  Branch (2045:38): [True: 0, False: 0]
  ------------------
 2046|      0|			  (token != G_TOKEN_HEX &&
  ------------------
  |  Branch (2046:7): [True: 0, False: 0]
  ------------------
 2047|      0|			   token != G_TOKEN_OCTAL &&
  ------------------
  |  Branch (2047:7): [True: 0, False: 0]
  ------------------
 2048|      0|			   token != G_TOKEN_FLOAT &&
  ------------------
  |  Branch (2048:7): [True: 0, False: 0]
  ------------------
 2049|      0|			   token != G_TOKEN_INT))
  ------------------
  |  Branch (2049:7): [True: 0, False: 0]
  ------------------
 2050|      0|			{
 2051|      0|			  token = G_TOKEN_ERROR;
 2052|      0|			  value.v_error = G_ERR_NON_DIGIT_IN_CONST;
 2053|      0|			  in_number = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 2054|      0|			}
 2055|      0|		      else
 2056|      0|			{
 2057|      0|			  if (token != G_TOKEN_HEX)
  ------------------
  |  Branch (2057:10): [True: 0, False: 0]
  ------------------
 2058|      0|			    token = G_TOKEN_FLOAT;
 2059|      0|			  gstring = g_string_append_c (gstring, ch);
  ------------------
  |  |  180|      0|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 2060|      0|			}
 2061|      0|		      break;
 2062|       |		      
 2063|      0|		    default:
  ------------------
  |  Branch (2063:7): [True: 0, False: 0]
  ------------------
 2064|      0|		      if (token != G_TOKEN_HEX)
  ------------------
  |  Branch (2064:13): [True: 0, False: 0]
  ------------------
 2065|      0|			{
 2066|      0|			  token = G_TOKEN_ERROR;
 2067|      0|			  value.v_error = G_ERR_NON_DIGIT_IN_CONST;
 2068|      0|			  in_number = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 2069|      0|			}
 2070|      0|		      else
 2071|      0|			gstring = g_string_append_c (gstring, ch);
  ------------------
  |  |  180|      0|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 2072|      0|		      break;
 2073|      0|		    }
 2074|      0|		}
 2075|      0|	      else
 2076|      0|		in_number = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 2077|      0|	    }
 2078|      0|	  while (in_number);
  ------------------
  |  Branch (2078:11): [True: 0, False: 0]
  ------------------
 2079|       |	  
 2080|      0|	  endptr = NULL;
 2081|      0|	  if (token == G_TOKEN_FLOAT)
  ------------------
  |  Branch (2081:8): [True: 0, False: 0]
  ------------------
 2082|      0|	    value.v_float = g_strtod (gstring->str, &endptr);
 2083|      0|	  else
 2084|      0|	    {
 2085|      0|	      guint64 ui64 = 0;
 2086|      0|	      switch (token)
 2087|      0|		{
 2088|      0|		case G_TOKEN_BINARY:
  ------------------
  |  Branch (2088:3): [True: 0, False: 0]
  ------------------
 2089|      0|		  ui64 = g_ascii_strtoull (gstring->str, &endptr, 2);
 2090|      0|		  break;
 2091|      0|		case G_TOKEN_OCTAL:
  ------------------
  |  Branch (2091:3): [True: 0, False: 0]
  ------------------
 2092|      0|		  ui64 = g_ascii_strtoull (gstring->str, &endptr, 8);
 2093|      0|		  break;
 2094|      0|		case G_TOKEN_INT:
  ------------------
  |  Branch (2094:3): [True: 0, False: 0]
  ------------------
 2095|      0|		  ui64 = g_ascii_strtoull (gstring->str, &endptr, 10);
 2096|      0|		  break;
 2097|      0|		case G_TOKEN_HEX:
  ------------------
  |  Branch (2097:3): [True: 0, False: 0]
  ------------------
 2098|      0|		  ui64 = g_ascii_strtoull (gstring->str, &endptr, 16);
 2099|      0|		  break;
 2100|      0|		default: ;
  ------------------
  |  Branch (2100:3): [True: 0, False: 0]
  ------------------
 2101|      0|		}
 2102|      0|	      if (scanner->config->store_int64)
  ------------------
  |  Branch (2102:12): [True: 0, False: 0]
  ------------------
 2103|      0|		value.v_int64 = ui64;
 2104|      0|	      else
 2105|      0|		value.v_int = ui64;
 2106|      0|	    }
 2107|      0|	  if (endptr && *endptr)
  ------------------
  |  Branch (2107:8): [True: 0, False: 0]
  |  Branch (2107:18): [True: 0, False: 0]
  ------------------
 2108|      0|	    {
 2109|      0|	      token = G_TOKEN_ERROR;
 2110|      0|	      if (*endptr == 'e' || *endptr == 'E')
  ------------------
  |  Branch (2110:12): [True: 0, False: 0]
  |  Branch (2110:30): [True: 0, False: 0]
  ------------------
 2111|      0|		value.v_error = G_ERR_NON_DIGIT_IN_CONST;
 2112|      0|	      else
 2113|      0|		value.v_error = G_ERR_DIGIT_RADIX;
 2114|      0|	    }
 2115|      0|	  g_string_free (gstring, TRUE);
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2116|      0|	  gstring = NULL;
 2117|      0|	  ch = 0;
 2118|      0|	} /* number_parsing:... */
 2119|      0|	break;
 2120|       |	
 2121|  10.8k|	default:
  ------------------
  |  Branch (2121:2): [True: 10.8k, False: 844]
  ------------------
 2122|  10.8k|	default_case:
 2123|  10.8k|	{
 2124|  10.8k|	  if (config->cpair_comment_single &&
  ------------------
  |  Branch (2124:8): [True: 10.8k, False: 0]
  ------------------
 2125|  10.8k|	      ch == config->cpair_comment_single[0])
  ------------------
  |  Branch (2125:8): [True: 540, False: 10.2k]
  ------------------
 2126|    540|	    {
 2127|    540|	      token = G_TOKEN_COMMENT_SINGLE;
 2128|    540|	      in_comment_single = TRUE;
  ------------------
  |  |  884|    540|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|    540|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2129|    540|	      gstring = g_string_new (NULL);
 2130|    540|	      ch = g_scanner_get_char (scanner, line_p, position_p);
 2131|  22.1k|	      while (ch != 0)
  ------------------
  |  Branch (2131:15): [True: 22.1k, False: 0]
  ------------------
 2132|  22.1k|		{
 2133|  22.1k|		  if (ch == config->cpair_comment_single[1])
  ------------------
  |  Branch (2133:9): [True: 540, False: 21.5k]
  ------------------
 2134|    540|		    {
 2135|    540|		      in_comment_single = FALSE;
  ------------------
  |  |  880|    540|#define	FALSE	(0)
  ------------------
 2136|    540|		      ch = 0;
 2137|    540|		      break;
 2138|    540|		    }
 2139|       |		  
 2140|  21.5k|		  gstring = g_string_append_c (gstring, ch);
  ------------------
  |  |  180|  21.5k|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 2141|  21.5k|		  ch = g_scanner_get_char (scanner, line_p, position_p);
 2142|  21.5k|		}
 2143|       |	      /* ignore a missing newline at EOF for single line comments */
 2144|    540|	      if (in_comment_single &&
  ------------------
  |  Branch (2144:12): [True: 0, False: 540]
  ------------------
 2145|      0|		  config->cpair_comment_single[1] == '\n')
  ------------------
  |  Branch (2145:5): [True: 0, False: 0]
  ------------------
 2146|      0|		in_comment_single = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 2147|    540|	    }
 2148|  10.2k|	  else if (config->scan_identifier && ch &&
  ------------------
  |  Branch (2148:13): [True: 10.2k, False: 0]
  |  Branch (2148:40): [True: 10.2k, False: 0]
  ------------------
 2149|  10.2k|		   strchr (config->cset_identifier_first, ch))
  ------------------
  |  Branch (2149:6): [True: 0, False: 10.2k]
  ------------------
 2150|      0|	    {
 2151|    942|	    identifier_precedence:
 2152|       |	      
 2153|    942|	      if (config->cset_identifier_nth && ch &&
  ------------------
  |  Branch (2153:12): [True: 942, False: 0]
  |  Branch (2153:43): [True: 942, False: 0]
  ------------------
 2154|    942|		  strchr (config->cset_identifier_nth,
  ------------------
  |  Branch (2154:5): [True: 922, False: 20]
  ------------------
 2155|    942|			  g_scanner_peek_next_char (scanner)))
 2156|    922|		{
 2157|    922|		  token = G_TOKEN_IDENTIFIER;
 2158|    922|		  gstring = g_string_new (NULL);
 2159|    922|		  gstring = g_string_append_c (gstring, ch);
  ------------------
  |  |  180|    922|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 2160|    922|		  do
 2161|  6.26k|		    {
 2162|  6.26k|		      ch = g_scanner_get_char (scanner, line_p, position_p);
 2163|  6.26k|		      gstring = g_string_append_c (gstring, ch);
  ------------------
  |  |  180|  6.26k|#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
  ------------------
 2164|  6.26k|		      ch = g_scanner_peek_next_char (scanner);
 2165|  6.26k|		    }
 2166|  6.26k|		  while (ch && strchr (config->cset_identifier_nth, ch));
  ------------------
  |  Branch (2166:12): [True: 6.26k, False: 0]
  |  Branch (2166:18): [True: 5.34k, False: 922]
  ------------------
 2167|    922|		  ch = 0;
 2168|    922|		}
 2169|     20|	      else if (config->scan_identifier_1char)
  ------------------
  |  Branch (2169:17): [True: 20, False: 0]
  ------------------
 2170|     20|		{
 2171|     20|		  token = G_TOKEN_IDENTIFIER;
 2172|     20|		  value.v_identifier = g_new0 (gchar, 2);
  ------------------
  |  |  316|     20|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|     20|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|     20|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|     20|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|     20|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|     20|	  gpointer __p;						\
  |  |  |  |  248|     20|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 20, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  249|     20|	    __p = g_##func (__n);				\
  |  |  |  |  250|     20|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      0|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      0|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      0|	  else							\
  |  |  |  |  254|      0|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|     20|	  __p;							\
  |  |  |  |  256|     20|	}))
  |  |  ------------------
  ------------------
 2173|     20|		  value.v_identifier[0] = ch;
 2174|     20|		  ch = 0;
 2175|     20|		}
 2176|    942|	    }
 2177|  11.7k|	  if (ch)
  ------------------
  |  Branch (2177:8): [True: 10.2k, False: 1.48k]
  ------------------
 2178|  10.2k|	    {
 2179|  10.2k|	      if (config->char_2_token)
  ------------------
  |  Branch (2179:12): [True: 10.2k, False: 0]
  ------------------
 2180|  10.2k|		token = ch;
 2181|      0|	      else
 2182|      0|		{
 2183|      0|		  token = G_TOKEN_CHAR;
 2184|      0|		  value.v_char = ch;
 2185|      0|		}
 2186|  10.2k|	      ch = 0;
 2187|  10.2k|	    }
 2188|  11.7k|	} /* default_case:... */
 2189|  11.7k|	break;
 2190|  11.6k|	}
 2191|  12.6k|      g_assert (ch == 0 && token != G_TOKEN_NONE); /* paranoid */
  ------------------
  |  |  234|  12.6k|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  12.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  12.6k|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  12.6k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  12.6k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  12.6k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  12.6k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  37.8k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 12.6k, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 12.6k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  12.6k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  12.6k|   else                                         \
  |  |  |  |  |  | 1183|  12.6k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  12.6k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  12.6k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 12.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  12.6k|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  12.6k|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  12.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 12.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2192|  12.6k|    }
 2193|  12.6k|  while (ch != 0);
  ------------------
  |  Branch (2193:10): [True: 0, False: 12.6k]
  ------------------
 2194|       |  
 2195|  12.6k|  if (in_comment_multi || in_comment_single ||
  ------------------
  |  Branch (2195:7): [True: 0, False: 12.6k]
  |  Branch (2195:27): [True: 0, False: 12.6k]
  ------------------
 2196|  12.6k|      in_string_sq || in_string_dq)
  ------------------
  |  Branch (2196:7): [True: 0, False: 12.6k]
  |  Branch (2196:23): [True: 0, False: 12.6k]
  ------------------
 2197|      0|    {
 2198|      0|      token = G_TOKEN_ERROR;
 2199|      0|      if (gstring)
  ------------------
  |  Branch (2199:11): [True: 0, False: 0]
  ------------------
 2200|      0|	{
 2201|      0|	  g_string_free (gstring, TRUE);
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2202|      0|	  gstring = NULL;
 2203|      0|	}
 2204|      0|      (*position_p)++;
 2205|      0|      if (in_comment_multi || in_comment_single)
  ------------------
  |  Branch (2205:11): [True: 0, False: 0]
  |  Branch (2205:31): [True: 0, False: 0]
  ------------------
 2206|      0|	value.v_error = G_ERR_UNEXP_EOF_IN_COMMENT;
 2207|      0|      else /* (in_string_sq || in_string_dq) */
 2208|      0|	value.v_error = G_ERR_UNEXP_EOF_IN_STRING;
 2209|      0|    }
 2210|       |  
 2211|  12.6k|  if (gstring)
  ------------------
  |  Branch (2211:7): [True: 2.30k, False: 10.2k]
  ------------------
 2212|  2.30k|    {
 2213|  2.30k|      value.v_string = g_string_free (gstring, FALSE);
  ------------------
  |  |  880|  2.30k|#define	FALSE	(0)
  ------------------
 2214|  2.30k|      gstring = NULL;
 2215|  2.30k|    }
 2216|       |  
 2217|  12.6k|  if (token == G_TOKEN_IDENTIFIER)
  ------------------
  |  Branch (2217:7): [True: 942, False: 11.6k]
  ------------------
 2218|    942|    {
 2219|    942|      if (config->scan_symbols)
  ------------------
  |  Branch (2219:11): [True: 942, False: 0]
  ------------------
 2220|    942|	{
 2221|    942|	  GScannerKey *key;
 2222|    942|	  guint scope_id;
 2223|       |	  
 2224|    942|	  scope_id = scanner->scope_id;
 2225|    942|	  key = g_scanner_lookup_internal (scanner, scope_id, value.v_identifier);
 2226|    942|	  if (!key && scope_id && scanner->config->scope_0_fallback)
  ------------------
  |  Branch (2226:8): [True: 942, False: 0]
  |  Branch (2226:16): [True: 0, False: 942]
  |  Branch (2226:28): [True: 0, False: 0]
  ------------------
 2227|      0|	    key = g_scanner_lookup_internal (scanner, 0, value.v_identifier);
 2228|       |	  
 2229|    942|	  if (key)
  ------------------
  |  Branch (2229:8): [True: 0, False: 942]
  ------------------
 2230|      0|	    {
 2231|      0|	      g_free (value.v_identifier);
 2232|      0|	      token = G_TOKEN_SYMBOL;
 2233|      0|	      value.v_symbol = key->value;
 2234|      0|	    }
 2235|    942|	}
 2236|       |      
 2237|    942|      if (token == G_TOKEN_IDENTIFIER &&
  ------------------
  |  Branch (2237:11): [True: 942, False: 0]
  ------------------
 2238|    942|	  config->scan_identifier_NULL &&
  ------------------
  |  Branch (2238:4): [True: 0, False: 942]
  ------------------
 2239|      0|	  strlen (value.v_identifier) == 4)
  ------------------
  |  Branch (2239:4): [True: 0, False: 0]
  ------------------
 2240|      0|	{
 2241|      0|	  gchar *null_upper = "NULL";
 2242|      0|	  gchar *null_lower = "null";
 2243|       |	  
 2244|      0|	  if (scanner->config->case_sensitive)
  ------------------
  |  Branch (2244:8): [True: 0, False: 0]
  ------------------
 2245|      0|	    {
 2246|      0|	      if (value.v_identifier[0] == null_upper[0] &&
  ------------------
  |  Branch (2246:12): [True: 0, False: 0]
  ------------------
 2247|      0|		  value.v_identifier[1] == null_upper[1] &&
  ------------------
  |  Branch (2247:5): [True: 0, False: 0]
  ------------------
 2248|      0|		  value.v_identifier[2] == null_upper[2] &&
  ------------------
  |  Branch (2248:5): [True: 0, False: 0]
  ------------------
 2249|      0|		  value.v_identifier[3] == null_upper[3])
  ------------------
  |  Branch (2249:5): [True: 0, False: 0]
  ------------------
 2250|      0|		token = G_TOKEN_IDENTIFIER_NULL;
 2251|      0|	    }
 2252|      0|	  else
 2253|      0|	    {
 2254|      0|	      if ((value.v_identifier[0] == null_upper[0] ||
  ------------------
  |  Branch (2254:13): [True: 0, False: 0]
  ------------------
 2255|      0|		   value.v_identifier[0] == null_lower[0]) &&
  ------------------
  |  Branch (2255:6): [True: 0, False: 0]
  ------------------
 2256|      0|		  (value.v_identifier[1] == null_upper[1] ||
  ------------------
  |  Branch (2256:6): [True: 0, False: 0]
  ------------------
 2257|      0|		   value.v_identifier[1] == null_lower[1]) &&
  ------------------
  |  Branch (2257:6): [True: 0, False: 0]
  ------------------
 2258|      0|		  (value.v_identifier[2] == null_upper[2] ||
  ------------------
  |  Branch (2258:6): [True: 0, False: 0]
  ------------------
 2259|      0|		   value.v_identifier[2] == null_lower[2]) &&
  ------------------
  |  Branch (2259:6): [True: 0, False: 0]
  ------------------
 2260|      0|		  (value.v_identifier[3] == null_upper[3] ||
  ------------------
  |  Branch (2260:6): [True: 0, False: 0]
  ------------------
 2261|      0|		   value.v_identifier[3] == null_lower[3]))
  ------------------
  |  Branch (2261:6): [True: 0, False: 0]
  ------------------
 2262|      0|		token = G_TOKEN_IDENTIFIER_NULL;
 2263|      0|	    }
 2264|      0|	}
 2265|    942|    }
 2266|       |  
 2267|  12.6k|  *token_p = token;
 2268|  12.6k|  *value_p = value;
 2269|  12.6k|}
gscanner.c:g_scanner_get_char:
 1248|  48.9k|{
 1249|  48.9k|  guchar fchar;
 1250|       |
 1251|  48.9k|  if (scanner->text < scanner->text_end)
  ------------------
  |  Branch (1251:7): [True: 48.9k, False: 0]
  ------------------
 1252|  48.9k|    fchar = *(scanner->text++);
 1253|      0|  else if (scanner->input_fd >= 0)
  ------------------
  |  Branch (1253:12): [True: 0, False: 0]
  ------------------
 1254|      0|    {
 1255|      0|      gint count;
 1256|      0|      gchar *buffer;
 1257|       |
 1258|      0|      buffer = scanner->buffer;
 1259|      0|      do
 1260|      0|	{
 1261|      0|	  count = read (scanner->input_fd, buffer, READ_BUFFER_SIZE);
  ------------------
  |  |  288|      0|#define	READ_BUFFER_SIZE	(4000)
  ------------------
 1262|      0|	}
 1263|      0|      while (count == -1 && (errno == EINTR || errno == EAGAIN));
  ------------------
  |  Branch (1263:14): [True: 0, False: 0]
  |  Branch (1263:30): [True: 0, False: 0]
  |  Branch (1263:48): [True: 0, False: 0]
  ------------------
 1264|       |
 1265|      0|      if (count < 1)
  ------------------
  |  Branch (1265:11): [True: 0, False: 0]
  ------------------
 1266|      0|	{
 1267|      0|	  scanner->input_fd = -1;
 1268|      0|	  fchar = 0;
 1269|      0|	}
 1270|      0|      else
 1271|      0|	{
 1272|      0|	  scanner->text = buffer + 1;
 1273|      0|	  scanner->text_end = buffer + count;
 1274|      0|	  fchar = *buffer;
 1275|      0|	  if (!fchar)
  ------------------
  |  Branch (1275:8): [True: 0, False: 0]
  ------------------
 1276|      0|	    {
 1277|      0|	      g_scanner_sync_file_offset (scanner);
 1278|      0|	      scanner->text_end = scanner->text;
 1279|      0|	      scanner->input_fd = -1;
 1280|      0|	    }
 1281|      0|	}
 1282|      0|    }
 1283|      0|  else
 1284|      0|    fchar = 0;
 1285|       |  
 1286|  48.9k|  if (fchar == '\n')
  ------------------
  |  Branch (1286:7): [True: 1.71k, False: 47.2k]
  ------------------
 1287|  1.71k|    {
 1288|  1.71k|      (*position_p) = 0;
 1289|  1.71k|      (*line_p)++;
 1290|  1.71k|    }
 1291|  47.2k|  else if (fchar)
  ------------------
  |  Branch (1291:12): [True: 47.2k, False: 0]
  ------------------
 1292|  47.2k|    {
 1293|  47.2k|      (*position_p)++;
 1294|  47.2k|    }
 1295|       |  
 1296|  48.9k|  return fchar;
 1297|  48.9k|}
gscanner.c:g_scanner_peek_next_char:
 1173|  7.20k|{
 1174|  7.20k|  if (scanner->text < scanner->text_end)
  ------------------
  |  Branch (1174:7): [True: 7.20k, False: 0]
  ------------------
 1175|  7.20k|    {
 1176|  7.20k|      return *scanner->text;
 1177|  7.20k|    }
 1178|      0|  else if (scanner->input_fd >= 0)
  ------------------
  |  Branch (1178:12): [True: 0, False: 0]
  ------------------
 1179|      0|    {
 1180|      0|      gint count;
 1181|      0|      gchar *buffer;
 1182|       |
 1183|      0|      buffer = scanner->buffer;
 1184|      0|      do
 1185|      0|	{
 1186|      0|	  count = read (scanner->input_fd, buffer, READ_BUFFER_SIZE);
  ------------------
  |  |  288|      0|#define	READ_BUFFER_SIZE	(4000)
  ------------------
 1187|      0|	}
 1188|      0|      while (count == -1 && (errno == EINTR || errno == EAGAIN));
  ------------------
  |  Branch (1188:14): [True: 0, False: 0]
  |  Branch (1188:30): [True: 0, False: 0]
  |  Branch (1188:48): [True: 0, False: 0]
  ------------------
 1189|       |
 1190|      0|      if (count < 1)
  ------------------
  |  Branch (1190:11): [True: 0, False: 0]
  ------------------
 1191|      0|	{
 1192|      0|	  scanner->input_fd = -1;
 1193|       |
 1194|      0|	  return 0;
 1195|      0|	}
 1196|      0|      else
 1197|      0|	{
 1198|      0|	  scanner->text = buffer;
 1199|      0|	  scanner->text_end = buffer + count;
 1200|       |
 1201|      0|	  return *buffer;
 1202|      0|	}
 1203|      0|    }
 1204|      0|  else
 1205|      0|    return 0;
 1206|  7.20k|}

g_sequence_new:
  267|  1.73M|{
  268|  1.73M|  GSequence *seq = g_new (GSequence, 1);
  ------------------
  |  |  299|  1.73M|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  244|  1.73M|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  1.73M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|  1.73M|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|  1.73M|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|  1.73M|	  gpointer __p;						\
  |  |  |  |  248|  1.73M|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 1.73M]
  |  |  |  |  ------------------
  |  |  |  |  249|  1.73M|	    __p = g_##func (__n);				\
  |  |  |  |  250|  1.73M|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 1.73M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|  1.73M|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|  1.73M|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|  1.73M|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 1.73M]
  |  |  |  |  |  Branch (251:26): [True: 1.73M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|  1.73M|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|  1.73M|	  else							\
  |  |  |  |  254|  1.73M|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|  1.73M|	  __p;							\
  |  |  |  |  256|  1.73M|	}))
  |  |  ------------------
  ------------------
  269|  1.73M|  seq->data_destroy_notify = data_destroy;
  270|       |
  271|  1.73M|  seq->end_node = node_new (seq);
  272|       |
  273|  1.73M|  seq->access_prohibited = FALSE;
  ------------------
  |  |  880|  1.73M|#define	FALSE	(0)
  ------------------
  274|       |
  275|  1.73M|  seq->real_sequence = seq;
  276|       |
  277|  1.73M|  return seq;
  278|  1.73M|}
g_sequence_free:
  292|  1.73M|{
  293|  1.73M|  g_return_if_fail (seq != NULL);
  ------------------
  |  |  639|  1.73M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.73M|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  1.73M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.73M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.73M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.73M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.73M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.73M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.73M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.73M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.73M|   else                                         \
  |  |  |  |  |  | 1183|  1.73M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.73M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.73M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.73M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  1.73M|      { } \
  |  |  642|  1.73M|    else \
  |  |  643|  1.73M|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  1.73M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.73M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.73M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  294|       |
  295|  1.73M|  check_seq_access (seq);
  296|       |
  297|  1.73M|  node_free (seq->end_node, seq);
  298|       |
  299|  1.73M|  g_free (seq);
  300|  1.73M|}
g_sequence_append:
  465|   280k|{
  466|   280k|  GSequenceNode *node;
  467|       |
  468|   280k|  g_return_val_if_fail (seq != NULL, NULL);
  ------------------
  |  |  652|   280k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   280k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   280k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   280k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   280k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   280k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   280k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   280k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 280k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   280k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   280k|   else                                         \
  |  |  |  |  |  | 1183|   280k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   280k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   280k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 280k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   280k|      { } \
  |  |  655|   280k|    else \
  |  |  656|   280k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   280k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   280k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 280k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  469|       |
  470|   280k|  check_seq_access (seq);
  471|       |
  472|   280k|  node = node_new (data);
  473|   280k|  node_insert_before (seq->end_node, node);
  474|       |
  475|   280k|  return node;
  476|   280k|}
g_sequence_remove:
  551|  90.9k|{
  552|  90.9k|  GSequence *seq;
  553|       |
  554|  90.9k|  g_return_if_fail (iter != NULL);
  ------------------
  |  |  639|  90.9k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  90.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  90.9k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  90.9k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  90.9k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  90.9k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  90.9k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  90.9k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 90.9k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  90.9k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  90.9k|   else                                         \
  |  |  |  |  |  | 1183|  90.9k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  90.9k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  90.9k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 90.9k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  90.9k|      { } \
  |  |  642|  90.9k|    else \
  |  |  643|  90.9k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  90.9k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  90.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 90.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  555|       |
  556|  90.9k|  seq = get_sequence (iter);
  557|  90.9k|  g_return_if_fail (!seq_is_end (seq, iter));
  ------------------
  |  |  639|  90.9k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  90.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  90.9k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  90.9k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  90.9k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  90.9k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  90.9k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  90.9k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 90.9k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  90.9k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  90.9k|   else                                         \
  |  |  |  |  |  | 1183|  90.9k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  90.9k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  90.9k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 90.9k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  90.9k|      { } \
  |  |  642|  90.9k|    else \
  |  |  643|  90.9k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  90.9k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  90.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 90.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  558|       |
  559|  90.9k|  check_seq_access (seq);
  560|       |
  561|  90.9k|  node_unlink (iter);
  562|  90.9k|  node_free (iter, seq);
  563|  90.9k|}
g_sequence_insert_sorted:
  735|  98.3k|{
  736|  98.3k|  SortInfo info;
  737|       |
  738|  98.3k|  g_return_val_if_fail (seq != NULL, NULL);
  ------------------
  |  |  652|  98.3k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  98.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  98.3k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  98.3k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  98.3k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  98.3k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  98.3k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  98.3k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 98.3k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  98.3k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  98.3k|   else                                         \
  |  |  |  |  |  | 1183|  98.3k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  98.3k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  98.3k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 98.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  98.3k|      { } \
  |  |  655|  98.3k|    else \
  |  |  656|  98.3k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  98.3k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  98.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 98.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  739|  98.3k|  g_return_val_if_fail (cmp_func != NULL, NULL);
  ------------------
  |  |  652|  98.3k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  98.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  98.3k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  98.3k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  98.3k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  98.3k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  98.3k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  98.3k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 98.3k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  98.3k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  98.3k|   else                                         \
  |  |  |  |  |  | 1183|  98.3k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  98.3k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  98.3k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 98.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  98.3k|      { } \
  |  |  655|  98.3k|    else \
  |  |  656|  98.3k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  98.3k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  98.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 98.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  740|       |
  741|  98.3k|  info.cmp_func = cmp_func;
  742|  98.3k|  info.cmp_data = cmp_data;
  743|  98.3k|  info.end_node = seq->end_node;
  744|  98.3k|  check_seq_access (seq);
  745|       |
  746|  98.3k|  return g_sequence_insert_sorted_iter (seq, data, iter_compare, &info);
  747|  98.3k|}
g_sequence_sort_changed:
  772|  1.45M|{
  773|  1.45M|  GSequence *seq;
  774|  1.45M|  SortInfo info;
  775|       |
  776|  1.45M|  g_return_if_fail (iter != NULL);
  ------------------
  |  |  639|  1.45M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.45M|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  1.45M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.45M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.45M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.45M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.45M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.45M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.45M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.45M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.45M|   else                                         \
  |  |  |  |  |  | 1183|  1.45M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.45M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.45M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.45M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  1.45M|      { } \
  |  |  642|  1.45M|    else \
  |  |  643|  1.45M|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  1.45M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.45M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.45M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  777|       |
  778|  1.45M|  seq = get_sequence (iter);
  779|       |  /* check_seq_access() call is done by g_sequence_sort_changed_iter() */
  780|  1.45M|  g_return_if_fail (!seq_is_end (seq, iter));
  ------------------
  |  |  639|  1.45M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.45M|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  1.45M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.45M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.45M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.45M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.45M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.45M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.45M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.45M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.45M|   else                                         \
  |  |  |  |  |  | 1183|  1.45M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.45M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.45M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.45M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  1.45M|      { } \
  |  |  642|  1.45M|    else \
  |  |  643|  1.45M|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  1.45M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.45M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.45M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  781|       |
  782|  1.45M|  info.cmp_func = cmp_func;
  783|  1.45M|  info.cmp_data = cmp_data;
  784|  1.45M|  info.end_node = seq->end_node;
  785|       |
  786|  1.45M|  g_sequence_sort_changed_iter (iter, iter_compare, &info);
  787|  1.45M|}
g_sequence_lookup:
  865|   181k|{
  866|   181k|  SortInfo info;
  867|       |
  868|   181k|  g_return_val_if_fail (seq != NULL, NULL);
  ------------------
  |  |  652|   181k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   181k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   181k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   181k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   181k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   181k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   181k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   181k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 181k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   181k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   181k|   else                                         \
  |  |  |  |  |  | 1183|   181k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   181k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   181k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 181k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   181k|      { } \
  |  |  655|   181k|    else \
  |  |  656|   181k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   181k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   181k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 181k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  869|       |
  870|   181k|  info.cmp_func = cmp_func;
  871|   181k|  info.cmp_data = cmp_data;
  872|   181k|  info.end_node = seq->end_node;
  873|   181k|  check_seq_access (seq);
  874|       |
  875|   181k|  return g_sequence_lookup_iter (seq, data, iter_compare, &info);
  876|   181k|}
g_sequence_sort_changed_iter:
  954|  1.45M|{
  955|  1.45M|  GSequence *seq, *tmp_seq;
  956|  1.45M|  GSequenceIter *next, *prev;
  957|       |
  958|  1.45M|  g_return_if_fail (iter != NULL);
  ------------------
  |  |  639|  1.45M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.45M|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  1.45M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.45M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.45M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.45M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.45M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.45M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.45M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.45M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.45M|   else                                         \
  |  |  |  |  |  | 1183|  1.45M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.45M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.45M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.45M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  1.45M|      { } \
  |  |  642|  1.45M|    else \
  |  |  643|  1.45M|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  1.45M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.45M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.45M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  959|  1.45M|  g_return_if_fail (iter_cmp != NULL);
  ------------------
  |  |  639|  1.45M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.45M|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  1.45M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.45M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.45M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.45M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.45M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.45M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.45M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.45M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.45M|   else                                         \
  |  |  |  |  |  | 1183|  1.45M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.45M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.45M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.45M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  1.45M|      { } \
  |  |  642|  1.45M|    else \
  |  |  643|  1.45M|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  1.45M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.45M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.45M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  960|       |
  961|  1.45M|  seq = get_sequence (iter);
  962|  1.45M|  g_return_if_fail (!seq_is_end (seq, iter));
  ------------------
  |  |  639|  1.45M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.45M|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  1.45M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.45M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.45M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.45M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.45M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.45M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.45M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.45M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.45M|   else                                         \
  |  |  |  |  |  | 1183|  1.45M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.45M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.45M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.45M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  1.45M|      { } \
  |  |  642|  1.45M|    else \
  |  |  643|  1.45M|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  1.45M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.45M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.45M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  963|       |
  964|  1.45M|  check_seq_access (seq);
  965|       |
  966|       |  /* If one of the neighbours is equal to iter, then
  967|       |   * don't move it. This ensures that sort_changed() is
  968|       |   * a stable operation.
  969|       |   */
  970|       |
  971|  1.45M|  next = node_get_next (iter);
  972|  1.45M|  prev = node_get_prev (iter);
  973|       |
  974|  1.45M|  if (prev != iter && iter_cmp (prev, iter, cmp_data) == 0)
  ------------------
  |  Branch (974:7): [True: 1.45M, False: 0]
  |  Branch (974:23): [True: 0, False: 1.45M]
  ------------------
  975|      0|    return;
  976|       |
  977|  1.45M|  if (!is_end (next) && iter_cmp (next, iter, cmp_data) == 0)
  ------------------
  |  Branch (977:7): [True: 1.39M, False: 64.4k]
  |  Branch (977:25): [True: 0, False: 1.39M]
  ------------------
  978|      0|    return;
  979|       |
  980|  1.45M|  seq->access_prohibited = TRUE;
  ------------------
  |  |  884|  1.45M|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  1.45M|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  981|       |
  982|  1.45M|  tmp_seq = g_sequence_new (NULL);
  983|  1.45M|  tmp_seq->real_sequence = seq;
  984|       |
  985|  1.45M|  node_unlink (iter);
  986|  1.45M|  node_insert_before (tmp_seq->end_node, iter);
  987|       |
  988|  1.45M|  node_insert_sorted (seq->end_node, iter, seq->end_node,
  989|  1.45M|                      iter_cmp, cmp_data);
  990|       |
  991|  1.45M|  g_sequence_free (tmp_seq);
  992|       |
  993|  1.45M|  seq->access_prohibited = FALSE;
  ------------------
  |  |  880|  1.45M|#define	FALSE	(0)
  ------------------
  994|  1.45M|}
g_sequence_insert_sorted_iter:
 1025|  98.3k|{
 1026|  98.3k|  GSequenceNode *new_node;
 1027|  98.3k|  GSequence *tmp_seq;
 1028|       |
 1029|  98.3k|  g_return_val_if_fail (seq != NULL, NULL);
  ------------------
  |  |  652|  98.3k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  98.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  98.3k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  98.3k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  98.3k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  98.3k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  98.3k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  98.3k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 98.3k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  98.3k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  98.3k|   else                                         \
  |  |  |  |  |  | 1183|  98.3k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  98.3k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  98.3k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 98.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  98.3k|      { } \
  |  |  655|  98.3k|    else \
  |  |  656|  98.3k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  98.3k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  98.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 98.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1030|  98.3k|  g_return_val_if_fail (iter_cmp != NULL, NULL);
  ------------------
  |  |  652|  98.3k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  98.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  98.3k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  98.3k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  98.3k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  98.3k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  98.3k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  98.3k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 98.3k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  98.3k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  98.3k|   else                                         \
  |  |  |  |  |  | 1183|  98.3k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  98.3k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  98.3k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 98.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  98.3k|      { } \
  |  |  655|  98.3k|    else \
  |  |  656|  98.3k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  98.3k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  98.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 98.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1031|       |
 1032|  98.3k|  check_seq_access (seq);
 1033|       |
 1034|  98.3k|  seq->access_prohibited = TRUE;
  ------------------
  |  |  884|  98.3k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  98.3k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1035|       |
 1036|       |  /* Create a new temporary sequence and put the new node into
 1037|       |   * that. The reason for this is that the user compare function
 1038|       |   * will be called with the new node, and if it dereferences,
 1039|       |   * "is_end" will be called on it. But that will crash if the
 1040|       |   * node is not actually in a sequence.
 1041|       |   *
 1042|       |   * node_insert_sorted() makes sure the node is unlinked before
 1043|       |   * it is inserted.
 1044|       |   *
 1045|       |   * The reason we need the "iter" versions at all is that that
 1046|       |   * is the only kind of compare functions GtkTreeView can use.
 1047|       |   */
 1048|  98.3k|  tmp_seq = g_sequence_new (NULL);
 1049|  98.3k|  tmp_seq->real_sequence = seq;
 1050|       |
 1051|  98.3k|  new_node = g_sequence_append (tmp_seq, data);
 1052|       |
 1053|  98.3k|  node_insert_sorted (seq->end_node, new_node,
 1054|  98.3k|                      seq->end_node, iter_cmp, cmp_data);
 1055|       |
 1056|  98.3k|  g_sequence_free (tmp_seq);
 1057|       |
 1058|  98.3k|  seq->access_prohibited = FALSE;
  ------------------
  |  |  880|  98.3k|#define	FALSE	(0)
  ------------------
 1059|       |
 1060|  98.3k|  return new_node;
 1061|  98.3k|}
g_sequence_lookup_iter:
 1150|   181k|{
 1151|   181k|  GSequenceNode *node;
 1152|   181k|  GSequenceNode *dummy;
 1153|   181k|  GSequence *tmp_seq;
 1154|       |
 1155|   181k|  g_return_val_if_fail (seq != NULL, NULL);
  ------------------
  |  |  652|   181k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   181k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   181k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   181k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   181k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   181k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   181k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   181k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 181k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   181k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   181k|   else                                         \
  |  |  |  |  |  | 1183|   181k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   181k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   181k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 181k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   181k|      { } \
  |  |  655|   181k|    else \
  |  |  656|   181k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   181k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   181k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 181k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1156|       |
 1157|   181k|  check_seq_access (seq);
 1158|       |
 1159|   181k|  seq->access_prohibited = TRUE;
  ------------------
  |  |  884|   181k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|   181k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1160|       |
 1161|   181k|  tmp_seq = g_sequence_new (NULL);
 1162|   181k|  tmp_seq->real_sequence = seq;
 1163|       |
 1164|   181k|  dummy = g_sequence_append (tmp_seq, data);
 1165|       |
 1166|   181k|  node = node_find (seq->end_node, dummy,
 1167|   181k|                    seq->end_node, iter_cmp, cmp_data);
 1168|       |
 1169|   181k|  g_sequence_free (tmp_seq);
 1170|       |
 1171|   181k|  seq->access_prohibited = FALSE;
  ------------------
  |  |  880|   181k|#define	FALSE	(0)
  ------------------
 1172|       |
 1173|   181k|  return node;
 1174|   181k|}
g_sequence_get:
 1213|  1.21G|{
 1214|  1.21G|  g_return_val_if_fail (iter != NULL, NULL);
  ------------------
  |  |  652|  1.21G|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.21G|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  1.21G|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.21G|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.21G| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.21G|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.21G|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.21G|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.21G, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.21G|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.21G|   else                                         \
  |  |  |  |  |  | 1183|  1.21G|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.21G|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.21G|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.21G, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  1.21G|      { } \
  |  |  655|  1.21G|    else \
  |  |  656|  1.21G|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  1.21G|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.21G|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.21G]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1215|  1.21G|  g_return_val_if_fail (!is_end (iter), NULL);
  ------------------
  |  |  652|  1.21G|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.21G|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  1.21G|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.21G|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.21G| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.21G|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.21G|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.21G|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.21G, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.21G|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.21G|   else                                         \
  |  |  |  |  |  | 1183|  1.21G|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.21G|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.21G|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.21G, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  1.21G|      { } \
  |  |  655|  1.21G|    else \
  |  |  656|  1.21G|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  1.21G|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.21G|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.21G]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1216|       |
 1217|  1.21G|  return iter->data;
 1218|  1.21G|}
g_sequence_get_end_iter:
 1307|   306k|{
 1308|   306k|  g_return_val_if_fail (seq != NULL, NULL);
  ------------------
  |  |  652|   306k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   306k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   306k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   306k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   306k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   306k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   306k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   306k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 306k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   306k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   306k|   else                                         \
  |  |  |  |  |  | 1183|   306k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   306k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   306k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 306k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   306k|      { } \
  |  |  655|   306k|    else \
  |  |  656|   306k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   306k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   306k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 306k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1309|       |
 1310|   306k|  return seq->end_node;
 1311|   306k|}
g_sequence_get_begin_iter:
 1325|   215k|{
 1326|   215k|  g_return_val_if_fail (seq != NULL, NULL);
  ------------------
  |  |  652|   215k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   215k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   215k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   215k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   215k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   215k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   215k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   215k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 215k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   215k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   215k|   else                                         \
  |  |  |  |  |  | 1183|   215k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   215k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   215k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 215k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   215k|      { } \
  |  |  655|   215k|    else \
  |  |  656|   215k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   215k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   215k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 215k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1327|       |
 1328|   215k|  return node_get_first (seq->end_node);
 1329|   215k|}
g_sequence_iter_next:
 1463|   550M|{
 1464|   550M|  g_return_val_if_fail (iter != NULL, NULL);
  ------------------
  |  |  652|   550M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   550M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   550M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   550M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   550M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   550M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   550M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   550M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 550M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   550M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   550M|   else                                         \
  |  |  |  |  |  | 1183|   550M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   550M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   550M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 550M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   550M|      { } \
  |  |  655|   550M|    else \
  |  |  656|   550M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   550M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   550M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 550M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1465|       |
 1466|   550M|  return node_get_next (iter);
 1467|   550M|}
g_sequence_iter_prev:
 1483|   665M|{
 1484|   665M|  g_return_val_if_fail (iter != NULL, NULL);
  ------------------
  |  |  652|   665M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   665M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   665M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   665M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   665M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   665M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   665M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   665M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 665M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   665M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   665M|   else                                         \
  |  |  |  |  |  | 1183|   665M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   665M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   665M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 665M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   665M|      { } \
  |  |  655|   665M|    else \
  |  |  656|   665M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   665M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   665M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 665M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1485|       |
 1486|   665M|  return node_get_prev (iter);
 1487|   665M|}
gsequence.c:check_seq_access:
  176|  4.12M|{
  177|  4.12M|  if (G_UNLIKELY (seq->access_prohibited))
  ------------------
  |  | 1187|  4.12M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  4.12M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  4.12M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  4.12M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  4.12M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 4.12M]
  |  |  |  |  ------------------
  |  |  |  | 1181|  4.12M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  4.12M|   else                                         \
  |  |  |  | 1183|  4.12M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  4.12M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  4.12M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 4.12M]
  |  |  ------------------
  ------------------
  178|      0|    {
  179|      0|      g_warning ("Accessing a sequence while it is "
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  180|      0|                 "being sorted or searched is not allowed");
  181|      0|    }
  182|  4.12M|}
gsequence.c:get_sequence:
  186|  3.00M|{
  187|  3.00M|  return (GSequence *)node_get_last (node)->data;
  188|  3.00M|}
gsequence.c:node_get_last:
 1681|  3.00M|{
 1682|  3.00M|  node = find_root (node);
 1683|       |
 1684|  29.7M|  while (node->right)
  ------------------
  |  Branch (1684:10): [True: 26.7M, False: 3.00M]
  ------------------
 1685|  26.7M|    node = node->right;
 1686|       |
 1687|  3.00M|  return node;
 1688|  3.00M|}
gsequence.c:find_root:
 1614|  6.78M|{
 1615|  59.5M|  while (node->parent)
  ------------------
  |  Branch (1615:10): [True: 52.7M, False: 6.78M]
  ------------------
 1616|  52.7M|    node = node->parent;
 1617|       |
 1618|  6.78M|  return node;
 1619|  6.78M|}
gsequence.c:seq_is_end:
  193|  3.00M|{
  194|  3.00M|  return seq->end_node == iter;
  195|  3.00M|}
gsequence.c:iter_compare:
  234|  25.6M|{
  235|  25.6M|  const SortInfo *info = data;
  236|  25.6M|  gint retval;
  237|       |
  238|  25.6M|  if (node1 == info->end_node)
  ------------------
  |  Branch (238:7): [True: 0, False: 25.6M]
  ------------------
  239|      0|    return 1;
  240|       |
  241|  25.6M|  if (node2 == info->end_node)
  ------------------
  |  Branch (241:7): [True: 0, False: 25.6M]
  ------------------
  242|      0|    return -1;
  243|       |
  244|  25.6M|  retval = info->cmp_func (node1->data, node2->data, info->cmp_data);
  245|       |
  246|  25.6M|  return retval;
  247|  25.6M|}
gsequence.c:is_end:
  199|  1.21G|{
  200|  1.21G|  GSequenceIter *parent = iter->parent;
  201|       |
  202|  1.21G|  if (iter->right)
  ------------------
  |  Branch (202:7): [True: 614M, False: 602M]
  ------------------
  203|   614M|    return FALSE;
  ------------------
  |  |  880|   614M|#define	FALSE	(0)
  ------------------
  204|       |
  205|   602M|  if (!parent)
  ------------------
  |  Branch (205:7): [True: 0, False: 602M]
  ------------------
  206|      0|    return TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  207|       |
  208|  1.21G|  while (parent->right == iter)
  ------------------
  |  Branch (208:10): [True: 612M, False: 602M]
  ------------------
  209|   612M|    {
  210|   612M|      iter = parent;
  211|   612M|      parent = iter->parent;
  212|       |
  213|   612M|      if (!parent)
  ------------------
  |  Branch (213:11): [True: 64.4k, False: 612M]
  ------------------
  214|  64.4k|        return TRUE;
  ------------------
  |  |  884|  64.4k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|  64.4k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  215|   612M|    }
  216|       |
  217|   602M|  return FALSE;
  ------------------
  |  |  880|   602M|#define	FALSE	(0)
  ------------------
  218|   602M|}
gsequence.c:node_new:
 1623|  2.01M|{
 1624|  2.01M|  GSequenceNode *node = g_slice_new0 (GSequenceNode);
  ------------------
  |  |   54|  2.01M|  (type *) (G_GNUC_EXTENSION ({                                 \
  |  |  ------------------
  |  |  |  |   62|  2.01M|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |   55|  2.01M|    gsize __s = sizeof (type);                                  \
  |  |   56|  2.01M|    gpointer __p;                                               \
  |  |   57|  2.01M|    __p = g_slice_alloc (__s);                                  \
  |  |   58|  2.01M|    memset (__p, 0, __s);                                       \
  |  |   59|  2.01M|    __p;                                                        \
  |  |   60|  2.01M|  }))
  ------------------
 1625|       |
 1626|       |  /*
 1627|       |   * Make a random number quickly. Some binary magic is used to avoid
 1628|       |   * the costs of proper RNG, such as locking around global GRand.
 1629|       |   *
 1630|       |   * Using just the node pointer alone is not enough, because in this
 1631|       |   * case freeing and re-allocating sequence causes node's priorities
 1632|       |   * to no longer be random. This happens for two reasons:
 1633|       |   * 1) Nodes are freed from the root and the treap's property is that
 1634|       |   *    node's priority is >= than its children's priorities.
 1635|       |   * 2) g_slice_new0() will reuse freed nodes in the order similar to
 1636|       |   *    the order of freeing.
 1637|       |   * As a result, there are severe problems where building the treap is
 1638|       |   * much slower (100x and more after a few sequence new/free
 1639|       |   * iterations) and treap becomes more like a list (tree height
 1640|       |   * approaches tree's number of elements), which increases costs of
 1641|       |   * using the built treap.
 1642|       |   *
 1643|       |   * Note that for performance reasons, counter completely ignores
 1644|       |   * multi-threading issues. This is fine because it's merely a source
 1645|       |   * of additional randomness. Even if it fails to ++ sometimes, this
 1646|       |   * won't really matter for its goal.
 1647|       |   *
 1648|       |   * Note that 64-bit counter is used to avoid undefined behavior on
 1649|       |   * overflow.
 1650|       |   *
 1651|       |   * See https://gitlab.gnome.org/GNOME/glib/-/issues/2468
 1652|       |   */
 1653|  2.01M|  static guint64 counter = 0;
 1654|  2.01M|  guint32 hash_key = (guint32) GPOINTER_TO_UINT (node);
  ------------------
  |  |  101|  2.01M|#define GPOINTER_TO_UINT(p)	((guint) (gulong) (p))
  ------------------
 1655|  2.01M|  hash_key ^= (guint32) counter;
 1656|  2.01M|  counter++;
 1657|       |
 1658|  2.01M|  node->n_nodes = 1;
 1659|  2.01M|  node->priority = make_priority (hash_key);
 1660|  2.01M|  node->data = data;
 1661|  2.01M|  node->left = NULL;
 1662|  2.01M|  node->right = NULL;
 1663|  2.01M|  node->parent = NULL;
 1664|       |
 1665|  2.01M|  return node;
 1666|  2.01M|}
gsequence.c:make_priority:
 1605|  2.01M|{
 1606|  2.01M|  key = hash_uint32 (key);
 1607|       |
 1608|       |  /* We rely on 0 being less than all other priorities */
 1609|  2.01M|  return key? key : 1;
  ------------------
  |  Branch (1609:10): [True: 2.01M, False: 0]
  ------------------
 1610|  2.01M|}
gsequence.c:hash_uint32:
 1580|  2.01M|{
 1581|       |  /* This hash function is based on one found on Thomas Wang's
 1582|       |   * web page at
 1583|       |   *
 1584|       |   *    http://www.concentric.net/~Ttwang/tech/inthash.htm
 1585|       |   *
 1586|       |   */
 1587|  2.01M|  key = (key << 15) - key - 1;
 1588|  2.01M|  key = key ^ (key >> 12);
 1589|  2.01M|  key = key + (key << 2);
 1590|  2.01M|  key = key ^ (key >> 4);
 1591|  2.01M|  key = key + (key << 3) + (key << 11);
 1592|  2.01M|  key = key ^ (key >> 16);
 1593|       |
 1594|  2.01M|  return key;
 1595|  2.01M|}
gsequence.c:node_get_first:
 1670|   215k|{
 1671|   215k|  node = find_root (node);
 1672|       |
 1673|  2.08M|  while (node->left)
  ------------------
  |  Branch (1673:10): [True: 1.86M, False: 215k]
  ------------------
 1674|  1.86M|    node = node->left;
 1675|       |
 1676|   215k|  return node;
 1677|   215k|}
gsequence.c:node_get_next:
 1695|   552M|{
 1696|   552M|  GSequenceNode *n = node;
 1697|       |
 1698|   552M|  if (n->right)
  ------------------
  |  Branch (1698:7): [True: 278M, False: 274M]
  ------------------
 1699|   278M|    {
 1700|   278M|      n = n->right;
 1701|   550M|      while (n->left)
  ------------------
  |  Branch (1701:14): [True: 272M, False: 278M]
  ------------------
 1702|   272M|        n = n->left;
 1703|   278M|    }
 1704|   274M|  else
 1705|   274M|    {
 1706|   552M|      while (NODE_RIGHT_CHILD (n))
  ------------------
  |  | 1691|   552M|#define NODE_RIGHT_CHILD(n) (((n)->parent) && ((n)->parent->right) == (n))
  |  |  ------------------
  |  |  |  Branch (1691:30): [True: 552M, False: 0]
  |  |  |  Branch (1691:47): [True: 278M, False: 274M]
  |  |  ------------------
  ------------------
 1707|   278M|        n = n->parent;
 1708|       |
 1709|   274M|      if (n->parent)
  ------------------
  |  Branch (1709:11): [True: 274M, False: 0]
  ------------------
 1710|   274M|        n = n->parent;
 1711|      0|      else
 1712|      0|        n = node;
 1713|   274M|    }
 1714|       |
 1715|   552M|  return n;
 1716|   552M|}
gsequence.c:node_get_prev:
 1720|   666M|{
 1721|   666M|  GSequenceNode *n = node;
 1722|       |
 1723|   666M|  if (n->left)
  ------------------
  |  Branch (1723:7): [True: 330M, False: 336M]
  ------------------
 1724|   330M|    {
 1725|   330M|      n = n->left;
 1726|   665M|      while (n->right)
  ------------------
  |  Branch (1726:14): [True: 335M, False: 330M]
  ------------------
 1727|   335M|        n = n->right;
 1728|   330M|    }
 1729|   336M|  else
 1730|   336M|    {
 1731|   665M|      while (NODE_LEFT_CHILD (n))
  ------------------
  |  | 1690|   665M|#define NODE_LEFT_CHILD(n)  (((n)->parent) && ((n)->parent->left) == (n))
  |  |  ------------------
  |  |  |  Branch (1690:30): [True: 665M, False: 0]
  |  |  |  Branch (1690:47): [True: 328M, False: 336M]
  |  |  ------------------
  ------------------
 1732|   328M|        n = n->parent;
 1733|       |
 1734|   336M|      if (n->parent)
  ------------------
  |  Branch (1734:11): [True: 336M, False: 0]
  ------------------
 1735|   336M|        n = n->parent;
 1736|      0|      else
 1737|      0|        n = node;
 1738|   336M|    }
 1739|       |
 1740|   666M|  return n;
 1741|   666M|}
gsequence.c:node_find:
 1794|   181k|{
 1795|   181k|  gint c;
 1796|       |
 1797|   181k|  haystack = find_root (haystack);
 1798|       |
 1799|   181k|  do
 1800|  2.14M|    {
 1801|       |      /* iter_cmp can't be passed the end node, since the function may
 1802|       |       * be user-supplied
 1803|       |       */
 1804|  2.14M|      if (haystack == end)
  ------------------
  |  Branch (1804:11): [True: 58.8k, False: 2.08M]
  ------------------
 1805|  58.8k|        c = 1;
 1806|  2.08M|      else
 1807|  2.08M|        c = iter_cmp (haystack, needle, cmp_data);
 1808|       |
 1809|  2.14M|      if (c == 0)
  ------------------
  |  Branch (1809:11): [True: 155k, False: 1.98M]
  ------------------
 1810|   155k|        break;
 1811|       |
 1812|  1.98M|      if (c > 0)
  ------------------
  |  Branch (1812:11): [True: 325k, False: 1.66M]
  ------------------
 1813|   325k|        haystack = haystack->left;
 1814|  1.66M|      else
 1815|  1.66M|        haystack = haystack->right;
 1816|  1.98M|    }
 1817|  1.98M|  while (haystack != NULL);
  ------------------
  |  Branch (1817:10): [True: 1.95M, False: 26.5k]
  ------------------
 1818|       |
 1819|   181k|  return haystack;
 1820|   181k|}
gsequence.c:node_find_closest:
 1828|  1.55M|{
 1829|  1.55M|  GSequenceNode *best;
 1830|  1.55M|  gint c;
 1831|       |
 1832|  1.55M|  haystack = find_root (haystack);
 1833|       |
 1834|  1.55M|  do
 1835|  21.0M|    {
 1836|  21.0M|      best = haystack;
 1837|       |
 1838|       |      /* iter_cmp can't be passed the end node, since the function may
 1839|       |       * be user-supplied
 1840|       |       */
 1841|  21.0M|      if (haystack == end)
  ------------------
  |  Branch (1841:11): [True: 278k, False: 20.7M]
  ------------------
 1842|   278k|        c = 1;
 1843|  20.7M|      else
 1844|  20.7M|        c = iter_cmp (haystack, needle, cmp_data);
 1845|       |
 1846|       |      /* In the following we don't break even if c == 0. Instead we go on
 1847|       |       * searching along the 'bigger' nodes, so that we find the last one
 1848|       |       * that is equal to the needle.
 1849|       |       */
 1850|  21.0M|      if (c > 0)
  ------------------
  |  Branch (1850:11): [True: 6.36M, False: 14.6M]
  ------------------
 1851|  6.36M|        haystack = haystack->left;
 1852|  14.6M|      else
 1853|  14.6M|        haystack = haystack->right;
 1854|  21.0M|    }
 1855|  21.0M|  while (haystack != NULL);
  ------------------
  |  Branch (1855:10): [True: 19.4M, False: 1.55M]
  ------------------
 1856|       |
 1857|       |  /* If the best node is smaller or equal to the data, then move one step
 1858|       |   * to the right to make sure the best one is strictly bigger than the data
 1859|       |   */
 1860|  1.55M|  if (best != end && c <= 0)
  ------------------
  |  Branch (1860:7): [True: 1.50M, False: 50.5k]
  |  Branch (1860:22): [True: 810k, False: 694k]
  ------------------
 1861|   810k|    best = node_get_next (best);
 1862|       |
 1863|  1.55M|  return best;
 1864|  1.55M|}
gsequence.c:node_free:
 1893|  1.82M|{
 1894|  1.82M|  node = find_root (node);
 1895|       |
 1896|  1.82M|  real_node_free (node, seq);
 1897|  1.82M|}
gsequence.c:real_node_free:
 1877|  5.84M|{
 1878|  5.84M|  if (node)
  ------------------
  |  Branch (1878:7): [True: 2.01M, False: 3.83M]
  ------------------
 1879|  2.01M|    {
 1880|  2.01M|      real_node_free (node->left, seq);
 1881|  2.01M|      real_node_free (node->right, seq);
 1882|       |
 1883|  2.01M|      if (seq && seq->data_destroy_notify && node != seq->end_node)
  ------------------
  |  Branch (1883:11): [True: 2.01M, False: 0]
  |  Branch (1883:18): [True: 0, False: 2.01M]
  |  Branch (1883:46): [True: 0, False: 0]
  ------------------
 1884|      0|        seq->data_destroy_notify (node->data);
 1885|       |
 1886|  2.01M|      g_slice_free (GSequenceNode, node);
  ------------------
  |  |   81|  2.01M|#define g_slice_free(type, mem)                                 \
  |  |  ------------------
  |  |  |  |  940|  2.01M|#define G_STMT_START  do
  |  |  ------------------
  |  |   82|  2.01M|G_STMT_START {                                                  \
  |  |   83|  2.01M|  if (1) g_slice_free1 (sizeof (type), (mem));			\
  |  |  ------------------
  |  |  |  Branch (83:7): [True: 2.01M, Folded]
  |  |  ------------------
  |  |   84|  2.01M|  else   (void) ((type*) 0 == (mem)); 				\
  |  |   85|  2.01M|} G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  2.01M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2.01M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1887|  2.01M|    }
 1888|  5.84M|}
gsequence.c:node_rotate:
 1912|  7.46M|{
 1913|  7.46M|  GSequenceNode *tmp, *old;
 1914|       |
 1915|  7.46M|  g_assert (node->parent);
  ------------------
  |  |  234|  7.46M|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  7.46M|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  7.46M|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  7.46M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  7.46M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  7.46M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  7.46M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  7.46M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 7.46M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  7.46M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  7.46M|   else                                         \
  |  |  |  |  |  | 1183|  7.46M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  7.46M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  7.46M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 7.46M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  7.46M|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  7.46M|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  7.46M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 7.46M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1916|  7.46M|  g_assert (node->parent != node);
  ------------------
  |  |  234|  7.46M|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  7.46M|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  7.46M|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  7.46M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  7.46M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  7.46M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  7.46M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  7.46M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 7.46M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  7.46M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  7.46M|   else                                         \
  |  |  |  |  |  | 1183|  7.46M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  7.46M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  7.46M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 7.46M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  7.46M|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  7.46M|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  7.46M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 7.46M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1917|       |
 1918|  7.46M|  if (NODE_LEFT_CHILD (node))
  ------------------
  |  | 1690|  7.46M|#define NODE_LEFT_CHILD(n)  (((n)->parent) && ((n)->parent->left) == (n))
  |  |  ------------------
  |  |  |  Branch (1690:30): [True: 7.46M, False: 0]
  |  |  |  Branch (1690:47): [True: 4.54M, False: 2.91M]
  |  |  ------------------
  ------------------
 1919|  4.54M|    {
 1920|       |      /* rotate right */
 1921|  4.54M|      tmp = node->right;
 1922|       |
 1923|  4.54M|      node->right = node->parent;
 1924|  4.54M|      node->parent = node->parent->parent;
 1925|  4.54M|      if (node->parent)
  ------------------
  |  Branch (1925:11): [True: 3.67M, False: 871k]
  ------------------
 1926|  3.67M|        {
 1927|  3.67M|          if (node->parent->left == node->right)
  ------------------
  |  Branch (1927:15): [True: 1.71M, False: 1.95M]
  ------------------
 1928|  1.71M|            node->parent->left = node;
 1929|  1.95M|          else
 1930|  1.95M|            node->parent->right = node;
 1931|  3.67M|        }
 1932|       |
 1933|  4.54M|      g_assert (node->right);
  ------------------
  |  |  234|  4.54M|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  4.54M|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  4.54M|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  4.54M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  4.54M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  4.54M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  4.54M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  4.54M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 4.54M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  4.54M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  4.54M|   else                                         \
  |  |  |  |  |  | 1183|  4.54M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  4.54M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  4.54M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 4.54M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  4.54M|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  4.54M|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  4.54M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 4.54M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1934|       |
 1935|  4.54M|      node->right->parent = node;
 1936|  4.54M|      node->right->left = tmp;
 1937|       |
 1938|  4.54M|      if (node->right->left)
  ------------------
  |  Branch (1938:11): [True: 1.88M, False: 2.66M]
  ------------------
 1939|  1.88M|        node->right->left->parent = node->right;
 1940|       |
 1941|  4.54M|      old = node->right;
 1942|  4.54M|    }
 1943|  2.91M|  else
 1944|  2.91M|    {
 1945|       |      /* rotate left */
 1946|  2.91M|      tmp = node->left;
 1947|       |
 1948|  2.91M|      node->left = node->parent;
 1949|  2.91M|      node->parent = node->parent->parent;
 1950|  2.91M|      if (node->parent)
  ------------------
  |  Branch (1950:11): [True: 2.13M, False: 781k]
  ------------------
 1951|  2.13M|        {
 1952|  2.13M|          if (node->parent->right == node->left)
  ------------------
  |  Branch (1952:15): [True: 1.20M, False: 930k]
  ------------------
 1953|  1.20M|            node->parent->right = node;
 1954|   930k|          else
 1955|   930k|            node->parent->left = node;
 1956|  2.13M|        }
 1957|       |
 1958|  2.91M|      g_assert (node->left);
  ------------------
  |  |  234|  2.91M|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  2.91M|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  2.91M|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  2.91M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  2.91M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  2.91M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  2.91M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  2.91M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2.91M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  2.91M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  2.91M|   else                                         \
  |  |  |  |  |  | 1183|  2.91M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  2.91M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  2.91M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2.91M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  2.91M|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  2.91M|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  2.91M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2.91M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1959|       |
 1960|  2.91M|      node->left->parent = node;
 1961|  2.91M|      node->left->right = tmp;
 1962|       |
 1963|  2.91M|      if (node->left->right)
  ------------------
  |  Branch (1963:11): [True: 1.14M, False: 1.77M]
  ------------------
 1964|  1.14M|        node->left->right->parent = node->left;
 1965|       |
 1966|  2.91M|      old = node->left;
 1967|  2.91M|    }
 1968|       |
 1969|  7.46M|  node_update_fields (old);
 1970|  7.46M|  node_update_fields (node);
 1971|  7.46M|}
gsequence.c:node_update_fields:
 1901|  62.0M|{
 1902|  62.0M|  int n_nodes = 1;
 1903|       |
 1904|  62.0M|  n_nodes += N_NODES (node->left);
  ------------------
  |  | 1743|  62.0M|#define N_NODES(n) ((n)? (n)->n_nodes : 0)
  |  |  ------------------
  |  |  |  Branch (1743:21): [True: 47.1M, False: 14.8M]
  |  |  ------------------
  ------------------
 1905|  62.0M|  n_nodes += N_NODES (node->right);
  ------------------
  |  | 1743|  62.0M|#define N_NODES(n) ((n)? (n)->n_nodes : 0)
  |  |  ------------------
  |  |  |  Branch (1743:21): [True: 45.0M, False: 16.9M]
  |  |  ------------------
  ------------------
 1906|       |
 1907|  62.0M|  node->n_nodes = n_nodes;
 1908|  62.0M|}
gsequence.c:rotate_down:
 1987|  6.39M|{
 1988|  6.39M|  guint left, right;
 1989|       |
 1990|  6.39M|  left = node->left ? get_priority (node->left)  : 0;
  ------------------
  |  Branch (1990:10): [True: 1.82M, False: 4.57M]
  ------------------
 1991|  6.39M|  right = node->right ? get_priority (node->right) : 0;
  ------------------
  |  Branch (1991:11): [True: 3.15M, False: 3.23M]
  ------------------
 1992|       |
 1993|  10.8M|  while (priority < left || priority < right)
  ------------------
  |  Branch (1993:10): [True: 2.98M, False: 7.90M]
  |  Branch (1993:29): [True: 1.50M, False: 6.39M]
  ------------------
 1994|  4.49M|    {
 1995|  4.49M|      if (left > right)
  ------------------
  |  Branch (1995:11): [True: 2.32M, False: 2.16M]
  ------------------
 1996|  2.32M|        node_rotate (node->left);
 1997|  2.16M|      else
 1998|  2.16M|        node_rotate (node->right);
 1999|       |
 2000|  4.49M|      left = node->left ? get_priority (node->left)  : 0;
  ------------------
  |  Branch (2000:14): [True: 1.94M, False: 2.55M]
  ------------------
 2001|  4.49M|      right = node->right ? get_priority (node->right) : 0;
  ------------------
  |  Branch (2001:15): [True: 1.38M, False: 3.10M]
  ------------------
 2002|  4.49M|    }
 2003|  6.39M|}
gsequence.c:get_priority:
 1599|  22.3M|{
 1600|  22.3M|  return node->priority;
 1601|  22.3M|}
gsequence.c:node_insert_before:
 2041|  3.29M|{
 2042|  3.29M|  new->left = node->left;
 2043|  3.29M|  if (new->left)
  ------------------
  |  Branch (2043:7): [True: 810k, False: 2.48M]
  ------------------
 2044|   810k|    new->left->parent = new;
 2045|       |
 2046|  3.29M|  new->parent = node;
 2047|  3.29M|  node->left = new;
 2048|       |
 2049|  3.29M|  node_update_fields_deep (new);
 2050|       |
 2051|  6.26M|  while (new->parent && get_priority (new) > get_priority (new->parent))
  ------------------
  |  Branch (2051:10): [True: 5.39M, False: 871k]
  |  Branch (2051:25): [True: 2.97M, False: 2.42M]
  ------------------
 2052|  2.97M|    node_rotate (new);
 2053|       |
 2054|  3.29M|  rotate_down (new, get_priority (new));
 2055|  3.29M|}
gsequence.c:node_update_fields_deep:
 1975|  53.4M|{
 1976|  53.4M|  if (node)
  ------------------
  |  Branch (1976:7): [True: 47.0M, False: 6.39M]
  ------------------
 1977|  47.0M|    {
 1978|  47.0M|      node_update_fields (node);
 1979|       |
 1980|  47.0M|      node_update_fields_deep (node->parent);
 1981|  47.0M|    }
 1982|  53.4M|}
gsequence.c:node_unlink:
 2059|  3.10M|{
 2060|  3.10M|  rotate_down (node, 0);
 2061|       |
 2062|  3.10M|  if (NODE_RIGHT_CHILD (node))
  ------------------
  |  | 1691|  3.10M|#define NODE_RIGHT_CHILD(n) (((n)->parent) && ((n)->parent->right) == (n))
  |  |  ------------------
  |  |  |  Branch (1691:30): [True: 3.10M, False: 0]
  |  |  |  Branch (1691:47): [True: 793k, False: 2.31M]
  |  |  ------------------
  ------------------
 2063|   793k|    node->parent->right = NULL;
 2064|  2.31M|  else if (NODE_LEFT_CHILD (node))
  ------------------
  |  | 1690|  2.31M|#define NODE_LEFT_CHILD(n)  (((n)->parent) && ((n)->parent->left) == (n))
  |  |  ------------------
  |  |  |  Branch (1690:30): [True: 2.31M, False: 0]
  |  |  |  Branch (1690:47): [True: 2.31M, False: 0]
  |  |  ------------------
  ------------------
 2065|  2.31M|    node->parent->left = NULL;
 2066|       |
 2067|  3.10M|  if (node->parent)
  ------------------
  |  Branch (2067:7): [True: 3.10M, False: 0]
  ------------------
 2068|  3.10M|    node_update_fields_deep (node->parent);
 2069|       |
 2070|       |  node->parent = NULL;
 2071|  3.10M|}
gsequence.c:node_insert_sorted:
 2079|  1.55M|{
 2080|  1.55M|  GSequenceNode *closest;
 2081|       |
 2082|  1.55M|  closest = node_find_closest (node, new, end, iter_cmp, cmp_data);
 2083|       |
 2084|  1.55M|  node_unlink (new);
 2085|       |
 2086|  1.55M|  node_insert_before (closest, new);
 2087|  1.55M|}

g_slice_alloc:
 1040|   878M|{
 1041|   878M|  ThreadMemory *tmem;
 1042|   878M|  gsize chunk_size;
 1043|   878M|  gpointer mem;
 1044|   878M|  guint acat;
 1045|       |
 1046|       |  /* This gets the private structure for this thread.  If the private
 1047|       |   * structure does not yet exist, it is created.
 1048|       |   *
 1049|       |   * This has a side effect of causing GSlice to be initialised, so it
 1050|       |   * must come first.
 1051|       |   */
 1052|   878M|  tmem = thread_memory_from_self ();
 1053|       |
 1054|   878M|  chunk_size = P2ALIGN (mem_size);
  ------------------
  |  |  209|   878M|#define P2ALIGN(size)   (((size) + 0xf) & ~(gsize) 0xf)
  ------------------
 1055|   878M|  acat = allocator_categorize (chunk_size);
 1056|   878M|  if (G_LIKELY (acat == 1))     /* allocate through magazine layer */
  ------------------
  |  | 1186|   878M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|   878M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|   878M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|   878M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|   878M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 878M, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|   878M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|   878M|   else                                         \
  |  |  |  | 1183|   878M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|   878M|   _g_boolean_var_;                             \
  |  |  |  | 1185|   878M|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 878M, False: 0]
  |  |  ------------------
  ------------------
 1057|   878M|    {
 1058|   878M|      guint ix = SLAB_INDEX (allocator, chunk_size);
  ------------------
  |  |  201|   878M|#define SLAB_INDEX(al, asize)   ((asize) / P2ALIGNMENT - 1)                     /* asize must be P2ALIGNMENT aligned */
  |  |  ------------------
  |  |  |  |  192|   878M|#define P2ALIGNMENT             (2 * sizeof (gsize))                            /* fits 2 pointers (assumed to be 2 * GLIB_SIZEOF_SIZE_T below) */
  |  |  ------------------
  ------------------
 1059|   878M|      if (G_UNLIKELY (thread_memory_magazine1_is_empty (tmem, ix)))
  ------------------
  |  | 1187|   878M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|   878M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|   878M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|   878M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|   878M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 13.8M, False: 864M]
  |  |  |  |  ------------------
  |  |  |  | 1181|   878M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|   878M|   else                                         \
  |  |  |  | 1183|   878M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|   878M|   _g_boolean_var_;                             \
  |  |  |  | 1185|   878M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 13.8M, False: 864M]
  |  |  ------------------
  ------------------
 1060|  13.8M|        {
 1061|  13.8M|          thread_memory_swap_magazines (tmem, ix);
 1062|  13.8M|          if (G_UNLIKELY (thread_memory_magazine1_is_empty (tmem, ix)))
  ------------------
  |  | 1187|  13.8M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  13.8M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  13.8M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  13.8M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  13.8M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 13.0M, False: 869k]
  |  |  |  |  ------------------
  |  |  |  | 1181|  13.8M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  13.8M|   else                                         \
  |  |  |  | 1183|  13.8M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  13.8M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  13.8M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 13.0M, False: 869k]
  |  |  ------------------
  ------------------
 1063|  13.0M|            thread_memory_magazine1_reload (tmem, ix);
 1064|  13.8M|        }
 1065|   878M|      mem = thread_memory_magazine1_alloc (tmem, ix);
 1066|   878M|    }
 1067|      0|  else if (acat == 2)           /* allocate through slab allocator */
  ------------------
  |  Branch (1067:12): [True: 0, False: 0]
  ------------------
 1068|      0|    {
 1069|      0|      g_mutex_lock (&allocator->slab_mutex);
 1070|      0|      mem = slab_allocator_alloc_chunk (chunk_size);
 1071|      0|      g_mutex_unlock (&allocator->slab_mutex);
 1072|      0|    }
 1073|      0|  else                          /* delegate to system malloc */
 1074|      0|    mem = g_malloc (mem_size);
 1075|   878M|  if (G_UNLIKELY (allocator->config.debug_blocks))
  ------------------
  |  | 1187|   878M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|   878M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|   878M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|   878M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|   878M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 878M]
  |  |  |  |  ------------------
  |  |  |  | 1181|   878M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|   878M|   else                                         \
  |  |  |  | 1183|   878M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|   878M|   _g_boolean_var_;                             \
  |  |  |  | 1185|   878M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 878M]
  |  |  ------------------
  ------------------
 1076|      0|    smc_notify_alloc (mem, mem_size);
 1077|       |
 1078|   878M|  TRACE (GLIB_SLICE_ALLOC((void*)mem, mem_size));
 1079|       |
 1080|   878M|  return mem;
 1081|   878M|}
g_slice_alloc0:
 1099|  6.80k|{
 1100|  6.80k|  gpointer mem = g_slice_alloc (mem_size);
 1101|  6.80k|  if (mem)
  ------------------
  |  Branch (1101:7): [True: 6.80k, False: 0]
  ------------------
 1102|  6.80k|    memset (mem, 0, mem_size);
 1103|  6.80k|  return mem;
 1104|  6.80k|}
g_slice_free1:
 1151|  14.4M|{
 1152|  14.4M|  gsize chunk_size = P2ALIGN (mem_size);
  ------------------
  |  |  209|  14.4M|#define P2ALIGN(size)   (((size) + 0xf) & ~(gsize) 0xf)
  ------------------
 1153|  14.4M|  guint acat = allocator_categorize (chunk_size);
 1154|  14.4M|  if (G_UNLIKELY (!mem_block))
  ------------------
  |  | 1187|  14.4M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  14.4M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  14.4M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  14.4M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  14.4M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 14.4M]
  |  |  |  |  ------------------
  |  |  |  | 1181|  14.4M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  14.4M|   else                                         \
  |  |  |  | 1183|  14.4M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  14.4M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  14.4M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 14.4M]
  |  |  ------------------
  ------------------
 1155|      0|    return;
 1156|  14.4M|  if (G_UNLIKELY (allocator->config.debug_blocks) &&
  ------------------
  |  | 1187|  28.9M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  14.4M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  14.4M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  14.4M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  14.4M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 14.4M]
  |  |  |  |  ------------------
  |  |  |  | 1181|  14.4M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  14.4M|   else                                         \
  |  |  |  | 1183|  14.4M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  14.4M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  14.4M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 14.4M]
  |  |  ------------------
  ------------------
 1157|      0|      !smc_notify_free (mem_block, mem_size))
  ------------------
  |  Branch (1157:7): [True: 0, False: 0]
  ------------------
 1158|      0|    abort();
 1159|  14.4M|  if (G_LIKELY (acat == 1))             /* allocate through magazine layer */
  ------------------
  |  | 1186|  14.4M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|  14.4M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  14.4M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  14.4M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  14.4M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 14.4M, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|  14.4M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  14.4M|   else                                         \
  |  |  |  | 1183|  14.4M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  14.4M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  14.4M|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 14.4M, False: 0]
  |  |  ------------------
  ------------------
 1160|  14.4M|    {
 1161|  14.4M|      ThreadMemory *tmem = thread_memory_from_self();
 1162|  14.4M|      guint ix = SLAB_INDEX (allocator, chunk_size);
  ------------------
  |  |  201|  14.4M|#define SLAB_INDEX(al, asize)   ((asize) / P2ALIGNMENT - 1)                     /* asize must be P2ALIGNMENT aligned */
  |  |  ------------------
  |  |  |  |  192|  14.4M|#define P2ALIGNMENT             (2 * sizeof (gsize))                            /* fits 2 pointers (assumed to be 2 * GLIB_SIZEOF_SIZE_T below) */
  |  |  ------------------
  ------------------
 1163|  14.4M|      if (G_UNLIKELY (thread_memory_magazine2_is_full (tmem, ix)))
  ------------------
  |  | 1187|  14.4M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  14.4M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  14.4M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  14.4M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  14.4M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 147k, False: 14.3M]
  |  |  |  |  ------------------
  |  |  |  | 1181|  14.4M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  14.4M|   else                                         \
  |  |  |  | 1183|  14.4M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  14.4M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  14.4M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 147k, False: 14.3M]
  |  |  ------------------
  ------------------
 1164|   147k|        {
 1165|   147k|          thread_memory_swap_magazines (tmem, ix);
 1166|   147k|          if (G_UNLIKELY (thread_memory_magazine2_is_full (tmem, ix)))
  ------------------
  |  | 1187|   147k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|   147k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|   147k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|   147k|   int _g_boolean_var_;                         \
  |  |  |  | 1180|   147k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 91.2k, False: 55.9k]
  |  |  |  |  ------------------
  |  |  |  | 1181|   147k|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|   147k|   else                                         \
  |  |  |  | 1183|   147k|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|   147k|   _g_boolean_var_;                             \
  |  |  |  | 1185|   147k|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 91.2k, False: 55.9k]
  |  |  ------------------
  ------------------
 1167|  91.2k|            thread_memory_magazine2_unload (tmem, ix);
 1168|   147k|        }
 1169|  14.4M|      if (G_UNLIKELY (g_mem_gc_friendly))
  ------------------
  |  | 1187|  14.4M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  14.4M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  14.4M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  14.4M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  14.4M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 14.4M]
  |  |  |  |  ------------------
  |  |  |  | 1181|  14.4M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  14.4M|   else                                         \
  |  |  |  | 1183|  14.4M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  14.4M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  14.4M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 14.4M]
  |  |  ------------------
  ------------------
 1170|      0|        memset (mem_block, 0, chunk_size);
 1171|  14.4M|      thread_memory_magazine2_free (tmem, ix, mem_block);
 1172|  14.4M|    }
 1173|      0|  else if (acat == 2)                   /* allocate through slab allocator */
  ------------------
  |  Branch (1173:12): [True: 0, False: 0]
  ------------------
 1174|      0|    {
 1175|      0|      if (G_UNLIKELY (g_mem_gc_friendly))
  ------------------
  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      0|   else                                         \
  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  | 1185|      0|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1176|      0|        memset (mem_block, 0, chunk_size);
 1177|      0|      g_mutex_lock (&allocator->slab_mutex);
 1178|      0|      slab_allocator_free_chunk (chunk_size, mem_block);
 1179|      0|      g_mutex_unlock (&allocator->slab_mutex);
 1180|      0|    }
 1181|      0|  else                                  /* delegate to system malloc */
 1182|      0|    {
 1183|      0|      if (G_UNLIKELY (g_mem_gc_friendly))
  ------------------
  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      0|   else                                         \
  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  | 1185|      0|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1184|      0|        memset (mem_block, 0, mem_size);
 1185|      0|      g_free (mem_block);
 1186|      0|    }
 1187|  14.4M|  TRACE (GLIB_SLICE_FREE((void*)mem_block, mem_size));
 1188|  14.4M|}
g_slice_free_chain_with_offset:
 1214|   187M|{
 1215|   187M|  gpointer slice = mem_chain;
 1216|       |  /* while the thread magazines and the magazine cache are implemented so that
 1217|       |   * they can easily be extended to allow for free lists containing more free
 1218|       |   * lists for the first level nodes, which would allow O(1) freeing in this
 1219|       |   * function, the benefit of such an extension is questionable, because:
 1220|       |   * - the magazine size counts will become mere lower bounds which confuses
 1221|       |   *   the code adapting to lock contention;
 1222|       |   * - freeing a single node to the thread magazines is very fast, so this
 1223|       |   *   O(list_length) operation is multiplied by a fairly small factor;
 1224|       |   * - memory usage histograms on larger applications seem to indicate that
 1225|       |   *   the amount of released multi node lists is negligible in comparison
 1226|       |   *   to single node releases.
 1227|       |   * - the major performance bottle neck, namely g_private_get() or
 1228|       |   *   g_mutex_lock()/g_mutex_unlock() has already been moved out of the
 1229|       |   *   inner loop for freeing chained slices.
 1230|       |   */
 1231|   187M|  gsize chunk_size = P2ALIGN (mem_size);
  ------------------
  |  |  209|   187M|#define P2ALIGN(size)   (((size) + 0xf) & ~(gsize) 0xf)
  ------------------
 1232|   187M|  guint acat = allocator_categorize (chunk_size);
 1233|   187M|  if (G_LIKELY (acat == 1))             /* allocate through magazine layer */
  ------------------
  |  | 1186|   187M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|   187M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|   187M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|   187M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|   187M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 187M, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|   187M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|   187M|   else                                         \
  |  |  |  | 1183|   187M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|   187M|   _g_boolean_var_;                             \
  |  |  |  | 1185|   187M|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 187M, False: 0]
  |  |  ------------------
  ------------------
 1234|   187M|    {
 1235|   187M|      ThreadMemory *tmem = thread_memory_from_self();
 1236|   187M|      guint ix = SLAB_INDEX (allocator, chunk_size);
  ------------------
  |  |  201|   187M|#define SLAB_INDEX(al, asize)   ((asize) / P2ALIGNMENT - 1)                     /* asize must be P2ALIGNMENT aligned */
  |  |  ------------------
  |  |  |  |  192|   187M|#define P2ALIGNMENT             (2 * sizeof (gsize))                            /* fits 2 pointers (assumed to be 2 * GLIB_SIZEOF_SIZE_T below) */
  |  |  ------------------
  ------------------
 1237|  1.05G|      while (slice)
  ------------------
  |  Branch (1237:14): [True: 863M, False: 187M]
  ------------------
 1238|   863M|        {
 1239|   863M|          guint8 *current = slice;
 1240|   863M|          slice = *(gpointer*) (current + next_offset);
 1241|   863M|          if (G_UNLIKELY (allocator->config.debug_blocks) &&
  ------------------
  |  | 1187|  1.72G|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|   863M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|   863M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|   863M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|   863M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 863M]
  |  |  |  |  ------------------
  |  |  |  | 1181|   863M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|   863M|   else                                         \
  |  |  |  | 1183|   863M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|   863M|   _g_boolean_var_;                             \
  |  |  |  | 1185|   863M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 863M]
  |  |  ------------------
  ------------------
 1242|      0|              !smc_notify_free (current, mem_size))
  ------------------
  |  Branch (1242:15): [True: 0, False: 0]
  ------------------
 1243|      0|            abort();
 1244|   863M|          if (G_UNLIKELY (thread_memory_magazine2_is_full (tmem, ix)))
  ------------------
  |  | 1187|   863M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|   863M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|   863M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|   863M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|   863M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 26.2M, False: 837M]
  |  |  |  |  ------------------
  |  |  |  | 1181|   863M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|   863M|   else                                         \
  |  |  |  | 1183|   863M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|   863M|   _g_boolean_var_;                             \
  |  |  |  | 1185|   863M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 26.2M, False: 837M]
  |  |  ------------------
  ------------------
 1245|  26.2M|            {
 1246|  26.2M|              thread_memory_swap_magazines (tmem, ix);
 1247|  26.2M|              if (G_UNLIKELY (thread_memory_magazine2_is_full (tmem, ix)))
  ------------------
  |  | 1187|  26.2M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  26.2M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  26.2M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  26.2M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  26.2M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 12.9M, False: 13.3M]
  |  |  |  |  ------------------
  |  |  |  | 1181|  26.2M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  26.2M|   else                                         \
  |  |  |  | 1183|  26.2M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  26.2M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  26.2M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 12.9M, False: 13.3M]
  |  |  ------------------
  ------------------
 1248|  12.9M|                thread_memory_magazine2_unload (tmem, ix);
 1249|  26.2M|            }
 1250|   863M|          if (G_UNLIKELY (g_mem_gc_friendly))
  ------------------
  |  | 1187|   863M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|   863M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|   863M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|   863M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|   863M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 863M]
  |  |  |  |  ------------------
  |  |  |  | 1181|   863M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|   863M|   else                                         \
  |  |  |  | 1183|   863M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|   863M|   _g_boolean_var_;                             \
  |  |  |  | 1185|   863M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 863M]
  |  |  ------------------
  ------------------
 1251|      0|            memset (current, 0, chunk_size);
 1252|   863M|          thread_memory_magazine2_free (tmem, ix, current);
 1253|   863M|        }
 1254|   187M|    }
 1255|      0|  else if (acat == 2)                   /* allocate through slab allocator */
  ------------------
  |  Branch (1255:12): [True: 0, False: 0]
  ------------------
 1256|      0|    {
 1257|      0|      g_mutex_lock (&allocator->slab_mutex);
 1258|      0|      while (slice)
  ------------------
  |  Branch (1258:14): [True: 0, False: 0]
  ------------------
 1259|      0|        {
 1260|      0|          guint8 *current = slice;
 1261|      0|          slice = *(gpointer*) (current + next_offset);
 1262|      0|          if (G_UNLIKELY (allocator->config.debug_blocks) &&
  ------------------
  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      0|   else                                         \
  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  | 1185|      0|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1263|      0|              !smc_notify_free (current, mem_size))
  ------------------
  |  Branch (1263:15): [True: 0, False: 0]
  ------------------
 1264|      0|            abort();
 1265|      0|          if (G_UNLIKELY (g_mem_gc_friendly))
  ------------------
  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      0|   else                                         \
  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  | 1185|      0|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1266|      0|            memset (current, 0, chunk_size);
 1267|      0|          slab_allocator_free_chunk (chunk_size, current);
 1268|      0|        }
 1269|      0|      g_mutex_unlock (&allocator->slab_mutex);
 1270|      0|    }
 1271|      0|  else                                  /* delegate to system malloc */
 1272|      0|    while (slice)
  ------------------
  |  Branch (1272:12): [True: 0, False: 0]
  ------------------
 1273|      0|      {
 1274|      0|        guint8 *current = slice;
 1275|      0|        slice = *(gpointer*) (current + next_offset);
 1276|      0|        if (G_UNLIKELY (allocator->config.debug_blocks) &&
  ------------------
  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      0|   else                                         \
  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  | 1185|      0|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1277|      0|            !smc_notify_free (current, mem_size))
  ------------------
  |  Branch (1277:13): [True: 0, False: 0]
  ------------------
 1278|      0|          abort();
 1279|      0|        if (G_UNLIKELY (g_mem_gc_friendly))
  ------------------
  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      0|   else                                         \
  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  | 1185|      0|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1280|      0|          memset (current, 0, mem_size);
 1281|      0|        g_free (current);
 1282|      0|      }
 1283|   187M|}
gslice.c:allocator_get_magazine_threshold:
  617|   904M|{
  618|       |  /* the magazine size calculated here has a lower bound of MIN_MAGAZINE_SIZE,
  619|       |   * which is required by the implementation. also, for moderately sized chunks
  620|       |   * (say >= 64 bytes), magazine sizes shouldn't be much smaller then the number
  621|       |   * of chunks available per page/2 to avoid excessive traffic in the magazine
  622|       |   * cache for small to medium sized structures.
  623|       |   * the upper bound of the magazine size is effectively provided by
  624|       |   * MAX_MAGAZINE_SIZE. for larger chunks, this number is scaled down so that
  625|       |   * the content of a single magazine doesn't exceed ca. 16KB.
  626|       |   */
  627|   904M|  gsize chunk_size = SLAB_CHUNK_SIZE (local_allocator, ix);
  ------------------
  |  |  202|   904M|#define SLAB_CHUNK_SIZE(al, ix) (((ix) + 1) * P2ALIGNMENT)
  |  |  ------------------
  |  |  |  |  192|   904M|#define P2ALIGNMENT             (2 * sizeof (gsize))                            /* fits 2 pointers (assumed to be 2 * GLIB_SIZEOF_SIZE_T below) */
  |  |  ------------------
  ------------------
  628|   904M|  guint threshold = MAX (MIN_MAGAZINE_SIZE, local_allocator->max_page_size / MAX (5 * chunk_size, 5 * 32));
  ------------------
  |  |  888|  1.80G|#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (888:21): [True: 0, False: 904M]
  |  |  |  Branch (888:29): [True: 2.45M, False: 902M]
  |  |  |  Branch (888:42): [True: 2.45M, False: 902M]
  |  |  ------------------
  ------------------
  629|   904M|  guint contention_counter = local_allocator->contention_counters[ix];
  630|   904M|  if (G_UNLIKELY (contention_counter))  /* single CPU bias */
  ------------------
  |  | 1187|   904M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|   904M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|   904M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|   904M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|   904M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 904M]
  |  |  |  |  ------------------
  |  |  |  | 1181|   904M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|   904M|   else                                         \
  |  |  |  | 1183|   904M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|   904M|   _g_boolean_var_;                             \
  |  |  |  | 1185|   904M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 904M]
  |  |  ------------------
  ------------------
  631|      0|    {
  632|       |      /* adapt contention counter thresholds to chunk sizes */
  633|      0|      contention_counter = contention_counter * 64 / chunk_size;
  634|      0|      threshold = MAX (threshold, contention_counter);
  ------------------
  |  |  888|      0|#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (888:21): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  635|      0|    }
  636|   904M|  return threshold;
  637|   904M|}
gslice.c:thread_memory_from_self:
  553|  1.07G|{
  554|  1.07G|  ThreadMemory *tmem = g_private_get (&private_thread_memory);
  555|  1.07G|  if (G_UNLIKELY (!tmem))
  ------------------
  |  | 1187|  1.07G|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  1.07G| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  1.07G|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  1.07G|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  1.07G|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 2, False: 1.07G]
  |  |  |  |  ------------------
  |  |  |  | 1181|  1.07G|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  1.07G|   else                                         \
  |  |  |  | 1183|  1.07G|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  1.07G|   _g_boolean_var_;                             \
  |  |  |  | 1185|  1.07G|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 2, False: 1.07G]
  |  |  ------------------
  ------------------
  556|      2|    {
  557|      2|      static GMutex init_mutex;
  558|      2|      guint n_magazines;
  559|       |
  560|      2|      g_mutex_lock (&init_mutex);
  561|      2|      if G_UNLIKELY (sys_page_size == 0)
  ------------------
  |  | 1187|      2|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      2|   else                                         \
  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  | 1185|      2|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  562|      2|        g_slice_init_nomessage ();
  563|      2|      g_mutex_unlock (&init_mutex);
  564|       |
  565|      2|      n_magazines = MAX_SLAB_INDEX (allocator);
  ------------------
  |  |  200|      2|#define MAX_SLAB_INDEX(al)      (SLAB_INDEX (al, MAX_SLAB_CHUNK_SIZE (al)) + 1)
  |  |  ------------------
  |  |  |  |  201|      2|#define SLAB_INDEX(al, asize)   ((asize) / P2ALIGNMENT - 1)                     /* asize must be P2ALIGNMENT aligned */
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      2|#define P2ALIGNMENT             (2 * sizeof (gsize))                            /* fits 2 pointers (assumed to be 2 * GLIB_SIZEOF_SIZE_T below) */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  566|      2|      tmem = g_private_set_alloc0 (&private_thread_memory, sizeof (ThreadMemory) + sizeof (Magazine) * 2 * n_magazines);
  567|      2|      tmem->magazine1 = (Magazine*) (tmem + 1);
  568|      2|      tmem->magazine2 = &tmem->magazine1[n_magazines];
  569|      2|    }
  570|  1.07G|  return tmem;
  571|  1.07G|}
gslice.c:magazine_cache_push_magazine:
  736|  13.0M|{
  737|  13.0M|  ChunkLink *current = magazine_chain_prepare_fields (magazine_chunks);
  738|  13.0M|  ChunkLink *next, *prev;
  739|  13.0M|  g_mutex_lock (&allocator->magazine_mutex);
  740|       |  /* add magazine at head */
  741|  13.0M|  next = allocator->magazines[ix];
  742|  13.0M|  if (next)
  ------------------
  |  Branch (742:7): [True: 12.9M, False: 54.7k]
  ------------------
  743|  12.9M|    prev = magazine_chain_prev (next);
  ------------------
  |  |  674|  12.9M|#define magazine_chain_prev(mc)         ((mc)->data)
  ------------------
  744|  54.7k|  else
  745|  54.7k|    next = prev = current;
  746|  13.0M|  magazine_chain_next (prev) = current;
  ------------------
  |  |  677|  13.0M|#define magazine_chain_next(mc)         ((mc)->next->next->data)
  ------------------
  747|  13.0M|  magazine_chain_prev (next) = current;
  ------------------
  |  |  674|  13.0M|#define magazine_chain_prev(mc)         ((mc)->data)
  ------------------
  748|  13.0M|  magazine_chain_prev (current) = prev;
  ------------------
  |  |  674|  13.0M|#define magazine_chain_prev(mc)         ((mc)->data)
  ------------------
  749|  13.0M|  magazine_chain_next (current) = next;
  ------------------
  |  |  677|  13.0M|#define magazine_chain_next(mc)         ((mc)->next->next->data)
  ------------------
  750|  13.0M|  magazine_chain_count (current) = (gpointer) count;
  ------------------
  |  |  678|  13.0M|#define magazine_chain_count(mc)        ((mc)->next->next->next->data)
  ------------------
  751|       |  /* stamp magazine */
  752|  13.0M|  magazine_cache_update_stamp();
  753|  13.0M|  magazine_chain_stamp (current) = GUINT_TO_POINTER (allocator->last_stamp);
  ------------------
  |  |  675|  13.0M|#define magazine_chain_stamp(mc)        ((mc)->next->data)
  ------------------
                magazine_chain_stamp (current) = GUINT_TO_POINTER (allocator->last_stamp);
  ------------------
  |  |  104|  13.0M|#define GUINT_TO_POINTER(u)	((gpointer) (gulong) (u))
  ------------------
  754|  13.0M|  allocator->magazines[ix] = current;
  755|       |  /* free old magazines beyond a certain threshold */
  756|  13.0M|  magazine_cache_trim (allocator, ix, allocator->last_stamp);
  757|       |  /* g_mutex_unlock (allocator->mutex); was done by magazine_cache_trim() */
  758|  13.0M|}
gslice.c:magazine_chain_prepare_fields:
  655|  13.0M|{
  656|  13.0M|  ChunkLink *chunk1;
  657|  13.0M|  ChunkLink *chunk2;
  658|  13.0M|  ChunkLink *chunk3;
  659|  13.0M|  ChunkLink *chunk4;
  660|       |  /* checked upon initialization: mem_assert (MIN_MAGAZINE_SIZE >= 4); */
  661|       |  /* ensure a magazine with at least 4 unused data pointers */
  662|  13.0M|  chunk1 = magazine_chain_pop_head (&magazine_chunks);
  663|  13.0M|  chunk2 = magazine_chain_pop_head (&magazine_chunks);
  664|  13.0M|  chunk3 = magazine_chain_pop_head (&magazine_chunks);
  665|  13.0M|  chunk4 = magazine_chain_pop_head (&magazine_chunks);
  666|  13.0M|  chunk4->next = magazine_chunks;
  667|  13.0M|  chunk3->next = chunk4;
  668|  13.0M|  chunk2->next = chunk3;
  669|  13.0M|  chunk1->next = chunk2;
  670|  13.0M|  return chunk1;
  671|  13.0M|}
gslice.c:magazine_cache_update_stamp:
  642|  13.0M|{
  643|  13.0M|  if (allocator->stamp_counter >= MAX_STAMP_COUNTER)
  ------------------
  |  |  198|  13.0M|#define MAX_STAMP_COUNTER       (7)                                             /* distributes the load of gettimeofday() */
  ------------------
  |  Branch (643:7): [True: 1.62M, False: 11.3M]
  ------------------
  644|  1.62M|    {
  645|  1.62M|      gint64 now_us = g_get_real_time ();
  646|  1.62M|      allocator->last_stamp = now_us / 1000; /* milli seconds */
  647|  1.62M|      allocator->stamp_counter = 0;
  648|  1.62M|    }
  649|  11.3M|  else
  650|  11.3M|    allocator->stamp_counter++;
  651|  13.0M|}
gslice.c:magazine_cache_trim:
  684|  13.0M|{
  685|       |  /* g_mutex_lock (local_allocator->mutex); done by caller */
  686|       |  /* trim magazine cache from tail */
  687|  13.0M|  ChunkLink *current = magazine_chain_prev (local_allocator->magazines[ix]);
  ------------------
  |  |  674|  13.0M|#define magazine_chain_prev(mc)         ((mc)->data)
  ------------------
  688|  13.0M|  ChunkLink *trash = NULL;
  689|  13.0M|  while (!G_APPROX_VALUE (stamp, magazine_chain_uint_stamp (current),
  ------------------
  |  |  900|  13.0M|  (((a) > (b) ? (a) - (b) : (b) - (a)) < (epsilon))
  |  |  ------------------
  |  |  |  Branch (900:5): [True: 12.1M, False: 905k]
  |  |  ------------------
  ------------------
  |  Branch (689:10): [True: 663, False: 13.0M]
  ------------------
  690|  13.0M|                          local_allocator->config.working_set_msecs))
  691|    663|    {
  692|       |      /* unlink */
  693|    663|      ChunkLink *prev = magazine_chain_prev (current);
  ------------------
  |  |  674|    663|#define magazine_chain_prev(mc)         ((mc)->data)
  ------------------
  694|    663|      ChunkLink *next = magazine_chain_next (current);
  ------------------
  |  |  677|    663|#define magazine_chain_next(mc)         ((mc)->next->next->data)
  ------------------
  695|    663|      magazine_chain_next (prev) = next;
  ------------------
  |  |  677|    663|#define magazine_chain_next(mc)         ((mc)->next->next->data)
  ------------------
  696|    663|      magazine_chain_prev (next) = prev;
  ------------------
  |  |  674|    663|#define magazine_chain_prev(mc)         ((mc)->data)
  ------------------
  697|       |      /* clear special fields, put on trash stack */
  698|    663|      magazine_chain_next (current) = NULL;
  ------------------
  |  |  677|    663|#define magazine_chain_next(mc)         ((mc)->next->next->data)
  ------------------
  699|    663|      magazine_chain_count (current) = NULL;
  ------------------
  |  |  678|    663|#define magazine_chain_count(mc)        ((mc)->next->next->next->data)
  ------------------
  700|    663|      magazine_chain_stamp (current) = NULL;
  ------------------
  |  |  675|    663|#define magazine_chain_stamp(mc)        ((mc)->next->data)
  ------------------
  701|    663|      magazine_chain_prev (current) = trash;
  ------------------
  |  |  674|    663|#define magazine_chain_prev(mc)         ((mc)->data)
  ------------------
  702|    663|      trash = current;
  703|       |      /* fixup list head if required */
  704|    663|      if (current == local_allocator->magazines[ix])
  ------------------
  |  Branch (704:11): [True: 0, False: 663]
  ------------------
  705|      0|        {
  706|      0|          local_allocator->magazines[ix] = NULL;
  707|      0|          break;
  708|      0|        }
  709|    663|      current = prev;
  710|    663|    }
  711|  13.0M|  g_mutex_unlock (&local_allocator->magazine_mutex);
  712|       |  /* free trash */
  713|  13.0M|  if (trash)
  ------------------
  |  Branch (713:7): [True: 13, False: 13.0M]
  ------------------
  714|     13|    {
  715|     13|      const gsize chunk_size = SLAB_CHUNK_SIZE (local_allocator, ix);
  ------------------
  |  |  202|     13|#define SLAB_CHUNK_SIZE(al, ix) (((ix) + 1) * P2ALIGNMENT)
  |  |  ------------------
  |  |  |  |  192|     13|#define P2ALIGNMENT             (2 * sizeof (gsize))                            /* fits 2 pointers (assumed to be 2 * GLIB_SIZEOF_SIZE_T below) */
  |  |  ------------------
  ------------------
  716|     13|      g_mutex_lock (&local_allocator->slab_mutex);
  717|    676|      while (trash)
  ------------------
  |  Branch (717:14): [True: 663, False: 13]
  ------------------
  718|    663|        {
  719|    663|          current = trash;
  720|    663|          trash = magazine_chain_prev (current);
  ------------------
  |  |  674|    663|#define magazine_chain_prev(mc)         ((mc)->data)
  ------------------
  721|    663|          magazine_chain_prev (current) = NULL; /* clear special field */
  ------------------
  |  |  674|    663|#define magazine_chain_prev(mc)         ((mc)->data)
  ------------------
  722|  18.3k|          while (current)
  ------------------
  |  Branch (722:18): [True: 17.6k, False: 663]
  ------------------
  723|  17.6k|            {
  724|  17.6k|              ChunkLink *chunk = magazine_chain_pop_head (&current);
  725|  17.6k|              slab_allocator_free_chunk (chunk_size, chunk);
  726|  17.6k|            }
  727|    663|        }
  728|     13|      g_mutex_unlock (&local_allocator->slab_mutex);
  729|     13|    }
  730|  13.0M|}
gslice.c:magazine_chain_pop_head:
  575|   930M|{
  576|       |  /* magazine chains are linked via ChunkLink->next.
  577|       |   * each ChunkLink->data of the toplevel chain may point to a subchain,
  578|       |   * linked via ChunkLink->next. ChunkLink->data of the subchains just
  579|       |   * contains uninitialized junk.
  580|       |   */
  581|   930M|  ChunkLink *chunk = (*magazine_chunks)->data;
  582|   930M|  if (G_UNLIKELY (chunk))
  ------------------
  |  | 1187|   930M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|   930M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|   930M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|   930M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|   930M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 930M]
  |  |  |  |  ------------------
  |  |  |  | 1181|   930M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|   930M|   else                                         \
  |  |  |  | 1183|   930M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|   930M|   _g_boolean_var_;                             \
  |  |  |  | 1185|   930M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 930M]
  |  |  ------------------
  ------------------
  583|      0|    {
  584|       |      /* allocating from freed list */
  585|      0|      (*magazine_chunks)->data = chunk->next;
  586|      0|    }
  587|   930M|  else
  588|   930M|    {
  589|   930M|      chunk = *magazine_chunks;
  590|   930M|      *magazine_chunks = chunk->next;
  591|   930M|    }
  592|   930M|  return chunk;
  593|   930M|}
gslice.c:g_slice_init_nomessage:
  445|      2|{
  446|       |  /* we may not use g_error() or friends here */
  447|      2|  mem_assert (sys_page_size == 0);
  ------------------
  |  |  216|      2|#define mem_assert(cond)    do { if (G_LIKELY (cond)) ; else mem_error ("assertion failed: %s", #cond); } while (0)
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (216:114): [Folded, False: 2]
  |  |  ------------------
  ------------------
  448|      2|  mem_assert (MIN_MAGAZINE_SIZE >= 4);
  ------------------
  |  |  216|      2|#define mem_assert(cond)    do { if (G_LIKELY (cond)) ; else mem_error ("assertion failed: %s", #cond); } while (0)
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (216:114): [Folded, False: 2]
  |  |  ------------------
  ------------------
  449|       |
  450|       |#ifdef G_OS_WIN32
  451|       |  {
  452|       |    SYSTEM_INFO system_info;
  453|       |    GetSystemInfo (&system_info);
  454|       |    sys_page_size = system_info.dwPageSize;
  455|       |  }
  456|       |#else
  457|      2|  sys_page_size = sysconf (_SC_PAGESIZE); /* = sysconf (_SC_PAGE_SIZE); = getpagesize(); */
  458|      2|#endif
  459|      2|  mem_assert (sys_page_size >= 2 * LARGEALIGNMENT);
  ------------------
  |  |  216|      2|#define mem_assert(cond)    do { if (G_LIKELY (cond)) ; else mem_error ("assertion failed: %s", #cond); } while (0)
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (216:114): [Folded, False: 2]
  |  |  ------------------
  ------------------
  460|      2|  mem_assert ((sys_page_size & (sys_page_size - 1)) == 0);
  ------------------
  |  |  216|      2|#define mem_assert(cond)    do { if (G_LIKELY (cond)) ; else mem_error ("assertion failed: %s", #cond); } while (0)
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (216:114): [Folded, False: 2]
  |  |  ------------------
  ------------------
  461|      2|  slice_config_init (&allocator->config);
  462|      2|  allocator->min_page_size = sys_page_size;
  463|      2|#if HAVE_POSIX_MEMALIGN || HAVE_MEMALIGN
  464|       |  /* allow allocation of pages up to 8KB (with 8KB alignment).
  465|       |   * this is useful because many medium to large sized structures
  466|       |   * fit less than 8 times (see [4]) into 4KB pages.
  467|       |   * we allow very small page sizes here, to reduce wastage in
  468|       |   * threads if only small allocations are required (this does
  469|       |   * bear the risk of increasing allocation times and fragmentation
  470|       |   * though).
  471|       |   */
  472|      2|  allocator->min_page_size = MAX (allocator->min_page_size, 4096);
  ------------------
  |  |  888|      2|#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (888:21): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  473|      2|  allocator->max_page_size = MAX (allocator->min_page_size, 8192);
  ------------------
  |  |  888|      2|#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (888:21): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  474|      2|  allocator->min_page_size = MIN (allocator->min_page_size, 128);
  ------------------
  |  |  891|      2|#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (891:21): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  475|       |#else
  476|       |  /* we can only align to system page size */
  477|       |  allocator->max_page_size = sys_page_size;
  478|       |#endif
  479|      2|  if (allocator->config.always_malloc)
  ------------------
  |  Branch (479:7): [True: 0, False: 2]
  ------------------
  480|      0|    {
  481|      0|      allocator->contention_counters = NULL;
  482|      0|      allocator->magazines = NULL;
  483|      0|      allocator->slab_stack = NULL;
  484|      0|    }
  485|      2|  else
  486|      2|    {
  487|      2|      allocator->contention_counters = g_new0 (guint, MAX_SLAB_INDEX (allocator));
  ------------------
  |  |  316|      2|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|      2|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      2|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      2|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      2|	  gpointer __p;						\
  |  |  |  |  248|      2|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  249|      2|	    __p = g_##func (__n);				\
  |  |  |  |  250|      2|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  251|      2|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      2|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      2|	  else							\
  |  |  |  |  254|      2|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      2|	  __p;							\
  |  |  |  |  256|      2|	}))
  |  |  ------------------
  ------------------
  488|      2|      allocator->magazines = g_new0 (ChunkLink*, MAX_SLAB_INDEX (allocator));
  ------------------
  |  |  316|      2|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|      2|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      2|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      2|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      2|	  gpointer __p;						\
  |  |  |  |  248|      2|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  249|      2|	    __p = g_##func (__n);				\
  |  |  |  |  250|      2|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  251|      2|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      2|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      2|	  else							\
  |  |  |  |  254|      2|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      2|	  __p;							\
  |  |  |  |  256|      2|	}))
  |  |  ------------------
  ------------------
  489|      2|      allocator->slab_stack = g_new0 (SlabInfo*, MAX_SLAB_INDEX (allocator));
  ------------------
  |  |  316|      2|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|      2|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      2|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      2|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      2|	  gpointer __p;						\
  |  |  |  |  248|      2|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  249|      2|	    __p = g_##func (__n);				\
  |  |  |  |  250|      2|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  251|      2|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      2|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      2|	  else							\
  |  |  |  |  254|      2|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      2|	  __p;							\
  |  |  |  |  256|      2|	}))
  |  |  ------------------
  ------------------
  490|      2|    }
  491|       |
  492|      2|  allocator->mutex_counter = 0;
  493|      2|  allocator->stamp_counter = MAX_STAMP_COUNTER; /* force initial update */
  ------------------
  |  |  198|      2|#define MAX_STAMP_COUNTER       (7)                                             /* distributes the load of gettimeofday() */
  ------------------
  494|      2|  allocator->last_stamp = 0;
  495|      2|  allocator->color_accu = 0;
  496|      2|  magazine_cache_update_stamp();
  497|       |  /* values cached for performance reasons */
  498|      2|  allocator->max_slab_chunk_size_for_magazine_cache = MAX_SLAB_CHUNK_SIZE (allocator);
  ------------------
  |  |  199|      2|#define MAX_SLAB_CHUNK_SIZE(al) (((al)->max_page_size - SLAB_INFO_SIZE) / 8)    /* we want at last 8 chunks per page, see [4] */
  |  |  ------------------
  |  |  |  |  195|      2|#define SLAB_INFO_SIZE          P2ALIGN (sizeof (SlabInfo) + NATIVE_MALLOC_PADDING)
  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      2|#define P2ALIGN(size)   (((size) + 0xf) & ~(gsize) 0xf)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  499|      2|  if (allocator->config.always_malloc || allocator->config.bypass_magazines)
  ------------------
  |  Branch (499:7): [True: 0, False: 2]
  |  Branch (499:42): [True: 0, False: 2]
  ------------------
  500|      0|    allocator->max_slab_chunk_size_for_magazine_cache = 0;      /* non-optimized cases */
  501|      2|}
gslice.c:slice_config_init:
  364|      2|{
  365|      2|  const gchar *val;
  366|      2|  gchar *val_allocated = NULL;
  367|       |
  368|      2|  *config = slice_config;
  369|       |
  370|       |  /* Note that the empty string (`G_SLICE=""`) is treated differently from the
  371|       |   * envvar being unset. In the latter case, we also check whether running under
  372|       |   * valgrind. */
  373|      2|#ifndef G_OS_WIN32
  374|      2|  val = g_getenv ("G_SLICE");
  375|       |#else
  376|       |  /* The win32 implementation of g_getenv() has to do UTF-8 ↔ UTF-16 conversions
  377|       |   * which use the slice allocator, leading to deadlock. Use a simple in-place
  378|       |   * implementation here instead.
  379|       |   *
  380|       |   * Ignore references to other environment variables: only support values which
  381|       |   * are a combination of always-malloc and debug-blocks. */
  382|       |  {
  383|       |
  384|       |  wchar_t wvalue[128];  /* at least big enough for `always-malloc,debug-blocks` */
  385|       |  gsize len;
  386|       |
  387|       |  len = GetEnvironmentVariableW (L"G_SLICE", wvalue, G_N_ELEMENTS (wvalue));
  388|       |
  389|       |  if (len == 0)
  390|       |    {
  391|       |      if (GetLastError () == ERROR_ENVVAR_NOT_FOUND)
  392|       |        val = NULL;
  393|       |      else
  394|       |        val = "";
  395|       |    }
  396|       |  else if (len >= G_N_ELEMENTS (wvalue))
  397|       |    {
  398|       |      /* @wvalue isn’t big enough. Give up. */
  399|       |      g_warning ("Unsupported G_SLICE value");
  400|       |      val = NULL;
  401|       |    }
  402|       |  else
  403|       |    {
  404|       |      /* it’s safe to use g_utf16_to_utf8() here as it only allocates using
  405|       |       * malloc() rather than GSlice */
  406|       |      val = val_allocated = g_utf16_to_utf8 (wvalue, -1, NULL, NULL, NULL);
  407|       |    }
  408|       |
  409|       |  }
  410|       |#endif  /* G_OS_WIN32 */
  411|       |
  412|      2|  if (val != NULL)
  ------------------
  |  Branch (412:7): [True: 0, False: 2]
  ------------------
  413|      0|    {
  414|      0|      gint flags;
  415|      0|      const GDebugKey keys[] = {
  416|      0|        { "always-malloc", 1 << 0 },
  417|      0|        { "debug-blocks",  1 << 1 },
  418|      0|      };
  419|       |
  420|      0|      flags = g_parse_debug_string (val, keys, G_N_ELEMENTS (keys));
  ------------------
  |  |  906|      0|#define G_N_ELEMENTS(arr)		(sizeof (arr) / sizeof ((arr)[0]))
  ------------------
  421|      0|      if (flags & (1 << 0))
  ------------------
  |  Branch (421:11): [True: 0, False: 0]
  ------------------
  422|      0|        config->always_malloc = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  423|      0|      if (flags & (1 << 1))
  ------------------
  |  Branch (423:11): [True: 0, False: 0]
  ------------------
  424|      0|        config->debug_blocks = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  425|      0|    }
  426|      2|  else
  427|      2|    {
  428|       |      /* G_SLICE was not specified, so check if valgrind is running and
  429|       |       * disable ourselves if it is.
  430|       |       *
  431|       |       * This way it's possible to force gslice to be enabled under
  432|       |       * valgrind just by setting G_SLICE to the empty string.
  433|       |       */
  434|      2|#ifdef ENABLE_VALGRIND
  435|      2|      if (RUNNING_ON_VALGRIND)
  ------------------
  |  | 6215|      2|    (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* if not */,         \
  |  |  ------------------
  |  |  |  |  413|      2|    __extension__                                                 \
  |  |  |  |  414|      2|    ({ volatile unsigned long int _zzq_args[6];                   \
  |  |  |  |  415|      2|    volatile unsigned long int _zzq_result;                       \
  |  |  |  |  416|      2|    _zzq_args[0] = (unsigned long int)(_zzq_request);             \
  |  |  |  |  417|      2|    _zzq_args[1] = (unsigned long int)(_zzq_arg1);                \
  |  |  |  |  418|      2|    _zzq_args[2] = (unsigned long int)(_zzq_arg2);                \
  |  |  |  |  419|      2|    _zzq_args[3] = (unsigned long int)(_zzq_arg3);                \
  |  |  |  |  420|      2|    _zzq_args[4] = (unsigned long int)(_zzq_arg4);                \
  |  |  |  |  421|      2|    _zzq_args[5] = (unsigned long int)(_zzq_arg5);                \
  |  |  |  |  422|      2|    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
  |  |  |  |  423|      2|                     /* %RDX = client_request ( %RAX ) */         \
  |  |  |  |  424|      2|                     "xchgq %%rbx,%%rbx"                          \
  |  |  |  |  425|      2|                     : "=d" (_zzq_result)                         \
  |  |  |  |  426|      2|                     : "a" (&_zzq_args[0]), "0" (_zzq_default)    \
  |  |  |  |  427|      2|                     : "cc", "memory"                             \
  |  |  |  |  428|      2|                    );                                            \
  |  |  |  |  429|      2|    _zzq_result;                                                  \
  |  |  |  |  430|      2|    })
  |  |  ------------------
  |  |  |  Branch (6215:5): [True: 0, False: 2]
  |  |  ------------------
  |  | 6216|      2|                                    VG_USERREQ__RUNNING_ON_VALGRIND,  \
  |  | 6217|      2|                                    0, 0, 0, 0, 0)                    \
  ------------------
  436|      0|        config->always_malloc = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  437|      2|#endif
  438|      2|    }
  439|       |
  440|      2|  g_free (val_allocated);
  441|      2|}
gslice.c:allocator_categorize:
  505|  1.07G|{
  506|       |  /* speed up the likely path */
  507|  1.07G|  if (G_LIKELY (aligned_chunk_size && aligned_chunk_size <= allocator->max_slab_chunk_size_for_magazine_cache))
  ------------------
  |  | 1186|  1.07G|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|  1.07G| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  1.07G|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  1.07G|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  3.23G|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 1.07G, False: 0]
  |  |  |  |  |  Branch (1180:8): [True: 1.07G, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|  1.07G|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  1.07G|   else                                         \
  |  |  |  | 1183|  1.07G|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  1.07G|   _g_boolean_var_;                             \
  |  |  |  | 1185|  1.07G|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 1.07G, False: 0]
  |  |  ------------------
  ------------------
  508|  1.07G|    return 1;           /* use magazine cache */
  509|       |
  510|      0|  if (!allocator->config.always_malloc &&
  ------------------
  |  Branch (510:7): [True: 0, False: 0]
  ------------------
  511|      0|      aligned_chunk_size &&
  ------------------
  |  Branch (511:7): [True: 0, False: 0]
  ------------------
  512|      0|      aligned_chunk_size <= MAX_SLAB_CHUNK_SIZE (allocator))
  ------------------
  |  |  199|      0|#define MAX_SLAB_CHUNK_SIZE(al) (((al)->max_page_size - SLAB_INFO_SIZE) / 8)    /* we want at last 8 chunks per page, see [4] */
  |  |  ------------------
  |  |  |  |  195|      0|#define SLAB_INFO_SIZE          P2ALIGN (sizeof (SlabInfo) + NATIVE_MALLOC_PADDING)
  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|#define P2ALIGN(size)   (((size) + 0xf) & ~(gsize) 0xf)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (512:7): [True: 0, False: 0]
  ------------------
  513|      0|    {
  514|      0|      if (allocator->config.bypass_magazines)
  ------------------
  |  Branch (514:11): [True: 0, False: 0]
  ------------------
  515|      0|        return 2;       /* use slab allocator, see [2] */
  516|      0|      return 1;         /* use magazine cache */
  517|      0|    }
  518|      0|  return 0;             /* use malloc() */
  519|      0|}
gslice.c:thread_memory_magazine1_is_empty:
  872|   892M|{
  873|       |  return tmem->magazine1[ix].chunks == NULL;
  874|   892M|}
gslice.c:thread_memory_swap_magazines:
  863|  40.2M|{
  864|  40.2M|  Magazine xmag = tmem->magazine1[ix];
  865|  40.2M|  tmem->magazine1[ix] = tmem->magazine2[ix];
  866|  40.2M|  tmem->magazine2[ix] = xmag;
  867|  40.2M|}
gslice.c:thread_memory_magazine1_reload:
  843|  13.0M|{
  844|  13.0M|  Magazine *mag = &tmem->magazine1[ix];
  845|  13.0M|  mem_assert (mag->chunks == NULL); /* ensure that we may reset mag->count */
  ------------------
  |  |  216|  13.0M|#define mem_assert(cond)    do { if (G_LIKELY (cond)) ; else mem_error ("assertion failed: %s", #cond); } while (0)
  |  |  ------------------
  |  |  |  | 1186|  13.0M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  13.0M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  13.0M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  13.0M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  13.0M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 13.0M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  13.0M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  13.0M|   else                                         \
  |  |  |  |  |  | 1183|  13.0M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  13.0M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  13.0M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 13.0M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (216:114): [Folded, False: 13.0M]
  |  |  ------------------
  ------------------
  846|  13.0M|  mag->count = 0;
  847|  13.0M|  mag->chunks = magazine_cache_pop_magazine (ix, &mag->count);
  848|  13.0M|}
gslice.c:magazine_cache_pop_magazine:
  763|  13.0M|{
  764|  13.0M|  g_mutex_lock_a (&allocator->magazine_mutex, &allocator->contention_counters[ix]);
  765|  13.0M|  if (!allocator->magazines[ix])
  ------------------
  |  Branch (765:7): [True: 3.88k, False: 13.0M]
  ------------------
  766|  3.88k|    {
  767|  3.88k|      guint magazine_threshold = allocator_get_magazine_threshold (allocator, ix);
  768|  3.88k|      gsize i, chunk_size = SLAB_CHUNK_SIZE (allocator, ix);
  ------------------
  |  |  202|  3.88k|#define SLAB_CHUNK_SIZE(al, ix) (((ix) + 1) * P2ALIGNMENT)
  |  |  ------------------
  |  |  |  |  192|  3.88k|#define P2ALIGNMENT             (2 * sizeof (gsize))                            /* fits 2 pointers (assumed to be 2 * GLIB_SIZEOF_SIZE_T below) */
  |  |  ------------------
  ------------------
  769|  3.88k|      ChunkLink *chunk, *head;
  770|  3.88k|      g_mutex_unlock (&allocator->magazine_mutex);
  771|  3.88k|      g_mutex_lock (&allocator->slab_mutex);
  772|  3.88k|      head = slab_allocator_alloc_chunk (chunk_size);
  773|  3.88k|      head->data = NULL;
  774|  3.88k|      chunk = head;
  775|   118k|      for (i = 1; i < magazine_threshold; i++)
  ------------------
  |  Branch (775:19): [True: 114k, False: 3.88k]
  ------------------
  776|   114k|        {
  777|   114k|          chunk->next = slab_allocator_alloc_chunk (chunk_size);
  778|   114k|          chunk = chunk->next;
  779|   114k|          chunk->data = NULL;
  780|   114k|        }
  781|  3.88k|      chunk->next = NULL;
  782|  3.88k|      g_mutex_unlock (&allocator->slab_mutex);
  783|  3.88k|      *countp = i;
  784|  3.88k|      return head;
  785|  3.88k|    }
  786|  13.0M|  else
  787|  13.0M|    {
  788|  13.0M|      ChunkLink *current = allocator->magazines[ix];
  789|  13.0M|      ChunkLink *prev = magazine_chain_prev (current);
  ------------------
  |  |  674|  13.0M|#define magazine_chain_prev(mc)         ((mc)->data)
  ------------------
  790|  13.0M|      ChunkLink *next = magazine_chain_next (current);
  ------------------
  |  |  677|  13.0M|#define magazine_chain_next(mc)         ((mc)->next->next->data)
  ------------------
  791|       |      /* unlink */
  792|  13.0M|      magazine_chain_next (prev) = next;
  ------------------
  |  |  677|  13.0M|#define magazine_chain_next(mc)         ((mc)->next->next->data)
  ------------------
  793|  13.0M|      magazine_chain_prev (next) = prev;
  ------------------
  |  |  674|  13.0M|#define magazine_chain_prev(mc)         ((mc)->data)
  ------------------
  794|  13.0M|      allocator->magazines[ix] = next == current ? NULL : next;
  ------------------
  |  Branch (794:34): [True: 54.7k, False: 12.9M]
  ------------------
  795|  13.0M|      g_mutex_unlock (&allocator->magazine_mutex);
  796|       |      /* clear special fields and hand out */
  797|  13.0M|      *countp = (gsize) magazine_chain_count (current);
  ------------------
  |  |  678|  13.0M|#define magazine_chain_count(mc)        ((mc)->next->next->next->data)
  ------------------
  798|  13.0M|      magazine_chain_prev (current) = NULL;
  ------------------
  |  |  674|  13.0M|#define magazine_chain_prev(mc)         ((mc)->data)
  ------------------
  799|  13.0M|      magazine_chain_next (current) = NULL;
  ------------------
  |  |  677|  13.0M|#define magazine_chain_next(mc)         ((mc)->next->next->data)
  ------------------
  800|  13.0M|      magazine_chain_count (current) = NULL;
  ------------------
  |  |  678|  13.0M|#define magazine_chain_count(mc)        ((mc)->next->next->next->data)
  ------------------
  801|  13.0M|      magazine_chain_stamp (current) = NULL;
  ------------------
  |  |  675|  13.0M|#define magazine_chain_stamp(mc)        ((mc)->next->data)
  ------------------
  802|  13.0M|      return current;
  803|  13.0M|    }
  804|  13.0M|}
gslice.c:g_mutex_lock_a:
  524|  13.0M|{
  525|  13.0M|  gboolean contention = FALSE;
  ------------------
  |  |  880|  13.0M|#define	FALSE	(0)
  ------------------
  526|  13.0M|  if (!g_mutex_trylock (mutex))
  ------------------
  |  Branch (526:7): [True: 0, False: 13.0M]
  ------------------
  527|      0|    {
  528|      0|      g_mutex_lock (mutex);
  529|      0|      contention = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  530|      0|    }
  531|  13.0M|  if (contention)
  ------------------
  |  Branch (531:7): [True: 0, False: 13.0M]
  ------------------
  532|      0|    {
  533|      0|      allocator->mutex_counter++;
  534|      0|      if (allocator->mutex_counter >= 1)        /* quickly adapt to contention */
  ------------------
  |  Branch (534:11): [True: 0, False: 0]
  ------------------
  535|      0|        {
  536|      0|          allocator->mutex_counter = 0;
  537|      0|          *contention_counter = MIN (*contention_counter + 1, MAX_MAGAZINE_SIZE);
  ------------------
  |  |  891|      0|#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (891:21): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  538|      0|        }
  539|      0|    }
  540|  13.0M|  else /* !contention */
  541|  13.0M|    {
  542|  13.0M|      allocator->mutex_counter--;
  543|  13.0M|      if (allocator->mutex_counter < -11)       /* moderately recover magazine sizes */
  ------------------
  |  Branch (543:11): [True: 1.08M, False: 11.9M]
  ------------------
  544|  1.08M|        {
  545|  1.08M|          allocator->mutex_counter = 0;
  546|  1.08M|          *contention_counter = MAX (*contention_counter, 1) - 1;
  ------------------
  |  |  888|  1.08M|#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (888:21): [True: 0, False: 1.08M]
  |  |  ------------------
  ------------------
  547|  1.08M|        }
  548|  13.0M|    }
  549|  13.0M|}
gslice.c:thread_memory_magazine1_alloc:
  886|   878M|{
  887|   878M|  Magazine *mag = &tmem->magazine1[ix];
  888|   878M|  ChunkLink *chunk = magazine_chain_pop_head (&mag->chunks);
  889|   878M|  if (G_LIKELY (mag->count > 0))
  ------------------
  |  | 1186|   878M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|   878M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|   878M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|   878M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|   878M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 878M, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|   878M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|   878M|   else                                         \
  |  |  |  | 1183|   878M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|   878M|   _g_boolean_var_;                             \
  |  |  |  | 1185|   878M|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 878M, False: 0]
  |  |  ------------------
  ------------------
  890|   878M|    mag->count--;
  891|   878M|  return chunk;
  892|   878M|}
gslice.c:thread_memory_magazine2_is_full:
  879|   904M|{
  880|   904M|  return tmem->magazine2[ix].count >= allocator_get_magazine_threshold (allocator, ix);
  881|   904M|}
gslice.c:thread_memory_magazine2_unload:
  853|  13.0M|{
  854|  13.0M|  Magazine *mag = &tmem->magazine2[ix];
  855|  13.0M|  magazine_cache_push_magazine (ix, mag->chunks, mag->count);
  856|       |  mag->chunks = NULL;
  857|  13.0M|  mag->count = 0;
  858|  13.0M|}
gslice.c:thread_memory_magazine2_free:
  898|   878M|{
  899|   878M|  Magazine *mag = &tmem->magazine2[ix];
  900|   878M|  ChunkLink *chunk = mem;
  901|       |  chunk->data = NULL;
  902|   878M|  chunk->next = mag->chunks;
  903|   878M|  mag->chunks = chunk;
  904|   878M|  mag->count++;
  905|   878M|}
gslice.c:slab_allocator_alloc_chunk:
 1374|   118k|{
 1375|   118k|  ChunkLink *chunk;
 1376|   118k|  guint ix = SLAB_INDEX (allocator, chunk_size);
  ------------------
  |  |  201|   118k|#define SLAB_INDEX(al, asize)   ((asize) / P2ALIGNMENT - 1)                     /* asize must be P2ALIGNMENT aligned */
  |  |  ------------------
  |  |  |  |  192|   118k|#define P2ALIGNMENT             (2 * sizeof (gsize))                            /* fits 2 pointers (assumed to be 2 * GLIB_SIZEOF_SIZE_T below) */
  |  |  ------------------
  ------------------
 1377|       |  /* ensure non-empty slab */
 1378|   118k|  if (!allocator->slab_stack[ix] || !allocator->slab_stack[ix]->chunks)
  ------------------
  |  Branch (1378:7): [True: 8, False: 118k]
  |  Branch (1378:37): [True: 9.72k, False: 108k]
  ------------------
 1379|  9.73k|    allocator_add_slab (allocator, ix, chunk_size);
 1380|       |  /* allocate chunk */
 1381|   118k|  chunk = allocator->slab_stack[ix]->chunks;
 1382|   118k|  allocator->slab_stack[ix]->chunks = chunk->next;
 1383|   118k|  allocator->slab_stack[ix]->n_allocated++;
 1384|       |  /* rotate empty slabs */
 1385|   118k|  if (!allocator->slab_stack[ix]->chunks)
  ------------------
  |  Branch (1385:7): [True: 10.8k, False: 107k]
  ------------------
 1386|  10.8k|    allocator->slab_stack[ix] = allocator->slab_stack[ix]->next;
 1387|   118k|  return chunk;
 1388|   118k|}
gslice.c:allocator_add_slab:
 1321|  9.73k|{
 1322|  9.73k|  ChunkLink *chunk;
 1323|  9.73k|  SlabInfo *sinfo;
 1324|  9.73k|  gsize addr, padding, n_chunks, color = 0;
 1325|  9.73k|  gsize page_size;
 1326|  9.73k|  int errsv;
 1327|  9.73k|  gpointer aligned_memory;
 1328|  9.73k|  guint8 *mem;
 1329|  9.73k|  guint i;
 1330|       |
 1331|  9.73k|  page_size = allocator_aligned_page_size (local_allocator, SLAB_BPAGE_SIZE (local_allocator, chunk_size));
  ------------------
  |  |  203|  9.73k|#define SLAB_BPAGE_SIZE(al,csz) (8 * (csz) + SLAB_INFO_SIZE)
  |  |  ------------------
  |  |  |  |  195|  9.73k|#define SLAB_INFO_SIZE          P2ALIGN (sizeof (SlabInfo) + NATIVE_MALLOC_PADDING)
  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  9.73k|#define P2ALIGN(size)   (((size) + 0xf) & ~(gsize) 0xf)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1332|       |  /* allocate 1 page for the chunks and the slab */
 1333|  9.73k|  aligned_memory = allocator_memalign (page_size, page_size - NATIVE_MALLOC_PADDING);
  ------------------
  |  |  194|  9.73k|#define NATIVE_MALLOC_PADDING   P2ALIGNMENT                                     /* per-page padding left for native malloc(3) see [1] */
  |  |  ------------------
  |  |  |  |  192|  9.73k|#define P2ALIGNMENT             (2 * sizeof (gsize))                            /* fits 2 pointers (assumed to be 2 * GLIB_SIZEOF_SIZE_T below) */
  |  |  ------------------
  ------------------
 1334|  9.73k|  errsv = errno;
 1335|  9.73k|  mem = aligned_memory;
 1336|       |
 1337|  9.73k|  if (!mem)
  ------------------
  |  Branch (1337:7): [True: 0, False: 9.73k]
  ------------------
 1338|      0|    {
 1339|      0|      const gchar *syserr = strerror (errsv);
 1340|      0|      mem_error ("failed to allocate %u bytes (alignment: %u): %s\n",
 1341|      0|                 (guint) (page_size - NATIVE_MALLOC_PADDING), (guint) page_size, syserr);
  ------------------
  |  |  194|      0|#define NATIVE_MALLOC_PADDING   P2ALIGNMENT                                     /* per-page padding left for native malloc(3) see [1] */
  |  |  ------------------
  |  |  |  |  192|      0|#define P2ALIGNMENT             (2 * sizeof (gsize))                            /* fits 2 pointers (assumed to be 2 * GLIB_SIZEOF_SIZE_T below) */
  |  |  ------------------
  ------------------
 1342|      0|    }
 1343|       |  /* mask page address */
 1344|  9.73k|  addr = ((gsize) mem / page_size) * page_size;
 1345|       |  /* assert alignment */
 1346|  9.73k|  mem_assert (aligned_memory == (gpointer) addr);
  ------------------
  |  |  216|  9.73k|#define mem_assert(cond)    do { if (G_LIKELY (cond)) ; else mem_error ("assertion failed: %s", #cond); } while (0)
  |  |  ------------------
  |  |  |  | 1186|  9.73k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  9.73k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  9.73k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  9.73k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  9.73k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 9.73k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  9.73k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  9.73k|   else                                         \
  |  |  |  |  |  | 1183|  9.73k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  9.73k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  9.73k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 9.73k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (216:114): [Folded, False: 9.73k]
  |  |  ------------------
  ------------------
 1347|       |  /* basic slab info setup */
 1348|  9.73k|  sinfo = (SlabInfo*) (mem + page_size - SLAB_INFO_SIZE);
  ------------------
  |  |  195|  9.73k|#define SLAB_INFO_SIZE          P2ALIGN (sizeof (SlabInfo) + NATIVE_MALLOC_PADDING)
  |  |  ------------------
  |  |  |  |  209|  9.73k|#define P2ALIGN(size)   (((size) + 0xf) & ~(gsize) 0xf)
  |  |  ------------------
  ------------------
 1349|  9.73k|  sinfo->n_allocated = 0;
 1350|  9.73k|  sinfo->chunks = NULL;
 1351|       |  /* figure cache colorization */
 1352|  9.73k|  n_chunks = ((guint8*) sinfo - mem) / chunk_size;
 1353|  9.73k|  padding = ((guint8*) sinfo - mem) - n_chunks * chunk_size;
 1354|  9.73k|  if (padding)
  ------------------
  |  Branch (1354:7): [True: 4.66k, False: 5.07k]
  ------------------
 1355|  4.66k|    {
 1356|  4.66k|      color = (local_allocator->color_accu * P2ALIGNMENT) % padding;
  ------------------
  |  |  192|  4.66k|#define P2ALIGNMENT             (2 * sizeof (gsize))                            /* fits 2 pointers (assumed to be 2 * GLIB_SIZEOF_SIZE_T below) */
  ------------------
 1357|  4.66k|      local_allocator->color_accu += local_allocator->config.color_increment;
 1358|  4.66k|    }
 1359|       |  /* add chunks to free list */
 1360|  9.73k|  chunk = (ChunkLink*) (mem + color);
 1361|  9.73k|  sinfo->chunks = chunk;
 1362|   111k|  for (i = 0; i < n_chunks - 1; i++)
  ------------------
  |  Branch (1362:15): [True: 102k, False: 9.73k]
  ------------------
 1363|   102k|    {
 1364|   102k|      chunk->next = (ChunkLink*) ((guint8*) chunk + chunk_size);
 1365|   102k|      chunk = chunk->next;
 1366|   102k|    }
 1367|  9.73k|  chunk->next = NULL;   /* last chunk */
 1368|       |  /* add slab to slab ring */
 1369|  9.73k|  allocator_slab_stack_push (local_allocator, ix, sinfo);
 1370|  9.73k|}
gslice.c:allocator_aligned_page_size:
 1311|  27.4k|{
 1312|  27.4k|  gsize val = (gsize) 1 << g_bit_storage (n_bytes - 1);
  ------------------
  |  |  376|  27.4k|#define g_bit_storage(number)        g_bit_storage_impl(number)
  ------------------
 1313|  27.4k|  val = MAX (val, local_allocator->min_page_size);
  ------------------
  |  |  888|  27.4k|#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (888:21): [True: 27.4k, False: 0]
  |  |  ------------------
  ------------------
 1314|  27.4k|  return val;
 1315|  27.4k|}
gslice.c:allocator_memalign:
 1457|  9.73k|{
 1458|  9.73k|  gpointer aligned_memory = NULL;
 1459|  9.73k|  gint err = ENOMEM;
 1460|  9.73k|#if     HAVE_POSIX_MEMALIGN
 1461|  9.73k|  err = posix_memalign (&aligned_memory, alignment, memsize);
 1462|       |#elif   HAVE_MEMALIGN
 1463|       |  errno = 0;
 1464|       |  aligned_memory = memalign (alignment, memsize);
 1465|       |  err = errno;
 1466|       |#elif   HAVE_VALLOC
 1467|       |  errno = 0;
 1468|       |  aligned_memory = valloc (memsize);
 1469|       |  err = errno;
 1470|       |#else
 1471|       |  /* simplistic non-freeing page allocator */
 1472|       |  mem_assert (alignment == sys_page_size);
 1473|       |  mem_assert (memsize <= sys_page_size);
 1474|       |  if (!compat_valloc_trash)
 1475|       |    {
 1476|       |      const guint n_pages = 16;
 1477|       |      guint8 *mem = malloc (n_pages * sys_page_size);
 1478|       |      err = errno;
 1479|       |      if (mem)
 1480|       |        {
 1481|       |          gint i = n_pages;
 1482|       |          guint8 *amem = (guint8*) ALIGN ((gsize) mem, sys_page_size);
 1483|       |          if (amem != mem)
 1484|       |            i--;        /* mem wasn't page aligned */
 1485|       |          G_GNUC_BEGIN_IGNORE_DEPRECATIONS
 1486|       |          while (--i >= 0)
 1487|       |            g_trash_stack_push (&compat_valloc_trash, amem + i * sys_page_size);
 1488|       |          G_GNUC_END_IGNORE_DEPRECATIONS
 1489|       |        }
 1490|       |    }
 1491|       |  G_GNUC_BEGIN_IGNORE_DEPRECATIONS
 1492|       |  aligned_memory = g_trash_stack_pop (&compat_valloc_trash);
 1493|       |  G_GNUC_END_IGNORE_DEPRECATIONS
 1494|       |#endif
 1495|  9.73k|  if (!aligned_memory)
  ------------------
  |  Branch (1495:7): [True: 0, False: 9.73k]
  ------------------
 1496|  9.73k|    errno = err;
 1497|  9.73k|  return aligned_memory;
 1498|  9.73k|}
gslice.c:allocator_slab_stack_push:
 1290|  11.8k|{
 1291|       |  /* insert slab at slab ring head */
 1292|  11.8k|  if (!local_allocator->slab_stack[ix])
  ------------------
  |  Branch (1292:7): [True: 8, False: 11.8k]
  ------------------
 1293|      8|    {
 1294|      8|      sinfo->next = sinfo;
 1295|      8|      sinfo->prev = sinfo;
 1296|      8|    }
 1297|  11.8k|  else
 1298|  11.8k|    {
 1299|  11.8k|      SlabInfo *next = local_allocator->slab_stack[ix], *prev = next->prev;
 1300|  11.8k|      next->prev = sinfo;
 1301|  11.8k|      prev->next = sinfo;
 1302|  11.8k|      sinfo->next = next;
 1303|  11.8k|      sinfo->prev = prev;
 1304|  11.8k|    }
 1305|  11.8k|  local_allocator->slab_stack[ix] = sinfo;
 1306|  11.8k|}
gslice.c:slab_allocator_free_chunk:
 1393|  17.6k|{
 1394|  17.6k|  ChunkLink *chunk;
 1395|  17.6k|  gboolean was_empty;
 1396|  17.6k|  guint ix = SLAB_INDEX (allocator, chunk_size);
  ------------------
  |  |  201|  17.6k|#define SLAB_INDEX(al, asize)   ((asize) / P2ALIGNMENT - 1)                     /* asize must be P2ALIGNMENT aligned */
  |  |  ------------------
  |  |  |  |  192|  17.6k|#define P2ALIGNMENT             (2 * sizeof (gsize))                            /* fits 2 pointers (assumed to be 2 * GLIB_SIZEOF_SIZE_T below) */
  |  |  ------------------
  ------------------
 1397|  17.6k|  gsize page_size = allocator_aligned_page_size (allocator, SLAB_BPAGE_SIZE (allocator, chunk_size));
  ------------------
  |  |  203|  17.6k|#define SLAB_BPAGE_SIZE(al,csz) (8 * (csz) + SLAB_INFO_SIZE)
  |  |  ------------------
  |  |  |  |  195|  17.6k|#define SLAB_INFO_SIZE          P2ALIGN (sizeof (SlabInfo) + NATIVE_MALLOC_PADDING)
  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  17.6k|#define P2ALIGN(size)   (((size) + 0xf) & ~(gsize) 0xf)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1398|  17.6k|  gsize addr = ((gsize) mem / page_size) * page_size;
 1399|       |  /* mask page address */
 1400|  17.6k|  guint8 *page = (guint8*) addr;
 1401|  17.6k|  SlabInfo *sinfo = (SlabInfo*) (page + page_size - SLAB_INFO_SIZE);
  ------------------
  |  |  195|  17.6k|#define SLAB_INFO_SIZE          P2ALIGN (sizeof (SlabInfo) + NATIVE_MALLOC_PADDING)
  |  |  ------------------
  |  |  |  |  209|  17.6k|#define P2ALIGN(size)   (((size) + 0xf) & ~(gsize) 0xf)
  |  |  ------------------
  ------------------
 1402|       |  /* assert valid chunk count */
 1403|  17.6k|  mem_assert (sinfo->n_allocated > 0);
  ------------------
  |  |  216|  17.6k|#define mem_assert(cond)    do { if (G_LIKELY (cond)) ; else mem_error ("assertion failed: %s", #cond); } while (0)
  |  |  ------------------
  |  |  |  | 1186|  17.6k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  17.6k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  17.6k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  17.6k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  17.6k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 17.6k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  17.6k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  17.6k|   else                                         \
  |  |  |  |  |  | 1183|  17.6k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  17.6k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  17.6k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 17.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (216:114): [Folded, False: 17.6k]
  |  |  ------------------
  ------------------
 1404|       |  /* add chunk to free list */
 1405|  17.6k|  was_empty = sinfo->chunks == NULL;
 1406|  17.6k|  chunk = (ChunkLink*) mem;
 1407|  17.6k|  chunk->next = sinfo->chunks;
 1408|  17.6k|  sinfo->chunks = chunk;
 1409|  17.6k|  sinfo->n_allocated--;
 1410|       |  /* keep slab ring partially sorted, empty slabs at end */
 1411|  17.6k|  if (was_empty)
  ------------------
  |  Branch (1411:7): [True: 2.11k, False: 15.5k]
  ------------------
 1412|  2.11k|    {
 1413|       |      /* unlink slab */
 1414|  2.11k|      SlabInfo *next = sinfo->next, *prev = sinfo->prev;
 1415|  2.11k|      next->prev = prev;
 1416|  2.11k|      prev->next = next;
 1417|  2.11k|      if (allocator->slab_stack[ix] == sinfo)
  ------------------
  |  Branch (1417:11): [True: 0, False: 2.11k]
  ------------------
 1418|      0|        allocator->slab_stack[ix] = next == sinfo ? NULL : next;
  ------------------
  |  Branch (1418:37): [True: 0, False: 0]
  ------------------
 1419|       |      /* insert slab at head */
 1420|  2.11k|      allocator_slab_stack_push (allocator, ix, sinfo);
 1421|  2.11k|    }
 1422|       |  /* eagerly free complete unused slabs */
 1423|  17.6k|  if (!sinfo->n_allocated)
  ------------------
  |  Branch (1423:7): [True: 1.02k, False: 16.6k]
  ------------------
 1424|  1.02k|    {
 1425|       |      /* unlink slab */
 1426|  1.02k|      SlabInfo *next = sinfo->next, *prev = sinfo->prev;
 1427|  1.02k|      next->prev = prev;
 1428|  1.02k|      prev->next = next;
 1429|  1.02k|      if (allocator->slab_stack[ix] == sinfo)
  ------------------
  |  Branch (1429:11): [True: 83, False: 944]
  ------------------
 1430|     83|        allocator->slab_stack[ix] = next == sinfo ? NULL : next;
  ------------------
  |  Branch (1430:37): [True: 0, False: 83]
  ------------------
 1431|       |      /* free slab */
 1432|  1.02k|      allocator_memfree (page_size, page);
 1433|  1.02k|    }
 1434|  17.6k|}
gslice.c:allocator_memfree:
 1503|  1.02k|{
 1504|  1.02k|#if     HAVE_POSIX_MEMALIGN || HAVE_MEMALIGN || HAVE_VALLOC
 1505|  1.02k|  free (mem);
 1506|       |#else
 1507|       |  mem_assert (memsize <= sys_page_size);
 1508|       |  G_GNUC_BEGIN_IGNORE_DEPRECATIONS
 1509|       |  g_trash_stack_push (&compat_valloc_trash, mem);
 1510|       |  G_GNUC_END_IGNORE_DEPRECATIONS
 1511|       |#endif
 1512|  1.02k|}

g_slist_free:
  150|   187M|{
  151|       |  g_slice_free_chain (GSList, list, next);
  ------------------
  |  |   86|   187M|#define g_slice_free_chain(type, mem_chain, next)               \
  |  |  ------------------
  |  |  |  |  940|   187M|#define G_STMT_START  do
  |  |  ------------------
  |  |   87|   187M|G_STMT_START {                                                  \
  |  |   88|   187M|  if (1) g_slice_free_chain_with_offset (sizeof (type),		\
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 187M, Folded]
  |  |  ------------------
  |  |   89|   187M|                 (mem_chain), G_STRUCT_OFFSET (type, next)); 	\
  |  |  ------------------
  |  |  |  |  919|   187M|      ((glong) offsetof (struct_type, member))
  |  |  ------------------
  |  |   90|   187M|  else   (void) ((type*) 0 == (mem_chain));			\
  |  |   91|   187M|} G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   187M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 187M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  152|   187M|}
g_slist_free_1:
  170|  6.22M|{
  171|  6.22M|  _g_slist_free1 (list);
  ------------------
  |  |  113|  6.22M|#define _g_slist_free1(slist)   g_slice_free (GSList, slist)
  |  |  ------------------
  |  |  |  |   81|  6.22M|#define g_slice_free(type, mem)                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  940|  6.22M|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   82|  6.22M|G_STMT_START {                                                  \
  |  |  |  |   83|  6.22M|  if (1) g_slice_free1 (sizeof (type), (mem));			\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (83:7): [True: 6.22M, Folded]
  |  |  |  |  ------------------
  |  |  |  |   84|  6.22M|  else   (void) ((type*) 0 == (mem)); 				\
  |  |  |  |   85|  6.22M|} G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  948|  6.22M|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (948:30): [Folded, False: 6.22M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  172|  6.22M|}
g_slist_free_full:
  199|  5.20k|{
  200|       |  g_slist_foreach (list, (GFunc) free_func, NULL);
  201|  5.20k|  g_slist_free (list);
  202|  5.20k|}
g_slist_append:
  237|  6.41M|{
  238|  6.41M|  GSList *new_list;
  239|  6.41M|  GSList *last;
  240|       |
  241|  6.41M|  new_list = _g_slist_alloc ();
  ------------------
  |  |  112|  6.41M|#define _g_slist_alloc()        g_slice_new (GSList)
  |  |  ------------------
  |  |  |  |   48|  6.41M|#define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
  |  |  ------------------
  ------------------
  242|  6.41M|  new_list->data = data;
  243|  6.41M|  new_list->next = NULL;
  244|       |
  245|  6.41M|  if (list)
  ------------------
  |  Branch (245:7): [True: 6.06M, False: 355k]
  ------------------
  246|  6.06M|    {
  247|  6.06M|      last = g_slist_last (list);
  248|       |      /* g_assert (last != NULL); */
  249|  6.06M|      last->next = new_list;
  250|       |
  251|  6.06M|      return list;
  252|  6.06M|    }
  253|   355k|  else
  254|   355k|    return new_list;
  255|  6.41M|}
g_slist_prepend:
  279|   665M|{
  280|   665M|  GSList *new_list;
  281|       |
  282|   665M|  new_list = _g_slist_alloc ();
  ------------------
  |  |  112|   665M|#define _g_slist_alloc()        g_slice_new (GSList)
  |  |  ------------------
  |  |  |  |   48|   665M|#define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
  |  |  ------------------
  ------------------
  283|   665M|  new_list->data = data;
  284|   665M|  new_list->next = list;
  285|       |
  286|   665M|  return new_list;
  287|   665M|}
g_slist_insert:
  306|  49.9k|{
  307|  49.9k|  GSList *prev_list;
  308|  49.9k|  GSList *tmp_list;
  309|  49.9k|  GSList *new_list;
  310|       |
  311|  49.9k|  if (position < 0)
  ------------------
  |  Branch (311:7): [True: 0, False: 49.9k]
  ------------------
  312|      0|    return g_slist_append (list, data);
  313|  49.9k|  else if (position == 0)
  ------------------
  |  Branch (313:12): [True: 3.10k, False: 46.8k]
  ------------------
  314|  3.10k|    return g_slist_prepend (list, data);
  315|       |
  316|  46.8k|  new_list = _g_slist_alloc ();
  ------------------
  |  |  112|  46.8k|#define _g_slist_alloc()        g_slice_new (GSList)
  |  |  ------------------
  |  |  |  |   48|  46.8k|#define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
  |  |  ------------------
  ------------------
  317|  46.8k|  new_list->data = data;
  318|       |
  319|  46.8k|  if (!list)
  ------------------
  |  Branch (319:7): [True: 0, False: 46.8k]
  ------------------
  320|      0|    {
  321|      0|      new_list->next = NULL;
  322|      0|      return new_list;
  323|      0|    }
  324|       |
  325|  46.8k|  prev_list = NULL;
  326|  46.8k|  tmp_list = list;
  327|       |
  328|  15.3M|  while ((position-- > 0) && tmp_list)
  ------------------
  |  Branch (328:10): [True: 15.3M, False: 46.8k]
  |  Branch (328:30): [True: 15.3M, False: 0]
  ------------------
  329|  15.3M|    {
  330|  15.3M|      prev_list = tmp_list;
  331|  15.3M|      tmp_list = tmp_list->next;
  332|  15.3M|    }
  333|       |
  334|  46.8k|  new_list->next = prev_list->next;
  335|  46.8k|  prev_list->next = new_list;
  336|       |
  337|  46.8k|  return list;
  338|  46.8k|}
g_slist_remove:
  455|  6.58M|{
  456|  6.58M|  return _g_slist_remove_data (list, data, FALSE);
  ------------------
  |  |  880|  6.58M|#define	FALSE	(0)
  ------------------
  457|  6.58M|}
g_slist_remove_link:
  522|      4|{
  523|      4|  return _g_slist_remove_link (list, link_);
  524|      4|}
g_slist_delete_link:
  546|    238|{
  547|    238|  list = _g_slist_remove_link (list, link_);
  548|    238|  _g_slist_free1 (link_);
  ------------------
  |  |  113|    238|#define _g_slist_free1(slist)   g_slice_free (GSList, slist)
  |  |  ------------------
  |  |  |  |   81|    238|#define g_slice_free(type, mem)                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  940|    238|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   82|    238|G_STMT_START {                                                  \
  |  |  |  |   83|    238|  if (1) g_slice_free1 (sizeof (type), (mem));			\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (83:7): [True: 238, Folded]
  |  |  |  |  ------------------
  |  |  |  |   84|    238|  else   (void) ((type*) 0 == (mem)); 				\
  |  |  |  |   85|    238|} G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  948|    238|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (948:30): [Folded, False: 238]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|       |
  550|    238|  return list;
  551|    238|}
g_slist_copy:
  568|   183M|{
  569|   183M|  return g_slist_copy_deep (list, NULL, NULL);
  570|   183M|}
g_slist_copy_deep:
  605|   183M|{
  606|   183M|  GSList *new_list = NULL;
  607|       |
  608|   183M|  if (list)
  ------------------
  |  Branch (608:7): [True: 177M, False: 5.53M]
  ------------------
  609|   177M|    {
  610|   177M|      GSList *last;
  611|       |
  612|   177M|      new_list = _g_slist_alloc ();
  ------------------
  |  |  112|   177M|#define _g_slist_alloc()        g_slice_new (GSList)
  |  |  ------------------
  |  |  |  |   48|   177M|#define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
  |  |  ------------------
  ------------------
  613|   177M|      if (func)
  ------------------
  |  Branch (613:11): [True: 0, False: 177M]
  ------------------
  614|      0|        new_list->data = func (list->data, user_data);
  615|   177M|      else
  616|   177M|        new_list->data = list->data;
  617|   177M|      last = new_list;
  618|   177M|      list = list->next;
  619|   198M|      while (list)
  ------------------
  |  Branch (619:14): [True: 20.5M, False: 177M]
  ------------------
  620|  20.5M|        {
  621|  20.5M|          last->next = _g_slist_alloc ();
  ------------------
  |  |  112|  20.5M|#define _g_slist_alloc()        g_slice_new (GSList)
  |  |  ------------------
  |  |  |  |   48|  20.5M|#define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
  |  |  ------------------
  ------------------
  622|  20.5M|          last = last->next;
  623|  20.5M|          if (func)
  ------------------
  |  Branch (623:15): [True: 0, False: 20.5M]
  ------------------
  624|      0|            last->data = func (list->data, user_data);
  625|  20.5M|          else
  626|  20.5M|            last->data = list->data;
  627|  20.5M|          list = list->next;
  628|  20.5M|        }
  629|   177M|      last->next = NULL;
  630|   177M|    }
  631|       |
  632|   183M|  return new_list;
  633|   183M|}
g_slist_nth:
  674|  5.17k|{
  675|  5.17k|  while (n-- > 0 && list)
  ------------------
  |  Branch (675:10): [True: 0, False: 5.17k]
  |  Branch (675:21): [True: 0, False: 0]
  ------------------
  676|      0|    list = list->next;
  677|       |
  678|  5.17k|  return list;
  679|  5.17k|}
g_slist_find:
  715|   183M|{
  716|   183M|  while (list)
  ------------------
  |  Branch (716:10): [True: 183M, False: 224k]
  ------------------
  717|   183M|    {
  718|   183M|      if (list->data == data)
  ------------------
  |  Branch (718:11): [True: 183M, False: 43.2k]
  ------------------
  719|   183M|        break;
  720|  43.2k|      list = list->next;
  721|  43.2k|    }
  722|       |
  723|   183M|  return list;
  724|   183M|}
g_slist_find_custom:
  747|  2.30k|{
  748|  2.30k|  g_return_val_if_fail (func != NULL, list);
  ------------------
  |  |  652|  2.30k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  2.30k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  2.30k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  2.30k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  2.30k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  2.30k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  2.30k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  2.30k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2.30k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  2.30k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  2.30k|   else                                         \
  |  |  |  |  |  | 1183|  2.30k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  2.30k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  2.30k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2.30k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  2.30k|      { } \
  |  |  655|  2.30k|    else \
  |  |  656|  2.30k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  2.30k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  2.30k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2.30k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|       |
  750|  14.5k|  while (list)
  ------------------
  |  Branch (750:10): [True: 12.5k, False: 2.06k]
  ------------------
  751|  12.5k|    {
  752|  12.5k|      if (! func (list->data, data))
  ------------------
  |  Branch (752:11): [True: 238, False: 12.2k]
  ------------------
  753|    238|        return list;
  754|  12.2k|      list = list->next;
  755|  12.2k|    }
  756|       |
  757|  2.06k|  return NULL;
  758|  2.30k|}
g_slist_index:
  803|   462k|{
  804|   462k|  gint i;
  805|       |
  806|   462k|  i = 0;
  807|   462k|  while (list)
  ------------------
  |  Branch (807:10): [True: 462k, False: 0]
  ------------------
  808|   462k|    {
  809|   462k|      if (list->data == data)
  ------------------
  |  Branch (809:11): [True: 462k, False: 362]
  ------------------
  810|   462k|        return i;
  811|    362|      i++;
  812|    362|      list = list->next;
  813|    362|    }
  814|       |
  815|      0|  return -1;
  816|   462k|}
g_slist_last:
  831|  6.06M|{
  832|  6.06M|  if (list)
  ------------------
  |  Branch (832:7): [True: 6.06M, False: 0]
  ------------------
  833|  6.06M|    {
  834|  1.51G|      while (list->next)
  ------------------
  |  Branch (834:14): [True: 1.51G, False: 6.06M]
  ------------------
  835|  1.51G|        list = list->next;
  836|  6.06M|    }
  837|       |
  838|  6.06M|  return list;
  839|  6.06M|}
g_slist_length:
  855|   632k|{
  856|   632k|  guint length;
  857|       |
  858|   632k|  length = 0;
  859|  9.29M|  while (list)
  ------------------
  |  Branch (859:10): [True: 8.66M, False: 632k]
  ------------------
  860|  8.66M|    {
  861|  8.66M|      length++;
  862|  8.66M|      list = list->next;
  863|  8.66M|    }
  864|       |
  865|   632k|  return length;
  866|   632k|}
g_slist_foreach:
  883|  84.7k|{
  884|   148k|  while (list)
  ------------------
  |  Branch (884:10): [True: 63.3k, False: 84.7k]
  ------------------
  885|  63.3k|    {
  886|  63.3k|      GSList *next = list->next;
  887|  63.3k|      (*func) (list->data, user_data);
  888|  63.3k|      list = next;
  889|  63.3k|    }
  890|  84.7k|}
g_slist_sort_with_data:
 1088|  5.26k|{
 1089|  5.26k|  return g_slist_sort_real (list, (GFunc) compare_func, user_data);
 1090|  5.26k|}
gslist.c:_g_slist_remove_data:
  419|  6.58M|{
  420|  6.58M|  GSList *tmp = NULL;
  421|  6.58M|  GSList **previous_ptr = &list;
  422|       |
  423|   539M|  while (*previous_ptr)
  ------------------
  |  Branch (423:10): [True: 538M, False: 360k]
  ------------------
  424|   538M|    {
  425|   538M|      tmp = *previous_ptr;
  426|   538M|      if (tmp->data == data)
  ------------------
  |  Branch (426:11): [True: 6.22M, False: 532M]
  ------------------
  427|  6.22M|        {
  428|  6.22M|          *previous_ptr = tmp->next;
  429|  6.22M|          g_slist_free_1 (tmp);
  430|  6.22M|          if (!all)
  ------------------
  |  Branch (430:15): [True: 6.22M, False: 0]
  ------------------
  431|  6.22M|            break;
  432|  6.22M|        }
  433|   532M|      else
  434|   532M|        {
  435|   532M|          previous_ptr = &tmp->next;
  436|   532M|        }
  437|   538M|    }
  438|       |
  439|  6.58M|  return list;
  440|  6.58M|}
gslist.c:_g_slist_remove_link:
  481|    242|{
  482|    242|  GSList *tmp = NULL;
  483|    242|  GSList **previous_ptr = &list;
  484|       |
  485|    330|  while (*previous_ptr)
  ------------------
  |  Branch (485:10): [True: 330, False: 0]
  ------------------
  486|    330|    {
  487|    330|      tmp = *previous_ptr;
  488|    330|      if (tmp == link)
  ------------------
  |  Branch (488:11): [True: 242, False: 88]
  ------------------
  489|    242|        {
  490|    242|          *previous_ptr = tmp->next;
  491|    242|          tmp->next = NULL;
  492|    242|          break;
  493|    242|        }
  494|       |
  495|     88|      previous_ptr = &tmp->next;
  496|     88|    }
  497|       |
  498|    242|  return list;
  499|    242|}
gslist.c:g_slist_sort_real:
 1027|   106k|{
 1028|   106k|  GSList *l1, *l2;
 1029|       |
 1030|   106k|  if (!list)
  ------------------
  |  Branch (1030:7): [True: 0, False: 106k]
  ------------------
 1031|      0|    return NULL;
 1032|   106k|  if (!list->next)
  ------------------
  |  Branch (1032:7): [True: 55.9k, False: 50.7k]
  ------------------
 1033|  55.9k|    return list;
 1034|       |
 1035|  50.7k|  l1 = list;
 1036|  50.7k|  l2 = list->next;
 1037|       |
 1038|   180k|  while ((l2 = l2->next) != NULL)
  ------------------
  |  Branch (1038:10): [True: 143k, False: 36.2k]
  ------------------
 1039|   143k|    {
 1040|   143k|      if ((l2 = l2->next) == NULL)
  ------------------
  |  Branch (1040:11): [True: 14.5k, False: 129k]
  ------------------
 1041|  14.5k|        break;
 1042|   129k|      l1=l1->next;
 1043|   129k|    }
 1044|  50.7k|  l2 = l1->next;
 1045|  50.7k|  l1->next = NULL;
 1046|       |
 1047|  50.7k|  return g_slist_sort_merge (g_slist_sort_real (list, compare_func, user_data),
 1048|  50.7k|                             g_slist_sort_real (l2, compare_func, user_data),
 1049|  50.7k|                             compare_func,
 1050|  50.7k|                             user_data);
 1051|   106k|}
gslist.c:g_slist_sort_merge:
  997|  50.7k|{
  998|  50.7k|  GSList list, *l;
  999|  50.7k|  gint cmp;
 1000|       |
 1001|  50.7k|  l=&list;
 1002|       |
 1003|   361k|  while (l1 && l2)
  ------------------
  |  Branch (1003:10): [True: 335k, False: 26.4k]
  |  Branch (1003:16): [True: 311k, False: 24.2k]
  ------------------
 1004|   311k|    {
 1005|   311k|      cmp = ((GCompareDataFunc) compare_func) (l1->data, l2->data, user_data);
 1006|       |
 1007|   311k|      if (cmp <= 0)
  ------------------
  |  Branch (1007:11): [True: 151k, False: 159k]
  ------------------
 1008|   151k|        {
 1009|   151k|          l=l->next=l1;
 1010|   151k|          l1=l1->next;
 1011|   151k|        }
 1012|   159k|      else
 1013|   159k|        {
 1014|   159k|          l=l->next=l2;
 1015|   159k|          l2=l2->next;
 1016|   159k|        }
 1017|   311k|    }
 1018|  50.7k|  l->next= l1 ? l1 : l2;
  ------------------
  |  Branch (1018:12): [True: 24.2k, False: 26.4k]
  ------------------
 1019|       |
 1020|  50.7k|  return list.next;
 1021|  50.7k|}

g_strdup:
  356|  16.8M|{
  357|  16.8M|  gchar *new_str;
  358|  16.8M|  gsize length;
  359|       |
  360|  16.8M|  if (str)
  ------------------
  |  Branch (360:7): [True: 15.9M, False: 939k]
  ------------------
  361|  15.9M|    {
  362|  15.9M|      length = strlen (str) + 1;
  363|  15.9M|      new_str = g_new (char, length);
  ------------------
  |  |  299|  15.9M|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  244|  15.9M|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  15.9M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|  15.9M|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|  15.9M|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|  15.9M|	  gpointer __p;						\
  |  |  |  |  248|  15.9M|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 15.9M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  249|  15.9M|	    __p = g_##func (__n);				\
  |  |  |  |  250|  15.9M|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      0|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      0|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      0|	  else							\
  |  |  |  |  254|      0|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|  15.9M|	  __p;							\
  |  |  |  |  256|  15.9M|	}))
  |  |  ------------------
  ------------------
  364|  15.9M|      memcpy (new_str, str, length);
  365|  15.9M|    }
  366|   939k|  else
  367|   939k|    new_str = NULL;
  368|       |
  369|  16.8M|  return new_str;
  370|  16.8M|}
g_memdup2:
  421|   188k|{
  422|   188k|  gpointer new_mem;
  423|       |
  424|   188k|  if (mem && byte_size != 0)
  ------------------
  |  Branch (424:7): [True: 188k, False: 0]
  |  Branch (424:14): [True: 188k, False: 0]
  ------------------
  425|   188k|    {
  426|   188k|      new_mem = g_malloc (byte_size);
  427|   188k|      memcpy (new_mem, mem, byte_size);
  428|   188k|    }
  429|      0|  else
  430|      0|    new_mem = NULL;
  431|       |
  432|   188k|  return new_mem;
  433|   188k|}
g_strndup:
  455|  3.78M|{
  456|  3.78M|  gchar *new_str;
  457|       |
  458|  3.78M|  if (str)
  ------------------
  |  Branch (458:7): [True: 3.78M, False: 0]
  ------------------
  459|  3.78M|    {
  460|  3.78M|      new_str = g_new (gchar, n + 1);
  ------------------
  |  |  299|  3.78M|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  244|  3.78M|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  3.78M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|  3.78M|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|  3.78M|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|  3.78M|	  gpointer __p;						\
  |  |  |  |  248|  3.78M|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 3.78M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  249|  3.78M|	    __p = g_##func (__n);				\
  |  |  |  |  250|  3.78M|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      0|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      0|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      0|	  else							\
  |  |  |  |  254|      0|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|  3.78M|	  __p;							\
  |  |  |  |  256|  3.78M|	}))
  |  |  ------------------
  ------------------
  461|  3.78M|      strncpy (new_str, str, n);
  462|  3.78M|      new_str[n] = '\0';
  463|  3.78M|    }
  464|      0|  else
  465|      0|    new_str = NULL;
  466|       |
  467|  3.78M|  return new_str;
  468|  3.78M|}
g_strnfill:
  483|  61.6k|{
  484|  61.6k|  gchar *str;
  485|       |
  486|  61.6k|  str = g_new (gchar, length + 1);
  ------------------
  |  |  299|  61.6k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  244|  61.6k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  61.6k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|  61.6k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|  61.6k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|  61.6k|	  gpointer __p;						\
  |  |  |  |  248|  61.6k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 61.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  249|  61.6k|	    __p = g_##func (__n);				\
  |  |  |  |  250|  61.6k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      0|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      0|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      0|	  else							\
  |  |  |  |  254|      0|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|  61.6k|	  __p;							\
  |  |  |  |  256|  61.6k|	}))
  |  |  ------------------
  ------------------
  487|  61.6k|  memset (str, (guchar)fill_char, length);
  488|  61.6k|  str[length] = '\0';
  489|       |
  490|  61.6k|  return str;
  491|  61.6k|}
g_stpcpy:
  508|  8.13M|{
  509|  8.13M|#ifdef HAVE_STPCPY
  510|  8.13M|  g_return_val_if_fail (dest != NULL, NULL);
  ------------------
  |  |  652|  8.13M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  8.13M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  8.13M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  8.13M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  8.13M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  8.13M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  8.13M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  8.13M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 8.13M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  8.13M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  8.13M|   else                                         \
  |  |  |  |  |  | 1183|  8.13M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  8.13M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  8.13M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 8.13M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  8.13M|      { } \
  |  |  655|  8.13M|    else \
  |  |  656|  8.13M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  8.13M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  8.13M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 8.13M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|  8.13M|  g_return_val_if_fail (src != NULL, NULL);
  ------------------
  |  |  652|  8.13M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  8.13M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  8.13M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  8.13M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  8.13M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  8.13M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  8.13M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  8.13M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 8.13M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  8.13M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  8.13M|   else                                         \
  |  |  |  |  |  | 1183|  8.13M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  8.13M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  8.13M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 8.13M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  8.13M|      { } \
  |  |  655|  8.13M|    else \
  |  |  656|  8.13M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  8.13M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  8.13M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 8.13M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  512|  8.13M|  return stpcpy (dest, src);
  513|       |#else
  514|       |  gchar *d = dest;
  515|       |  const gchar *s = src;
  516|       |
  517|       |  g_return_val_if_fail (dest != NULL, NULL);
  518|       |  g_return_val_if_fail (src != NULL, NULL);
  519|       |  do
  520|       |    *d++ = *s;
  521|       |  while (*s++ != '\0');
  522|       |
  523|       |  return d - 1;
  524|       |#endif
  525|  8.13M|}
g_strdup_vprintf:
  550|  2.64M|{
  551|  2.64M|  gchar *string = NULL;
  552|       |
  553|  2.64M|  g_vasprintf (&string, format, args);
  554|       |
  555|  2.64M|  return string;
  556|  2.64M|}
g_strdup_printf:
  578|  1.24M|{
  579|  1.24M|  gchar *buffer;
  580|  1.24M|  va_list args;
  581|       |
  582|  1.24M|  va_start (args, format);
  583|  1.24M|  buffer = g_strdup_vprintf (format, args);
  584|  1.24M|  va_end (args);
  585|       |
  586|  1.24M|  return buffer;
  587|  1.24M|}
g_strconcat:
  608|  4.48M|{
  609|  4.48M|  gsize   l;
  610|  4.48M|  va_list args;
  611|  4.48M|  gchar   *s;
  612|  4.48M|  gchar   *concat;
  613|  4.48M|  gchar   *ptr;
  614|       |
  615|  4.48M|  if (!string1)
  ------------------
  |  Branch (615:7): [True: 0, False: 4.48M]
  ------------------
  616|      0|    return NULL;
  617|       |
  618|  4.48M|  l = 1 + strlen (string1);
  619|  4.48M|  va_start (args, string1);
  620|  4.48M|  s = va_arg (args, gchar*);
  621|  8.13M|  while (s)
  ------------------
  |  Branch (621:10): [True: 3.65M, False: 4.48M]
  ------------------
  622|  3.65M|    {
  623|  3.65M|      l += strlen (s);
  624|  3.65M|      s = va_arg (args, gchar*);
  625|  3.65M|    }
  626|  4.48M|  va_end (args);
  627|       |
  628|  4.48M|  concat = g_new (gchar, l);
  ------------------
  |  |  299|  4.48M|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  244|  4.48M|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  4.48M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|  4.48M|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|  4.48M|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|  4.48M|	  gpointer __p;						\
  |  |  |  |  248|  4.48M|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 4.48M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  249|  4.48M|	    __p = g_##func (__n);				\
  |  |  |  |  250|  4.48M|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      0|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      0|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      0|	  else							\
  |  |  |  |  254|      0|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|  4.48M|	  __p;							\
  |  |  |  |  256|  4.48M|	}))
  |  |  ------------------
  ------------------
  629|  4.48M|  ptr = concat;
  630|       |
  631|  4.48M|  ptr = g_stpcpy (ptr, string1);
  632|  4.48M|  va_start (args, string1);
  633|  4.48M|  s = va_arg (args, gchar*);
  634|  8.13M|  while (s)
  ------------------
  |  Branch (634:10): [True: 3.65M, False: 4.48M]
  ------------------
  635|  3.65M|    {
  636|  3.65M|      ptr = g_stpcpy (ptr, s);
  637|  3.65M|      s = va_arg (args, gchar*);
  638|  3.65M|    }
  639|  4.48M|  va_end (args);
  640|       |
  641|  4.48M|  return concat;
  642|  4.48M|}
g_strerror:
 1320|  48.8k|{
 1321|  48.8k|  static GHashTable *errors;
 1322|  48.8k|  G_LOCK_DEFINE_STATIC (errors);
  ------------------
  |  |  112|  48.8k|#define G_LOCK_DEFINE_STATIC(name)    static G_LOCK_DEFINE (name)
  ------------------
 1323|  48.8k|  const gchar *msg;
 1324|  48.8k|  gint saved_errno = errno;
 1325|       |
 1326|  48.8k|  G_LOCK (errors);
  ------------------
  |  |  137|  48.8k|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|  48.8k|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
 1327|  48.8k|  if (errors)
  ------------------
  |  Branch (1327:7): [True: 48.8k, False: 1]
  ------------------
 1328|  48.8k|    msg = g_hash_table_lookup (errors, GINT_TO_POINTER (errnum));
  ------------------
  |  |  103|  48.8k|#define GINT_TO_POINTER(i)	((gpointer) (glong) (i))
  ------------------
 1329|      1|  else
 1330|      1|    {
 1331|      1|      errors = g_hash_table_new (NULL, NULL);
 1332|      1|      msg = NULL;
 1333|      1|    }
 1334|       |
 1335|  48.8k|  if (!msg)
  ------------------
  |  Branch (1335:7): [True: 2, False: 48.8k]
  ------------------
 1336|      2|    {
 1337|      2|      gchar buf[1024];
 1338|      2|      GError *error = NULL;
 1339|       |#if defined(HAVE_STRERROR_R) && !defined(STRERROR_R_CHAR_P)
 1340|       |      int ret;
 1341|       |#endif
 1342|       |
 1343|       |#if defined(G_OS_WIN32)
 1344|       |      strerror_s (buf, sizeof (buf), errnum);
 1345|       |      msg = buf;
 1346|       |#elif defined(HAVE_STRERROR_R)
 1347|       |      /* Match the condition in strerror_r(3) for glibc */
 1348|      2|#  if defined(STRERROR_R_CHAR_P)
 1349|      2|      msg = strerror_r (errnum, buf, sizeof (buf));
 1350|       |#  else
 1351|       |      ret = strerror_r (errnum, buf, sizeof (buf));
 1352|       |      if (ret == 0 || ret == EINVAL)
 1353|       |        msg = buf;
 1354|       |#  endif /* HAVE_STRERROR_R */
 1355|       |#else
 1356|       |      g_strlcpy (buf, strerror (errnum), sizeof (buf));
 1357|       |      msg = buf;
 1358|       |#endif
 1359|       |
 1360|      2|      if (!msg)
  ------------------
  |  Branch (1360:11): [True: 0, False: 2]
  ------------------
 1361|      0|        {
 1362|      0|          G_UNLOCK (errors);
  ------------------
  |  |  138|      0|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      0|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
 1363|       |
 1364|      0|          errno = saved_errno;
 1365|      0|          return msg;
 1366|      0|        }
 1367|       |
 1368|      2|      if (!g_get_console_charset (NULL))
  ------------------
  |  Branch (1368:11): [True: 2, False: 0]
  ------------------
 1369|      2|        {
 1370|      2|          msg = g_locale_to_utf8 (msg, -1, NULL, NULL, &error);
 1371|      2|          if (error)
  ------------------
  |  Branch (1371:15): [True: 0, False: 2]
  ------------------
 1372|      0|            g_print ("%s\n", error->message);
 1373|      2|        }
 1374|      0|      else if (msg == (const gchar *)buf)
  ------------------
  |  Branch (1374:16): [True: 0, False: 0]
  ------------------
 1375|      0|        msg = g_strdup (buf);
 1376|       |
 1377|      2|      g_hash_table_insert (errors, GINT_TO_POINTER (errnum), (char *) msg);
  ------------------
  |  |  103|      2|#define GINT_TO_POINTER(i)	((gpointer) (glong) (i))
  ------------------
 1378|      2|    }
 1379|  48.8k|  G_UNLOCK (errors);
  ------------------
  |  |  138|  48.8k|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|  48.8k|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
 1380|       |
 1381|       |  errno = saved_errno;
 1382|  48.8k|  return msg;
 1383|  48.8k|}
g_strlcpy:
 1478|  8.96k|{
 1479|  8.96k|  gchar *d = dest;
 1480|  8.96k|  const gchar *s = src;
 1481|  8.96k|  gsize n = dest_size;
 1482|       |
 1483|  8.96k|  g_return_val_if_fail (dest != NULL, 0);
  ------------------
  |  |  652|  8.96k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  8.96k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  8.96k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  8.96k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  8.96k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  8.96k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  8.96k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  8.96k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 8.96k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  8.96k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  8.96k|   else                                         \
  |  |  |  |  |  | 1183|  8.96k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  8.96k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  8.96k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 8.96k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  8.96k|      { } \
  |  |  655|  8.96k|    else \
  |  |  656|  8.96k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  8.96k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  8.96k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 8.96k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1484|  8.96k|  g_return_val_if_fail (src  != NULL, 0);
  ------------------
  |  |  652|  8.96k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  8.96k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  8.96k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  8.96k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  8.96k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  8.96k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  8.96k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  8.96k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 8.96k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  8.96k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  8.96k|   else                                         \
  |  |  |  |  |  | 1183|  8.96k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  8.96k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  8.96k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 8.96k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  8.96k|      { } \
  |  |  655|  8.96k|    else \
  |  |  656|  8.96k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  8.96k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  8.96k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 8.96k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1485|       |
 1486|       |  /* Copy as many bytes as will fit */
 1487|  8.96k|  if (n != 0 && --n != 0)
  ------------------
  |  Branch (1487:7): [True: 8.96k, False: 0]
  |  Branch (1487:17): [True: 8.96k, False: 0]
  ------------------
 1488|  8.96k|    do
 1489|  18.5k|      {
 1490|  18.5k|        gchar c = *s++;
 1491|       |
 1492|  18.5k|        *d++ = c;
 1493|  18.5k|        if (c == 0)
  ------------------
  |  Branch (1493:13): [True: 8.96k, False: 9.58k]
  ------------------
 1494|  8.96k|          break;
 1495|  18.5k|      }
 1496|  9.58k|    while (--n != 0);
  ------------------
  |  Branch (1496:12): [True: 9.58k, False: 0]
  ------------------
 1497|       |
 1498|       |  /* If not enough room in dest, add NUL and traverse rest of src */
 1499|  8.96k|  if (n == 0)
  ------------------
  |  Branch (1499:7): [True: 0, False: 8.96k]
  ------------------
 1500|      0|    {
 1501|      0|      if (dest_size != 0)
  ------------------
  |  Branch (1501:11): [True: 0, False: 0]
  ------------------
 1502|      0|        *d = 0;
 1503|      0|      while (*s++)
  ------------------
  |  Branch (1503:14): [True: 0, False: 0]
  ------------------
 1504|      0|        ;
 1505|      0|    }
 1506|       |
 1507|  8.96k|  return s - src - 1;  /* count does not include NUL */
 1508|  8.96k|}
g_ascii_strup:
 1617|     10|{
 1618|     10|  gchar *result, *s;
 1619|       |
 1620|     10|  g_return_val_if_fail (str != NULL, NULL);
  ------------------
  |  |  652|     10|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     10|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|     10|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     10|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     10| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     10|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     10|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     10|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 10, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     10|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     10|   else                                         \
  |  |  |  |  |  | 1183|     10|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     10|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     10|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 10, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|     10|      { } \
  |  |  655|     10|    else \
  |  |  656|     10|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|     10|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     10|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 10]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1621|       |
 1622|     10|  if (len < 0)
  ------------------
  |  Branch (1622:7): [True: 10, False: 0]
  ------------------
 1623|     10|    len = (gssize) strlen (str);
 1624|       |
 1625|     10|  result = g_strndup (str, (gsize) len);
 1626|     76|  for (s = result; *s; s++)
  ------------------
  |  Branch (1626:20): [True: 66, False: 10]
  ------------------
 1627|     66|    *s = g_ascii_toupper (*s);
 1628|       |
 1629|     10|  return result;
 1630|     10|}
g_ascii_tolower:
 1776|  10.9M|{
 1777|  10.9M|  return g_ascii_isupper (c) ? c - 'A' + 'a' : c;
  ------------------
  |  |   86|  10.9M|  ((g_ascii_table[(guchar) (c)] & G_ASCII_UPPER) != 0)
  |  |  ------------------
  |  |  |  Branch (86:3): [True: 76.2k, False: 10.9M]
  |  |  ------------------
  ------------------
 1778|  10.9M|}
g_ascii_toupper:
 1799|   226M|{
 1800|   226M|  return g_ascii_islower (c) ? c - 'a' + 'A' : c;
  ------------------
  |  |   74|   226M|  ((g_ascii_table[(guchar) (c)] & G_ASCII_LOWER) != 0)
  |  |  ------------------
  |  |  |  Branch (74:3): [True: 97.9M, False: 128M]
  |  |  ------------------
  ------------------
 1801|   226M|}
g_ascii_strcasecmp:
 1871|   893M|{
 1872|   893M|  gint c1, c2;
 1873|       |
 1874|   893M|  g_return_val_if_fail (s1 != NULL, 0);
  ------------------
  |  |  652|   893M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   893M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   893M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   893M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   893M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   893M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   893M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   893M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 893M, False: 308k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   893M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   893M|   else                                         \
  |  |  |  |  |  | 1183|   893M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   893M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   893M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 893M, False: 308k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   893M|      { } \
  |  |  655|   893M|    else \
  |  |  656|   893M|      { \
  |  |  657|   308k|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|   308k|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|   308k|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|   308k|                                  #expr); \
  |  |  660|   308k|        return (val); \
  |  |  661|   308k|      } \
  |  |  662|   893M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   893M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 893M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1875|   893M|  g_return_val_if_fail (s2 != NULL, 0);
  ------------------
  |  |  652|   893M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   893M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   893M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   893M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   893M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   893M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   893M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   893M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 893M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   893M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   893M|   else                                         \
  |  |  |  |  |  | 1183|   893M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   893M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   893M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 893M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   893M|      { } \
  |  |  655|   893M|    else \
  |  |  656|   893M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   893M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   893M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 893M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1876|       |
 1877|  1.59G|  while (*s1 && *s2)
  ------------------
  |  Branch (1877:10): [True: 1.49G, False: 98.5M]
  |  Branch (1877:17): [True: 1.49G, False: 8.29M]
  ------------------
 1878|  1.49G|    {
 1879|  1.49G|      c1 = (gint)(guchar) TOLOWER (*s1);
  ------------------
  |  | 1051|  1.49G|#define TOLOWER(c)              (ISUPPER (c) ? (c) - 'A' + 'a' : (c))
  |  |  ------------------
  |  |  |  | 1047|  1.49G|#define ISUPPER(c)              ((c) >= 'A' && (c) <= 'Z')
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1047:34): [True: 345M, False: 1.14G]
  |  |  |  |  |  Branch (1047:48): [True: 68.8M, False: 276M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1880|  1.49G|      c2 = (gint)(guchar) TOLOWER (*s2);
  ------------------
  |  | 1051|  1.49G|#define TOLOWER(c)              (ISUPPER (c) ? (c) - 'A' + 'a' : (c))
  |  |  ------------------
  |  |  |  | 1047|  1.49G|#define ISUPPER(c)              ((c) >= 'A' && (c) <= 'Z')
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1047:34): [True: 345M, False: 1.14G]
  |  |  |  |  |  Branch (1047:48): [True: 67.3M, False: 278M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1881|  1.49G|      if (c1 != c2)
  ------------------
  |  Branch (1881:11): [True: 786M, False: 705M]
  ------------------
 1882|   786M|        return (c1 - c2);
 1883|   705M|      s1++; s2++;
 1884|   705M|    }
 1885|       |
 1886|   106M|  return (((gint)(guchar) *s1) - ((gint)(guchar) *s2));
 1887|   893M|}
g_ascii_strncasecmp:
 1915|  2.82M|{
 1916|  2.82M|  gint c1, c2;
 1917|       |
 1918|  2.82M|  g_return_val_if_fail (s1 != NULL, 0);
  ------------------
  |  |  652|  2.82M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  2.82M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  2.82M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  2.82M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  2.82M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  2.82M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  2.82M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  2.82M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2.82M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  2.82M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  2.82M|   else                                         \
  |  |  |  |  |  | 1183|  2.82M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  2.82M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  2.82M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2.82M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  2.82M|      { } \
  |  |  655|  2.82M|    else \
  |  |  656|  2.82M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  2.82M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  2.82M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2.82M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1919|  2.82M|  g_return_val_if_fail (s2 != NULL, 0);
  ------------------
  |  |  652|  2.82M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  2.82M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  2.82M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  2.82M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  2.82M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  2.82M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  2.82M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  2.82M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2.82M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  2.82M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  2.82M|   else                                         \
  |  |  |  |  |  | 1183|  2.82M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  2.82M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  2.82M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2.82M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  2.82M|      { } \
  |  |  655|  2.82M|    else \
  |  |  656|  2.82M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  2.82M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  2.82M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2.82M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1920|       |
 1921|  3.52M|  while (n && *s1 && *s2)
  ------------------
  |  Branch (1921:10): [True: 3.46M, False: 61.8k]
  |  Branch (1921:15): [True: 3.46M, False: 2.44k]
  |  Branch (1921:22): [True: 3.46M, False: 0]
  ------------------
 1922|  3.46M|    {
 1923|  3.46M|      n -= 1;
 1924|  3.46M|      c1 = (gint)(guchar) TOLOWER (*s1);
  ------------------
  |  | 1051|  3.46M|#define TOLOWER(c)              (ISUPPER (c) ? (c) - 'A' + 'a' : (c))
  |  |  ------------------
  |  |  |  | 1047|  3.46M|#define ISUPPER(c)              ((c) >= 'A' && (c) <= 'Z')
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1047:34): [True: 3.45M, False: 8.20k]
  |  |  |  |  |  Branch (1047:48): [True: 2.93M, False: 514k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1925|  3.46M|      c2 = (gint)(guchar) TOLOWER (*s2);
  ------------------
  |  | 1051|  3.46M|#define TOLOWER(c)              (ISUPPER (c) ? (c) - 'A' + 'a' : (c))
  |  |  ------------------
  |  |  |  | 1047|  3.46M|#define ISUPPER(c)              ((c) >= 'A' && (c) <= 'Z')
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1047:34): [True: 3.45M, False: 6.67k]
  |  |  |  |  |  Branch (1047:48): [True: 2.58M, False: 866k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1926|  3.46M|      if (c1 != c2)
  ------------------
  |  Branch (1926:11): [True: 2.76M, False: 696k]
  ------------------
 1927|  2.76M|        return (c1 - c2);
 1928|   696k|      s1++; s2++;
 1929|   696k|    }
 1930|       |
 1931|  64.2k|  if (n)
  ------------------
  |  Branch (1931:7): [True: 2.44k, False: 61.8k]
  ------------------
 1932|  2.44k|    return (((gint) (guchar) *s1) - ((gint) (guchar) *s2));
 1933|  61.8k|  else
 1934|  61.8k|    return 0;
 1935|  64.2k|}
g_strchomp:
 2370|  43.9k|{
 2371|  43.9k|  gsize len;
 2372|       |
 2373|  43.9k|  g_return_val_if_fail (string != NULL, NULL);
  ------------------
  |  |  652|  43.9k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  43.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  43.9k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  43.9k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  43.9k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  43.9k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  43.9k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  43.9k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 43.9k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  43.9k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  43.9k|   else                                         \
  |  |  |  |  |  | 1183|  43.9k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  43.9k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  43.9k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 43.9k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  43.9k|      { } \
  |  |  655|  43.9k|    else \
  |  |  656|  43.9k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  43.9k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  43.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 43.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2374|       |
 2375|  43.9k|  len = strlen (string);
 2376|   125k|  while (len--)
  ------------------
  |  Branch (2376:10): [True: 118k, False: 6.99k]
  ------------------
 2377|   118k|    {
 2378|   118k|      if (g_ascii_isspace ((guchar) string[len]))
  ------------------
  |  |   83|   118k|  ((g_ascii_table[(guchar) (c)] & G_ASCII_SPACE) != 0)
  |  |  ------------------
  |  |  |  Branch (83:3): [True: 81.7k, False: 36.9k]
  |  |  ------------------
  ------------------
 2379|  81.7k|        string[len] = '\0';
 2380|  36.9k|      else
 2381|  36.9k|        break;
 2382|   118k|    }
 2383|       |
 2384|  43.9k|  return string;
 2385|  43.9k|}
g_strsplit:
 2418|   773k|{
 2419|   773k|  char *s;
 2420|   773k|  const gchar *remainder;
 2421|   773k|  GPtrArray *string_list;
 2422|       |
 2423|   773k|  g_return_val_if_fail (string != NULL, NULL);
  ------------------
  |  |  652|   773k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   773k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   773k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   773k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   773k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   773k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   773k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   773k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 773k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   773k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   773k|   else                                         \
  |  |  |  |  |  | 1183|   773k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   773k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   773k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 773k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   773k|      { } \
  |  |  655|   773k|    else \
  |  |  656|   773k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   773k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   773k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 773k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2424|   773k|  g_return_val_if_fail (delimiter != NULL, NULL);
  ------------------
  |  |  652|   773k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   773k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   773k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   773k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   773k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   773k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   773k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   773k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 773k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   773k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   773k|   else                                         \
  |  |  |  |  |  | 1183|   773k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   773k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   773k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 773k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   773k|      { } \
  |  |  655|   773k|    else \
  |  |  656|   773k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   773k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   773k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 773k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2425|   773k|  g_return_val_if_fail (delimiter[0] != '\0', NULL);
  ------------------
  |  |  652|   773k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   773k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   773k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   773k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   773k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   773k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   773k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   773k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 773k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   773k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   773k|   else                                         \
  |  |  |  |  |  | 1183|   773k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   773k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   773k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 773k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   773k|      { } \
  |  |  655|   773k|    else \
  |  |  656|   773k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   773k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   773k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 773k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2426|       |
 2427|   773k|  if (max_tokens < 1)
  ------------------
  |  Branch (2427:7): [True: 769k, False: 3.97k]
  ------------------
 2428|   769k|    {
 2429|   769k|      max_tokens = G_MAXINT;
  ------------------
  |  |   36|   769k|#define G_MAXINT	INT_MAX
  ------------------
 2430|   769k|      string_list = g_ptr_array_new ();
 2431|   769k|    }
 2432|  3.97k|  else
 2433|  3.97k|    {
 2434|  3.97k|      string_list = g_ptr_array_new_full (max_tokens + 1, NULL);
 2435|  3.97k|    }
 2436|       |
 2437|   773k|  remainder = string;
 2438|   773k|  s = strstr (remainder, delimiter);
 2439|   773k|  if (s)
  ------------------
  |  Branch (2439:7): [True: 196k, False: 576k]
  ------------------
 2440|   196k|    {
 2441|   196k|      gsize delimiter_len = strlen (delimiter);
 2442|       |
 2443|  3.88M|      while (--max_tokens && s)
  ------------------
  |  Branch (2443:14): [True: 3.88M, False: 565]
  |  Branch (2443:30): [True: 3.68M, False: 196k]
  ------------------
 2444|  3.68M|        {
 2445|  3.68M|          gsize len;
 2446|       |
 2447|  3.68M|          len = s - remainder;
 2448|  3.68M|          g_ptr_array_add (string_list, g_strndup (remainder, len));
 2449|  3.68M|          remainder = s + delimiter_len;
 2450|  3.68M|          s = strstr (remainder, delimiter);
 2451|  3.68M|        }
 2452|   196k|    }
 2453|   773k|  if (*string)
  ------------------
  |  Branch (2453:7): [True: 727k, False: 46.2k]
  ------------------
 2454|   727k|    g_ptr_array_add (string_list, g_strdup (remainder));
 2455|       |
 2456|   773k|  g_ptr_array_add (string_list, NULL);
 2457|       |
 2458|   773k|  return (char **) g_ptr_array_free (string_list, FALSE);
  ------------------
  |  |  880|   773k|#define	FALSE	(0)
  ------------------
 2459|   773k|}
g_strfreev:
 2581|   773k|{
 2582|   773k|  if (str_array)
  ------------------
  |  Branch (2582:7): [True: 773k, False: 1]
  ------------------
 2583|   773k|    {
 2584|   773k|      gsize i;
 2585|       |
 2586|  5.18M|      for (i = 0; str_array[i] != NULL; i++)
  ------------------
  |  Branch (2586:19): [True: 4.41M, False: 773k]
  ------------------
 2587|  4.41M|        g_free (str_array[i]);
 2588|       |
 2589|   773k|      g_free (str_array);
 2590|   773k|    }
 2591|   773k|}
g_strjoinv:
 2652|      2|{
 2653|      2|  gchar *string;
 2654|      2|  gchar *ptr;
 2655|       |
 2656|      2|  g_return_val_if_fail (str_array != NULL, NULL);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2657|       |
 2658|      2|  if (separator == NULL)
  ------------------
  |  Branch (2658:7): [True: 0, False: 2]
  ------------------
 2659|      0|    separator = "";
 2660|       |
 2661|      2|  if (*str_array)
  ------------------
  |  Branch (2661:7): [True: 2, False: 0]
  ------------------
 2662|      2|    {
 2663|      2|      gsize i;
 2664|      2|      gsize len;
 2665|      2|      gsize separator_len;
 2666|       |
 2667|      2|      separator_len = strlen (separator);
 2668|       |      /* First part, getting length */
 2669|      2|      len = 1 + strlen (str_array[0]);
 2670|      2|      for (i = 1; str_array[i] != NULL; i++)
  ------------------
  |  Branch (2670:19): [True: 0, False: 2]
  ------------------
 2671|      0|        len += strlen (str_array[i]);
 2672|      2|      len += separator_len * (i - 1);
 2673|       |
 2674|       |      /* Second part, building string */
 2675|      2|      string = g_new (gchar, len);
  ------------------
  |  |  299|      2|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  244|      2|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      2|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      2|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      2|	  gpointer __p;						\
  |  |  |  |  248|      2|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  249|      2|	    __p = g_##func (__n);				\
  |  |  |  |  250|      2|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      0|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (251:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      0|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      0|	  else							\
  |  |  |  |  254|      0|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      2|	  __p;							\
  |  |  |  |  256|      2|	}))
  |  |  ------------------
  ------------------
 2676|      2|      ptr = g_stpcpy (string, *str_array);
 2677|      2|      for (i = 1; str_array[i] != NULL; i++)
  ------------------
  |  Branch (2677:19): [True: 0, False: 2]
  ------------------
 2678|      0|        {
 2679|      0|          ptr = g_stpcpy (ptr, separator);
 2680|      0|          ptr = g_stpcpy (ptr, str_array[i]);
 2681|      0|        }
 2682|      2|      }
 2683|      0|  else
 2684|      0|    string = g_strdup ("");
 2685|       |
 2686|      2|  return string;
 2687|      2|}
g_strv_length:
 2984|  1.15M|{
 2985|  1.15M|  guint i = 0;
 2986|       |
 2987|  1.15M|  g_return_val_if_fail (str_array != NULL, 0);
  ------------------
  |  |  652|  1.15M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.15M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  1.15M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.15M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.15M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.15M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.15M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.15M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.15M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.15M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.15M|   else                                         \
  |  |  |  |  |  | 1183|  1.15M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.15M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.15M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.15M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  1.15M|      { } \
  |  |  655|  1.15M|    else \
  |  |  656|  1.15M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  1.15M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.15M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.15M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2988|       |
 2989|  6.23M|  while (str_array[i])
  ------------------
  |  Branch (2989:10): [True: 5.08M, False: 1.15M]
  ------------------
 2990|  5.08M|    ++i;
 2991|       |
 2992|  1.15M|  return i;
 2993|  1.15M|}

g_string_sized_new:
  109|  4.93M|{
  110|  4.93M|  GString *string = g_slice_new (GString);
  ------------------
  |  |   48|  4.93M|#define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
  ------------------
  111|       |
  112|  4.93M|  string->allocated_len = 0;
  113|  4.93M|  string->len   = 0;
  114|  4.93M|  string->str   = NULL;
  115|       |
  116|  4.93M|  g_string_maybe_expand (string, MAX (dfl_size, 64));
  ------------------
  |  |  888|  4.93M|#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (888:21): [True: 107k, False: 4.83M]
  |  |  ------------------
  ------------------
  117|  4.93M|  string->str[0] = 0;
  118|       |
  119|  4.93M|  return string;
  120|  4.93M|}
g_string_new:
  133|  4.82M|{
  134|  4.82M|  GString *string;
  135|       |
  136|  4.82M|  if (init == NULL || *init == '\0')
  ------------------
  |  Branch (136:7): [True: 4.06M, False: 760k]
  |  Branch (136:23): [True: 62.0k, False: 698k]
  ------------------
  137|  4.13M|    string = g_string_sized_new (2);
  138|   698k|  else
  139|   698k|    {
  140|   698k|      gint len;
  141|       |
  142|   698k|      len = strlen (init);
  143|   698k|      string = g_string_sized_new (len + 2);
  144|       |
  145|   698k|      g_string_append_len (string, init, len);
  146|   698k|    }
  147|       |
  148|  4.82M|  return string;
  149|  4.82M|}
g_string_new_len:
  169|  8.49k|{
  170|  8.49k|  GString *string;
  171|       |
  172|  8.49k|  if (len < 0)
  ------------------
  |  Branch (172:7): [True: 0, False: 8.49k]
  ------------------
  173|      0|    return g_string_new (init);
  174|  8.49k|  else
  175|  8.49k|    {
  176|  8.49k|      string = g_string_sized_new (len);
  177|       |
  178|  8.49k|      if (init)
  ------------------
  |  Branch (178:11): [True: 8.49k, False: 0]
  ------------------
  179|  8.49k|        g_string_append_len (string, init, len);
  180|       |
  181|  8.49k|      return string;
  182|  8.49k|    }
  183|  8.49k|}
g_string_free:
  201|  4.93M|{
  202|  4.93M|  gchar *segment;
  203|       |
  204|  4.93M|  g_return_val_if_fail (string != NULL, NULL);
  ------------------
  |  |  652|  4.93M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  4.93M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  4.93M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  4.93M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  4.93M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  4.93M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  4.93M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  4.93M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 4.93M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  4.93M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  4.93M|   else                                         \
  |  |  |  |  |  | 1183|  4.93M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  4.93M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  4.93M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 4.93M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  4.93M|      { } \
  |  |  655|  4.93M|    else \
  |  |  656|  4.93M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  4.93M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  4.93M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 4.93M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|       |
  206|  4.93M|  if (free_segment)
  ------------------
  |  Branch (206:7): [True: 141k, False: 4.79M]
  ------------------
  207|   141k|    {
  208|   141k|      g_free (string->str);
  209|   141k|      segment = NULL;
  210|   141k|    }
  211|  4.79M|  else
  212|  4.79M|    segment = string->str;
  213|       |
  214|  4.93M|  g_slice_free (GString, string);
  ------------------
  |  |   81|  4.93M|#define g_slice_free(type, mem)                                 \
  |  |  ------------------
  |  |  |  |  940|  4.93M|#define G_STMT_START  do
  |  |  ------------------
  |  |   82|  4.93M|G_STMT_START {                                                  \
  |  |   83|  4.93M|  if (1) g_slice_free1 (sizeof (type), (mem));			\
  |  |  ------------------
  |  |  |  Branch (83:7): [True: 4.93M, Folded]
  |  |  ------------------
  |  |   84|  4.93M|  else   (void) ((type*) 0 == (mem)); 				\
  |  |   85|  4.93M|} G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  4.93M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 4.93M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  215|       |
  216|  4.93M|  return segment;
  217|  4.93M|}
g_string_assign:
  327|  14.8k|{
  328|  14.8k|  g_return_val_if_fail (string != NULL, NULL);
  ------------------
  |  |  652|  14.8k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  14.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  14.8k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  14.8k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  14.8k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  14.8k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  14.8k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  14.8k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 14.8k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  14.8k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  14.8k|   else                                         \
  |  |  |  |  |  | 1183|  14.8k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  14.8k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  14.8k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 14.8k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  14.8k|      { } \
  |  |  655|  14.8k|    else \
  |  |  656|  14.8k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  14.8k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  14.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 14.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  329|  14.8k|  g_return_val_if_fail (rval != NULL, string);
  ------------------
  |  |  652|  14.8k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  14.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  14.8k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  14.8k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  14.8k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  14.8k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  14.8k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  14.8k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 14.8k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  14.8k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  14.8k|   else                                         \
  |  |  |  |  |  | 1183|  14.8k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  14.8k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  14.8k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 14.8k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  14.8k|      { } \
  |  |  655|  14.8k|    else \
  |  |  656|  14.8k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  14.8k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  14.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 14.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|       |
  331|       |  /* Make sure assigning to itself doesn't corrupt the string. */
  332|  14.8k|  if (string->str != rval)
  ------------------
  |  Branch (332:7): [True: 14.8k, False: 0]
  ------------------
  333|  14.8k|    {
  334|       |      /* Assigning from substring should be ok, since
  335|       |       * g_string_truncate() does not reallocate.
  336|       |       */
  337|  14.8k|      g_string_truncate (string, 0);
  338|  14.8k|      g_string_append (string, rval);
  339|  14.8k|    }
  340|       |
  341|  14.8k|  return string;
  342|  14.8k|}
g_string_truncate:
  356|  1.80M|{
  357|  1.80M|  g_return_val_if_fail (string != NULL, NULL);
  ------------------
  |  |  652|  1.80M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.80M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  1.80M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  1.80M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.80M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.80M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.80M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.80M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.80M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.80M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.80M|   else                                         \
  |  |  |  |  |  | 1183|  1.80M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.80M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.80M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 1.80M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  1.80M|      { } \
  |  |  655|  1.80M|    else \
  |  |  656|  1.80M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  1.80M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.80M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.80M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  358|       |
  359|  1.80M|  string->len = MIN (len, string->len);
  ------------------
  |  |  891|  1.80M|#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (891:21): [True: 1.57M, False: 232k]
  |  |  ------------------
  ------------------
  360|  1.80M|  string->str[string->len] = 0;
  361|       |
  362|  1.80M|  return string;
  363|  1.80M|}
g_string_set_size:
  381|  50.4k|{
  382|  50.4k|  g_return_val_if_fail (string != NULL, NULL);
  ------------------
  |  |  652|  50.4k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  50.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  50.4k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  50.4k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  50.4k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  50.4k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  50.4k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  50.4k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 50.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  50.4k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  50.4k|   else                                         \
  |  |  |  |  |  | 1183|  50.4k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  50.4k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  50.4k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 50.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  50.4k|      { } \
  |  |  655|  50.4k|    else \
  |  |  656|  50.4k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  50.4k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  50.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 50.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  383|       |
  384|  50.4k|  if (len >= string->allocated_len)
  ------------------
  |  Branch (384:7): [True: 565, False: 49.9k]
  ------------------
  385|    565|    g_string_maybe_expand (string, len - string->len);
  386|       |
  387|  50.4k|  string->len = len;
  388|  50.4k|  string->str[len] = 0;
  389|       |
  390|  50.4k|  return string;
  391|  50.4k|}
g_string_insert_len:
  419|  10.6M|{
  420|  10.6M|  gsize len_unsigned, pos_unsigned;
  421|       |
  422|  10.6M|  g_return_val_if_fail (string != NULL, NULL);
  ------------------
  |  |  652|  10.6M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  10.6M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  10.6M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  10.6M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  10.6M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  10.6M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  10.6M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  10.6M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 10.6M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  10.6M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  10.6M|   else                                         \
  |  |  |  |  |  | 1183|  10.6M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  10.6M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  10.6M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 10.6M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  10.6M|      { } \
  |  |  655|  10.6M|    else \
  |  |  656|  10.6M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  10.6M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  10.6M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 10.6M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  423|  10.6M|  g_return_val_if_fail (len == 0 || val != NULL, string);
  ------------------
  |  |  652|  10.6M|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  10.6M|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  10.6M|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  10.6M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  10.6M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  10.6M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  10.6M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  31.8M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 92, False: 10.6M]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 10.6M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  10.6M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  10.6M|   else                                         \
  |  |  |  |  |  | 1183|  10.6M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  10.6M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  10.6M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 10.6M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  10.6M|      { } \
  |  |  655|  10.6M|    else \
  |  |  656|  10.6M|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  10.6M|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  10.6M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 10.6M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  424|       |
  425|  10.6M|  if (len == 0)
  ------------------
  |  Branch (425:7): [True: 92, False: 10.6M]
  ------------------
  426|     92|    return string;
  427|       |
  428|  10.6M|  if (len < 0)
  ------------------
  |  Branch (428:7): [True: 9.67M, False: 933k]
  ------------------
  429|  9.67M|    len = strlen (val);
  430|  10.6M|  len_unsigned = len;
  431|       |
  432|  10.6M|  if (pos < 0)
  ------------------
  |  Branch (432:7): [True: 10.5M, False: 48.1k]
  ------------------
  433|  10.5M|    pos_unsigned = string->len;
  434|  48.1k|  else
  435|  48.1k|    {
  436|  48.1k|      pos_unsigned = pos;
  437|  48.1k|      g_return_val_if_fail (pos_unsigned <= string->len, string);
  ------------------
  |  |  652|  48.1k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  48.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|  48.1k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  48.1k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  48.1k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  48.1k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  48.1k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  48.1k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 48.1k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  48.1k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  48.1k|   else                                         \
  |  |  |  |  |  | 1183|  48.1k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  48.1k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  48.1k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 48.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|  48.1k|      { } \
  |  |  655|  48.1k|    else \
  |  |  656|  48.1k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|  48.1k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  48.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 48.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  438|  48.1k|    }
  439|       |
  440|       |  /* Check whether val represents a substring of string.
  441|       |   * This test probably violates chapter and verse of the C standards,
  442|       |   * since ">=" and "<=" are only valid when val really is a substring.
  443|       |   * In practice, it will work on modern archs.
  444|       |   */
  445|  10.6M|  if (G_UNLIKELY (val >= string->str && val <= string->str + string->len))
  ------------------
  |  | 1187|  10.6M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  10.6M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  10.6M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  10.6M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  23.8M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 2.60M, False: 8.00M]
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 2.60M]
  |  |  |  |  ------------------
  |  |  |  | 1181|  10.6M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  10.6M|   else                                         \
  |  |  |  | 1183|  10.6M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  10.6M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  10.6M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 10.6M]
  |  |  ------------------
  ------------------
  446|      0|    {
  447|      0|      gsize offset = val - string->str;
  448|      0|      gsize precount = 0;
  449|       |
  450|      0|      g_string_maybe_expand (string, len_unsigned);
  451|      0|      val = string->str + offset;
  452|       |      /* At this point, val is valid again.  */
  453|       |
  454|       |      /* Open up space where we are going to insert.  */
  455|      0|      if (pos_unsigned < string->len)
  ------------------
  |  Branch (455:11): [True: 0, False: 0]
  ------------------
  456|      0|        memmove (string->str + pos_unsigned + len_unsigned,
  457|      0|                 string->str + pos_unsigned, string->len - pos_unsigned);
  458|       |
  459|       |      /* Move the source part before the gap, if any.  */
  460|      0|      if (offset < pos_unsigned)
  ------------------
  |  Branch (460:11): [True: 0, False: 0]
  ------------------
  461|      0|        {
  462|      0|          precount = MIN (len_unsigned, pos_unsigned - offset);
  ------------------
  |  |  891|      0|#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (891:21): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  463|      0|          memcpy (string->str + pos_unsigned, val, precount);
  464|      0|        }
  465|       |
  466|       |      /* Move the source part after the gap, if any.  */
  467|      0|      if (len_unsigned > precount)
  ------------------
  |  Branch (467:11): [True: 0, False: 0]
  ------------------
  468|      0|        memcpy (string->str + pos_unsigned + precount,
  469|      0|                val + /* Already moved: */ precount +
  470|      0|                      /* Space opened up: */ len_unsigned,
  471|      0|                len_unsigned - precount);
  472|      0|    }
  473|  10.6M|  else
  474|  10.6M|    {
  475|  10.6M|      g_string_maybe_expand (string, len_unsigned);
  476|       |
  477|       |      /* If we aren't appending at the end, move a hunk
  478|       |       * of the old string to the end, opening up space
  479|       |       */
  480|  10.6M|      if (pos_unsigned < string->len)
  ------------------
  |  Branch (480:11): [True: 26.2k, False: 10.5M]
  ------------------
  481|  26.2k|        memmove (string->str + pos_unsigned + len_unsigned,
  482|  26.2k|                 string->str + pos_unsigned, string->len - pos_unsigned);
  483|       |
  484|       |      /* insert the new string */
  485|  10.6M|      if (len_unsigned == 1)
  ------------------
  |  Branch (485:11): [True: 296k, False: 10.3M]
  ------------------
  486|   296k|        string->str[pos_unsigned] = *val;
  487|  10.3M|      else
  488|  10.3M|        memcpy (string->str + pos_unsigned, val, len_unsigned);
  489|  10.6M|    }
  490|       |
  491|  10.6M|  string->len += len_unsigned;
  492|       |
  493|  10.6M|  string->str[string->len] = 0;
  494|       |
  495|  10.6M|  return string;
  496|  10.6M|}
g_string_append:
  537|  9.62M|{
  538|  9.62M|  return g_string_insert_len (string, -1, val, -1);
  539|  9.62M|}
g_string_append_len:
  563|   933k|{
  564|   933k|  return g_string_insert_len (string, -1, val, len);
  565|   933k|}
g_string_prepend:
  619|  13.7k|{
  620|  13.7k|  return g_string_insert_len (string, 0, val, -1);
  621|  13.7k|}
g_string_insert:
  702|  34.4k|{
  703|  34.4k|  return g_string_insert_len (string, pos, val, -1);
  704|  34.4k|}
g_string_insert_c:
  720|   690k|{
  721|   690k|  gsize pos_unsigned;
  722|       |
  723|   690k|  g_return_val_if_fail (string != NULL, NULL);
  ------------------
  |  |  652|   690k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   690k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   690k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   690k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   690k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   690k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   690k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   690k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 690k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   690k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   690k|   else                                         \
  |  |  |  |  |  | 1183|   690k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   690k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   690k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 690k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   690k|      { } \
  |  |  655|   690k|    else \
  |  |  656|   690k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   690k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   690k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 690k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  724|       |
  725|   690k|  g_string_maybe_expand (string, 1);
  726|       |
  727|   690k|  if (pos < 0)
  ------------------
  |  Branch (727:7): [True: 69.7k, False: 620k]
  ------------------
  728|  69.7k|    pos = string->len;
  729|   620k|  else
  730|   690k|    g_return_val_if_fail ((gsize) pos <= string->len, string);
  ------------------
  |  |  652|   620k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   620k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   620k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   620k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   620k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   620k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   620k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   620k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 620k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   620k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   620k|   else                                         \
  |  |  |  |  |  | 1183|   620k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   620k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   620k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 620k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   620k|      { } \
  |  |  655|   620k|    else \
  |  |  656|   620k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   620k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   620k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 620k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  731|   690k|  pos_unsigned = pos;
  732|       |
  733|       |  /* If not just an append, move the old stuff */
  734|   690k|  if (pos_unsigned < string->len)
  ------------------
  |  Branch (734:7): [True: 611k, False: 79.1k]
  ------------------
  735|   611k|    memmove (string->str + pos_unsigned + 1,
  736|   611k|             string->str + pos_unsigned, string->len - pos_unsigned);
  737|       |
  738|   690k|  string->str[pos_unsigned] = c;
  739|       |
  740|   690k|  string->len += 1;
  741|       |
  742|   690k|  string->str[string->len] = 0;
  743|       |
  744|   690k|  return string;
  745|   690k|}
g_string_erase:
  916|   195k|{
  917|   195k|  gsize len_unsigned, pos_unsigned;
  918|       |
  919|   195k|  g_return_val_if_fail (string != NULL, NULL);
  ------------------
  |  |  652|   195k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   195k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   195k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   195k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   195k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   195k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   195k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   195k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 195k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   195k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   195k|   else                                         \
  |  |  |  |  |  | 1183|   195k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   195k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   195k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 195k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   195k|      { } \
  |  |  655|   195k|    else \
  |  |  656|   195k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   195k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   195k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 195k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  920|   195k|  g_return_val_if_fail (pos >= 0, string);
  ------------------
  |  |  652|   195k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   195k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   195k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   195k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   195k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   195k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   195k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   195k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 195k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   195k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   195k|   else                                         \
  |  |  |  |  |  | 1183|   195k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   195k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   195k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 195k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   195k|      { } \
  |  |  655|   195k|    else \
  |  |  656|   195k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   195k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   195k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 195k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  921|   195k|  pos_unsigned = pos;
  922|       |
  923|   195k|  g_return_val_if_fail (pos_unsigned <= string->len, string);
  ------------------
  |  |  652|   195k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   195k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   195k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   195k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   195k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   195k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   195k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   195k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 195k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   195k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   195k|   else                                         \
  |  |  |  |  |  | 1183|   195k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   195k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   195k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 195k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   195k|      { } \
  |  |  655|   195k|    else \
  |  |  656|   195k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   195k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   195k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 195k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  924|       |
  925|   195k|  if (len < 0)
  ------------------
  |  Branch (925:7): [True: 0, False: 195k]
  ------------------
  926|      0|    len_unsigned = string->len - pos_unsigned;
  927|   195k|  else
  928|   195k|    {
  929|   195k|      len_unsigned = len;
  930|   195k|      g_return_val_if_fail (pos_unsigned + len_unsigned <= string->len, string);
  ------------------
  |  |  652|   195k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|   195k|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|   195k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|   195k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|   195k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|   195k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|   195k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|   195k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 195k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|   195k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|   195k|   else                                         \
  |  |  |  |  |  | 1183|   195k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|   195k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|   195k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 195k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|   195k|      { } \
  |  |  655|   195k|    else \
  |  |  656|   195k|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|   195k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|   195k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 195k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  931|       |
  932|   195k|      if (pos_unsigned + len_unsigned < string->len)
  ------------------
  |  Branch (932:11): [True: 187k, False: 8.60k]
  ------------------
  933|   187k|        memmove (string->str + pos_unsigned,
  934|   187k|                 string->str + pos_unsigned + len_unsigned,
  935|   187k|                 string->len - (pos_unsigned + len_unsigned));
  936|   195k|    }
  937|       |
  938|   195k|  string->len -= len_unsigned;
  939|       |
  940|   195k|  string->str[string->len] = 0;
  941|       |
  942|   195k|  return string;
  943|   195k|}
g_string_append_vprintf:
 1155|  26.7k|{
 1156|  26.7k|  gchar *buf;
 1157|  26.7k|  gint len;
 1158|       |
 1159|  26.7k|  g_return_if_fail (string != NULL);
  ------------------
  |  |  639|  26.7k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  26.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  26.7k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  26.7k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  26.7k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  26.7k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  26.7k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  26.7k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 26.7k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  26.7k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  26.7k|   else                                         \
  |  |  |  |  |  | 1183|  26.7k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  26.7k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  26.7k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 26.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  26.7k|      { } \
  |  |  642|  26.7k|    else \
  |  |  643|  26.7k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  26.7k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  26.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 26.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1160|  26.7k|  g_return_if_fail (format != NULL);
  ------------------
  |  |  639|  26.7k|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  26.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|  26.7k|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|  26.7k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  26.7k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  26.7k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  26.7k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  26.7k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 26.7k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  26.7k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  26.7k|   else                                         \
  |  |  |  |  |  | 1183|  26.7k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  26.7k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  26.7k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 26.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|  26.7k|      { } \
  |  |  642|  26.7k|    else \
  |  |  643|  26.7k|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|  26.7k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  26.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 26.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1161|       |
 1162|  26.7k|  len = g_vasprintf (&buf, format, args);
 1163|       |
 1164|  26.7k|  if (len >= 0)
  ------------------
  |  Branch (1164:7): [True: 26.7k, False: 0]
  ------------------
 1165|  26.7k|    {
 1166|  26.7k|      g_string_maybe_expand (string, len);
 1167|  26.7k|      memcpy (string->str + string->len, buf, len + 1);
 1168|  26.7k|      string->len += len;
 1169|  26.7k|      g_free (buf);
 1170|  26.7k|    }
 1171|  26.7k|}
g_string_printf:
 1225|  12.4k|{
 1226|  12.4k|  va_list args;
 1227|       |
 1228|  12.4k|  g_string_truncate (string, 0);
 1229|       |
 1230|  12.4k|  va_start (args, format);
 1231|  12.4k|  g_string_append_vprintf (string, format, args);
 1232|       |  va_end (args);
 1233|  12.4k|}
g_string_append_printf:
 1262|  14.3k|{
 1263|  14.3k|  va_list args;
 1264|       |
 1265|  14.3k|  va_start (args, format);
 1266|  14.3k|  g_string_append_vprintf (string, format, args);
 1267|       |  va_end (args);
 1268|  14.3k|}
gstring.c:g_string_maybe_expand:
   80|  16.2M|{
   81|       |  /* Detect potential overflow */
   82|  16.2M|  if G_UNLIKELY ((G_MAXSIZE - string->len - 1) < len)
  ------------------
  |  | 1187|  16.2M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  16.2M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  16.2M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  16.2M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  16.2M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 16.2M]
  |  |  |  |  ------------------
  |  |  |  | 1181|  16.2M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  16.2M|   else                                         \
  |  |  |  | 1183|  16.2M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  16.2M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  16.2M|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 0, False: 16.2M]
  |  |  ------------------
  ------------------
   83|  16.2M|    g_error ("adding %" G_GSIZE_FORMAT " to string would overflow", len);
  ------------------
  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  346|      0|                        for (;;) ;                   \
  |  |  347|      0|                      } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   84|       |
   85|  16.2M|  if (string->len + len >= string->allocated_len)
  ------------------
  |  Branch (85:7): [True: 5.04M, False: 11.2M]
  ------------------
   86|  5.04M|    {
   87|  5.04M|      string->allocated_len = g_nearest_pow (string->len + len + 1);
   88|       |      /* If the new size is bigger than G_MAXSIZE / 2, only allocate enough
   89|       |       * memory for this string and don't over-allocate. */
   90|  5.04M|      if (string->allocated_len == 0)
  ------------------
  |  Branch (90:11): [True: 0, False: 5.04M]
  ------------------
   91|      0|        string->allocated_len = string->len + len + 1;
   92|  5.04M|      string->str = g_realloc (string->str, string->allocated_len);
   93|  5.04M|    }
   94|  16.2M|}

gscanner.c:g_string_append_c_inline:
  170|  35.8k|{
  171|  35.8k|  if (gstring->len + 1 < gstring->allocated_len)
  ------------------
  |  Branch (171:7): [True: 35.8k, False: 2]
  ------------------
  172|  35.8k|    {
  173|  35.8k|      gstring->str[gstring->len++] = c;
  174|  35.8k|      gstring->str[gstring->len] = 0;
  175|  35.8k|    }
  176|      2|  else
  177|      2|    g_string_insert_c (gstring, -1, c);
  178|  35.8k|  return gstring;
  179|  35.8k|}

g_strcmp0:
 3416|  34.8M|{
 3417|  34.8M|  if (!str1)
  ------------------
  |  Branch (3417:7): [True: 11.8k, False: 34.8M]
  ------------------
 3418|  11.8k|    return -(str1 != str2);
 3419|  34.8M|  if (!str2)
  ------------------
  |  Branch (3419:7): [True: 0, False: 34.8M]
  ------------------
 3420|      0|    return str1 != str2;
 3421|  34.8M|  return strcmp (str1, str2);
 3422|  34.8M|}

g_rec_mutex_lock:
  396|     42|{
  397|     42|  pthread_mutex_lock (g_rec_mutex_get_impl (mutex));
  398|     42|}
g_rec_mutex_unlock:
  415|     42|{
  416|     42|  pthread_mutex_unlock (rec_mutex->p);
  417|     42|}
g_rw_lock_writer_lock:
  553|    220|{
  554|    220|  int retval = pthread_rwlock_wrlock (g_rw_lock_get_impl (rw_lock));
  555|       |
  556|    220|  if (retval != 0)
  ------------------
  |  Branch (556:7): [True: 0, False: 220]
  ------------------
  557|      0|    g_critical ("Failed to get RW lock %p: %s", rw_lock, g_strerror (retval));
  ------------------
  |  |  351|      0|#define g_critical(...) g_log (G_LOG_DOMAIN,         \
  |  |  352|      0|                               G_LOG_LEVEL_CRITICAL, \
  |  |  353|      0|                               __VA_ARGS__)
  ------------------
  558|    220|}
g_rw_lock_writer_unlock:
  595|    220|{
  596|    220|  pthread_rwlock_unlock (g_rw_lock_get_impl (rw_lock));
  597|    220|}
g_rw_lock_reader_lock:
  623|  13.7k|{
  624|  13.7k|  int retval = pthread_rwlock_rdlock (g_rw_lock_get_impl (rw_lock));
  625|       |
  626|  13.7k|  if (retval != 0)
  ------------------
  |  Branch (626:7): [True: 0, False: 13.7k]
  ------------------
  627|      0|    g_critical ("Failed to get RW lock %p: %s", rw_lock, g_strerror (retval));
  ------------------
  |  |  351|      0|#define g_critical(...) g_log (G_LOG_DOMAIN,         \
  |  |  352|      0|                               G_LOG_LEVEL_CRITICAL, \
  |  |  353|      0|                               __VA_ARGS__)
  ------------------
  628|  13.7k|}
g_rw_lock_reader_unlock:
  664|  13.7k|{
  665|  13.7k|  pthread_rwlock_unlock (g_rw_lock_get_impl (rw_lock));
  666|  13.7k|}
g_private_get:
 1082|  1.08G|{
 1083|       |  /* quote POSIX: No errors are returned from pthread_getspecific(). */
 1084|  1.08G|  return pthread_getspecific (*g_private_get_impl (key));
 1085|  1.08G|}
g_private_set:
 1101|  2.71M|{
 1102|  2.71M|  gint status;
 1103|       |
 1104|  2.71M|  if G_UNLIKELY ((status = pthread_setspecific (*g_private_get_impl (key), value)) != 0)
  ------------------
  |  | 1187|  2.71M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  2.71M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  2.71M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  2.71M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  2.71M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 2.71M]
  |  |  |  |  ------------------
  |  |  |  | 1181|  2.71M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  2.71M|   else                                         \
  |  |  |  | 1183|  2.71M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  2.71M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  2.71M|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 0, False: 2.71M]
  |  |  ------------------
  ------------------
 1105|      0|    g_thread_abort (status, "pthread_setspecific");
 1106|  2.71M|}
g_mutex_init:
 1469|      2|{
 1470|      2|  mutex->i[0] = G_MUTEX_STATE_EMPTY;
 1471|      2|}
g_mutex_lock:
 1518|  14.4M|{
 1519|       |  /* empty -> owned and we're done.  Anything else, and we need to wait... */
 1520|  14.4M|  if G_UNLIKELY (!g_atomic_int_compare_and_exchange (&mutex->i[0],
  ------------------
  |  | 1187|  14.4M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  14.4M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  14.4M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  14.4M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  72.2M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [Folded, False: 14.4M]
  |  |  |  |  |  Branch (1180:8): [True: 14.4M, False: 0]
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 14.4M]
  |  |  |  |  ------------------
  |  |  |  | 1181|  14.4M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  14.4M|   else                                         \
  |  |  |  | 1183|  14.4M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  14.4M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  14.4M|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 0, False: 14.4M]
  |  |  ------------------
  ------------------
 1521|  14.4M|                                                     G_MUTEX_STATE_EMPTY,
 1522|  14.4M|                                                     G_MUTEX_STATE_OWNED))
 1523|      0|    g_mutex_lock_slowpath (mutex);
 1524|  14.4M|}
g_mutex_unlock:
 1528|  27.4M|{
 1529|  27.4M|  guint prev;
 1530|       |
 1531|  27.4M|  prev = exchange_release (&mutex->i[0], G_MUTEX_STATE_EMPTY);
  ------------------
  |  | 1418|  27.4M|  atomic_exchange_explicit((atomic_uint *) (ptr), (new), __ATOMIC_RELEASE)
  ------------------
 1532|       |
 1533|       |  /* 1-> 0 and we're done.  Anything else and we need to signal... */
 1534|  27.4M|  if G_UNLIKELY (prev != G_MUTEX_STATE_OWNED)
  ------------------
  |  | 1187|  27.4M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  27.4M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  27.4M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  27.4M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  27.4M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 27.4M]
  |  |  |  |  ------------------
  |  |  |  | 1181|  27.4M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  27.4M|   else                                         \
  |  |  |  | 1183|  27.4M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  27.4M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  27.4M|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 0, False: 27.4M]
  |  |  ------------------
  ------------------
 1535|      0|    g_mutex_unlock_slowpath (mutex, prev);
 1536|  27.4M|}
g_mutex_trylock:
 1540|  13.0M|{
 1541|  13.0M|  GMutexState empty = G_MUTEX_STATE_EMPTY;
 1542|       |
 1543|       |  /* We don't want to touch the value at all unless we can move it from
 1544|       |   * exactly empty to owned.
 1545|       |   */
 1546|       |  return compare_exchange_acquire (&mutex->i[0], &empty, G_MUTEX_STATE_OWNED);
  ------------------
  |  | 1414|  13.0M|  atomic_compare_exchange_strong_explicit((atomic_uint *) (ptr), (old), (new), \
  |  | 1415|  13.0M|                                          __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)
  ------------------
 1547|  13.0M|}
g_cond_init:
 1565|      2|{
 1566|      2|  cond->i[0] = 0;
 1567|      2|}
g_cond_broadcast:
 1595|     14|{
 1596|     14|  g_atomic_int_inc (&cond->i[0]);
  ------------------
  |  |  162|     14|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|     14|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|     14|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|     14|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  164|     14|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded, False: 14]
  |  |  ------------------
  |  |  165|     14|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  166|     14|  }))
  ------------------
 1597|       |
 1598|       |  g_futex_simple (&cond->i[0], (gsize) FUTEX_WAKE_PRIVATE, (gsize) INT_MAX, NULL);
  ------------------
  |  |   82|     14|  G_STMT_START                                                  \
  |  |  ------------------
  |  |  |  |  940|     14|#define G_STMT_START  do
  |  |  ------------------
  |  |   83|     14|  {                                                             \
  |  |   84|     14|    syscall (__NR_futex, uaddr, (gsize) futex_op, __VA_ARGS__); \
  |  |   85|     14|  }                                                             \
  |  |   86|     14|  G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     14|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1599|     14|}
gthread-posix.c:g_rec_mutex_impl_new:
  282|      2|{
  283|      2|  pthread_mutexattr_t attr;
  284|      2|  pthread_mutex_t *mutex;
  285|       |
  286|      2|  mutex = malloc (sizeof (pthread_mutex_t));
  287|      2|  if G_UNLIKELY (mutex == NULL)
  ------------------
  |  | 1187|      2|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      2|   else                                         \
  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  | 1185|      2|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  288|      0|    g_thread_abort (errno, "malloc");
  289|       |
  290|      2|  pthread_mutexattr_init (&attr);
  291|      2|  pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE);
  292|      2|  pthread_mutex_init (mutex, &attr);
  293|      2|  pthread_mutexattr_destroy (&attr);
  294|       |
  295|      2|  return mutex;
  296|      2|}
gthread-posix.c:g_rec_mutex_get_impl:
  307|     42|{
  308|     42|  pthread_mutex_t *impl = g_atomic_pointer_get (&rec_mutex->p);
  ------------------
  |  |  127|     42|  (G_GNUC_EXTENSION ({                                                     \
  |  |  ------------------
  |  |  |  |   62|     42|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  128|     42|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));               \
  |  |  ------------------
  |  |  |  |  824|     42|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  129|     42|    glib_typeof (*(atomic)) gapg_temp_newval;                              \
  |  |  ------------------
  |  |  |  |   39|     42|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  130|     42|    glib_typeof ((atomic)) gapg_temp_atomic = (atomic);                    \
  |  |  ------------------
  |  |  |  |   39|     42|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  131|     42|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  132|     42|    gapg_temp_newval;                                                      \
  |  |  133|     42|  }))
  ------------------
  309|       |
  310|     42|  if G_UNLIKELY (impl == NULL)
  ------------------
  |  | 1187|     42|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|     42| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|     42|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|     42|   int _g_boolean_var_;                         \
  |  |  |  | 1180|     42|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 2, False: 40]
  |  |  |  |  ------------------
  |  |  |  | 1181|     42|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|     42|   else                                         \
  |  |  |  | 1183|     42|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|     42|   _g_boolean_var_;                             \
  |  |  |  | 1185|     42|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 2, False: 40]
  |  |  ------------------
  ------------------
  311|      2|    {
  312|      2|      impl = g_rec_mutex_impl_new ();
  313|      2|      if (!g_atomic_pointer_compare_and_exchange (&rec_mutex->p, NULL, impl))
  ------------------
  |  |  252|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  253|      2|    G_STATIC_ASSERT (sizeof (oldval) == sizeof (gpointer));                  \
  |  |  ------------------
  |  |  |  |  824|      2|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  254|      2|    gpointer gapcae_oldval = (gpointer)(oldval);                             \
  |  |  255|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  ------------------
  |  |  |  |  824|      2|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  256|      2|    (void) (0 ? (gpointer) *(atomic) : NULL);                                \
  |  |  ------------------
  |  |  |  Branch (256:13): [Folded, False: 2]
  |  |  ------------------
  |  |  257|      2|    __atomic_compare_exchange_n ((atomic), (void *) (&(gapcae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  ------------------
  |  |  |  |  880|      2|#define	FALSE	(0)
  |  |  ------------------
  |  |                   __atomic_compare_exchange_n ((atomic), (void *) (&(gapcae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  ------------------
  |  |  |  |  884|      2|#define	TRUE	(!FALSE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  880|      2|#define	FALSE	(0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   __atomic_compare_exchange_n ((atomic), (void *) (&(gapcae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  |  |  |  Branch (257:5): [True: 2, False: 0]
  |  |  ------------------
  |  |  258|      2|  }))
  ------------------
  |  Branch (313:11): [True: 0, False: 2]
  ------------------
  314|      0|        g_rec_mutex_impl_free (impl);
  315|      2|      impl = rec_mutex->p;
  316|      2|    }
  317|       |
  318|     42|  return impl;
  319|     42|}
gthread-posix.c:g_rw_lock_impl_new:
  444|      3|{
  445|      3|  pthread_rwlock_t *rwlock;
  446|      3|  gint status;
  447|       |
  448|      3|  rwlock = malloc (sizeof (pthread_rwlock_t));
  449|      3|  if G_UNLIKELY (rwlock == NULL)
  ------------------
  |  | 1187|      3|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      3| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      3|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      3|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      3|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  |  | 1181|      3|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      3|   else                                         \
  |  |  |  | 1183|      3|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      3|   _g_boolean_var_;                             \
  |  |  |  | 1185|      3|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 0, False: 3]
  |  |  ------------------
  ------------------
  450|      0|    g_thread_abort (errno, "malloc");
  451|       |
  452|      3|  if G_UNLIKELY ((status = pthread_rwlock_init (rwlock, NULL)) != 0)
  ------------------
  |  | 1187|      3|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      3| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      3|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      3|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      3|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  |  | 1181|      3|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      3|   else                                         \
  |  |  |  | 1183|      3|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      3|   _g_boolean_var_;                             \
  |  |  |  | 1185|      3|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 0, False: 3]
  |  |  ------------------
  ------------------
  453|      0|    g_thread_abort (status, "pthread_rwlock_init");
  454|       |
  455|      3|  return rwlock;
  456|      3|}
gthread-posix.c:g_rw_lock_get_impl:
  467|  27.9k|{
  468|  27.9k|  pthread_rwlock_t *impl = g_atomic_pointer_get (&lock->p);
  ------------------
  |  |  127|  27.9k|  (G_GNUC_EXTENSION ({                                                     \
  |  |  ------------------
  |  |  |  |   62|  27.9k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  128|  27.9k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));               \
  |  |  ------------------
  |  |  |  |  824|  27.9k|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  129|  27.9k|    glib_typeof (*(atomic)) gapg_temp_newval;                              \
  |  |  ------------------
  |  |  |  |   39|  27.9k|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  130|  27.9k|    glib_typeof ((atomic)) gapg_temp_atomic = (atomic);                    \
  |  |  ------------------
  |  |  |  |   39|  27.9k|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  131|  27.9k|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  132|  27.9k|    gapg_temp_newval;                                                      \
  |  |  133|  27.9k|  }))
  ------------------
  469|       |
  470|  27.9k|  if G_UNLIKELY (impl == NULL)
  ------------------
  |  | 1187|  27.9k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  27.9k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  27.9k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  27.9k|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  27.9k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 3, False: 27.9k]
  |  |  |  |  ------------------
  |  |  |  | 1181|  27.9k|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  27.9k|   else                                         \
  |  |  |  | 1183|  27.9k|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  27.9k|   _g_boolean_var_;                             \
  |  |  |  | 1185|  27.9k|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 3, False: 27.9k]
  |  |  ------------------
  ------------------
  471|      3|    {
  472|      3|      impl = g_rw_lock_impl_new ();
  473|      3|      if (!g_atomic_pointer_compare_and_exchange (&lock->p, NULL, impl))
  ------------------
  |  |  252|      3|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      3|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  253|      3|    G_STATIC_ASSERT (sizeof (oldval) == sizeof (gpointer));                  \
  |  |  ------------------
  |  |  |  |  824|      3|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  254|      3|    gpointer gapcae_oldval = (gpointer)(oldval);                             \
  |  |  255|      3|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  ------------------
  |  |  |  |  824|      3|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  256|      3|    (void) (0 ? (gpointer) *(atomic) : NULL);                                \
  |  |  ------------------
  |  |  |  Branch (256:13): [Folded, False: 3]
  |  |  ------------------
  |  |  257|      3|    __atomic_compare_exchange_n ((atomic), (void *) (&(gapcae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  ------------------
  |  |  |  |  880|      3|#define	FALSE	(0)
  |  |  ------------------
  |  |                   __atomic_compare_exchange_n ((atomic), (void *) (&(gapcae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  ------------------
  |  |  |  |  884|      3|#define	TRUE	(!FALSE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  880|      3|#define	FALSE	(0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   __atomic_compare_exchange_n ((atomic), (void *) (&(gapcae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  |  |  |  Branch (257:5): [True: 3, False: 0]
  |  |  ------------------
  |  |  258|      3|  }))
  ------------------
  |  Branch (473:11): [True: 0, False: 3]
  ------------------
  474|      0|        g_rw_lock_impl_free (impl);
  475|      3|      impl = lock->p;
  476|      3|    }
  477|       |
  478|  27.9k|  return impl;
  479|  27.9k|}
gthread-posix.c:g_private_get_impl:
 1052|  1.08G|{
 1053|  1.08G|  pthread_key_t *impl = g_atomic_pointer_get (&key->p);
  ------------------
  |  |  127|  1.08G|  (G_GNUC_EXTENSION ({                                                     \
  |  |  ------------------
  |  |  |  |   62|  1.08G|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  128|  1.08G|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));               \
  |  |  ------------------
  |  |  |  |  824|  1.08G|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  129|  1.08G|    glib_typeof (*(atomic)) gapg_temp_newval;                              \
  |  |  ------------------
  |  |  |  |   39|  1.08G|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  130|  1.08G|    glib_typeof ((atomic)) gapg_temp_atomic = (atomic);                    \
  |  |  ------------------
  |  |  |  |   39|  1.08G|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  131|  1.08G|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  132|  1.08G|    gapg_temp_newval;                                                      \
  |  |  133|  1.08G|  }))
  ------------------
 1054|       |
 1055|  1.08G|  if G_UNLIKELY (impl == NULL)
  ------------------
  |  | 1187|  1.08G|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  1.08G| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  1.08G|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  1.08G|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  1.08G|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 6, False: 1.08G]
  |  |  |  |  ------------------
  |  |  |  | 1181|  1.08G|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  1.08G|   else                                         \
  |  |  |  | 1183|  1.08G|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  1.08G|   _g_boolean_var_;                             \
  |  |  |  | 1185|  1.08G|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 6, False: 1.08G]
  |  |  ------------------
  ------------------
 1056|      6|    {
 1057|      6|      impl = g_private_impl_new (key->notify);
 1058|      6|      if (!g_atomic_pointer_compare_and_exchange (&key->p, NULL, impl))
  ------------------
  |  |  252|      6|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  253|      6|    G_STATIC_ASSERT (sizeof (oldval) == sizeof (gpointer));                  \
  |  |  ------------------
  |  |  |  |  824|      6|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  254|      6|    gpointer gapcae_oldval = (gpointer)(oldval);                             \
  |  |  255|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  ------------------
  |  |  |  |  824|      6|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  256|      6|    (void) (0 ? (gpointer) *(atomic) : NULL);                                \
  |  |  ------------------
  |  |  |  Branch (256:13): [Folded, False: 6]
  |  |  ------------------
  |  |  257|      6|    __atomic_compare_exchange_n ((atomic), (void *) (&(gapcae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  ------------------
  |  |  |  |  880|      6|#define	FALSE	(0)
  |  |  ------------------
  |  |                   __atomic_compare_exchange_n ((atomic), (void *) (&(gapcae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  ------------------
  |  |  |  |  884|      6|#define	TRUE	(!FALSE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  880|      6|#define	FALSE	(0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   __atomic_compare_exchange_n ((atomic), (void *) (&(gapcae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  |  |  |  Branch (257:5): [True: 6, False: 0]
  |  |  ------------------
  |  |  258|      6|  }))
  ------------------
  |  Branch (1058:11): [True: 0, False: 6]
  ------------------
 1059|      0|        {
 1060|      0|          g_private_impl_free (impl);
 1061|      0|          impl = key->p;
 1062|      0|        }
 1063|      6|    }
 1064|       |
 1065|  1.08G|  return impl;
 1066|  1.08G|}
gthread-posix.c:g_private_impl_new:
 1025|      6|{
 1026|      6|  pthread_key_t *key;
 1027|      6|  gint status;
 1028|       |
 1029|      6|  key = malloc (sizeof (pthread_key_t));
 1030|      6|  if G_UNLIKELY (key == NULL)
  ------------------
  |  | 1187|      6|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      6|   else                                         \
  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  | 1185|      6|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 0, False: 6]
  |  |  ------------------
  ------------------
 1031|      0|    g_thread_abort (errno, "malloc");
 1032|      6|  status = pthread_key_create (key, notify);
 1033|      6|  if G_UNLIKELY (status != 0)
  ------------------
  |  | 1187|      6|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      6| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      6|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      6|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  | 1181|      6|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      6|   else                                         \
  |  |  |  | 1183|      6|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      6|   _g_boolean_var_;                             \
  |  |  |  | 1185|      6|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 0, False: 6]
  |  |  ------------------
  ------------------
 1034|      0|    g_thread_abort (status, "pthread_key_create");
 1035|       |
 1036|      6|  return key;
 1037|      6|}

g_private_set_alloc0:
  543|      5|{
  544|      5|  gpointer allocated = g_malloc0 (size);
  545|       |
  546|      5|  g_private_set (key, allocated);
  547|       |
  548|      5|  return g_steal_pointer (&allocated);
  ------------------
  |  |  231|      5|#define g_steal_pointer(pp) ((glib_typeof (*pp)) (g_steal_pointer) (pp))
  ------------------
  549|      5|}
g_once_init_enter:
  702|     14|{
  703|     14|  gsize *value_location = (gsize *) location;
  704|     14|  gboolean need_init = FALSE;
  ------------------
  |  |  880|     14|#define	FALSE	(0)
  ------------------
  705|     14|  g_mutex_lock (&g_once_mutex);
  706|     14|  if (g_atomic_pointer_get (value_location) == 0)
  ------------------
  |  |  127|     14|  (G_GNUC_EXTENSION ({                                                     \
  |  |  ------------------
  |  |  |  |   62|     14|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  128|     14|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));               \
  |  |  ------------------
  |  |  |  |  824|     14|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  129|     14|    glib_typeof (*(atomic)) gapg_temp_newval;                              \
  |  |  ------------------
  |  |  |  |   39|     14|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  130|     14|    glib_typeof ((atomic)) gapg_temp_atomic = (atomic);                    \
  |  |  ------------------
  |  |  |  |   39|     14|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  131|     14|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  132|     14|    gapg_temp_newval;                                                      \
  |  |  133|     14|  }))
  ------------------
  |  Branch (706:7): [True: 14, False: 0]
  ------------------
  707|     14|    {
  708|     14|      if (!g_slist_find (g_once_init_list, (void*) value_location))
  ------------------
  |  Branch (708:11): [True: 14, False: 0]
  ------------------
  709|     14|        {
  710|     14|          need_init = TRUE;
  ------------------
  |  |  884|     14|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|     14|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  711|     14|          g_once_init_list = g_slist_prepend (g_once_init_list, (void*) value_location);
  712|     14|        }
  713|      0|      else
  714|      0|        do
  715|      0|          g_cond_wait (&g_once_cond, &g_once_mutex);
  716|      0|        while (g_slist_find (g_once_init_list, (void*) value_location));
  ------------------
  |  Branch (716:16): [True: 0, False: 0]
  ------------------
  717|     14|    }
  718|     14|  g_mutex_unlock (&g_once_mutex);
  719|     14|  return need_init;
  720|     14|}
g_once_init_leave:
  742|     14|{
  743|     14|  gsize *value_location = (gsize *) location;
  744|     14|  gsize old_value;
  745|       |
  746|     14|  g_return_if_fail (result != 0);
  ------------------
  |  |  639|     14|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     14|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|     14|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     14|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     14| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     14|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     14|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     14|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 14, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     14|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     14|   else                                         \
  |  |  |  |  |  | 1183|     14|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     14|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     14|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 14, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|     14|      { } \
  |  |  642|     14|    else \
  |  |  643|     14|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|     14|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     14|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  747|       |
  748|     14|  old_value = (gsize) g_atomic_pointer_exchange (value_location, result);
  ------------------
  |  |  272|     14|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|     14|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  273|     14|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  ------------------
  |  |  |  |  824|     14|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  274|     14|    (void) (0 ? (gpointer) *(atomic) : NULL);                                \
  |  |  ------------------
  |  |  |  Branch (274:13): [Folded, False: 14]
  |  |  ------------------
  |  |  275|     14|    (gpointer) __atomic_exchange_n ((atomic), (newval), __ATOMIC_SEQ_CST);   \
  |  |  276|     14|  }))
  ------------------
  749|     14|  g_return_if_fail (old_value == 0);
  ------------------
  |  |  639|     14|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     14|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|     14|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     14|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     14| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     14|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     14|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     14|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 14, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     14|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     14|   else                                         \
  |  |  |  |  |  | 1183|     14|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     14|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     14|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 14, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|     14|      { } \
  |  |  642|     14|    else \
  |  |  643|     14|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|     14|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     14|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  750|       |
  751|     14|  g_mutex_lock (&g_once_mutex);
  752|     14|  g_return_if_fail (g_once_init_list != NULL);
  ------------------
  |  |  639|     14|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     14|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|     14|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     14|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     14| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     14|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     14|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     14|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 14, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     14|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     14|   else                                         \
  |  |  |  |  |  | 1183|     14|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     14|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     14|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 14, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|     14|      { } \
  |  |  642|     14|    else \
  |  |  643|     14|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|     14|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     14|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  753|     14|  g_once_init_list = g_slist_remove (g_once_init_list, (void*) value_location);
  754|     14|  g_cond_broadcast (&g_once_cond);
  755|     14|  g_mutex_unlock (&g_once_mutex);
  756|     14|}

g_time_zone_unref:
  228|    958|{
  229|    958|  int ref_count;
  230|       |
  231|    958|again:
  232|    958|  ref_count = g_atomic_int_get (&tz->ref_count);
  ------------------
  |  |  110|    958|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|    958|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  111|    958|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|    958|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  112|    958|    gint gaig_temp;                                                          \
  |  |  113|    958|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (113:13): [Folded, False: 958]
  |  |  ------------------
  |  |  114|    958|    __atomic_load ((gint *)(atomic), &gaig_temp, __ATOMIC_SEQ_CST);          \
  |  |  115|    958|    (gint) gaig_temp;                                                        \
  |  |  116|    958|  }))
  ------------------
  233|       |
  234|    958|  g_assert (ref_count > 0);
  ------------------
  |  |  234|    958|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    958|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|    958|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|    958|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    958| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    958|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    958|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    958|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 958, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    958|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    958|   else                                         \
  |  |  |  |  |  | 1183|    958|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    958|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    958|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 958, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|    958|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|    958|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    958|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 958]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  235|       |
  236|    958|  if (ref_count == 1)
  ------------------
  |  Branch (236:7): [True: 0, False: 958]
  ------------------
  237|      0|    {
  238|      0|      if (tz->name != NULL)
  ------------------
  |  Branch (238:11): [True: 0, False: 0]
  ------------------
  239|      0|        {
  240|      0|          G_LOCK(time_zones);
  ------------------
  |  |  137|      0|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      0|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  241|       |
  242|       |          /* someone else might have grabbed a ref in the meantime */
  243|      0|          if G_UNLIKELY (g_atomic_int_get (&tz->ref_count) != 1)
  ------------------
  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [Folded, False: 0]
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      0|   else                                         \
  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  | 1185|      0|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  244|      0|            {
  245|      0|              G_UNLOCK(time_zones);
  ------------------
  |  |  138|      0|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      0|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  246|      0|              goto again;
  247|      0|            }
  248|       |
  249|      0|          if (time_zones != NULL)
  ------------------
  |  Branch (249:15): [True: 0, False: 0]
  ------------------
  250|      0|            g_hash_table_remove (time_zones, tz->name);
  251|      0|          G_UNLOCK(time_zones);
  ------------------
  |  |  138|      0|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      0|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  252|      0|        }
  253|       |
  254|      0|      if (tz->t_info != NULL)
  ------------------
  |  Branch (254:11): [True: 0, False: 0]
  ------------------
  255|      0|        {
  256|      0|          guint idx;
  257|      0|          for (idx = 0; idx < tz->t_info->len; idx++)
  ------------------
  |  Branch (257:25): [True: 0, False: 0]
  ------------------
  258|      0|            {
  259|      0|              TransitionInfo *info = &g_array_index (tz->t_info, TransitionInfo, idx);
  ------------------
  |  |   69|      0|#define g_array_index(a,t,i)      (((t*) (void *) (a)->data) [(i)])
  ------------------
  260|      0|              g_free (info->abbrev);
  261|      0|            }
  262|      0|          g_array_free (tz->t_info, TRUE);
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  263|      0|        }
  264|      0|      if (tz->transitions != NULL)
  ------------------
  |  Branch (264:11): [True: 0, False: 0]
  ------------------
  265|      0|        g_array_free (tz->transitions, TRUE);
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  266|      0|      g_free (tz->name);
  267|       |
  268|      0|      g_slice_free (GTimeZone, tz);
  ------------------
  |  |   81|      0|#define g_slice_free(type, mem)                                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   82|      0|G_STMT_START {                                                  \
  |  |   83|      0|  if (1) g_slice_free1 (sizeof (type), (mem));			\
  |  |  ------------------
  |  |  |  Branch (83:7): [True: 0, Folded]
  |  |  ------------------
  |  |   84|      0|  else   (void) ((type*) 0 == (mem)); 				\
  |  |   85|      0|} G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|      0|    }
  270|       |
  271|    958|  else if G_UNLIKELY (!g_atomic_int_compare_and_exchange (&tz->ref_count,
  ------------------
  |  | 1187|    958|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|    958| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    958|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|    958|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  4.79k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [Folded, False: 958]
  |  |  |  |  |  Branch (1180:8): [True: 958, False: 0]
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 958]
  |  |  |  |  ------------------
  |  |  |  | 1181|    958|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|    958|   else                                         \
  |  |  |  | 1183|    958|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|    958|   _g_boolean_var_;                             \
  |  |  |  | 1185|    958|})
  |  |  ------------------
  |  |  |  Branch (1187:27): [True: 0, False: 958]
  |  |  ------------------
  ------------------
  272|    958|                                                          ref_count,
  273|    958|                                                          ref_count - 1))
  274|      0|    goto again;
  275|    958|}
g_time_zone_ref:
  289|    960|{
  290|    960|  g_assert (tz->ref_count > 0);
  ------------------
  |  |  234|    960|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    960|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|    960|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|    960|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    960| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    960|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    960|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    960|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 960, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    960|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    960|   else                                         \
  |  |  |  |  |  | 1183|    960|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    960|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    960|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 960, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|    960|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|    960|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    960|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 960]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  291|       |
  292|    960|  g_atomic_int_inc (&tz->ref_count);
  ------------------
  |  |  162|    960|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|    960|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|    960|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|    960|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  164|    960|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded, False: 960]
  |  |  ------------------
  |  |  165|    960|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  166|    960|  }))
  ------------------
  293|       |
  294|    960|  return tz;
  295|    960|}
g_time_zone_new_identifier:
 1841|    125|{
 1842|    125|  GTimeZone *tz = NULL;
 1843|    125|  TimeZoneRule *rules;
 1844|    125|  gint rules_num;
 1845|    125|  gchar *resolved_identifier = NULL;
 1846|       |
 1847|    125|  if (identifier)
  ------------------
  |  Branch (1847:7): [True: 125, False: 0]
  ------------------
 1848|    125|    {
 1849|    125|      G_LOCK (time_zones);
  ------------------
  |  |  137|    125|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|    125|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
 1850|    125|      if (time_zones == NULL)
  ------------------
  |  Branch (1850:11): [True: 2, False: 123]
  ------------------
 1851|      2|        time_zones = g_hash_table_new (g_str_hash, g_str_equal);
 1852|       |
 1853|    125|      tz = g_hash_table_lookup (time_zones, identifier);
 1854|    125|      if (tz)
  ------------------
  |  Branch (1854:11): [True: 0, False: 125]
  ------------------
 1855|      0|        {
 1856|      0|          g_atomic_int_inc (&tz->ref_count);
  ------------------
  |  |  162|      0|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|      0|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|      0|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  164|      0|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded, False: 0]
  |  |  ------------------
  |  |  165|      0|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  166|      0|  }))
  ------------------
 1857|      0|          G_UNLOCK (time_zones);
  ------------------
  |  |  138|      0|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      0|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
 1858|      0|          return tz;
 1859|      0|        }
 1860|    125|      else
 1861|    125|        resolved_identifier = g_strdup (identifier);
 1862|    125|    }
 1863|      0|  else
 1864|      0|    {
 1865|      0|      G_LOCK (tz_default);
  ------------------
  |  |  137|      0|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      0|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
 1866|      0|#ifdef G_OS_UNIX
 1867|      0|      resolved_identifier = zone_identifier_unix ();
 1868|       |#elif defined (G_OS_WIN32)
 1869|       |      resolved_identifier = windows_default_tzname ();
 1870|       |#endif
 1871|      0|      if (tz_default)
  ------------------
  |  Branch (1871:11): [True: 0, False: 0]
  ------------------
 1872|      0|        {
 1873|       |          /* Flush default if changed. If the identifier couldn’t be resolved,
 1874|       |           * we’re going to fall back to UTC eventually, so don’t clear out the
 1875|       |           * cache if it’s already UTC. */
 1876|      0|          if (!(resolved_identifier == NULL && g_str_equal (tz_default->name, "UTC")) &&
  ------------------
  |  |  165|      0|#define g_str_equal(v1, v2) (strcmp ((const char *) (v1), (const char *) (v2)) == 0)
  |  |  ------------------
  |  |  |  Branch (165:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1876:17): [True: 0, False: 0]
  ------------------
 1877|      0|              g_strcmp0 (tz_default->name, resolved_identifier) != 0)
  ------------------
  |  Branch (1877:15): [True: 0, False: 0]
  ------------------
 1878|      0|            {
 1879|      0|              g_clear_pointer (&tz_default, g_time_zone_unref);
  ------------------
  |  |  129|      0|  G_STMT_START                                           \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  130|      0|  {                                                      \
  |  |  131|      0|    G_STATIC_ASSERT (sizeof *(pp) == sizeof (gpointer)); \
  |  |  ------------------
  |  |  |  |  824|      0|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  132|      0|    glib_typeof ((pp)) _pp = (pp);                       \
  |  |  ------------------
  |  |  |  |   39|      0|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  133|      0|    glib_typeof (*(pp)) _ptr = *_pp;                     \
  |  |  ------------------
  |  |  |  |   39|      0|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  134|      0|    *_pp = NULL;                                         \
  |  |  135|      0|    if (_ptr)                                            \
  |  |  ------------------
  |  |  |  Branch (135:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  136|      0|      (destroy) (_ptr);                                  \
  |  |  137|      0|  }                                                      \
  |  |  138|      0|  G_STMT_END                                             \
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|      0|  GLIB_AVAILABLE_MACRO_IN_2_34
  ------------------
 1880|      0|            }
 1881|      0|          else
 1882|      0|            {
 1883|      0|              tz = g_time_zone_ref (tz_default);
 1884|      0|              G_UNLOCK (tz_default);
  ------------------
  |  |  138|      0|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      0|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
 1885|       |
 1886|      0|              g_free (resolved_identifier);
 1887|      0|              return tz;
 1888|      0|            }
 1889|      0|        }
 1890|      0|    }
 1891|       |
 1892|    125|  tz = g_slice_new0 (GTimeZone);
  ------------------
  |  |   54|    125|  (type *) (G_GNUC_EXTENSION ({                                 \
  |  |  ------------------
  |  |  |  |   62|    125|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |   55|    125|    gsize __s = sizeof (type);                                  \
  |  |   56|    125|    gpointer __p;                                               \
  |  |   57|    125|    __p = g_slice_alloc (__s);                                  \
  |  |   58|    125|    memset (__p, 0, __s);                                       \
  |  |   59|    125|    __p;                                                        \
  |  |   60|    125|  }))
  ------------------
 1893|    125|  tz->ref_count = 0;
 1894|       |
 1895|    125|  zone_for_constant_offset (tz, identifier);
 1896|       |
 1897|    125|  if (tz->t_info == NULL &&
  ------------------
  |  Branch (1897:7): [True: 123, False: 2]
  ------------------
 1898|    123|      (rules_num = rules_from_identifier (identifier, &rules)))
  ------------------
  |  Branch (1898:7): [True: 0, False: 123]
  ------------------
 1899|      0|    {
 1900|      0|      init_zone_from_rules (tz, rules, rules_num, g_steal_pointer (&resolved_identifier));
  ------------------
  |  |  231|      0|#define g_steal_pointer(pp) ((glib_typeof (*pp)) (g_steal_pointer) (pp))
  ------------------
 1901|      0|      g_free (rules);
 1902|      0|    }
 1903|       |
 1904|    125|  if (tz->t_info == NULL)
  ------------------
  |  Branch (1904:7): [True: 123, False: 2]
  ------------------
 1905|    123|    {
 1906|    123|#ifdef G_OS_UNIX
 1907|    123|      GBytes *zoneinfo = zone_info_unix (identifier, resolved_identifier);
 1908|    123|      if (zoneinfo != NULL)
  ------------------
  |  Branch (1908:11): [True: 0, False: 123]
  ------------------
 1909|      0|        {
 1910|      0|          init_zone_from_iana_info (tz, zoneinfo, g_steal_pointer (&resolved_identifier));
  ------------------
  |  |  231|      0|#define g_steal_pointer(pp) ((glib_typeof (*pp)) (g_steal_pointer) (pp))
  ------------------
 1911|      0|          g_bytes_unref (zoneinfo);
 1912|      0|        }
 1913|       |#elif defined (G_OS_WIN32)
 1914|       |      if ((rules_num = rules_from_windows_time_zone (identifier,
 1915|       |                                                     resolved_identifier,
 1916|       |                                                     &rules)))
 1917|       |        {
 1918|       |          init_zone_from_rules (tz, rules, rules_num, g_steal_pointer (&resolved_identifier));
 1919|       |          g_free (rules);
 1920|       |        }
 1921|       |#endif
 1922|    123|    }
 1923|       |
 1924|       |#if defined (G_OS_WIN32)
 1925|       |  if (tz->t_info == NULL)
 1926|       |    {
 1927|       |      if (identifier == NULL)
 1928|       |        {
 1929|       |          TIME_ZONE_INFORMATION tzi;
 1930|       |
 1931|       |          if (GetTimeZoneInformation (&tzi) != TIME_ZONE_ID_INVALID)
 1932|       |            {
 1933|       |              rules = g_new0 (TimeZoneRule, 2);
 1934|       |
 1935|       |              if (rule_from_windows_time_zone_info (&rules[0], &tzi))
 1936|       |                {
 1937|       |                  memset (rules[0].std_name, 0, NAME_SIZE);
 1938|       |                  memset (rules[0].dlt_name, 0, NAME_SIZE);
 1939|       |
 1940|       |                  rules[0].start_year = MIN_TZYEAR;
 1941|       |                  rules[1].start_year = MAX_TZYEAR;
 1942|       |
 1943|       |                  init_zone_from_rules (tz, rules, 2, g_steal_pointer (&resolved_identifier));
 1944|       |                }
 1945|       |
 1946|       |              g_free (rules);
 1947|       |            }
 1948|       |        }
 1949|       |    }
 1950|       |#endif
 1951|       |
 1952|    125|  g_free (resolved_identifier);
 1953|       |
 1954|       |  /* Failed to load the timezone. */
 1955|    125|  if (tz->t_info == NULL)
  ------------------
  |  Branch (1955:7): [True: 123, False: 2]
  ------------------
 1956|    123|    {
 1957|    123|      g_slice_free (GTimeZone, tz);
  ------------------
  |  |   81|    123|#define g_slice_free(type, mem)                                 \
  |  |  ------------------
  |  |  |  |  940|    123|#define G_STMT_START  do
  |  |  ------------------
  |  |   82|    123|G_STMT_START {                                                  \
  |  |   83|    123|  if (1) g_slice_free1 (sizeof (type), (mem));			\
  |  |  ------------------
  |  |  |  Branch (83:7): [True: 123, Folded]
  |  |  ------------------
  |  |   84|    123|  else   (void) ((type*) 0 == (mem)); 				\
  |  |   85|    123|} G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    123|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 123]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1958|       |
 1959|    123|      if (identifier)
  ------------------
  |  Branch (1959:11): [True: 123, False: 0]
  ------------------
 1960|    123|        G_UNLOCK (time_zones);
  ------------------
  |  |  138|    123|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|    123|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
 1961|      0|      else
 1962|      0|        G_UNLOCK (tz_default);
  ------------------
  |  |  138|      0|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      0|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
 1963|       |
 1964|    123|      return NULL;
 1965|    123|    }
 1966|       |
 1967|    125|  g_assert (tz->name != NULL);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|    125|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    125|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1968|      2|  g_assert (tz->t_info != NULL);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1969|       |
 1970|      2|  if (identifier)
  ------------------
  |  Branch (1970:7): [True: 2, False: 0]
  ------------------
 1971|      2|    g_hash_table_insert (time_zones, tz->name, tz);
 1972|      0|  else if (tz->name)
  ------------------
  |  Branch (1972:12): [True: 0, False: 0]
  ------------------
 1973|      0|    {
 1974|       |      /* Caching reference */
 1975|      0|      g_atomic_int_inc (&tz->ref_count);
  ------------------
  |  |  162|      0|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|      0|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|      0|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  164|      0|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded, False: 0]
  |  |  ------------------
  |  |  165|      0|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  166|      0|  }))
  ------------------
 1976|      0|      tz_default = tz;
 1977|      0|    }
 1978|       |
 1979|      2|  g_atomic_int_inc (&tz->ref_count);
  ------------------
  |  |  162|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|      2|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  164|      2|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded, False: 2]
  |  |  ------------------
  |  |  165|      2|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  166|      2|  }))
  ------------------
 1980|       |
 1981|      2|  if (identifier)
  ------------------
  |  Branch (1981:7): [True: 2, False: 0]
  ------------------
 1982|      2|    G_UNLOCK (time_zones);
  ------------------
  |  |  138|      2|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      2|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
 1983|      0|  else
 1984|      0|    G_UNLOCK (tz_default);
  ------------------
  |  |  138|      0|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      0|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
 1985|       |
 1986|      2|  return tz;
 1987|      2|}
g_time_zone_new_utc:
 2006|    960|{
 2007|    960|  static GTimeZone *utc = NULL;
 2008|    960|  static gsize initialised;
 2009|       |
 2010|    960|  if (g_once_init_enter (&initialised))
  ------------------
  |  |  259|    960|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   62|    960|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (259:3): [True: 2, False: 958]
  |  |  ------------------
  |  |  260|    960|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  824|    960|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  261|    960|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (261:13): [Folded, False: 960]
  |  |  ------------------
  |  |  262|    960|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  127|  1.92k|  (G_GNUC_EXTENSION ({                                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    960|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  128|  1.92k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));               \
  |  |  |  |  ------------------
  |  |  |  |  |  |  824|    960|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  |  |  ------------------
  |  |  |  |  129|  1.92k|    glib_typeof (*(atomic)) gapg_temp_newval;                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|    960|#define glib_typeof(t) __typeof__ (t)
  |  |  |  |  ------------------
  |  |  |  |  130|  1.92k|    glib_typeof ((atomic)) gapg_temp_atomic = (atomic);                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|    960|#define glib_typeof(t) __typeof__ (t)
  |  |  |  |  ------------------
  |  |  |  |  131|  1.92k|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  |  |  132|  1.92k|    gapg_temp_newval;                                                      \
  |  |  |  |  133|  1.92k|  }))
  |  |  ------------------
  |  |  |  Branch (262:6): [True: 2, False: 958]
  |  |  ------------------
  |  |  263|    960|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (263:6): [True: 2, False: 0]
  |  |  ------------------
  |  |  264|    960|  }))
  ------------------
 2011|      2|    {
 2012|      2|      utc = g_time_zone_new_identifier ("UTC");
 2013|      2|      g_assert (utc != NULL);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2014|      2|      g_once_init_leave (&initialised, TRUE);
  ------------------
  |  |  266|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  267|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  824|      2|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  268|      2|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (268:5): [Folded, False: 2]
  |  |  ------------------
  |  |  269|      2|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  270|      2|  }))
  ------------------
 2015|      2|    }
 2016|       |
 2017|    960|  return g_time_zone_ref (utc);
 2018|    960|}
gtimezone.c:zone_info_base_dir:
  521|    123|{
  522|    123|  if (g_file_test ("/usr/share/zoneinfo", G_FILE_TEST_IS_DIR))
  ------------------
  |  Branch (522:7): [True: 123, False: 0]
  ------------------
  523|    123|    return "/usr/share/zoneinfo";     /* Most distros */
  524|      0|  else if (g_file_test ("/usr/share/lib/zoneinfo", G_FILE_TEST_IS_DIR))
  ------------------
  |  Branch (524:12): [True: 0, False: 0]
  ------------------
  525|      0|    return "/usr/share/lib/zoneinfo"; /* Illumos distros */
  526|       |
  527|       |  /* need a better fallback case */
  528|      0|  return "/usr/share/zoneinfo";
  529|    123|}
gtimezone.c:zone_for_constant_offset:
  429|    125|{
  430|    125|  gint32 offset;
  431|    125|  TransitionInfo info;
  432|       |
  433|    125|  if (name == NULL || !parse_constant_offset (name, &offset, FALSE))
  ------------------
  |  |  880|    125|#define	FALSE	(0)
  ------------------
  |  Branch (433:7): [True: 0, False: 125]
  |  Branch (433:23): [True: 123, False: 2]
  ------------------
  434|    123|    return;
  435|       |
  436|      2|  info.gmt_offset = offset;
  437|      2|  info.is_dst = FALSE;
  ------------------
  |  |  880|      2|#define	FALSE	(0)
  ------------------
  438|      2|  info.abbrev =  g_strdup (name);
  439|       |
  440|      2|  gtz->name = g_strdup (name);
  441|      2|  gtz->t_info = g_array_sized_new (FALSE, TRUE, sizeof (TransitionInfo), 1);
  ------------------
  |  |  880|      2|#define	FALSE	(0)
  ------------------
                gtz->t_info = g_array_sized_new (FALSE, TRUE, sizeof (TransitionInfo), 1);
  ------------------
  |  |  884|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  442|      2|  g_array_append_val (gtz->t_info, info);
  ------------------
  |  |   66|      2|#define g_array_append_val(a,v)	  g_array_append_vals (a, &(v), 1)
  ------------------
  443|       |
  444|       |  /* Constant offset, no transitions */
  445|       |  gtz->transitions = NULL;
  446|      2|}
gtimezone.c:parse_constant_offset:
  391|    125|{
  392|       |  /* Internet RFC 8536 section 3.3.1 and POSIX 8.3 TZ together say
  393|       |     that a transition time must be numeric.  */
  394|    125|  if (!rfc8536 && g_strcmp0 (name, "UTC") == 0)
  ------------------
  |  Branch (394:7): [True: 125, False: 0]
  |  Branch (394:19): [True: 2, False: 123]
  ------------------
  395|      2|    {
  396|      2|      *offset = 0;
  397|      2|      return TRUE;
  ------------------
  |  |  884|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  398|      2|    }
  399|       |
  400|    123|  if (*name >= '0' && '9' >= *name)
  ------------------
  |  Branch (400:7): [True: 0, False: 123]
  |  Branch (400:23): [True: 0, False: 0]
  ------------------
  401|      0|    return parse_time (name, offset, rfc8536);
  402|       |
  403|    123|  switch (*name++)
  404|    123|    {
  405|      0|    case 'Z':
  ------------------
  |  Branch (405:5): [True: 0, False: 123]
  ------------------
  406|      0|      *offset = 0;
  407|       |      /* Internet RFC 8536 section 3.3.1 requires a numeric zone.  */
  408|      0|      return !rfc8536 && !*name;
  ------------------
  |  Branch (408:14): [True: 0, False: 0]
  |  Branch (408:26): [True: 0, False: 0]
  ------------------
  409|       |
  410|      0|    case '+':
  ------------------
  |  Branch (410:5): [True: 0, False: 123]
  ------------------
  411|      0|      return parse_time (name, offset, rfc8536);
  412|       |
  413|    123|    case '-':
  ------------------
  |  Branch (413:5): [True: 123, False: 0]
  ------------------
  414|    123|      if (parse_time (name, offset, rfc8536))
  ------------------
  |  Branch (414:11): [True: 0, False: 123]
  ------------------
  415|      0|        {
  416|      0|          *offset = -*offset;
  417|      0|          return TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  418|      0|        }
  419|    123|      else
  420|    123|        return FALSE;
  ------------------
  |  |  880|    123|#define	FALSE	(0)
  ------------------
  421|       |
  422|      0|    default:
  ------------------
  |  Branch (422:5): [True: 0, False: 123]
  ------------------
  423|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  424|    123|    }
  425|    123|}
gtimezone.c:parse_time:
  314|    123|{
  315|    123|  if (*time_ < '0' || '9' < *time_)
  ------------------
  |  Branch (315:7): [True: 0, False: 123]
  |  Branch (315:23): [True: 0, False: 123]
  ------------------
  316|      0|    return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  317|       |
  318|    123|  *offset = 60 * 60 * (*time_++ - '0');
  319|       |
  320|    123|  if (*time_ == '\0')
  ------------------
  |  Branch (320:7): [True: 0, False: 123]
  ------------------
  321|      0|    return TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  322|       |
  323|    123|  if (*time_ != ':')
  ------------------
  |  Branch (323:7): [True: 123, False: 0]
  ------------------
  324|    123|    {
  325|    123|      if (*time_ < '0' || '9' < *time_)
  ------------------
  |  Branch (325:11): [True: 0, False: 123]
  |  Branch (325:27): [True: 0, False: 123]
  ------------------
  326|      0|        return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  327|       |
  328|    123|      *offset *= 10;
  329|    123|      *offset += 60 * 60 * (*time_++ - '0');
  330|       |
  331|    123|      if (rfc8536)
  ------------------
  |  Branch (331:11): [True: 0, False: 123]
  ------------------
  332|      0|        {
  333|       |          /* Internet RFC 8536 section 3.3.1 and POSIX 8.3 TZ together say
  334|       |             that a transition time must be of the form [+-]hh[:mm[:ss]] where
  335|       |             the hours part can range from -167 to 167.  */
  336|      0|          if ('0' <= *time_ && *time_ <= '9')
  ------------------
  |  Branch (336:15): [True: 0, False: 0]
  |  Branch (336:32): [True: 0, False: 0]
  ------------------
  337|      0|            {
  338|      0|              *offset *= 10;
  339|      0|              *offset += 60 * 60 * (*time_++ - '0');
  340|      0|            }
  341|      0|          if (*offset > 167 * 60 * 60)
  ------------------
  |  Branch (341:15): [True: 0, False: 0]
  ------------------
  342|      0|            return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  343|      0|        }
  344|    123|      else if (*offset > 24 * 60 * 60)
  ------------------
  |  Branch (344:16): [True: 0, False: 123]
  ------------------
  345|      0|        return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  346|       |
  347|    123|      if (*time_ == '\0')
  ------------------
  |  Branch (347:11): [True: 0, False: 123]
  ------------------
  348|      0|        return TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  349|    123|    }
  350|       |
  351|    123|  if (*time_ == ':')
  ------------------
  |  Branch (351:7): [True: 123, False: 0]
  ------------------
  352|    123|    time_++;
  353|      0|  else if (rfc8536)
  ------------------
  |  Branch (353:12): [True: 0, False: 0]
  ------------------
  354|      0|    return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  355|       |
  356|    123|  if (*time_ < '0' || '5' < *time_)
  ------------------
  |  Branch (356:7): [True: 0, False: 123]
  |  Branch (356:23): [True: 123, False: 0]
  ------------------
  357|    123|    return FALSE;
  ------------------
  |  |  880|    123|#define	FALSE	(0)
  ------------------
  358|       |
  359|      0|  *offset += 10 * 60 * (*time_++ - '0');
  360|       |
  361|      0|  if (*time_ < '0' || '9' < *time_)
  ------------------
  |  Branch (361:7): [True: 0, False: 0]
  |  Branch (361:23): [True: 0, False: 0]
  ------------------
  362|      0|    return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  363|       |
  364|      0|  *offset += 60 * (*time_++ - '0');
  365|       |
  366|      0|  if (*time_ == '\0')
  ------------------
  |  Branch (366:7): [True: 0, False: 0]
  ------------------
  367|      0|    return TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  368|       |
  369|      0|  if (*time_ == ':')
  ------------------
  |  Branch (369:7): [True: 0, False: 0]
  ------------------
  370|      0|    time_++;
  371|      0|  else if (rfc8536)
  ------------------
  |  Branch (371:12): [True: 0, False: 0]
  ------------------
  372|      0|    return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  373|       |
  374|      0|  if (*time_ < '0' || '5' < *time_)
  ------------------
  |  Branch (374:7): [True: 0, False: 0]
  |  Branch (374:23): [True: 0, False: 0]
  ------------------
  375|      0|    return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  376|       |
  377|      0|  *offset += 10 * (*time_++ - '0');
  378|       |
  379|      0|  if (*time_ < '0' || '9' < *time_)
  ------------------
  |  Branch (379:7): [True: 0, False: 0]
  |  Branch (379:23): [True: 0, False: 0]
  ------------------
  380|      0|    return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  381|       |
  382|      0|  *offset += *time_++ - '0';
  383|       |
  384|      0|  return *time_ == '\0';
  385|      0|}
gtimezone.c:rules_from_identifier:
 1643|    123|{
 1644|    123|  gchar *pos;
 1645|    123|  TimeZoneRule tzr;
 1646|       |
 1647|    123|  g_assert (rules != NULL);
  ------------------
  |  |  234|    123|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    123|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|    123|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|    123|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    123| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    123|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    123|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    123|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 123, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    123|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    123|   else                                         \
  |  |  |  |  |  | 1183|    123|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    123|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    123|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 123, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|    123|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|    123|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    123|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 123]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1648|       |
 1649|    123|  *rules = NULL;
 1650|       |
 1651|    123|  if (!identifier)
  ------------------
  |  Branch (1651:7): [True: 0, False: 123]
  ------------------
 1652|      0|    return 0;
 1653|       |
 1654|    123|  pos = (gchar*)identifier;
 1655|    123|  memset (&tzr, 0, sizeof (tzr));
 1656|       |  /* Standard offset */
 1657|    123|  if (!(set_tz_name (&pos, tzr.std_name, NAME_SIZE)) ||
  ------------------
  |  |  158|    123|#define NAME_SIZE 33
  ------------------
  |  Branch (1657:7): [True: 123, False: 0]
  ------------------
 1658|      0|      !parse_offset (&pos, &(tzr.std_offset)))
  ------------------
  |  Branch (1658:7): [True: 0, False: 0]
  ------------------
 1659|    123|    return 0;
 1660|       |
 1661|      0|  if (*pos == 0)
  ------------------
  |  Branch (1661:7): [True: 0, False: 0]
  ------------------
 1662|      0|    {
 1663|      0|      return create_ruleset_from_rule (rules, &tzr);
 1664|      0|    }
 1665|       |
 1666|       |  /* Format 2 */
 1667|      0|  if (!(set_tz_name (&pos, tzr.dlt_name, NAME_SIZE)))
  ------------------
  |  |  158|      0|#define NAME_SIZE 33
  ------------------
  |  Branch (1667:7): [True: 0, False: 0]
  ------------------
 1668|      0|    return 0;
 1669|      0|  parse_offset (&pos, &(tzr.dlt_offset));
 1670|      0|  if (tzr.dlt_offset == 0) /* No daylight offset given, assume it's 1
  ------------------
  |  Branch (1670:7): [True: 0, False: 0]
  ------------------
 1671|       |                              hour earlier that standard */
 1672|      0|    tzr.dlt_offset = tzr.std_offset - 3600;
 1673|      0|  if (*pos == '\0')
  ------------------
  |  Branch (1673:7): [True: 0, False: 0]
  ------------------
 1674|       |#ifdef G_OS_WIN32
 1675|       |    /* Windows allows us to use the US DST boundaries if they're not given */
 1676|       |    {
 1677|       |      guint i, rules_num = 0;
 1678|       |
 1679|       |      /* Use US rules, Windows' default is Pacific Standard Time */
 1680|       |      if ((rules_num = rules_from_windows_time_zone ("Pacific Standard Time",
 1681|       |                                                     NULL,
 1682|       |                                                     rules)))
 1683|       |        {
 1684|       |          for (i = 0; i < rules_num - 1; i++)
 1685|       |            {
 1686|       |              (*rules)[i].std_offset = - tzr.std_offset;
 1687|       |              (*rules)[i].dlt_offset = - tzr.dlt_offset;
 1688|       |              strcpy ((*rules)[i].std_name, tzr.std_name);
 1689|       |              strcpy ((*rules)[i].dlt_name, tzr.dlt_name);
 1690|       |            }
 1691|       |
 1692|       |          return rules_num;
 1693|       |        }
 1694|       |      else
 1695|       |        return 0;
 1696|       |    }
 1697|       |#else
 1698|      0|  return 0;
 1699|      0|#endif
 1700|       |  /* Start and end required (format 2) */
 1701|      0|  if (!parse_identifier_boundaries (&pos, &tzr))
  ------------------
  |  Branch (1701:7): [True: 0, False: 0]
  ------------------
 1702|      0|    return 0;
 1703|       |
 1704|      0|  return create_ruleset_from_rule (rules, &tzr);
 1705|      0|}
gtimezone.c:set_tz_name:
 1586|    123|{
 1587|    123|  gboolean quoted = **pos == '<';
 1588|    123|  gchar *name_pos = *pos;
 1589|    123|  guint len;
 1590|       |
 1591|    123|  g_assert (size != 0);
  ------------------
  |  |  234|    123|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    123|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|    123|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|    123|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    123| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    123|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    123|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    123|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 123, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    123|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    123|   else                                         \
  |  |  |  |  |  | 1183|    123|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    123|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    123|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 123, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|    123|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|    123|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    123|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 123]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1592|       |
 1593|    123|  if (quoted)
  ------------------
  |  Branch (1593:7): [True: 0, False: 123]
  ------------------
 1594|      0|    {
 1595|      0|      name_pos++;
 1596|      0|      do
 1597|      0|        ++(*pos);
 1598|      0|      while (g_ascii_isalnum (**pos) || **pos == '-' || **pos == '+');
  ------------------
  |  |   59|      0|  ((g_ascii_table[(guchar) (c)] & G_ASCII_ALNUM) != 0)
  |  |  ------------------
  |  |  |  Branch (59:3): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1598:41): [True: 0, False: 0]
  |  Branch (1598:57): [True: 0, False: 0]
  ------------------
 1599|      0|      if (**pos != '>')
  ------------------
  |  Branch (1599:11): [True: 0, False: 0]
  ------------------
 1600|      0|        return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 1601|      0|    }
 1602|    123|  else
 1603|    123|    while (g_ascii_isalpha (**pos))
  ------------------
  |  |   62|    123|  ((g_ascii_table[(guchar) (c)] & G_ASCII_ALPHA) != 0)
  |  |  ------------------
  |  |  |  Branch (62:3): [True: 0, False: 123]
  |  |  ------------------
  ------------------
 1604|      0|      ++(*pos);
 1605|       |
 1606|       |  /* Name should be three or more characters */
 1607|       |  /* FIXME: Should return FALSE if the name is too long.
 1608|       |     This should simplify code later in this function.  */
 1609|    123|  if (*pos - name_pos < 3)
  ------------------
  |  Branch (1609:7): [True: 123, False: 0]
  ------------------
 1610|    123|    return FALSE;
  ------------------
  |  |  880|    123|#define	FALSE	(0)
  ------------------
 1611|       |
 1612|      0|  memset (buffer, 0, size);
 1613|       |  /* name_pos isn't 0-terminated, so we have to limit the length expressly */
 1614|      0|  len = (guint) (*pos - name_pos) > size - 1 ? size - 1 : (guint) (*pos - name_pos);
  ------------------
  |  Branch (1614:9): [True: 0, False: 0]
  ------------------
 1615|      0|  strncpy (buffer, name_pos, len);
 1616|      0|  *pos += quoted;
 1617|      0|  return TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1618|    123|}
gtimezone.c:zone_info_unix:
  646|    123|{
  647|    123|  gchar *filename = NULL;
  648|    123|  GMappedFile *file = NULL;
  649|    123|  GBytes *zoneinfo = NULL;
  650|    123|  const gchar *tzdir;
  651|       |
  652|    123|  tzdir = g_getenv ("TZDIR");
  653|    123|  if (tzdir == NULL)
  ------------------
  |  Branch (653:7): [True: 123, False: 0]
  ------------------
  654|    123|    tzdir = zone_info_base_dir ();
  655|       |
  656|       |  /* identifier can be a relative or absolute path name;
  657|       |     if relative, it is interpreted starting from /usr/share/zoneinfo
  658|       |     while the POSIX standard says it should start with :,
  659|       |     glibc allows both syntaxes, so we should too */
  660|    123|  if (identifier != NULL)
  ------------------
  |  Branch (660:7): [True: 123, False: 0]
  ------------------
  661|    123|    {
  662|    123|      if (*identifier == ':')
  ------------------
  |  Branch (662:11): [True: 0, False: 123]
  ------------------
  663|      0|        identifier ++;
  664|       |
  665|    123|      if (g_path_is_absolute (identifier))
  ------------------
  |  Branch (665:11): [True: 0, False: 123]
  ------------------
  666|      0|        filename = g_strdup (identifier);
  667|    123|      else
  668|    123|        filename = g_build_filename (tzdir, identifier, NULL);
  669|    123|    }
  670|      0|  else
  671|      0|    {
  672|      0|      if (resolved_identifier == NULL)
  ------------------
  |  Branch (672:11): [True: 0, False: 0]
  ------------------
  673|      0|        goto out;
  674|       |
  675|      0|      filename = g_strdup ("/etc/localtime");
  676|      0|    }
  677|       |
  678|    123|  file = g_mapped_file_new (filename, FALSE, NULL);
  ------------------
  |  |  880|    123|#define	FALSE	(0)
  ------------------
  679|    123|  if (file != NULL)
  ------------------
  |  Branch (679:7): [True: 0, False: 123]
  ------------------
  680|      0|    {
  681|      0|      zoneinfo = g_bytes_new_with_free_func (g_mapped_file_get_contents (file),
  682|      0|                                             g_mapped_file_get_length (file),
  683|      0|                                             (GDestroyNotify)g_mapped_file_unref,
  684|      0|                                             g_mapped_file_ref (file));
  685|      0|      g_mapped_file_unref (file);
  686|      0|    }
  687|       |
  688|    123|  g_assert (resolved_identifier != NULL);
  ------------------
  |  |  234|    123|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    123|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|    123|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|    123|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    123| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    123|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    123|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    123|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 123, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    123|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    123|   else                                         \
  |  |  |  |  |  | 1183|    123|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    123|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    123|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 123, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|    123|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|    123|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    123|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 123]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  689|       |
  690|    123|out:
  691|    123|  g_free (filename);
  692|       |
  693|    123|  return zoneinfo;
  694|    123|}

g_tree_new:
  165|      2|{
  166|      2|  g_return_val_if_fail (key_compare_func != NULL, NULL);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|       |
  168|      2|  return g_tree_new_full ((GCompareDataFunc) key_compare_func, NULL,
  169|      2|                          NULL, NULL);
  170|      2|}
g_tree_new_full:
  214|    612|{
  215|    612|  GTree *tree;
  216|       |  
  217|    612|  g_return_val_if_fail (key_compare_func != NULL, NULL);
  ------------------
  |  |  652|    612|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    612|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    612|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    612|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    612| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    612|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    612|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    612|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 612, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    612|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    612|   else                                         \
  |  |  |  |  |  | 1183|    612|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    612|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    612|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 612, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    612|      { } \
  |  |  655|    612|    else \
  |  |  656|    612|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    612|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    612|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 612]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  218|       |  
  219|    612|  tree = g_slice_new (GTree);
  ------------------
  |  |   48|    612|#define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
  ------------------
  220|    612|  tree->root               = NULL;
  221|    612|  tree->key_compare        = key_compare_func;
  222|    612|  tree->key_destroy_func   = key_destroy_func;
  223|    612|  tree->value_destroy_func = value_destroy_func;
  224|    612|  tree->key_compare_data   = key_compare_data;
  225|    612|  tree->nnodes             = 0;
  226|    612|  tree->ref_count          = 1;
  227|       |  
  228|    612|  return tree;
  229|    612|}
g_tree_node_first:
  244|    610|{
  245|    610|  GTreeNode *tmp;
  246|       |
  247|    610|  g_return_val_if_fail (tree != NULL, NULL);
  ------------------
  |  |  652|    610|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    610|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    610|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    610|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    610| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    610|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    610|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    610|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 610, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    610|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    610|   else                                         \
  |  |  |  |  |  | 1183|    610|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    610|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    610|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 610, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    610|      { } \
  |  |  655|    610|    else \
  |  |  656|    610|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    610|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    610|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 610]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  248|       |
  249|    610|  if (!tree->root)
  ------------------
  |  Branch (249:7): [True: 610, False: 0]
  ------------------
  250|    610|    return NULL;
  251|       |
  252|      0|  tmp = tree->root;
  253|       |
  254|      0|  while (tmp->left_child)
  ------------------
  |  Branch (254:10): [True: 0, False: 0]
  ------------------
  255|      0|    tmp = tmp->left;
  256|       |
  257|      0|  return tmp;
  258|    610|}
g_tree_node_next:
  329|     10|{
  330|     10|  GTreeNode *tmp;
  331|       |
  332|     10|  g_return_val_if_fail (node != NULL, NULL);
  ------------------
  |  |  652|     10|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     10|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|     10|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     10|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     10| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     10|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     10|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     10|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 10, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     10|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     10|   else                                         \
  |  |  |  |  |  | 1183|     10|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     10|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     10|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 10, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|     10|      { } \
  |  |  655|     10|    else \
  |  |  656|     10|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|     10|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     10|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 10]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  333|       |
  334|     10|  tmp = node->right;
  335|       |
  336|     10|  if (node->right_child)
  ------------------
  |  Branch (336:7): [True: 10, False: 0]
  ------------------
  337|     10|    while (tmp->left_child)
  ------------------
  |  Branch (337:12): [True: 0, False: 10]
  ------------------
  338|      0|      tmp = tmp->left;
  339|       |
  340|     10|  return tmp;
  341|     10|}
g_tree_remove_all:
  354|    610|{
  355|    610|  GTreeNode *node;
  356|    610|  GTreeNode *next;
  357|       |
  358|    610|  g_return_if_fail (tree != NULL);
  ------------------
  |  |  639|    610|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    610|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|    610|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    610|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    610| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    610|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    610|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    610|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 610, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    610|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    610|   else                                         \
  |  |  |  |  |  | 1183|    610|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    610|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    610|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 610, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|    610|      { } \
  |  |  642|    610|    else \
  |  |  643|    610|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|    610|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    610|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 610]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  359|       |
  360|    610|  node = g_tree_node_first (tree);
  361|       |
  362|    610|  while (node)
  ------------------
  |  Branch (362:10): [True: 0, False: 610]
  ------------------
  363|      0|    {
  364|      0|      next = g_tree_node_next (node);
  365|       |
  366|      0|      if (tree->key_destroy_func)
  ------------------
  |  Branch (366:11): [True: 0, False: 0]
  ------------------
  367|      0|        tree->key_destroy_func (node->key);
  368|      0|      if (tree->value_destroy_func)
  ------------------
  |  Branch (368:11): [True: 0, False: 0]
  ------------------
  369|      0|        tree->value_destroy_func (node->value);
  370|      0|      g_slice_free (GTreeNode, node);
  ------------------
  |  |   81|      0|#define g_slice_free(type, mem)                                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   82|      0|G_STMT_START {                                                  \
  |  |   83|      0|  if (1) g_slice_free1 (sizeof (type), (mem));			\
  |  |  ------------------
  |  |  |  Branch (83:7): [True: 0, Folded]
  |  |  ------------------
  |  |   84|      0|  else   (void) ((type*) 0 == (mem)); 				\
  |  |   85|      0|} G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|       |
  372|       |#ifdef G_TREE_DEBUG
  373|       |      g_assert (tree->nnodes > 0);
  374|       |      tree->nnodes--;
  375|       |#endif
  376|       |
  377|      0|      node = next;
  378|      0|    }
  379|       |
  380|       |#ifdef G_TREE_DEBUG
  381|       |  g_assert (tree->nnodes == 0);
  382|       |#endif
  383|       |
  384|       |  tree->root = NULL;
  385|    610|#ifndef G_TREE_DEBUG
  386|    610|  tree->nnodes = 0;
  387|    610|#endif
  388|    610|}
g_tree_ref:
  404|    178|{
  405|    178|  g_return_val_if_fail (tree != NULL, NULL);
  ------------------
  |  |  652|    178|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    178|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    178|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    178|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    178| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    178|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    178|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    178|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 178, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    178|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    178|   else                                         \
  |  |  |  |  |  | 1183|    178|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    178|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    178|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 178, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    178|      { } \
  |  |  655|    178|    else \
  |  |  656|    178|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    178|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    178|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 178]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|    178|  g_atomic_int_inc (&tree->ref_count);
  ------------------
  |  |  162|    178|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|    178|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|    178|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|    178|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  164|    178|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded, False: 178]
  |  |  ------------------
  |  |  165|    178|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  166|    178|  }))
  ------------------
  408|       |
  409|    178|  return tree;
  410|    178|}
g_tree_unref:
  427|    788|{
  428|    788|  g_return_if_fail (tree != NULL);
  ------------------
  |  |  639|    788|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    788|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|    788|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    788|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    788| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    788|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    788|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    788|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 788, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    788|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    788|   else                                         \
  |  |  |  |  |  | 1183|    788|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    788|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    788|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 788, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|    788|      { } \
  |  |  642|    788|    else \
  |  |  643|    788|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|    788|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    788|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 788]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  429|       |
  430|    788|  if (g_atomic_int_dec_and_test (&tree->ref_count))
  ------------------
  |  |  168|    788|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|    788|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (168:3): [True: 610, False: 178]
  |  |  ------------------
  |  |  169|    788|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|    788|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  170|    788|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (170:13): [Folded, False: 788]
  |  |  ------------------
  |  |  171|    788|    __atomic_fetch_sub ((atomic), 1, __ATOMIC_SEQ_CST) == 1;                 \
  |  |  172|    788|  }))
  ------------------
  431|    610|    {
  432|    610|      g_tree_remove_all (tree);
  433|    610|      g_slice_free (GTree, tree);
  ------------------
  |  |   81|    610|#define g_slice_free(type, mem)                                 \
  |  |  ------------------
  |  |  |  |  940|    610|#define G_STMT_START  do
  |  |  ------------------
  |  |   82|    610|G_STMT_START {                                                  \
  |  |   83|    610|  if (1) g_slice_free1 (sizeof (type), (mem));			\
  |  |  ------------------
  |  |  |  Branch (83:7): [True: 610, Folded]
  |  |  ------------------
  |  |   84|    610|  else   (void) ((type*) 0 == (mem)); 				\
  |  |   85|    610|} G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    610|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 610]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  434|    610|    }
  435|    788|}
g_tree_insert_node:
  485|    784|{
  486|    784|  GTreeNode *node;
  487|       |
  488|    784|  g_return_val_if_fail (tree != NULL, NULL);
  ------------------
  |  |  652|    784|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    784|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    784|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    784|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    784| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    784|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    784|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    784|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 784, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    784|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    784|   else                                         \
  |  |  |  |  |  | 1183|    784|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    784|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    784|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 784, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    784|      { } \
  |  |  655|    784|    else \
  |  |  656|    784|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    784|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    784|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 784]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  489|       |
  490|    784|  node = g_tree_insert_internal (tree, key, value, FALSE);
  ------------------
  |  |  880|    784|#define	FALSE	(0)
  ------------------
  491|       |
  492|       |#ifdef G_TREE_DEBUG
  493|       |  g_tree_node_check (tree->root);
  494|       |#endif
  495|       |
  496|    784|  return node;
  497|    784|}
g_tree_insert:
  514|    784|{
  515|    784|  g_tree_insert_node (tree, key, value);
  516|    784|}
g_tree_remove:
  729|    784|{
  730|    784|  gboolean removed;
  731|       |
  732|    784|  g_return_val_if_fail (tree != NULL, FALSE);
  ------------------
  |  |  652|    784|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    784|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    784|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    784|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    784| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    784|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    784|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    784|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 784, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    784|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    784|   else                                         \
  |  |  |  |  |  | 1183|    784|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    784|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    784|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 784, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    784|      { } \
  |  |  655|    784|    else \
  |  |  656|    784|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    784|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    784|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 784]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  733|       |
  734|    784|  removed = g_tree_remove_internal (tree, key, FALSE);
  ------------------
  |  |  880|    784|#define	FALSE	(0)
  ------------------
  735|       |
  736|       |#ifdef G_TREE_DEBUG
  737|       |  g_tree_node_check (tree->root);
  738|       |#endif
  739|       |
  740|    784|  return removed;
  741|    784|}
g_tree_lookup_node:
 1033|    788|{
 1034|    788|  g_return_val_if_fail (tree != NULL, NULL);
  ------------------
  |  |  652|    788|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    788|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    788|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    788|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    788| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    788|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    788|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    788|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 788, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    788|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    788|   else                                         \
  |  |  |  |  |  | 1183|    788|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    788|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    788|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 788, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    788|      { } \
  |  |  655|    788|    else \
  |  |  656|    788|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    788|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    788|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 788]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1035|       |
 1036|    788|  return g_tree_find_node (tree, key);
 1037|    788|}
g_tree_lookup:
 1054|    788|{
 1055|    788|  GTreeNode *node;
 1056|       |
 1057|    788|  node = g_tree_lookup_node (tree, key);
 1058|       |
 1059|    788|  return node ? node->value : NULL;
  ------------------
  |  Branch (1059:10): [True: 4, False: 784]
  ------------------
 1060|    788|}
gtree.c:g_tree_insert_internal:
  579|    784|{
  580|    784|  GTreeNode *node, *retnode;
  581|    784|  GTreeNode *path[MAX_GTREE_HEIGHT];
  582|    784|  int idx;
  583|       |
  584|    784|  g_return_val_if_fail (tree != NULL, NULL);
  ------------------
  |  |  652|    784|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    784|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    784|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    784|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    784| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    784|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    784|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    784|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 784, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    784|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    784|   else                                         \
  |  |  |  |  |  | 1183|    784|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    784|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    784|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 784, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    784|      { } \
  |  |  655|    784|    else \
  |  |  656|    784|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    784|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    784|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 784]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  585|       |
  586|    784|  if (!tree->root)
  ------------------
  |  Branch (586:7): [True: 610, False: 174]
  ------------------
  587|    610|    {
  588|    610|      tree->root = g_tree_node_new (key, value);
  589|    610|      tree->nnodes++;
  590|    610|      return tree->root;
  591|    610|    }
  592|       |
  593|    174|  idx = 0;
  594|    174|  path[idx++] = NULL;
  595|    174|  node = tree->root;
  596|       |
  597|    196|  while (1)
  ------------------
  |  Branch (597:10): [True: 196, Folded]
  ------------------
  598|    196|    {
  599|    196|      int cmp = tree->key_compare (key, node->key, tree->key_compare_data);
  600|       |      
  601|    196|      if (cmp == 0)
  ------------------
  |  Branch (601:11): [True: 0, False: 196]
  ------------------
  602|      0|        {
  603|      0|          if (tree->value_destroy_func)
  ------------------
  |  Branch (603:15): [True: 0, False: 0]
  ------------------
  604|      0|            tree->value_destroy_func (node->value);
  605|       |
  606|      0|          node->value = value;
  607|       |
  608|      0|          if (replace)
  ------------------
  |  Branch (608:15): [True: 0, False: 0]
  ------------------
  609|      0|            {
  610|      0|              if (tree->key_destroy_func)
  ------------------
  |  Branch (610:19): [True: 0, False: 0]
  ------------------
  611|      0|                tree->key_destroy_func (node->key);
  612|       |
  613|      0|              node->key = key;
  614|      0|            }
  615|      0|          else
  616|      0|            {
  617|       |              /* free the passed key */
  618|      0|              if (tree->key_destroy_func)
  ------------------
  |  Branch (618:19): [True: 0, False: 0]
  ------------------
  619|      0|                tree->key_destroy_func (key);
  620|      0|            }
  621|       |
  622|      0|          return node;
  623|      0|        }
  624|    196|      else if (cmp < 0)
  ------------------
  |  Branch (624:16): [True: 114, False: 82]
  ------------------
  625|    114|        {
  626|    114|          if (node->left_child)
  ------------------
  |  Branch (626:15): [True: 20, False: 94]
  ------------------
  627|     20|            {
  628|     20|              path[idx++] = node;
  629|     20|              node = node->left;
  630|     20|            }
  631|     94|          else
  632|     94|            {
  633|     94|              GTreeNode *child = g_tree_node_new (key, value);
  634|       |
  635|     94|              child->left = node->left;
  636|     94|              child->right = node;
  637|     94|              node->left = child;
  638|     94|              node->left_child = TRUE;
  ------------------
  |  |  884|     94|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|     94|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  639|     94|              node->balance -= 1;
  640|       |
  641|     94|              tree->nnodes++;
  642|       |
  643|     94|              retnode = child;
  644|     94|              break;
  645|     94|            }
  646|    114|        }
  647|     82|      else
  648|     82|        {
  649|     82|          if (node->right_child)
  ------------------
  |  Branch (649:15): [True: 2, False: 80]
  ------------------
  650|      2|            {
  651|      2|              path[idx++] = node;
  652|      2|              node = node->right;
  653|      2|            }
  654|     80|          else
  655|     80|            {
  656|     80|              GTreeNode *child = g_tree_node_new (key, value);
  657|       |
  658|     80|              child->right = node->right;
  659|     80|              child->left = node;
  660|     80|              node->right = child;
  661|     80|              node->right_child = TRUE;
  ------------------
  |  |  884|     80|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|     80|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  662|     80|              node->balance += 1;
  663|       |
  664|     80|              tree->nnodes++;
  665|       |
  666|     80|              retnode = child;
  667|     80|              break;
  668|     80|            }
  669|     82|        }
  670|    196|    }
  671|       |
  672|       |  /* Restore balance. This is the goodness of a non-recursive
  673|       |   * implementation, when we are done with balancing we 'break'
  674|       |   * the loop and we are done.
  675|       |   */
  676|    196|  while (1)
  ------------------
  |  Branch (676:10): [True: 196, Folded]
  ------------------
  677|    196|    {
  678|    196|      GTreeNode *bparent = path[--idx];
  679|    196|      gboolean left_node = (bparent && node == bparent->left);
  ------------------
  |  Branch (679:29): [True: 22, False: 174]
  |  Branch (679:40): [True: 20, False: 2]
  ------------------
  680|    196|      g_assert (!bparent || bparent->left == node || bparent->right == node);
  ------------------
  |  |  234|    196|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    196|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|    196|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|    196|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    196| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    196|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    196|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    612|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 174, False: 22]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 20, False: 2]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    196|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    196|   else                                         \
  |  |  |  |  |  | 1183|    196|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    196|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    196|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 196, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|    196|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|    196|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    196|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 196]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  681|       |
  682|    196|      if (node->balance < -1 || node->balance > 1)
  ------------------
  |  Branch (682:11): [True: 20, False: 176]
  |  Branch (682:33): [True: 0, False: 176]
  ------------------
  683|     20|        {
  684|     20|          node = g_tree_node_balance (node);
  685|     20|          if (bparent == NULL)
  ------------------
  |  Branch (685:15): [True: 20, False: 0]
  ------------------
  686|     20|            tree->root = node;
  687|      0|          else if (left_node)
  ------------------
  |  Branch (687:20): [True: 0, False: 0]
  ------------------
  688|      0|            bparent->left = node;
  689|      0|          else
  690|      0|            bparent->right = node;
  691|     20|        }
  692|       |
  693|    196|      if (node->balance == 0 || bparent == NULL)
  ------------------
  |  Branch (693:11): [True: 32, False: 164]
  |  Branch (693:33): [True: 142, False: 22]
  ------------------
  694|    174|        break;
  695|       |      
  696|     22|      if (left_node)
  ------------------
  |  Branch (696:11): [True: 20, False: 2]
  ------------------
  697|     20|        bparent->balance -= 1;
  698|      2|      else
  699|      2|        bparent->balance += 1;
  700|       |
  701|     22|      node = bparent;
  702|     22|    }
  703|       |
  704|    174|  return retnode;
  705|    174|}
gtree.c:g_tree_node_new:
  137|    784|{
  138|    784|  GTreeNode *node = g_slice_new (GTreeNode);
  ------------------
  |  |   48|    784|#define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
  ------------------
  139|       |
  140|    784|  node->balance = 0;
  141|    784|  node->left = NULL;
  142|    784|  node->right = NULL;
  143|    784|  node->left_child = FALSE;
  ------------------
  |  |  880|    784|#define	FALSE	(0)
  ------------------
  144|    784|  node->right_child = FALSE;
  ------------------
  |  |  880|    784|#define	FALSE	(0)
  ------------------
  145|    784|  node->key = key;
  146|    784|  node->value = value;
  147|       |
  148|    784|  return node;
  149|    784|}
gtree.c:g_tree_node_balance:
 1468|     20|{
 1469|     20|  if (node->balance < -1)
  ------------------
  |  Branch (1469:7): [True: 20, False: 0]
  ------------------
 1470|     20|    {
 1471|     20|      if (node->left->balance > 0)
  ------------------
  |  Branch (1471:11): [True: 10, False: 10]
  ------------------
 1472|     10|        node->left = g_tree_node_rotate_left (node->left);
 1473|     20|      node = g_tree_node_rotate_right (node);
 1474|     20|    }
 1475|      0|  else if (node->balance > 1)
  ------------------
  |  Branch (1475:12): [True: 0, False: 0]
  ------------------
 1476|      0|    {
 1477|      0|      if (node->right->balance < 0)
  ------------------
  |  Branch (1477:11): [True: 0, False: 0]
  ------------------
 1478|      0|        node->right = g_tree_node_rotate_right (node->right);
 1479|      0|      node = g_tree_node_rotate_left (node);
 1480|      0|    }
 1481|       |
 1482|     20|  return node;
 1483|     20|}
gtree.c:g_tree_node_rotate_left:
 1621|     10|{
 1622|     10|  GTreeNode *right;
 1623|     10|  gint a_bal;
 1624|     10|  gint b_bal;
 1625|       |
 1626|     10|  right = node->right;
 1627|       |
 1628|     10|  if (right->left_child)
  ------------------
  |  Branch (1628:7): [True: 0, False: 10]
  ------------------
 1629|      0|    node->right = right->left;
 1630|     10|  else
 1631|     10|    {
 1632|     10|      node->right_child = FALSE;
  ------------------
  |  |  880|     10|#define	FALSE	(0)
  ------------------
 1633|     10|      right->left_child = TRUE;
  ------------------
  |  |  884|     10|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|     10|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1634|     10|    }
 1635|     10|  right->left = node;
 1636|       |
 1637|     10|  a_bal = node->balance;
 1638|     10|  b_bal = right->balance;
 1639|       |
 1640|     10|  if (b_bal <= 0)
  ------------------
  |  Branch (1640:7): [True: 10, False: 0]
  ------------------
 1641|     10|    {
 1642|     10|      if (a_bal >= 1)
  ------------------
  |  Branch (1642:11): [True: 10, False: 0]
  ------------------
 1643|     10|        right->balance = b_bal - 1;
 1644|      0|      else
 1645|      0|        right->balance = a_bal + b_bal - 2;
 1646|     10|      node->balance = a_bal - 1;
 1647|     10|    }
 1648|      0|  else
 1649|      0|    {
 1650|      0|      if (a_bal <= b_bal)
  ------------------
  |  Branch (1650:11): [True: 0, False: 0]
  ------------------
 1651|      0|        right->balance = a_bal - 2;
 1652|      0|      else
 1653|      0|        right->balance = b_bal - 1;
 1654|      0|      node->balance = a_bal - b_bal - 1;
 1655|      0|    }
 1656|       |
 1657|     10|  return right;
 1658|     10|}
gtree.c:g_tree_node_rotate_right:
 1662|     20|{
 1663|     20|  GTreeNode *left;
 1664|     20|  gint a_bal;
 1665|     20|  gint b_bal;
 1666|       |
 1667|     20|  left = node->left;
 1668|       |
 1669|     20|  if (left->right_child)
  ------------------
  |  Branch (1669:7): [True: 0, False: 20]
  ------------------
 1670|      0|    node->left = left->right;
 1671|     20|  else
 1672|     20|    {
 1673|     20|      node->left_child = FALSE;
  ------------------
  |  |  880|     20|#define	FALSE	(0)
  ------------------
 1674|     20|      left->right_child = TRUE;
  ------------------
  |  |  884|     20|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|     20|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1675|     20|    }
 1676|     20|  left->right = node;
 1677|       |
 1678|     20|  a_bal = node->balance;
 1679|     20|  b_bal = left->balance;
 1680|       |
 1681|     20|  if (b_bal <= 0)
  ------------------
  |  Branch (1681:7): [True: 20, False: 0]
  ------------------
 1682|     20|    {
 1683|     20|      if (b_bal > a_bal)
  ------------------
  |  Branch (1683:11): [True: 20, False: 0]
  ------------------
 1684|     20|        left->balance = b_bal + 1;
 1685|      0|      else
 1686|      0|        left->balance = a_bal + 2;
 1687|     20|      node->balance = a_bal - b_bal + 1;
 1688|     20|    }
 1689|      0|  else
 1690|      0|    {
 1691|      0|      if (a_bal <= -1)
  ------------------
  |  Branch (1691:11): [True: 0, False: 0]
  ------------------
 1692|      0|        left->balance = b_bal + 1;
 1693|      0|      else
 1694|      0|        left->balance = a_bal + b_bal + 2;
 1695|      0|      node->balance = a_bal + 1;
 1696|      0|    }
 1697|       |
 1698|     20|  return left;
 1699|     20|}
gtree.c:g_tree_remove_internal:
  778|    784|{
  779|    784|  GTreeNode *node, *parent, *balance;
  780|    784|  GTreeNode *path[MAX_GTREE_HEIGHT];
  781|    784|  int idx;
  782|    784|  gboolean left_node;
  783|       |
  784|    784|  g_return_val_if_fail (tree != NULL, FALSE);
  ------------------
  |  |  652|    784|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    784|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    784|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    784|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    784| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    784|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    784|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    784|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 784, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    784|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    784|   else                                         \
  |  |  |  |  |  | 1183|    784|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    784|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    784|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 784, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    784|      { } \
  |  |  655|    784|    else \
  |  |  656|    784|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    784|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    784|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 784]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  785|       |
  786|    784|  if (!tree->root)
  ------------------
  |  Branch (786:7): [True: 0, False: 784]
  ------------------
  787|      0|    return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  788|       |
  789|    784|  idx = 0;
  790|    784|  path[idx++] = NULL;
  791|    784|  node = tree->root;
  792|       |
  793|    940|  while (1)
  ------------------
  |  Branch (793:10): [True: 940, Folded]
  ------------------
  794|    940|    {
  795|    940|      int cmp = tree->key_compare (key, node->key, tree->key_compare_data);
  796|       |
  797|    940|      if (cmp == 0)
  ------------------
  |  Branch (797:11): [True: 784, False: 156]
  ------------------
  798|    784|        break;
  799|    156|      else if (cmp < 0)
  ------------------
  |  Branch (799:16): [True: 84, False: 72]
  ------------------
  800|     84|        {
  801|     84|          if (!node->left_child)
  ------------------
  |  Branch (801:15): [True: 0, False: 84]
  ------------------
  802|      0|            return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  803|       |
  804|     84|          path[idx++] = node;
  805|     84|          node = node->left;
  806|     84|        }
  807|     72|      else
  808|     72|        {
  809|     72|          if (!node->right_child)
  ------------------
  |  Branch (809:15): [True: 0, False: 72]
  ------------------
  810|      0|            return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  811|       |
  812|     72|          path[idx++] = node;
  813|     72|          node = node->right;
  814|     72|        }
  815|    940|    }
  816|       |
  817|       |  /* The following code is almost equal to g_tree_remove_node,
  818|       |   * except that we do not have to call g_tree_node_parent.
  819|       |   */
  820|    784|  balance = parent = path[--idx];
  821|    784|  g_assert (!parent || parent->left == node || parent->right == node);
  ------------------
  |  |  234|    784|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    784|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|    784|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|    784|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    784| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    784|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    784|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  2.57k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 630, False: 154]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 84, False: 70]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 70, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    784|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    784|   else                                         \
  |  |  |  |  |  | 1183|    784|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    784|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    784|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 784, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|    784|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|    784|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    784|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 784]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  822|    784|  left_node = (parent && node == parent->left);
  ------------------
  |  Branch (822:16): [True: 154, False: 630]
  |  Branch (822:26): [True: 84, False: 70]
  ------------------
  823|       |
  824|    784|  if (!node->left_child)
  ------------------
  |  Branch (824:7): [True: 774, False: 10]
  ------------------
  825|    774|    {
  826|    774|      if (!node->right_child)
  ------------------
  |  Branch (826:11): [True: 764, False: 10]
  ------------------
  827|    764|        {
  828|    764|          if (!parent)
  ------------------
  |  Branch (828:15): [True: 610, False: 154]
  ------------------
  829|    610|            tree->root = NULL;
  830|    154|          else if (left_node)
  ------------------
  |  Branch (830:20): [True: 84, False: 70]
  ------------------
  831|     84|            {
  832|     84|              parent->left_child = FALSE;
  ------------------
  |  |  880|     84|#define	FALSE	(0)
  ------------------
  833|     84|              parent->left = node->left;
  834|     84|              parent->balance += 1;
  835|     84|            }
  836|     70|          else
  837|     70|            {
  838|     70|              parent->right_child = FALSE;
  ------------------
  |  |  880|     70|#define	FALSE	(0)
  ------------------
  839|     70|              parent->right = node->right;
  840|     70|              parent->balance -= 1;
  841|     70|            }
  842|    764|        }
  843|     10|      else /* node has a right child */
  844|     10|        {
  845|     10|          GTreeNode *tmp = g_tree_node_next (node);
  846|     10|          tmp->left = node->left;
  847|       |
  848|     10|          if (!parent)
  ------------------
  |  Branch (848:15): [True: 10, False: 0]
  ------------------
  849|     10|            tree->root = node->right;
  850|      0|          else if (left_node)
  ------------------
  |  Branch (850:20): [True: 0, False: 0]
  ------------------
  851|      0|            {
  852|      0|              parent->left = node->right;
  853|      0|              parent->balance += 1;
  854|      0|            }
  855|      0|          else
  856|      0|            {
  857|      0|              parent->right = node->right;
  858|      0|              parent->balance -= 1;
  859|      0|            }
  860|     10|        }
  861|    774|    }
  862|     10|  else /* node has a left child */
  863|     10|    {
  864|     10|      if (!node->right_child)
  ------------------
  |  Branch (864:11): [True: 0, False: 10]
  ------------------
  865|      0|        {
  866|      0|          GTreeNode *tmp = g_tree_node_previous (node);
  867|      0|          tmp->right = node->right;
  868|       |
  869|      0|          if (parent == NULL)
  ------------------
  |  Branch (869:15): [True: 0, False: 0]
  ------------------
  870|      0|            tree->root = node->left;
  871|      0|          else if (left_node)
  ------------------
  |  Branch (871:20): [True: 0, False: 0]
  ------------------
  872|      0|            {
  873|      0|              parent->left = node->left;
  874|      0|              parent->balance += 1;
  875|      0|            }
  876|      0|          else
  877|      0|            {
  878|      0|              parent->right = node->left;
  879|      0|              parent->balance -= 1;
  880|      0|            }
  881|      0|        }
  882|     10|      else /* node has a both children (pant, pant!) */
  883|     10|        {
  884|     10|          GTreeNode *prev = node->left;
  885|     10|          GTreeNode *next = node->right;
  886|     10|          GTreeNode *nextp = node;
  887|     10|          int old_idx = idx + 1;
  888|     10|          idx++;
  889|       |
  890|       |          /* path[idx] == parent */
  891|       |          /* find the immediately next node (and its parent) */
  892|     10|          while (next->left_child)
  ------------------
  |  Branch (892:18): [True: 0, False: 10]
  ------------------
  893|      0|            {
  894|      0|              path[++idx] = nextp = next;
  895|      0|              next = next->left;
  896|      0|            }
  897|       |
  898|     10|          path[old_idx] = next;
  899|     10|          balance = path[idx];
  900|       |
  901|       |          /* remove 'next' from the tree */
  902|     10|          if (nextp != node)
  ------------------
  |  Branch (902:15): [True: 0, False: 10]
  ------------------
  903|      0|            {
  904|      0|              if (next->right_child)
  ------------------
  |  Branch (904:19): [True: 0, False: 0]
  ------------------
  905|      0|                nextp->left = next->right;
  906|      0|              else
  907|      0|                nextp->left_child = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  908|      0|              nextp->balance += 1;
  909|       |
  910|      0|              next->right_child = TRUE;
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  911|      0|              next->right = node->right;
  912|      0|            }
  913|     10|          else
  914|     10|            node->balance -= 1;
  915|       |
  916|       |          /* set the prev to point to the right place */
  917|     10|          while (prev->right_child)
  ------------------
  |  Branch (917:18): [True: 0, False: 10]
  ------------------
  918|      0|            prev = prev->right;
  919|     10|          prev->right = next;
  920|       |
  921|       |          /* prepare 'next' to replace 'node' */
  922|     10|          next->left_child = TRUE;
  ------------------
  |  |  884|     10|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|     10|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  923|     10|          next->left = node->left;
  924|     10|          next->balance = node->balance;
  925|       |
  926|     10|          if (!parent)
  ------------------
  |  Branch (926:15): [True: 10, False: 0]
  ------------------
  927|     10|            tree->root = next;
  928|      0|          else if (left_node)
  ------------------
  |  Branch (928:20): [True: 0, False: 0]
  ------------------
  929|      0|            parent->left = next;
  930|      0|          else
  931|      0|            parent->right = next;
  932|     10|        }
  933|     10|    }
  934|       |
  935|       |  /* restore balance */
  936|    784|  if (balance)
  ------------------
  |  Branch (936:7): [True: 164, False: 620]
  ------------------
  937|    166|    while (1)
  ------------------
  |  Branch (937:12): [True: 166, Folded]
  ------------------
  938|    166|      {
  939|    166|        GTreeNode *bparent = path[--idx];
  940|    166|        g_assert (!bparent || bparent->left == balance || bparent->right == balance);
  ------------------
  |  |  234|    166|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    166|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|    166|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|    166|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    166| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    166|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    166|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    502|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 164, False: 2]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 2]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    166|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    166|   else                                         \
  |  |  |  |  |  | 1183|    166|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    166|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    166|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 166, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|    166|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|    166|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    166|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 166]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  941|    166|        left_node = (bparent && balance == bparent->left);
  ------------------
  |  Branch (941:22): [True: 2, False: 164]
  |  Branch (941:33): [True: 0, False: 2]
  ------------------
  942|       |
  943|    166|        if(balance->balance < -1 || balance->balance > 1)
  ------------------
  |  Branch (943:12): [True: 0, False: 166]
  |  Branch (943:37): [True: 0, False: 166]
  ------------------
  944|      0|          {
  945|      0|            balance = g_tree_node_balance (balance);
  946|      0|            if (!bparent)
  ------------------
  |  Branch (946:17): [True: 0, False: 0]
  ------------------
  947|      0|              tree->root = balance;
  948|      0|            else if (left_node)
  ------------------
  |  Branch (948:22): [True: 0, False: 0]
  ------------------
  949|      0|              bparent->left = balance;
  950|      0|            else
  951|      0|              bparent->right = balance;
  952|      0|          }
  953|       |
  954|    166|        if (balance->balance != 0 || !bparent)
  ------------------
  |  Branch (954:13): [True: 32, False: 134]
  |  Branch (954:38): [True: 132, False: 2]
  ------------------
  955|    164|          break;
  956|       |
  957|      2|        if (left_node)
  ------------------
  |  Branch (957:13): [True: 0, False: 2]
  ------------------
  958|      0|          bparent->balance += 1;
  959|      2|        else
  960|      2|          bparent->balance -= 1;
  961|       |
  962|      2|        balance = bparent;
  963|      2|      }
  964|       |
  965|    784|  if (!steal)
  ------------------
  |  Branch (965:7): [True: 784, False: 0]
  ------------------
  966|    784|    {
  967|    784|      if (tree->key_destroy_func)
  ------------------
  |  Branch (967:11): [True: 784, False: 0]
  ------------------
  968|    784|        tree->key_destroy_func (node->key);
  969|    784|      if (tree->value_destroy_func)
  ------------------
  |  Branch (969:11): [True: 0, False: 784]
  ------------------
  970|      0|        tree->value_destroy_func (node->value);
  971|    784|    }
  972|       |
  973|    784|  g_slice_free (GTreeNode, node);
  ------------------
  |  |   81|    784|#define g_slice_free(type, mem)                                 \
  |  |  ------------------
  |  |  |  |  940|    784|#define G_STMT_START  do
  |  |  ------------------
  |  |   82|    784|G_STMT_START {                                                  \
  |  |   83|    784|  if (1) g_slice_free1 (sizeof (type), (mem));			\
  |  |  ------------------
  |  |  |  Branch (83:7): [True: 784, Folded]
  |  |  ------------------
  |  |   84|    784|  else   (void) ((type*) 0 == (mem)); 				\
  |  |   85|    784|} G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    784|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 784]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  974|       |
  975|    784|  tree->nnodes--;
  976|       |
  977|    784|  return TRUE;
  ------------------
  |  |  884|    784|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|    784|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  978|    784|}
gtree.c:g_tree_find_node:
 1488|    788|{
 1489|    788|  GTreeNode *node;
 1490|    788|  gint cmp;
 1491|       |
 1492|    788|  node = tree->root;
 1493|    788|  if (!node)
  ------------------
  |  Branch (1493:7): [True: 610, False: 178]
  ------------------
 1494|    610|    return NULL;
 1495|       |
 1496|    200|  while (1)
  ------------------
  |  Branch (1496:10): [True: 200, Folded]
  ------------------
 1497|    200|    {
 1498|    200|      cmp = tree->key_compare (key, node->key, tree->key_compare_data);
 1499|    200|      if (cmp == 0)
  ------------------
  |  Branch (1499:11): [True: 4, False: 196]
  ------------------
 1500|      4|        return node;
 1501|    196|      else if (cmp < 0)
  ------------------
  |  Branch (1501:16): [True: 114, False: 82]
  ------------------
 1502|    114|        {
 1503|    114|          if (!node->left_child)
  ------------------
  |  Branch (1503:15): [True: 94, False: 20]
  ------------------
 1504|     94|            return NULL;
 1505|       |
 1506|     20|          node = node->left;
 1507|     20|        }
 1508|     82|      else
 1509|     82|        {
 1510|     82|          if (!node->right_child)
  ------------------
  |  Branch (1510:15): [True: 80, False: 2]
  ------------------
 1511|     80|            return NULL;
 1512|       |
 1513|      2|          node = node->right;
 1514|      2|        }
 1515|    200|    }
 1516|    178|}

g_utf8_validate:
 1693|  58.3k|{
 1694|  58.3k|  const gchar *p;
 1695|       |
 1696|  58.3k|  if (max_len >= 0)
  ------------------
  |  Branch (1696:7): [True: 58.2k, False: 123]
  ------------------
 1697|  58.2k|    return g_utf8_validate_len (str, max_len, end);
 1698|       |
 1699|    123|  p = fast_validate (str);
 1700|       |
 1701|    123|  if (end)
  ------------------
  |  Branch (1701:7): [True: 0, False: 123]
  ------------------
 1702|      0|    *end = p;
 1703|       |
 1704|    123|  if (*p != '\0')
  ------------------
  |  Branch (1704:7): [True: 0, False: 123]
  ------------------
 1705|      0|    return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 1706|    123|  else
 1707|    123|    return TRUE;
  ------------------
  |  |  884|    123|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|    123|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1708|    123|}
g_utf8_validate_len:
 1729|  58.2k|{
 1730|  58.2k|  const gchar *p;
 1731|       |
 1732|  58.2k|  p = fast_validate_len (str, max_len);
 1733|       |
 1734|  58.2k|  if (end)
  ------------------
  |  Branch (1734:7): [True: 0, False: 58.2k]
  ------------------
 1735|      0|    *end = p;
 1736|       |
 1737|  58.2k|  if (p != str + max_len)
  ------------------
  |  Branch (1737:7): [True: 57.9k, False: 235]
  ------------------
 1738|  57.9k|    return FALSE;
  ------------------
  |  |  880|  57.9k|#define	FALSE	(0)
  ------------------
 1739|    235|  else
 1740|    235|    return TRUE;
  ------------------
  |  |  884|    235|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|    235|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1741|  58.2k|}
gutf8.c:fast_validate:
 1513|    123|{
 1514|    123|  const gchar *p;
 1515|       |
 1516|  3.32k|  for (p = str; *p; p++)
  ------------------
  |  Branch (1516:17): [True: 3.19k, False: 123]
  ------------------
 1517|  3.19k|    {
 1518|  3.19k|      if (*(guchar *)p < 128)
  ------------------
  |  Branch (1518:11): [True: 3.19k, False: 0]
  ------------------
 1519|  3.19k|	/* done */;
 1520|      0|      else 
 1521|      0|	{
 1522|      0|	  const gchar *last;
 1523|       |
 1524|      0|	  last = p;
 1525|      0|	  if (*(guchar *)p < 0xe0) /* 110xxxxx */
  ------------------
  |  Branch (1525:8): [True: 0, False: 0]
  ------------------
 1526|      0|	    {
 1527|      0|	      if (G_UNLIKELY (*(guchar *)p < 0xc2))
  ------------------
  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      0|   else                                         \
  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  | 1185|      0|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1528|      0|		goto error;
 1529|      0|	    }
 1530|      0|	  else
 1531|      0|	    {
 1532|      0|	      if (*(guchar *)p < 0xf0) /* 1110xxxx */
  ------------------
  |  Branch (1532:12): [True: 0, False: 0]
  ------------------
 1533|      0|		{
 1534|      0|		  switch (*(guchar *)p++ & 0x0f)
 1535|      0|		    {
 1536|      0|		    case 0:
  ------------------
  |  Branch (1536:7): [True: 0, False: 0]
  ------------------
 1537|      0|		      VALIDATE_BYTE(0xe0, 0xa0); /* 0xa0 ... 0xbf */
  ------------------
  |  | 1503|      0|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|      0|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|      0|      goto error;                                        \
  |  | 1506|      0|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1538|      0|		      break;
 1539|      0|		    case 0x0d:
  ------------------
  |  Branch (1539:7): [True: 0, False: 0]
  ------------------
 1540|      0|		      VALIDATE_BYTE(0xe0, 0x80); /* 0x80 ... 0x9f */
  ------------------
  |  | 1503|      0|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|      0|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|      0|      goto error;                                        \
  |  | 1506|      0|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1541|      0|		      break;
 1542|      0|		    default:
  ------------------
  |  Branch (1542:7): [True: 0, False: 0]
  ------------------
 1543|      0|		      VALIDATE_BYTE(0xc0, 0x80); /* 10xxxxxx */
  ------------------
  |  | 1503|      0|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|      0|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|      0|      goto error;                                        \
  |  | 1506|      0|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1544|      0|		    }
 1545|      0|		}
 1546|      0|	      else if (*(guchar *)p < 0xf5) /* 11110xxx excluding out-of-range */
  ------------------
  |  Branch (1546:17): [True: 0, False: 0]
  ------------------
 1547|      0|		{
 1548|      0|		  switch (*(guchar *)p++ & 0x07)
 1549|      0|		    {
 1550|      0|		    case 0:
  ------------------
  |  Branch (1550:7): [True: 0, False: 0]
  ------------------
 1551|      0|		      VALIDATE_BYTE(0xc0, 0x80); /* 10xxxxxx */
  ------------------
  |  | 1503|      0|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|      0|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|      0|      goto error;                                        \
  |  | 1506|      0|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1552|      0|		      if (G_UNLIKELY((*(guchar *)p & 0x30) == 0))
  ------------------
  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      0|   else                                         \
  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  | 1185|      0|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1553|      0|			goto error;
 1554|      0|		      break;
 1555|      0|		    case 4:
  ------------------
  |  Branch (1555:7): [True: 0, False: 0]
  ------------------
 1556|      0|		      VALIDATE_BYTE(0xf0, 0x80); /* 0x80 ... 0x8f */
  ------------------
  |  | 1503|      0|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|      0|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|      0|      goto error;                                        \
  |  | 1506|      0|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1557|      0|		      break;
 1558|      0|		    default:
  ------------------
  |  Branch (1558:7): [True: 0, False: 0]
  ------------------
 1559|      0|		      VALIDATE_BYTE(0xc0, 0x80); /* 10xxxxxx */
  ------------------
  |  | 1503|      0|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|      0|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|      0|      goto error;                                        \
  |  | 1506|      0|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1560|      0|		    }
 1561|      0|		  p++;
 1562|      0|		  VALIDATE_BYTE(0xc0, 0x80); /* 10xxxxxx */
  ------------------
  |  | 1503|      0|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|      0|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|      0|      goto error;                                        \
  |  | 1506|      0|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1563|      0|		}
 1564|      0|	      else
 1565|      0|		goto error;
 1566|      0|	    }
 1567|       |
 1568|      0|	  p++;
 1569|      0|	  VALIDATE_BYTE(0xc0, 0x80); /* 10xxxxxx */
  ------------------
  |  | 1503|      0|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|      0|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|      0|      goto error;                                        \
  |  | 1506|      0|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1570|       |
 1571|      0|	  continue;
 1572|       |
 1573|      0|	error:
 1574|      0|	  return last;
 1575|      0|	}
 1576|  3.19k|    }
 1577|       |
 1578|    123|  return p;
 1579|    123|}
gutf8.c:fast_validate_len:
 1585|  58.2k|{
 1586|  58.2k|  const gchar *p;
 1587|       |
 1588|  58.2k|  g_assert (max_len >= 0);
  ------------------
  |  |  234|  58.2k|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  58.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  58.2k|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  58.2k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  58.2k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  58.2k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  58.2k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  58.2k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 58.2k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  58.2k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  58.2k|   else                                         \
  |  |  |  |  |  | 1183|  58.2k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  58.2k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  58.2k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 58.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  58.2k|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  58.2k|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  58.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 58.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1589|       |
 1590|  2.85M|  for (p = str; ((p - str) < max_len) && *p; p++)
  ------------------
  |  Branch (1590:17): [True: 2.85M, False: 235]
  |  Branch (1590:42): [True: 2.85M, False: 0]
  ------------------
 1591|  2.85M|    {
 1592|  2.85M|      if (*(guchar *)p < 128)
  ------------------
  |  Branch (1592:11): [True: 2.76M, False: 93.9k]
  ------------------
 1593|  2.76M|	/* done */;
 1594|  93.9k|      else 
 1595|  93.9k|	{
 1596|  93.9k|	  const gchar *last;
 1597|       |
 1598|  93.9k|	  last = p;
 1599|  93.9k|	  if (*(guchar *)p < 0xe0) /* 110xxxxx */
  ------------------
  |  Branch (1599:8): [True: 31.0k, False: 62.9k]
  ------------------
 1600|  31.0k|	    {
 1601|  31.0k|	      if (G_UNLIKELY (max_len - (p - str) < 2))
  ------------------
  |  | 1187|  31.0k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  31.0k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  31.0k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  31.0k|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  31.0k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 31.0k]
  |  |  |  |  ------------------
  |  |  |  | 1181|  31.0k|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  31.0k|   else                                         \
  |  |  |  | 1183|  31.0k|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  31.0k|   _g_boolean_var_;                             \
  |  |  |  | 1185|  31.0k|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 31.0k]
  |  |  ------------------
  ------------------
 1602|      0|		goto error;
 1603|       |	      
 1604|  31.0k|	      if (G_UNLIKELY (*(guchar *)p < 0xc2))
  ------------------
  |  | 1187|  31.0k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  31.0k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  31.0k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  31.0k|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  31.0k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 13.0k, False: 17.9k]
  |  |  |  |  ------------------
  |  |  |  | 1181|  31.0k|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  31.0k|   else                                         \
  |  |  |  | 1183|  31.0k|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  31.0k|   _g_boolean_var_;                             \
  |  |  |  | 1185|  31.0k|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 13.0k, False: 17.9k]
  |  |  ------------------
  ------------------
 1605|  13.0k|		goto error;
 1606|  31.0k|	    }
 1607|  62.9k|	  else
 1608|  62.9k|	    {
 1609|  62.9k|	      if (*(guchar *)p < 0xf0) /* 1110xxxx */
  ------------------
  |  Branch (1609:12): [True: 41.3k, False: 21.5k]
  ------------------
 1610|  41.3k|		{
 1611|  41.3k|		  if (G_UNLIKELY (max_len - (p - str) < 3))
  ------------------
  |  | 1187|  41.3k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  41.3k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  41.3k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  41.3k|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  41.3k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 1.41k, False: 39.9k]
  |  |  |  |  ------------------
  |  |  |  | 1181|  41.3k|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  41.3k|   else                                         \
  |  |  |  | 1183|  41.3k|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  41.3k|   _g_boolean_var_;                             \
  |  |  |  | 1185|  41.3k|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 1.41k, False: 39.9k]
  |  |  ------------------
  ------------------
 1612|  1.41k|		    goto error;
 1613|       |
 1614|  39.9k|		  switch (*(guchar *)p++ & 0x0f)
 1615|  39.9k|		    {
 1616|  35.3k|		    case 0:
  ------------------
  |  Branch (1616:7): [True: 35.3k, False: 4.63k]
  ------------------
 1617|  35.3k|		      VALIDATE_BYTE(0xe0, 0xa0); /* 0xa0 ... 0xbf */
  ------------------
  |  | 1503|  35.3k|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|  35.3k|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|  35.3k|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|  35.3k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  35.3k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  35.3k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  35.3k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  35.3k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 690, False: 34.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  35.3k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  35.3k|   else                                         \
  |  |  |  |  |  | 1183|  35.3k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  35.3k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  35.3k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 690, False: 34.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|  35.3k|      goto error;                                        \
  |  | 1506|  35.3k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  35.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 34.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1618|  34.6k|		      break;
 1619|  34.6k|		    case 0x0d:
  ------------------
  |  Branch (1619:7): [True: 123, False: 39.8k]
  ------------------
 1620|    123|		      VALIDATE_BYTE(0xe0, 0x80); /* 0x80 ... 0x9f */
  ------------------
  |  | 1503|    123|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|    123|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|    123|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|    123|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    123| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    123|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    123|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    123|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 122, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    123|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    123|   else                                         \
  |  |  |  |  |  | 1183|    123|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    123|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    123|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 122, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|    123|      goto error;                                        \
  |  | 1506|    123|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    123|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1621|      1|		      break;
 1622|  4.51k|		    default:
  ------------------
  |  Branch (1622:7): [True: 4.51k, False: 35.4k]
  ------------------
 1623|  4.51k|		      VALIDATE_BYTE(0xc0, 0x80); /* 10xxxxxx */
  ------------------
  |  | 1503|  4.51k|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|  4.51k|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|  4.51k|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|  4.51k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  4.51k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  4.51k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  4.51k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  4.51k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 3.67k, False: 834]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  4.51k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  4.51k|   else                                         \
  |  |  |  |  |  | 1183|  4.51k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  4.51k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  4.51k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 3.67k, False: 834]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|  4.51k|      goto error;                                        \
  |  | 1506|  4.51k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  4.51k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 834]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1624|  39.9k|		    }
 1625|  39.9k|		}
 1626|  21.5k|	      else if (*(guchar *)p < 0xf5) /* 11110xxx excluding out-of-range */
  ------------------
  |  Branch (1626:17): [True: 4.55k, False: 16.9k]
  ------------------
 1627|  4.55k|		{
 1628|  4.55k|		  if (G_UNLIKELY (max_len - (p - str) < 4))
  ------------------
  |  | 1187|  4.55k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  4.55k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  4.55k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  4.55k|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  4.55k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 597, False: 3.95k]
  |  |  |  |  ------------------
  |  |  |  | 1181|  4.55k|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  4.55k|   else                                         \
  |  |  |  | 1183|  4.55k|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  4.55k|   _g_boolean_var_;                             \
  |  |  |  | 1185|  4.55k|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 597, False: 3.95k]
  |  |  ------------------
  ------------------
 1629|    597|		    goto error;
 1630|       |
 1631|  3.95k|		  switch (*(guchar *)p++ & 0x07)
 1632|  3.95k|		    {
 1633|  1.24k|		    case 0:
  ------------------
  |  Branch (1633:7): [True: 1.24k, False: 2.70k]
  ------------------
 1634|  1.24k|		      VALIDATE_BYTE(0xc0, 0x80); /* 10xxxxxx */
  ------------------
  |  | 1503|  1.24k|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|  1.24k|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|  1.24k|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|  1.24k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.24k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.24k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.24k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  1.24k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 171, False: 1.07k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.24k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.24k|   else                                         \
  |  |  |  |  |  | 1183|  1.24k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.24k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.24k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 171, False: 1.07k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|  1.24k|      goto error;                                        \
  |  | 1506|  1.24k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.24k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.07k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1635|  1.07k|		      if (G_UNLIKELY((*(guchar *)p & 0x30) == 0))
  ------------------
  |  | 1187|  1.07k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  1.07k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  1.07k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  1.07k|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  1.07k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 822, False: 256]
  |  |  |  |  ------------------
  |  |  |  | 1181|  1.07k|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  1.07k|   else                                         \
  |  |  |  | 1183|  1.07k|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  1.07k|   _g_boolean_var_;                             \
  |  |  |  | 1185|  1.07k|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 822, False: 256]
  |  |  ------------------
  ------------------
 1636|    822|			goto error;
 1637|    256|		      break;
 1638|    622|		    case 4:
  ------------------
  |  Branch (1638:7): [True: 622, False: 3.33k]
  ------------------
 1639|    622|		      VALIDATE_BYTE(0xf0, 0x80); /* 0x80 ... 0x8f */
  ------------------
  |  | 1503|    622|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|    622|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|    622|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|    622|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    622| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    622|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    622|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    622|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 617, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    622|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    622|   else                                         \
  |  |  |  |  |  | 1183|    622|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    622|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    622|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 617, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|    622|      goto error;                                        \
  |  | 1506|    622|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    622|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1640|      5|		      break;
 1641|  2.08k|		    default:
  ------------------
  |  Branch (1641:7): [True: 2.08k, False: 1.87k]
  ------------------
 1642|  2.08k|		      VALIDATE_BYTE(0xc0, 0x80); /* 10xxxxxx */
  ------------------
  |  | 1503|  2.08k|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|  2.08k|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|  2.08k|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|  2.08k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  2.08k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  2.08k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  2.08k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  2.08k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.75k, False: 329]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  2.08k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  2.08k|   else                                         \
  |  |  |  |  |  | 1183|  2.08k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  2.08k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  2.08k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 1.75k, False: 329]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|  2.08k|      goto error;                                        \
  |  | 1506|  2.08k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  2.08k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 329]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1643|  3.95k|		    }
 1644|    590|		  p++;
 1645|    590|		  VALIDATE_BYTE(0xc0, 0x80); /* 10xxxxxx */
  ------------------
  |  | 1503|    590|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|    590|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|    590|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|    590|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    590| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    590|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    590|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    590|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 309, False: 281]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    590|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    590|   else                                         \
  |  |  |  |  |  | 1183|    590|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    590|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    590|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 309, False: 281]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|    590|      goto error;                                        \
  |  | 1506|    590|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    590|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 281]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1646|    590|		}
 1647|  16.9k|	      else
 1648|  16.9k|		goto error;
 1649|  62.9k|	    }
 1650|       |
 1651|  53.7k|	  p++;
 1652|  53.7k|	  VALIDATE_BYTE(0xc0, 0x80); /* 10xxxxxx */
  ------------------
  |  | 1503|  53.7k|  G_STMT_START {                                         \
  |  |  ------------------
  |  |  |  |  940|  53.7k|#define G_STMT_START  do
  |  |  ------------------
  |  | 1504|  53.7k|    if (G_UNLIKELY((*(guchar *)p & (mask)) != (expect))) \
  |  |  ------------------
  |  |  |  | 1187|  53.7k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  53.7k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  53.7k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  53.7k|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  53.7k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 17.7k, False: 35.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  53.7k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  53.7k|   else                                         \
  |  |  |  |  |  | 1183|  53.7k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  53.7k|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  53.7k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1187:26): [True: 17.7k, False: 35.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1505|  53.7k|      goto error;                                        \
  |  | 1506|  53.7k|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  53.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 35.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1653|       |
 1654|  35.9k|	  continue;
 1655|       |
 1656|  57.9k|	error:
 1657|  57.9k|	  return last;
 1658|  53.7k|	}
 1659|  2.85M|    }
 1660|       |
 1661|    235|  return p;
 1662|  58.2k|}

g_find_program_in_path:
  277|      2|{
  278|      2|  const gchar *path, *p;
  279|      2|  gchar *name, *freeme;
  280|       |#ifdef G_OS_WIN32
  281|       |  const gchar *path_copy;
  282|       |  gchar *filename = NULL, *appdir = NULL;
  283|       |  gchar *sysdir = NULL, *windir = NULL;
  284|       |  int n;
  285|       |  wchar_t wfilename[MAXPATHLEN], wsysdir[MAXPATHLEN],
  286|       |    wwindir[MAXPATHLEN];
  287|       |#endif
  288|      2|  gsize len;
  289|      2|  gsize pathlen;
  290|       |
  291|      2|  g_return_val_if_fail (program != NULL, NULL);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  292|       |
  293|       |  /* If it is an absolute path, or a relative path including subdirectories,
  294|       |   * don't look in PATH.
  295|       |   */
  296|      2|  if (g_path_is_absolute (program)
  ------------------
  |  Branch (296:7): [True: 2, False: 0]
  ------------------
  297|      0|      || strchr (program, G_DIR_SEPARATOR) != NULL
  ------------------
  |  |  203|      0|#define G_DIR_SEPARATOR '/'
  ------------------
  |  Branch (297:10): [True: 0, False: 0]
  ------------------
  298|       |#ifdef G_OS_WIN32
  299|       |      || strchr (program, '/') != NULL
  300|       |#endif
  301|      2|      )
  302|      2|    {
  303|      2|      if (g_file_test (program, G_FILE_TEST_IS_EXECUTABLE) &&
  ------------------
  |  Branch (303:11): [True: 2, False: 0]
  ------------------
  304|      2|	  !g_file_test (program, G_FILE_TEST_IS_DIR))
  ------------------
  |  Branch (304:4): [True: 2, False: 0]
  ------------------
  305|      2|        {
  306|      2|          gchar *out = NULL, *cwd = NULL;
  307|       |
  308|      2|          if (g_path_is_absolute (program))
  ------------------
  |  Branch (308:15): [True: 2, False: 0]
  ------------------
  309|      2|            return g_strdup (program);
  310|       |
  311|      0|          cwd = g_get_current_dir ();
  312|      0|          out = g_build_filename (cwd, program, NULL);
  313|      0|          g_free (cwd);
  314|      0|          return g_steal_pointer (&out);
  ------------------
  |  |  231|      0|#define g_steal_pointer(pp) ((glib_typeof (*pp)) (g_steal_pointer) (pp))
  ------------------
  315|      2|        }
  316|      0|      else
  317|      0|        return NULL;
  318|      2|    }
  319|       |  
  320|      0|  path = g_getenv ("PATH");
  321|      0|#if defined(G_OS_UNIX)
  322|      0|  if (path == NULL)
  ------------------
  |  Branch (322:7): [True: 0, False: 0]
  ------------------
  323|      0|    {
  324|       |      /* There is no 'PATH' in the environment.  The default
  325|       |       * search path in GNU libc is the current directory followed by
  326|       |       * the path 'confstr' returns for '_CS_PATH'.
  327|       |       */
  328|       |      
  329|       |      /* In GLib we put . last, for security, and don't use the
  330|       |       * unportable confstr(); UNIX98 does not actually specify
  331|       |       * what to search if PATH is unset. POSIX may, dunno.
  332|       |       */
  333|       |      
  334|      0|      path = "/bin:/usr/bin:.";
  335|      0|    }
  336|       |#else
  337|       |  n = GetModuleFileNameW (NULL, wfilename, MAXPATHLEN);
  338|       |  if (n > 0 && n < MAXPATHLEN)
  339|       |    filename = g_utf16_to_utf8 (wfilename, -1, NULL, NULL, NULL);
  340|       |  
  341|       |  n = GetSystemDirectoryW (wsysdir, MAXPATHLEN);
  342|       |  if (n > 0 && n < MAXPATHLEN)
  343|       |    sysdir = g_utf16_to_utf8 (wsysdir, -1, NULL, NULL, NULL);
  344|       |  
  345|       |  n = GetWindowsDirectoryW (wwindir, MAXPATHLEN);
  346|       |  if (n > 0 && n < MAXPATHLEN)
  347|       |    windir = g_utf16_to_utf8 (wwindir, -1, NULL, NULL, NULL);
  348|       |  
  349|       |  if (filename)
  350|       |    {
  351|       |      appdir = g_path_get_dirname (filename);
  352|       |      g_free (filename);
  353|       |    }
  354|       |  
  355|       |  path = g_strdup (path);
  356|       |
  357|       |  if (windir)
  358|       |    {
  359|       |      const gchar *tem = path;
  360|       |      path = g_strconcat (windir, ";", path, NULL);
  361|       |      g_free ((gchar *) tem);
  362|       |      g_free (windir);
  363|       |    }
  364|       |  
  365|       |  if (sysdir)
  366|       |    {
  367|       |      const gchar *tem = path;
  368|       |      path = g_strconcat (sysdir, ";", path, NULL);
  369|       |      g_free ((gchar *) tem);
  370|       |      g_free (sysdir);
  371|       |    }
  372|       |  
  373|       |  {
  374|       |    const gchar *tem = path;
  375|       |    path = g_strconcat (".;", path, NULL);
  376|       |    g_free ((gchar *) tem);
  377|       |  }
  378|       |  
  379|       |  if (appdir)
  380|       |    {
  381|       |      const gchar *tem = path;
  382|       |      path = g_strconcat (appdir, ";", path, NULL);
  383|       |      g_free ((gchar *) tem);
  384|       |      g_free (appdir);
  385|       |    }
  386|       |
  387|       |  path_copy = path;
  388|       |#endif
  389|       |  
  390|      0|  len = strlen (program) + 1;
  391|      0|  pathlen = strlen (path);
  392|      0|  freeme = name = g_malloc (pathlen + len + 1);
  393|       |  
  394|       |  /* Copy the file name at the top, including '\0'  */
  395|      0|  memcpy (name + pathlen + 1, program, len);
  396|      0|  name = name + pathlen;
  397|       |  /* And add the slash before the filename  */
  398|      0|  *name = G_DIR_SEPARATOR;
  ------------------
  |  |  203|      0|#define G_DIR_SEPARATOR '/'
  ------------------
  399|       |  
  400|      0|  p = path;
  401|      0|  do
  402|      0|    {
  403|      0|      char *startp;
  404|       |
  405|      0|      path = p;
  406|      0|      p = my_strchrnul (path, G_SEARCHPATH_SEPARATOR);
  ------------------
  |  |  205|      0|#define G_SEARCHPATH_SEPARATOR ':'
  ------------------
  407|       |
  408|      0|      if (p == path)
  ------------------
  |  Branch (408:11): [True: 0, False: 0]
  ------------------
  409|       |        /* Two adjacent colons, or a colon at the beginning or the end
  410|       |         * of 'PATH' means to search the current directory.
  411|       |         */
  412|      0|        startp = name + 1;
  413|      0|      else
  414|      0|        startp = memcpy (name - (p - path), path, p - path);
  415|       |
  416|      0|      if (g_file_test (startp, G_FILE_TEST_IS_EXECUTABLE) &&
  ------------------
  |  Branch (416:11): [True: 0, False: 0]
  ------------------
  417|      0|	  !g_file_test (startp, G_FILE_TEST_IS_DIR))
  ------------------
  |  Branch (417:4): [True: 0, False: 0]
  ------------------
  418|      0|        {
  419|      0|          gchar *ret;
  420|      0|          if (g_path_is_absolute (startp)) {
  ------------------
  |  Branch (420:15): [True: 0, False: 0]
  ------------------
  421|      0|            ret = g_strdup (startp);
  422|      0|          } else {
  423|      0|            gchar *cwd = NULL;
  424|      0|            cwd = g_get_current_dir ();
  425|      0|            ret = g_build_filename (cwd, startp, NULL);
  426|      0|            g_free (cwd);
  427|      0|          }
  428|      0|          g_free (freeme);
  429|       |#ifdef G_OS_WIN32
  430|       |	  g_free ((gchar *) path_copy);
  431|       |#endif
  432|      0|          return ret;
  433|      0|        }
  434|      0|    }
  435|      0|  while (*p++ != '\0');
  ------------------
  |  Branch (435:10): [True: 0, False: 0]
  ------------------
  436|       |  
  437|      0|  g_free (freeme);
  438|       |#ifdef G_OS_WIN32
  439|       |  g_free ((gchar *) path_copy);
  440|       |#endif
  441|       |
  442|       |  return NULL;
  443|      0|}
g_get_user_name:
  723|      2|{
  724|      2|  UserDatabaseEntry *entry;
  725|       |
  726|      2|  entry = g_get_user_database_entry ();
  727|       |
  728|      2|  return entry->user_name;
  729|      2|}
g_get_real_name:
  744|      2|{
  745|      2|  UserDatabaseEntry *entry;
  746|       |
  747|      2|  entry = g_get_user_database_entry ();
  748|       |
  749|      2|  return entry->real_name;
  750|      2|}
g_get_home_dir:
  853|      2|{
  854|      2|  const gchar *home_dir;
  855|       |
  856|      2|  G_LOCK (g_utils_global);
  ------------------
  |  |  137|      2|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      2|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  857|       |
  858|      2|  if (g_home_dir == NULL)
  ------------------
  |  Branch (858:7): [True: 2, False: 0]
  ------------------
  859|      2|    g_home_dir = g_build_home_dir ();
  860|      2|  home_dir = g_home_dir;
  861|       |
  862|      2|  G_UNLOCK (g_utils_global);
  ------------------
  |  |  138|      2|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      2|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  863|       |
  864|      2|  return home_dir;
  865|      2|}
g_get_prgname:
 1043|      2|{
 1044|      2|  const gchar* retval;
 1045|       |
 1046|      2|  G_LOCK (g_prgname);
  ------------------
  |  |  137|      2|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      2|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
 1047|      2|  retval = g_prgname;
 1048|      2|  G_UNLOCK (g_prgname);
  ------------------
  |  |  138|      2|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      2|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
 1049|       |
 1050|      2|  return retval;
 1051|      2|}
g_set_prgname:
 1072|      2|{
 1073|      2|  GQuark qprgname = g_quark_from_string (prgname);
 1074|      2|  G_LOCK (g_prgname);
  ------------------
  |  |  137|      2|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      2|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
 1075|      2|  g_prgname = g_quark_to_string (qprgname);
 1076|      2|  G_UNLOCK (g_prgname);
  ------------------
  |  |  138|      2|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|      2|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
 1077|      2|}
gutils.c:g_get_user_database_entry:
  578|      4|{
  579|      4|  static UserDatabaseEntry *entry;
  580|       |
  581|      4|  if (g_once_init_enter (&entry))
  ------------------
  |  |  259|      4|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   62|      4|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (259:3): [True: 2, False: 2]
  |  |  ------------------
  |  |  260|      4|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  824|      4|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  261|      4|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (261:13): [Folded, False: 4]
  |  |  ------------------
  |  |  262|      4|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  127|      8|  (G_GNUC_EXTENSION ({                                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      4|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  128|      8|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));               \
  |  |  |  |  ------------------
  |  |  |  |  |  |  824|      4|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  |  |  ------------------
  |  |  |  |  129|      8|    glib_typeof (*(atomic)) gapg_temp_newval;                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      4|#define glib_typeof(t) __typeof__ (t)
  |  |  |  |  ------------------
  |  |  |  |  130|      8|    glib_typeof ((atomic)) gapg_temp_atomic = (atomic);                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      4|#define glib_typeof(t) __typeof__ (t)
  |  |  |  |  ------------------
  |  |  |  |  131|      8|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  |  |  132|      8|    gapg_temp_newval;                                                      \
  |  |  |  |  133|      8|  }))
  |  |  ------------------
  |  |  |  Branch (262:6): [True: 2, False: 2]
  |  |  ------------------
  |  |  263|      4|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (263:6): [True: 2, False: 0]
  |  |  ------------------
  |  |  264|      4|  }))
  ------------------
  582|      2|    {
  583|      2|      static UserDatabaseEntry e;
  584|       |
  585|      2|#ifdef G_OS_UNIX
  586|      2|      {
  587|      2|        struct passwd *pw = NULL;
  588|      2|        gpointer buffer = NULL;
  589|      2|        gint error;
  590|      2|        gchar *logname;
  591|       |
  592|      2|#  if defined (HAVE_GETPWUID_R)
  593|      2|        struct passwd pwd;
  594|      2|#    ifdef _SC_GETPW_R_SIZE_MAX
  595|       |        /* This reurns the maximum length */
  596|      2|        glong bufsize = sysconf (_SC_GETPW_R_SIZE_MAX);
  597|       |
  598|      2|        if (bufsize < 0)
  ------------------
  |  Branch (598:13): [True: 0, False: 2]
  ------------------
  599|      0|          bufsize = 64;
  600|       |#    else /* _SC_GETPW_R_SIZE_MAX */
  601|       |        glong bufsize = 64;
  602|       |#    endif /* _SC_GETPW_R_SIZE_MAX */
  603|       |
  604|      2|        logname = (gchar *) g_getenv ("LOGNAME");
  605|       |
  606|      2|        do
  607|      2|          {
  608|      2|            g_free (buffer);
  609|       |            /* we allocate 6 extra bytes to work around a bug in
  610|       |             * Mac OS < 10.3. See #156446
  611|       |             */
  612|      2|            buffer = g_malloc (bufsize + 6);
  613|      2|            errno = 0;
  614|       |
  615|      2|            if (logname) {
  ------------------
  |  Branch (615:17): [True: 0, False: 2]
  ------------------
  616|      0|              error = getpwnam_r (logname, &pwd, buffer, bufsize, &pw);
  617|      0|              if (!pw || (pw->pw_uid != getuid ())) {
  ------------------
  |  Branch (617:19): [True: 0, False: 0]
  |  Branch (617:26): [True: 0, False: 0]
  ------------------
  618|       |                /* LOGNAME is lying, fall back to looking up the uid */
  619|      0|                error = getpwuid_r (getuid (), &pwd, buffer, bufsize, &pw);
  620|      0|              }
  621|      2|            } else {
  622|      2|              error = getpwuid_r (getuid (), &pwd, buffer, bufsize, &pw);
  623|      2|            }
  624|      2|            error = error < 0 ? errno : error;
  ------------------
  |  Branch (624:21): [True: 0, False: 2]
  ------------------
  625|       |
  626|      2|            if (!pw)
  ------------------
  |  Branch (626:17): [True: 0, False: 2]
  ------------------
  627|      0|              {
  628|       |                /* we bail out prematurely if the user id can't be found
  629|       |                 * (should be pretty rare case actually), or if the buffer
  630|       |                 * should be sufficiently big and lookups are still not
  631|       |                 * successful.
  632|       |                 */
  633|      0|                if (error == 0 || error == ENOENT)
  ------------------
  |  Branch (633:21): [True: 0, False: 0]
  |  Branch (633:35): [True: 0, False: 0]
  ------------------
  634|      0|                  {
  635|      0|                    g_warning ("getpwuid_r(): failed due to unknown user id (%lu)",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  636|      0|                               (gulong) getuid ());
  637|      0|                    break;
  638|      0|                  }
  639|      0|                if (bufsize > 32 * 1024)
  ------------------
  |  Branch (639:21): [True: 0, False: 0]
  ------------------
  640|      0|                  {
  641|      0|                    g_warning ("getpwuid_r(): failed due to: %s.",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  642|      0|                               g_strerror (error));
  643|      0|                    break;
  644|      0|                  }
  645|       |
  646|      0|                bufsize *= 2;
  647|      0|              }
  648|      2|          }
  649|      2|        while (!pw);
  ------------------
  |  Branch (649:16): [True: 0, False: 2]
  ------------------
  650|      2|#  endif /* HAVE_GETPWUID_R */
  651|       |
  652|      2|        if (!pw)
  ------------------
  |  Branch (652:13): [True: 0, False: 2]
  ------------------
  653|      0|          {
  654|      0|            pw = getpwuid (getuid ());
  655|      0|          }
  656|      2|        if (pw)
  ------------------
  |  Branch (656:13): [True: 2, False: 0]
  ------------------
  657|      2|          {
  658|      2|            e.user_name = g_strdup (pw->pw_name);
  659|       |
  660|      2|#ifndef __BIONIC__
  661|      2|            if (pw->pw_gecos && *pw->pw_gecos != '\0' && pw->pw_name)
  ------------------
  |  Branch (661:17): [True: 2, False: 0]
  |  Branch (661:33): [True: 2, False: 0]
  |  Branch (661:58): [True: 2, False: 0]
  ------------------
  662|      2|              {
  663|      2|                gchar **gecos_fields;
  664|      2|                gchar **name_parts;
  665|      2|                gchar *uppercase_pw_name;
  666|       |
  667|       |                /* split the gecos field and substitute '&' */
  668|      2|                gecos_fields = g_strsplit (pw->pw_gecos, ",", 0);
  669|      2|                name_parts = g_strsplit (gecos_fields[0], "&", 0);
  670|      2|                uppercase_pw_name = g_strdup (pw->pw_name);
  671|      2|                uppercase_pw_name[0] = g_ascii_toupper (uppercase_pw_name[0]);
  672|      2|                e.real_name = g_strjoinv (uppercase_pw_name, name_parts);
  673|      2|                g_strfreev (gecos_fields);
  674|      2|                g_strfreev (name_parts);
  675|      2|                g_free (uppercase_pw_name);
  676|      2|              }
  677|      2|#endif
  678|       |
  679|      2|            if (!e.home_dir)
  ------------------
  |  Branch (679:17): [True: 2, False: 0]
  ------------------
  680|      2|              e.home_dir = g_strdup (pw->pw_dir);
  681|      2|          }
  682|      2|        g_free (buffer);
  683|      2|      }
  684|       |
  685|      2|#endif /* G_OS_UNIX */
  686|       |
  687|       |#ifdef G_OS_WIN32
  688|       |      {
  689|       |        guint len = UNLEN+1;
  690|       |        wchar_t buffer[UNLEN+1];
  691|       |
  692|       |        if (GetUserNameW (buffer, (LPDWORD) &len))
  693|       |          {
  694|       |            e.user_name = g_utf16_to_utf8 (buffer, -1, NULL, NULL, NULL);
  695|       |            e.real_name = g_strdup (e.user_name);
  696|       |          }
  697|       |      }
  698|       |#endif /* G_OS_WIN32 */
  699|       |
  700|      2|      if (!e.user_name)
  ------------------
  |  Branch (700:11): [True: 0, False: 2]
  ------------------
  701|      0|        e.user_name = g_strdup ("somebody");
  702|      2|      if (!e.real_name)
  ------------------
  |  Branch (702:11): [True: 0, False: 2]
  ------------------
  703|      0|        e.real_name = g_strdup ("Unknown");
  704|       |
  705|      2|      g_once_init_leave (&entry, &e);
  ------------------
  |  |  266|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  267|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  824|      2|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  268|      2|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (268:5): [Folded, False: 2]
  |  |  ------------------
  |  |  269|      2|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  270|      2|  }))
  ------------------
  706|      2|    }
  707|       |
  708|      4|  return entry;
  709|      4|}
gutils.c:g_build_home_dir:
  757|      2|{
  758|      2|  gchar *home_dir;
  759|       |
  760|       |  /* We first check HOME and use it if it is set */
  761|      2|  home_dir = g_strdup (g_getenv ("HOME"));
  762|       |
  763|       |#ifdef G_OS_WIN32
  764|       |  /* Only believe HOME if it is an absolute path and exists.
  765|       |   *
  766|       |   * We only do this check on Windows for a couple of reasons.
  767|       |   * Historically, we only did it there because we used to ignore $HOME
  768|       |   * on UNIX.  There are concerns about enabling it now on UNIX because
  769|       |   * of things like autofs.  In short, if the user has a bogus value in
  770|       |   * $HOME then they get what they pay for...
  771|       |   */
  772|       |  if (home_dir != NULL)
  773|       |    {
  774|       |      if (!(g_path_is_absolute (home_dir) &&
  775|       |            g_file_test (home_dir, G_FILE_TEST_IS_DIR)))
  776|       |        g_clear_pointer (&home_dir, g_free);
  777|       |    }
  778|       |
  779|       |  /* In case HOME is Unix-style (it happens), convert it to
  780|       |   * Windows style.
  781|       |   */
  782|       |  if (home_dir != NULL)
  783|       |    {
  784|       |      gchar *p;
  785|       |      while ((p = strchr (home_dir, '/')) != NULL)
  786|       |        *p = '\\';
  787|       |    }
  788|       |
  789|       |  if (home_dir == NULL)
  790|       |    {
  791|       |      /* USERPROFILE is probably the closest equivalent to $HOME? */
  792|       |      if (g_getenv ("USERPROFILE") != NULL)
  793|       |        home_dir = g_strdup (g_getenv ("USERPROFILE"));
  794|       |    }
  795|       |
  796|       |  if (home_dir == NULL)
  797|       |    home_dir = get_special_folder (&FOLDERID_Profile);
  798|       |
  799|       |  if (home_dir == NULL)
  800|       |    home_dir = get_windows_directory_root ();
  801|       |#endif /* G_OS_WIN32 */
  802|       |
  803|      2|  if (home_dir == NULL)
  ------------------
  |  Branch (803:7): [True: 0, False: 2]
  ------------------
  804|      0|    {
  805|       |      /* If we didn't get it from any of those methods, we will have
  806|       |       * to read the user database entry.
  807|       |       */
  808|      0|      UserDatabaseEntry *entry = g_get_user_database_entry ();
  809|      0|      home_dir = g_strdup (entry->home_dir);
  810|      0|    }
  811|       |
  812|       |  /* If we have been denied access to /etc/passwd (for example, by an
  813|       |   * overly-zealous LSM), make up a junk value. The return value at this
  814|       |   * point is explicitly documented as ‘undefined’. */
  815|      2|  if (home_dir == NULL)
  ------------------
  |  Branch (815:7): [True: 0, False: 2]
  ------------------
  816|      0|    {
  817|      0|      g_warning ("Could not find home directory: $HOME is not set, and "
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  818|      0|                 "user database could not be read.");
  819|      0|      home_dir = g_strdup ("/");
  820|      0|    }
  821|       |
  822|      2|  return g_steal_pointer (&home_dir);
  ------------------
  |  |  231|      2|#define g_steal_pointer(pp) ((glib_typeof (*pp)) (g_steal_pointer) (pp))
  ------------------
  823|      2|}

gmessages.c:g_bit_nth_msf_impl:
  405|  2.71M|{
  406|  2.71M|  if (nth_bit < 0 || G_UNLIKELY (nth_bit > GLIB_SIZEOF_LONG * 8))
  ------------------
  |  | 1187|  1.35M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|  1.35M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  1.35M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  1.35M|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  1.35M|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 1.35M]
  |  |  |  |  ------------------
  |  |  |  | 1181|  1.35M|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  1.35M|   else                                         \
  |  |  |  | 1183|  1.35M|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  1.35M|   _g_boolean_var_;                             \
  |  |  |  | 1185|  1.35M|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 1.35M]
  |  |  ------------------
  ------------------
  |  Branch (406:7): [True: 1.35M, False: 1.35M]
  ------------------
  407|  1.35M|    nth_bit = GLIB_SIZEOF_LONG * 8;
  ------------------
  |  |   75|  1.35M|#define GLIB_SIZEOF_LONG   8
  ------------------
  408|  88.1M|  while (nth_bit > 0)
  ------------------
  |  Branch (408:10): [True: 86.8M, False: 1.35M]
  ------------------
  409|  86.8M|    {
  410|  86.8M|      nth_bit--;
  411|  86.8M|      if (mask & (1UL << nth_bit))
  ------------------
  |  Branch (411:11): [True: 1.35M, False: 85.4M]
  ------------------
  412|  1.35M|        return nth_bit;
  413|  86.8M|    }
  414|  1.35M|  return -1;
  415|  2.71M|}
gslice.c:g_bit_storage_impl:
  419|  27.4k|{
  420|  27.4k|#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__)
  421|  27.4k|  return G_LIKELY (number) ?
  ------------------
  |  | 1186|  27.4k|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|  27.4k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  27.4k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|  27.4k|   int _g_boolean_var_;                         \
  |  |  |  | 1180|  27.4k|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 27.4k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|  27.4k|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|  27.4k|   else                                         \
  |  |  |  | 1183|  27.4k|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|  27.4k|   _g_boolean_var_;                             \
  |  |  |  | 1185|  27.4k|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 27.4k, False: 0]
  |  |  ------------------
  ------------------
  422|  27.4k|           ((GLIB_SIZEOF_LONG * 8U - 1) ^ (guint) __builtin_clzl(number)) + 1 : 1;
  ------------------
  |  |   75|  27.4k|#define GLIB_SIZEOF_LONG   8
  ------------------
  423|       |#else
  424|       |  guint n_bits = 0;
  425|       |
  426|       |  do
  427|       |    {
  428|       |      n_bits++;
  429|       |      number >>= 1;
  430|       |    }
  431|       |  while (number);
  432|       |  return n_bits;
  433|       |#endif
  434|  27.4k|}
gsignal.c:g_bit_storage_impl:
  419|      2|{
  420|      2|#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__)
  421|      2|  return G_LIKELY (number) ?
  ------------------
  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      2|   else                                         \
  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  | 1185|      2|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  422|      2|           ((GLIB_SIZEOF_LONG * 8U - 1) ^ (guint) __builtin_clzl(number)) + 1 : 1;
  ------------------
  |  |   75|      2|#define GLIB_SIZEOF_LONG   8
  ------------------
  423|       |#else
  424|       |  guint n_bits = 0;
  425|       |
  426|       |  do
  427|       |    {
  428|       |      n_bits++;
  429|       |      number >>= 1;
  430|       |    }
  431|       |  while (number);
  432|       |  return n_bits;
  433|       |#endif
  434|      2|}
gvalue.c:g_bit_storage_impl:
  419|    682|{
  420|    682|#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__)
  421|    682|  return G_LIKELY (number) ?
  ------------------
  |  | 1186|    682|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|    682| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    682|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|    682|   int _g_boolean_var_;                         \
  |  |  |  | 1180|    682|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 682, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|    682|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|    682|   else                                         \
  |  |  |  | 1183|    682|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|    682|   _g_boolean_var_;                             \
  |  |  |  | 1185|    682|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 682, False: 0]
  |  |  ------------------
  ------------------
  422|    682|           ((GLIB_SIZEOF_LONG * 8U - 1) ^ (guint) __builtin_clzl(number)) + 1 : 1;
  ------------------
  |  |   75|    682|#define GLIB_SIZEOF_LONG   8
  ------------------
  423|       |#else
  424|       |  guint n_bits = 0;
  425|       |
  426|       |  do
  427|       |    {
  428|       |      n_bits++;
  429|       |      number >>= 1;
  430|       |    }
  431|       |  while (number);
  432|       |  return n_bits;
  433|       |#endif
  434|    682|}

gstring.c:g_nearest_pow:
   40|  5.04M|{
   41|  5.04M|  gsize n = num - 1;
   42|       |
   43|  5.04M|  g_assert (num > 0 && num <= G_MAXSIZE / 2);
  ------------------
  |  |  234|  5.04M|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  5.04M|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  5.04M|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  5.04M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  5.04M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  5.04M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  5.04M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  15.1M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.04M, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 5.04M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  5.04M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  5.04M|   else                                         \
  |  |  |  |  |  | 1183|  5.04M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  5.04M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  5.04M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 5.04M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  5.04M|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  5.04M|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  5.04M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 5.04M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   44|       |
   45|  5.04M|  n |= n >> 1;
   46|  5.04M|  n |= n >> 2;
   47|  5.04M|  n |= n >> 4;
   48|  5.04M|  n |= n >> 8;
   49|  5.04M|  n |= n >> 16;
   50|  5.04M|#if GLIB_SIZEOF_SIZE_T == 8
   51|  5.04M|  n |= n >> 32;
   52|  5.04M|#endif
   53|       |
   54|  5.04M|  return n + 1;
   55|  5.04M|}
garray.c:g_nearest_pow:
   40|  1.00M|{
   41|  1.00M|  gsize n = num - 1;
   42|       |
   43|  1.00M|  g_assert (num > 0 && num <= G_MAXSIZE / 2);
  ------------------
  |  |  234|  1.00M|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|  1.00M|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|  1.00M|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|  1.00M|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|  1.00M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.00M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|  1.00M|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|  3.00M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.00M, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 1.00M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|  1.00M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|  1.00M|   else                                         \
  |  |  |  |  |  | 1183|  1.00M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|  1.00M|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|  1.00M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 1.00M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|  1.00M|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|  1.00M|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|  1.00M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 1.00M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   44|       |
   45|  1.00M|  n |= n >> 1;
   46|  1.00M|  n |= n >> 2;
   47|  1.00M|  n |= n >> 4;
   48|  1.00M|  n |= n >> 8;
   49|  1.00M|  n |= n >> 16;
   50|  1.00M|#if GLIB_SIZEOF_SIZE_T == 8
   51|  1.00M|  n |= n >> 32;
   52|  1.00M|#endif
   53|       |
   54|  1.00M|  return n + 1;
   55|  1.00M|}

g_wakeup_new:
  139|      2|{
  140|      2|  GError *error = NULL;
  141|      2|  GWakeup *wakeup;
  142|       |
  143|      2|  wakeup = g_slice_new (GWakeup);
  ------------------
  |  |   48|      2|#define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
  ------------------
  144|       |
  145|       |  /* try eventfd first, if we think we can */
  146|      2|#if defined (HAVE_EVENTFD)
  147|      2|#ifndef TEST_EVENTFD_FALLBACK
  148|      2|  wakeup->fds[0] = eventfd (0, EFD_CLOEXEC | EFD_NONBLOCK);
  149|       |#else
  150|       |  wakeup->fds[0] = -1;
  151|       |#endif
  152|       |
  153|      2|  if (wakeup->fds[0] != -1)
  ------------------
  |  Branch (153:7): [True: 2, False: 0]
  ------------------
  154|      2|    {
  155|      2|      wakeup->fds[1] = -1;
  156|      2|      return wakeup;
  157|      2|    }
  158|       |
  159|       |  /* for any failure, try a pipe instead */
  160|      0|#endif
  161|       |
  162|      0|  if (!g_unix_open_pipe (wakeup->fds, FD_CLOEXEC, &error))
  ------------------
  |  Branch (162:7): [True: 0, False: 0]
  ------------------
  163|      0|    g_error ("Creating pipes for GWakeup: %s", error->message);
  ------------------
  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  346|      0|                        for (;;) ;                   \
  |  |  347|      0|                      } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  164|       |
  165|      0|  if (!g_unix_set_fd_nonblocking (wakeup->fds[0], TRUE, &error) ||
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  |  Branch (165:7): [True: 0, False: 0]
  ------------------
  166|      0|      !g_unix_set_fd_nonblocking (wakeup->fds[1], TRUE, &error))
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  |  Branch (166:7): [True: 0, False: 0]
  ------------------
  167|      0|    g_error ("Set pipes non-blocking for GWakeup: %s", error->message);
  ------------------
  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  346|      0|                        for (;;) ;                   \
  |  |  347|      0|                      } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|       |
  169|      0|  return wakeup;
  170|      2|}
g_wakeup_get_pollfd:
  187|      2|{
  188|      2|  poll_fd->fd = wakeup->fds[0];
  189|      2|  poll_fd->events = G_IO_IN;
  190|      2|}
g_wakeup_signal:
  231|    251|{
  232|    251|  int res;
  233|       |
  234|    251|  if (wakeup->fds[1] == -1)
  ------------------
  |  Branch (234:7): [True: 251, False: 0]
  ------------------
  235|    251|    {
  236|    251|      guint64 one = 1;
  237|       |
  238|       |      /* eventfd() case. It requires a 64-bit counter increment value to be
  239|       |       * written. */
  240|    251|      do
  241|    251|        res = write (wakeup->fds[0], &one, sizeof one);
  242|    251|      while (G_UNLIKELY (res == -1 && errno == EINTR));
  ------------------
  |  | 1187|    251|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|    251| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    251|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|    251|   int _g_boolean_var_;                         \
  |  |  |  | 1180|    502|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 251]
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|    251|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|    251|   else                                         \
  |  |  |  | 1183|    251|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|    251|   _g_boolean_var_;                             \
  |  |  |  | 1185|    251|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 251]
  |  |  ------------------
  ------------------
  243|    251|    }
  244|      0|  else
  245|      0|    {
  246|      0|      guint8 one = 1;
  247|       |
  248|       |      /* Non-eventfd() case. Only a single byte needs to be written, and it can
  249|       |       * have an arbitrary value. */
  250|      0|      do
  251|      0|        res = write (wakeup->fds[1], &one, sizeof one);
  252|      0|      while (G_UNLIKELY (res == -1 && errno == EINTR));
  ------------------
  |  | 1187|      0|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      0|   else                                         \
  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  | 1185|      0|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  253|      0|    }
  254|    251|}

_g_locale_get_charset_aliases:
  108|      2|{
  109|      2|  const char *cp;
  110|       |
  111|      2|  cp = charset_aliases;
  112|      2|  if (cp == NULL)
  ------------------
  |  Branch (112:7): [True: 2, False: 0]
  ------------------
  113|      2|    {
  114|      2|#if !(defined VMS || defined WIN32_NATIVE || defined __CYGWIN__)
  115|      2|      FILE *fp;
  116|      2|      const char *dir;
  117|      2|      const char *base = "charset.alias";
  118|      2|      char *file_name;
  119|       |
  120|      2|      dir = relocate (GLIB_CHARSETALIAS_DIR);
  ------------------
  |  |   65|      2|# define relocate(pathname) (pathname)
  ------------------
  121|       |
  122|       |      /* Concatenate dir and base into freshly allocated file_name.  */
  123|      2|      {
  124|      2|	size_t dir_len = strlen (dir);
  125|      2|	size_t base_len = strlen (base);
  126|      2|	int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
  ------------------
  |  |   83|      2|# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
  |  |  ------------------
  |  |  |  |   79|      2|# define DIRECTORY_SEPARATOR '/'
  |  |  ------------------
  ------------------
  |  Branch (126:19): [True: 2, False: 0]
  |  Branch (126:34): [True: 2, False: 0]
  ------------------
  127|      2|	file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
  128|      2|	if (file_name != NULL)
  ------------------
  |  Branch (128:6): [True: 2, False: 0]
  ------------------
  129|      2|	  {
  130|      2|	    memcpy (file_name, dir, dir_len);
  131|      2|	    if (add_slash)
  ------------------
  |  Branch (131:10): [True: 2, False: 0]
  ------------------
  132|      2|	      file_name[dir_len] = DIRECTORY_SEPARATOR;
  ------------------
  |  |   79|      2|# define DIRECTORY_SEPARATOR '/'
  ------------------
  133|      2|	    memcpy (file_name + dir_len + add_slash, base, base_len + 1);
  134|      2|	  }
  135|      2|      }
  136|       |
  137|      2|      if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
  ------------------
  |  Branch (137:11): [True: 0, False: 2]
  |  Branch (137:32): [True: 2, False: 0]
  ------------------
  138|       |	/* Out of memory or file not found, treat it as empty.  */
  139|      2|	cp = "";
  140|      0|      else
  141|      0|	{
  142|       |	  /* Parse the file's contents.  */
  143|      0|	  char *res_ptr = NULL;
  144|      0|	  size_t res_size = 0;
  145|       |
  146|      0|	  for (;;)
  147|      0|	    {
  148|      0|	      int c;
  149|      0|	      char buf1[50+1];
  150|      0|	      char buf2[50+1];
  151|      0|	      size_t l1, l2;
  152|      0|	      char *old_res_ptr;
  153|       |
  154|      0|	      c = getc (fp);
  155|      0|	      if (c == EOF)
  ------------------
  |  Branch (155:12): [True: 0, False: 0]
  ------------------
  156|      0|		break;
  157|      0|	      if (c == '\n' || c == ' ' || c == '\t')
  ------------------
  |  Branch (157:12): [True: 0, False: 0]
  |  Branch (157:25): [True: 0, False: 0]
  |  Branch (157:37): [True: 0, False: 0]
  ------------------
  158|      0|		continue;
  159|      0|	      if (c == '#')
  ------------------
  |  Branch (159:12): [True: 0, False: 0]
  ------------------
  160|      0|		{
  161|       |		  /* Skip comment, to end of line.  */
  162|      0|		  do
  163|      0|		    c = getc (fp);
  164|      0|		  while (!(c == EOF || c == '\n'));
  ------------------
  |  Branch (164:14): [True: 0, False: 0]
  |  Branch (164:26): [True: 0, False: 0]
  ------------------
  165|      0|		  if (c == EOF)
  ------------------
  |  Branch (165:9): [True: 0, False: 0]
  ------------------
  166|      0|		    break;
  167|      0|		  continue;
  168|      0|		}
  169|      0|	      ungetc (c, fp);
  170|      0|	      if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
  ------------------
  |  Branch (170:12): [True: 0, False: 0]
  ------------------
  171|      0|		break;
  172|      0|	      l1 = strlen (buf1);
  173|      0|	      l2 = strlen (buf2);
  174|      0|	      old_res_ptr = res_ptr;
  175|      0|	      if (res_size == 0)
  ------------------
  |  Branch (175:12): [True: 0, False: 0]
  ------------------
  176|      0|		{
  177|      0|		  res_size = l1 + 1 + l2 + 1;
  178|      0|		  res_ptr = (char *) malloc (res_size + 1);
  179|      0|		}
  180|      0|	      else
  181|      0|		{
  182|      0|		  res_size += l1 + 1 + l2 + 1;
  183|      0|		  res_ptr = (char *) realloc (res_ptr, res_size + 1);
  184|      0|		}
  185|      0|	      if (res_ptr == NULL)
  ------------------
  |  Branch (185:12): [True: 0, False: 0]
  ------------------
  186|      0|		{
  187|       |		  /* Out of memory. */
  188|      0|		  res_size = 0;
  189|      0|		  if (old_res_ptr != NULL)
  ------------------
  |  Branch (189:9): [True: 0, False: 0]
  ------------------
  190|      0|		    free (old_res_ptr);
  191|      0|		  break;
  192|      0|		}
  193|      0|	      strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
  194|      0|	      strcpy (res_ptr + res_size - (l2 + 1), buf2);
  195|      0|	    }
  196|      0|	  fclose (fp);
  197|      0|	  if (res_size == 0)
  ------------------
  |  Branch (197:8): [True: 0, False: 0]
  ------------------
  198|      0|	    cp = "";
  199|      0|	  else
  200|      0|	    {
  201|      0|	      *(res_ptr + res_size) = '\0';
  202|      0|	      cp = res_ptr;
  203|      0|	    }
  204|      0|	}
  205|       |
  206|      2|      if (file_name != NULL)
  ------------------
  |  Branch (206:11): [True: 2, False: 0]
  ------------------
  207|      2|	free (file_name);
  208|       |
  209|       |#else
  210|       |
  211|       |# if defined VMS
  212|       |      /* To avoid the troubles of an extra file charset.alias_vms in the
  213|       |	 sources of many GNU packages, simply inline the aliases here.  */
  214|       |      /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
  215|       |	 "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
  216|       |	 section 10.7 "Handling Different Character Sets".  */
  217|       |      cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
  218|       |	   "ISO8859-2" "\0" "ISO-8859-2" "\0"
  219|       |	   "ISO8859-5" "\0" "ISO-8859-5" "\0"
  220|       |	   "ISO8859-7" "\0" "ISO-8859-7" "\0"
  221|       |	   "ISO8859-8" "\0" "ISO-8859-8" "\0"
  222|       |	   "ISO8859-9" "\0" "ISO-8859-9" "\0"
  223|       |	   /* Japanese */
  224|       |	   "eucJP" "\0" "EUC-JP" "\0"
  225|       |	   "SJIS" "\0" "SHIFT_JIS" "\0"
  226|       |	   "DECKANJI" "\0" "DEC-KANJI" "\0"
  227|       |	   "SDECKANJI" "\0" "EUC-JP" "\0"
  228|       |	   /* Chinese */
  229|       |	   "eucTW" "\0" "EUC-TW" "\0"
  230|       |	   "DECHANYU" "\0" "DEC-HANYU" "\0"
  231|       |	   "DECHANZI" "\0" "GB2312" "\0"
  232|       |	   /* Korean */
  233|       |	   "DECKOREAN" "\0" "EUC-KR" "\0";
  234|       |# endif
  235|       |
  236|       |# if defined WIN32_NATIVE || defined __CYGWIN__
  237|       |      /* To avoid the troubles of installing a separate file in the same
  238|       |	 directory as the DLL and of retrieving the DLL's directory at
  239|       |	 runtime, simply inline the aliases here.  */
  240|       |
  241|       |      cp = "CP936" "\0" "GBK" "\0"
  242|       |	   "CP1361" "\0" "JOHAB" "\0"
  243|       |	   "CP20127" "\0" "ASCII" "\0"
  244|       |	   "CP20866" "\0" "KOI8-R" "\0"
  245|       |	   "CP20936" "\0" "GB2312" "\0"
  246|       |	   "CP21866" "\0" "KOI8-RU" "\0"
  247|       |	   "CP28591" "\0" "ISO-8859-1" "\0"
  248|       |	   "CP28592" "\0" "ISO-8859-2" "\0"
  249|       |	   "CP28593" "\0" "ISO-8859-3" "\0"
  250|       |	   "CP28594" "\0" "ISO-8859-4" "\0"
  251|       |	   "CP28595" "\0" "ISO-8859-5" "\0"
  252|       |	   "CP28596" "\0" "ISO-8859-6" "\0"
  253|       |	   "CP28597" "\0" "ISO-8859-7" "\0"
  254|       |	   "CP28598" "\0" "ISO-8859-8" "\0"
  255|       |	   "CP28599" "\0" "ISO-8859-9" "\0"
  256|       |	   "CP28605" "\0" "ISO-8859-15" "\0"
  257|       |	   "CP38598" "\0" "ISO-8859-8" "\0"
  258|       |	   "CP51932" "\0" "EUC-JP" "\0"
  259|       |	   "CP51936" "\0" "GB2312" "\0"
  260|       |	   "CP51949" "\0" "EUC-KR" "\0"
  261|       |	   "CP51950" "\0" "EUC-TW" "\0"
  262|       |	   "CP54936" "\0" "GB18030" "\0"
  263|       |	   "CP65001" "\0" "UTF-8" "\0";
  264|       |# endif
  265|       |#endif
  266|       |
  267|      2|      charset_aliases = cp;
  268|      2|    }
  269|       |
  270|      2|  return cp;
  271|      2|}
_g_locale_charset_raw:
  281|    130|{
  282|    130|  const char *codeset;
  283|       |
  284|    130|#if !(defined WIN32_NATIVE || defined OS2)
  285|       |
  286|    130|# if HAVE_LANGINFO_CODESET
  287|       |
  288|       |  /* Most systems support nl_langinfo (CODESET) nowadays.  */
  289|    130|  codeset = nl_langinfo (CODESET);
  290|       |
  291|       |#  ifdef __CYGWIN__
  292|       |  /* Cygwin 2006 does not have locales.  nl_langinfo (CODESET) always
  293|       |     returns "US-ASCII".  As long as this is not fixed, return the suffix
  294|       |     of the locale name from the environment variables (if present) or
  295|       |     the codepage as a number.  */
  296|       |  if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
  297|       |    {
  298|       |      const char *locale;
  299|       |      static char buf[2 + 10 + 1];
  300|       |
  301|       |      locale = getenv ("LC_ALL");
  302|       |      if (locale == NULL || locale[0] == '\0')
  303|       |	{
  304|       |	  locale = getenv ("LC_CTYPE");
  305|       |	  if (locale == NULL || locale[0] == '\0')
  306|       |	    locale = getenv ("LANG");
  307|       |	}
  308|       |      if (locale != NULL && locale[0] != '\0')
  309|       |	{
  310|       |	  /* If the locale name contains an encoding after the dot, return
  311|       |	     it.  */
  312|       |	  const char *dot = strchr (locale, '.');
  313|       |
  314|       |	  if (dot != NULL)
  315|       |	    {
  316|       |	      const char *modifier;
  317|       |
  318|       |	      dot++;
  319|       |	      /* Look for the possible @... trailer and remove it, if any.  */
  320|       |	      modifier = strchr (dot, '@');
  321|       |	      if (modifier == NULL)
  322|       |		return dot;
  323|       |	      if (modifier - dot < sizeof (buf))
  324|       |		{
  325|       |		  memcpy (buf, dot, modifier - dot);
  326|       |		  buf [modifier - dot] = '\0';
  327|       |		  return buf;
  328|       |		}
  329|       |	    }
  330|       |	}
  331|       |
  332|       |      /* Woe32 has a function returning the locale's codepage as a number.  */
  333|       |      sprintf (buf, "CP%u", GetACP ());
  334|       |      codeset = buf;
  335|       |    }
  336|       |#  endif
  337|       |
  338|       |# else
  339|       |
  340|       |  /* On old systems which lack it, use setlocale or getenv.  */
  341|       |  const char *locale = NULL;
  342|       |
  343|       |  /* But most old systems don't have a complete set of locales.  Some
  344|       |     (like SunOS 4 or DJGPP) have only the C locale.  Therefore we don't
  345|       |     use setlocale here; it would return "C" when it doesn't support the
  346|       |     locale name the user has set.  */
  347|       |#  if 0
  348|       |  locale = setlocale (LC_CTYPE, NULL);
  349|       |#  endif
  350|       |  if (locale == NULL || locale[0] == '\0')
  351|       |    {
  352|       |      locale = getenv ("LC_ALL");
  353|       |      if (locale == NULL || locale[0] == '\0')
  354|       |	{
  355|       |	  locale = getenv ("LC_CTYPE");
  356|       |	  if (locale == NULL || locale[0] == '\0')
  357|       |	    locale = getenv ("LANG");
  358|       |	}
  359|       |    }
  360|       |
  361|       |  /* On some old systems, one used to set locale = "iso8859_1". On others,
  362|       |     you set it to "language_COUNTRY.charset". In any case, we resolve it
  363|       |     through the charset.alias file.  */
  364|       |  codeset = locale;
  365|       |
  366|       |# endif
  367|       |
  368|       |#elif defined WIN32_NATIVE
  369|       |
  370|       |  static char buf[2 + 10 + 1];
  371|       |
  372|       |  /* Woe32 has a function returning the locale's codepage as a number.  */
  373|       |  sprintf (buf, "CP%u", GetACP ());
  374|       |  codeset = buf;
  375|       |
  376|       |#elif defined OS2
  377|       |
  378|       |  const char *locale;
  379|       |  static char buf[2 + 10 + 1];
  380|       |  ULONG cp[3];
  381|       |  ULONG cplen;
  382|       |
  383|       |  /* Allow user to override the codeset, as set in the operating system,
  384|       |     with standard language environment variables.  */
  385|       |  locale = getenv ("LC_ALL");
  386|       |  if (locale == NULL || locale[0] == '\0')
  387|       |    {
  388|       |      locale = getenv ("LC_CTYPE");
  389|       |      if (locale == NULL || locale[0] == '\0')
  390|       |	locale = getenv ("LANG");
  391|       |    }
  392|       |  if (locale != NULL && locale[0] != '\0')
  393|       |    {
  394|       |      /* If the locale name contains an encoding after the dot, return it.  */
  395|       |      const char *dot = strchr (locale, '.');
  396|       |
  397|       |      if (dot != NULL)
  398|       |	{
  399|       |	  const char *modifier;
  400|       |
  401|       |	  dot++;
  402|       |	  /* Look for the possible @... trailer and remove it, if any.  */
  403|       |	  modifier = strchr (dot, '@');
  404|       |	  if (modifier == NULL)
  405|       |	    return dot;
  406|       |	  if (modifier - dot < sizeof (buf))
  407|       |	    {
  408|       |	      memcpy (buf, dot, modifier - dot);
  409|       |	      buf [modifier - dot] = '\0';
  410|       |	      return buf;
  411|       |	    }
  412|       |	}
  413|       |
  414|       |      /* Resolve through the charset.alias file.  */
  415|       |      codeset = locale;
  416|       |    }
  417|       |  else
  418|       |    {
  419|       |      /* OS/2 has a function returning the locale's codepage as a number.  */
  420|       |      if (DosQueryCp (sizeof (cp), cp, &cplen))
  421|       |	codeset = "";
  422|       |      else
  423|       |	{
  424|       |	  sprintf (buf, "CP%u", cp[0]);
  425|       |	  codeset = buf;
  426|       |	}
  427|       |    }
  428|       |
  429|       |#endif
  430|       |
  431|    130|  return codeset;
  432|    130|}
_g_locale_charset_unalias:
  436|      2|{
  437|      2|  const char *aliases;
  438|       |
  439|      2|  if (codeset == NULL)
  ------------------
  |  Branch (439:7): [True: 0, False: 2]
  ------------------
  440|       |    /* The canonical name cannot be determined.  */
  441|      0|    codeset = "";
  442|       |
  443|       |  /* Resolve alias. */
  444|      2|  for (aliases = _g_locale_get_charset_aliases ();
  445|      2|       *aliases != '\0';
  ------------------
  |  Branch (445:8): [True: 0, False: 2]
  ------------------
  446|      2|       aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
  447|      0|    if (strcmp (codeset, aliases) == 0
  ------------------
  |  Branch (447:9): [True: 0, False: 0]
  ------------------
  448|      0|	|| (aliases[0] == '*' && aliases[1] == '\0'))
  ------------------
  |  Branch (448:6): [True: 0, False: 0]
  |  Branch (448:27): [True: 0, False: 0]
  ------------------
  449|      0|      {
  450|      0|	codeset = aliases + strlen (aliases) + 1;
  451|      0|	break;
  452|      0|      }
  453|       |
  454|       |  /* Don't return an empty string.  GNU libc and GNU libiconv interpret
  455|       |     the empty string as denoting "the locale's character encoding",
  456|       |     thus GNU libiconv would call this function a second time.  */
  457|      2|  if (codeset[0] == '\0')
  ------------------
  |  Branch (457:7): [True: 0, False: 2]
  ------------------
  458|      0|    codeset = "ASCII";
  459|       |
  460|      2|  return codeset;
  461|      2|}

_g_atomic_array_init:
  104|     40|{
  105|       |  array->data = NULL;
  106|     40|}
_g_atomic_array_copy:
  128|     50|{
  129|     50|  guint8 *new, *old;
  130|     50|  gsize old_size, new_size;
  131|       |
  132|     50|  G_LOCK (array);
  ------------------
  |  |  137|     50|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|     50|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  133|     50|  old = g_atomic_pointer_get (&array->data);
  ------------------
  |  |  127|     50|  (G_GNUC_EXTENSION ({                                                     \
  |  |  ------------------
  |  |  |  |   62|     50|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  128|     50|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));               \
  |  |  ------------------
  |  |  |  |  824|     50|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  129|     50|    glib_typeof (*(atomic)) gapg_temp_newval;                              \
  |  |  ------------------
  |  |  |  |   39|     50|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  130|     50|    glib_typeof ((atomic)) gapg_temp_atomic = (atomic);                    \
  |  |  ------------------
  |  |  |  |   39|     50|#define glib_typeof(t) __typeof__ (t)
  |  |  ------------------
  |  |  131|     50|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST); \
  |  |  132|     50|    gapg_temp_newval;                                                      \
  |  |  133|     50|  }))
  ------------------
  134|     50|  if (old)
  ------------------
  |  Branch (134:7): [True: 0, False: 50]
  ------------------
  135|      0|    {
  136|      0|      old_size = G_ATOMIC_ARRAY_DATA_SIZE (old);
  ------------------
  |  |   30|      0|#define G_ATOMIC_ARRAY_DATA_SIZE(mem) (*((gsize *) (mem) - 1))
  ------------------
  137|      0|      new_size = old_size + additional_element_size;
  138|       |      /* Don't reuse if copying to same size, as this may end
  139|       |	 up reusing the same pointer for the same array thus
  140|       |	 confusing the transaction check */
  141|      0|      new = freelist_alloc (new_size, additional_element_size != 0);
  142|      0|      memcpy (new, old, old_size);
  143|      0|    }
  144|     50|  else if (additional_element_size != 0)
  ------------------
  |  Branch (144:12): [True: 0, False: 50]
  ------------------
  145|      0|    {
  146|      0|      new_size = header_size + additional_element_size;
  147|      0|      new = freelist_alloc (new_size, TRUE);
  ------------------
  |  |  884|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  148|      0|    }
  149|     50|  else
  150|     50|    new = NULL;
  151|     50|  G_UNLOCK (array);
  ------------------
  |  |  138|     50|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  ------------------
  |  |  |  |  111|     50|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  ------------------
  ------------------
  152|     50|  return new;
  153|     50|}

_g_boxed_type_init:
  105|      2|{
  106|      2|  const GTypeInfo info = {
  107|      2|    0,                          /* class_size */
  108|      2|    NULL,                       /* base_init */
  109|      2|    NULL,                       /* base_destroy */
  110|      2|    NULL,                       /* class_init */
  111|      2|    NULL,                       /* class_destroy */
  112|      2|    NULL,                       /* class_data */
  113|      2|    0,                          /* instance_size */
  114|      2|    0,                          /* n_preallocs */
  115|      2|    NULL,                       /* instance_init */
  116|      2|    NULL,                       /* value_table */
  117|      2|  };
  118|      2|  const GTypeFundamentalInfo finfo = { G_TYPE_FLAG_DERIVABLE, };
  119|      2|  GType type G_GNUC_UNUSED  /* when compiling with G_DISABLE_ASSERT */;
  120|       |
  121|       |  /* G_TYPE_BOXED
  122|       |   */
  123|      2|  type = g_type_register_fundamental (G_TYPE_BOXED, g_intern_static_string ("GBoxed"), &info, &finfo,
  ------------------
  |  |  170|      2|#define G_TYPE_BOXED			G_TYPE_MAKE_FUNDAMENTAL (18)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  124|      2|				      G_TYPE_FLAG_ABSTRACT | G_TYPE_FLAG_VALUE_ABSTRACT);
  125|      2|  g_assert (type == G_TYPE_BOXED);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  126|      2|}
g_boxed_type_register_static:
  301|      2|{
  302|      2|  static const GTypeValueTable vtable = {
  303|      2|    boxed_proxy_value_init,
  304|      2|    boxed_proxy_value_free,
  305|      2|    boxed_proxy_value_copy,
  306|      2|    boxed_proxy_value_peek_pointer,
  307|      2|    "p",
  308|      2|    boxed_proxy_collect_value,
  309|      2|    "p",
  310|      2|    boxed_proxy_lcopy_value,
  311|      2|  };
  312|      2|  GTypeInfo type_info = {
  313|      2|    0,			/* class_size */
  314|      2|    NULL,		/* base_init */
  315|      2|    NULL,		/* base_finalize */
  316|      2|    NULL,		/* class_init */
  317|      2|    NULL,		/* class_finalize */
  318|      2|    NULL,		/* class_data */
  319|      2|    0,			/* instance_size */
  320|      2|    0,			/* n_preallocs */
  321|      2|    NULL,		/* instance_init */
  322|      2|    &vtable,		/* value_table */
  323|      2|  };
  324|      2|  GType type;
  325|       |
  326|      2|  g_return_val_if_fail (name != NULL, 0);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  327|      2|  g_return_val_if_fail (boxed_copy != NULL, 0);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  328|      2|  g_return_val_if_fail (boxed_free != NULL, 0);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  329|      2|  g_return_val_if_fail (g_type_from_name (name) == 0, 0);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|       |
  331|      2|  type = g_type_register_static (G_TYPE_BOXED, name, &type_info, 0);
  ------------------
  |  |  170|      2|#define G_TYPE_BOXED			G_TYPE_MAKE_FUNDAMENTAL (18)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|       |
  333|       |  /* install proxy functions upon successful registration */
  334|      2|  if (type)
  ------------------
  |  Branch (334:7): [True: 2, False: 0]
  ------------------
  335|      2|    _g_type_boxed_init (type, boxed_copy, boxed_free);
  336|       |
  337|      2|  return type;
  338|      2|}

_g_enum_types_init:
   91|      2|{
   92|      2|  static gboolean initialized = FALSE;
  ------------------
  |  |  880|      2|#define	FALSE	(0)
  ------------------
   93|      2|  static const GTypeValueTable flags_enum_value_table = {
   94|      2|    value_flags_enum_init,	    /* value_init */
   95|      2|    NULL,			    /* value_free */
   96|      2|    value_flags_enum_copy_value,    /* value_copy */
   97|      2|    NULL,			    /* value_peek_pointer */
   98|      2|    "i",			    /* collect_format */
   99|      2|    value_flags_enum_collect_value, /* collect_value */
  100|      2|    "p",			    /* lcopy_format */
  101|      2|    value_flags_enum_lcopy_value,   /* lcopy_value */
  102|      2|  };
  103|      2|  GTypeInfo info = {
  104|      2|    0,                          /* class_size */
  105|      2|    NULL,                       /* base_init */
  106|      2|    NULL,                       /* base_destroy */
  107|      2|    NULL,                       /* class_init */
  108|      2|    NULL,                       /* class_destroy */
  109|      2|    NULL,                       /* class_data */
  110|      2|    0,                          /* instance_size */
  111|      2|    0,                          /* n_preallocs */
  112|      2|    NULL,                       /* instance_init */
  113|      2|    &flags_enum_value_table,    /* value_table */
  114|      2|  };
  115|      2|  static const GTypeFundamentalInfo finfo = {
  116|      2|    G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_DERIVABLE,
  117|      2|  };
  118|      2|  GType type G_GNUC_UNUSED  /* when compiling with G_DISABLE_ASSERT */;
  119|       |  
  120|      2|  g_return_if_fail (initialized == FALSE);
  ------------------
  |  |  639|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      2|      { } \
  |  |  642|      2|    else \
  |  |  643|      2|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  121|      2|  initialized = TRUE;
  ------------------
  |  |  884|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  122|       |  
  123|       |  /* G_TYPE_ENUM
  124|       |   */
  125|      2|  info.class_size = sizeof (GEnumClass);
  126|      2|  type = g_type_register_fundamental (G_TYPE_ENUM, g_intern_static_string ("GEnum"), &info, &finfo,
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  127|      2|				      G_TYPE_FLAG_ABSTRACT | G_TYPE_FLAG_VALUE_ABSTRACT);
  128|      2|  g_assert (type == G_TYPE_ENUM);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  129|       |  
  130|       |  /* G_TYPE_FLAGS
  131|       |   */
  132|      2|  info.class_size = sizeof (GFlagsClass);
  133|      2|  type = g_type_register_fundamental (G_TYPE_FLAGS, g_intern_static_string ("GFlags"), &info, &finfo,
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  134|      2|				      G_TYPE_FLAG_ABSTRACT | G_TYPE_FLAG_VALUE_ABSTRACT);
  135|      2|  g_assert (type == G_TYPE_FLAGS);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  136|      2|}

_g_object_type_init:
  421|      2|{
  422|      2|  static gboolean initialized = FALSE;
  ------------------
  |  |  880|      2|#define	FALSE	(0)
  ------------------
  423|      2|  static const GTypeFundamentalInfo finfo = {
  424|      2|    G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE,
  425|      2|  };
  426|      2|  GTypeInfo info = {
  427|      2|    sizeof (GObjectClass),
  428|      2|    (GBaseInitFunc) g_object_base_class_init,
  429|      2|    (GBaseFinalizeFunc) g_object_base_class_finalize,
  430|      2|    (GClassInitFunc) g_object_do_class_init,
  431|      2|    NULL	/* class_destroy */,
  432|      2|    NULL	/* class_data */,
  433|      2|    sizeof (GObject),
  434|      2|    0		/* n_preallocs */,
  435|      2|    (GInstanceInitFunc) g_object_init,
  436|      2|    NULL,	/* value_table */
  437|      2|  };
  438|      2|  static const GTypeValueTable value_table = {
  439|      2|    g_value_object_init,	  /* value_init */
  440|      2|    g_value_object_free_value,	  /* value_free */
  441|      2|    g_value_object_copy_value,	  /* value_copy */
  442|      2|    g_value_object_peek_pointer,  /* value_peek_pointer */
  443|      2|    "p",			  /* collect_format */
  444|      2|    g_value_object_collect_value, /* collect_value */
  445|      2|    "p",			  /* lcopy_format */
  446|      2|    g_value_object_lcopy_value,	  /* lcopy_value */
  447|      2|  };
  448|      2|  GType type G_GNUC_UNUSED  /* when compiling with G_DISABLE_ASSERT */;
  449|       |  
  450|      2|  g_return_if_fail (initialized == FALSE);
  ------------------
  |  |  639|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      2|      { } \
  |  |  642|      2|    else \
  |  |  643|      2|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  451|      2|  initialized = TRUE;
  ------------------
  |  |  884|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  452|       |  
  453|       |  /* G_TYPE_OBJECT
  454|       |   */
  455|      2|  info.value_table = &value_table;
  456|      2|  type = g_type_register_fundamental (G_TYPE_OBJECT, g_intern_static_string ("GObject"), &info, &finfo, 0);
  ------------------
  |  |  182|      2|#define G_TYPE_OBJECT			G_TYPE_MAKE_FUNDAMENTAL (20)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  457|      2|  g_assert (type == G_TYPE_OBJECT);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  458|      2|  g_value_register_transform_func (G_TYPE_OBJECT, G_TYPE_OBJECT, g_value_object_transform_value);
  ------------------
  |  |  182|      2|#define G_TYPE_OBJECT			G_TYPE_MAKE_FUNDAMENTAL (20)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_OBJECT, G_TYPE_OBJECT, g_value_object_transform_value);
  ------------------
  |  |  182|      2|#define G_TYPE_OBJECT			G_TYPE_MAKE_FUNDAMENTAL (20)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  459|       |
  460|      2|#if G_ENABLE_DEBUG
  461|       |  /* We cannot use GOBJECT_IF_DEBUG here because of the G_HAS_CONSTRUCTORS
  462|       |   * conditional in between, as the C spec leaves conditionals inside macro
  463|       |   * expansions as undefined behavior. Only GCC and Clang are known to work
  464|       |   * but compilation breaks on MSVC.
  465|       |   *
  466|       |   * See: https://bugzilla.gnome.org/show_bug.cgi?id=769504
  467|       |   */
  468|      2|  if (_g_type_debug_flags & G_TYPE_DEBUG_OBJECTS) \
  ------------------
  |  Branch (468:7): [True: 0, False: 2]
  ------------------
  469|      0|    {
  470|      0|      debug_objects_ht = g_hash_table_new (g_direct_hash, NULL);
  471|       |# ifndef G_HAS_CONSTRUCTORS
  472|       |      g_atexit (debug_objects_atexit);
  473|       |# endif /* G_HAS_CONSTRUCTORS */
  474|      0|    }
  475|      2|#endif /* G_ENABLE_DEBUG */
  476|      2|}

_g_param_type_init:
  103|      2|{
  104|      2|  static const GTypeFundamentalInfo finfo = {
  105|      2|    (G_TYPE_FLAG_CLASSED |
  106|      2|     G_TYPE_FLAG_INSTANTIATABLE |
  107|      2|     G_TYPE_FLAG_DERIVABLE |
  108|      2|     G_TYPE_FLAG_DEEP_DERIVABLE),
  109|      2|  };
  110|      2|  static const GTypeValueTable param_value_table = {
  111|      2|    value_param_init,           /* value_init */
  112|      2|    value_param_free_value,     /* value_free */
  113|      2|    value_param_copy_value,     /* value_copy */
  114|      2|    value_param_peek_pointer,   /* value_peek_pointer */
  115|      2|    "p",			/* collect_format */
  116|      2|    value_param_collect_value,  /* collect_value */
  117|      2|    "p",			/* lcopy_format */
  118|      2|    value_param_lcopy_value,    /* lcopy_value */
  119|      2|  };
  120|      2|  const GTypeInfo param_spec_info = {
  121|      2|    sizeof (GParamSpecClass),
  122|       |
  123|      2|    (GBaseInitFunc) g_param_spec_class_base_init,
  124|      2|    (GBaseFinalizeFunc) g_param_spec_class_base_finalize,
  125|      2|    (GClassInitFunc) g_param_spec_class_init,
  126|      2|    (GClassFinalizeFunc) NULL,
  127|      2|    NULL,	/* class_data */
  128|       |
  129|      2|    sizeof (GParamSpec),
  130|      2|    0,		/* n_preallocs */
  131|      2|    (GInstanceInitFunc) g_param_spec_init,
  132|       |
  133|      2|    &param_value_table,
  134|      2|  };
  135|      2|  GType type;
  136|       |
  137|       |  /* This should be registered as GParamSpec instead of GParam, for
  138|       |   * consistency sake, so that type name can be mapped to struct name,
  139|       |   * However, some language bindings, most noticeable the python ones
  140|       |   * depends on the "GParam" identifier, see #548689
  141|       |   */
  142|      2|  type = g_type_register_fundamental (G_TYPE_PARAM, g_intern_static_string ("GParam"), &param_spec_info, &finfo, G_TYPE_FLAG_ABSTRACT);
  ------------------
  |  |  176|      2|#define G_TYPE_PARAM			G_TYPE_MAKE_FUNDAMENTAL (19)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  143|      2|  g_assert (type == G_TYPE_PARAM);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  144|      2|  g_param_private_offset = g_type_add_instance_private (type, sizeof (GParamSpecPrivate));
  145|      2|  g_value_register_transform_func (G_TYPE_PARAM, G_TYPE_PARAM, value_param_transform_value);
  ------------------
  |  |  176|      2|#define G_TYPE_PARAM			G_TYPE_MAKE_FUNDAMENTAL (19)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_PARAM, G_TYPE_PARAM, value_param_transform_value);
  ------------------
  |  |  176|      2|#define G_TYPE_PARAM			G_TYPE_MAKE_FUNDAMENTAL (19)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  146|      2|}
g_param_type_register_static:
 1470|     46|{
 1471|     46|  GTypeInfo info = {
 1472|     46|    sizeof (GParamSpecClass),      /* class_size */
 1473|     46|    NULL,                          /* base_init */
 1474|     46|    NULL,                          /* base_destroy */
 1475|     46|    param_spec_generic_class_init, /* class_init */
 1476|     46|    NULL,                          /* class_destroy */
 1477|     46|    NULL,                          /* class_data */
 1478|     46|    0,                             /* instance_size */
 1479|     46|    16,                            /* n_preallocs */
 1480|     46|    NULL,                          /* instance_init */
 1481|     46|    NULL,                          /* value_table */
 1482|     46|  };
 1483|     46|  ParamSpecClassInfo *cinfo;
 1484|       |
 1485|     46|  g_return_val_if_fail (name != NULL, 0);
  ------------------
  |  |  652|     46|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     46|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|     46|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     46|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     46| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     46|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     46|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     46|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 46, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     46|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     46|   else                                         \
  |  |  |  |  |  | 1183|     46|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     46|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     46|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 46, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|     46|      { } \
  |  |  655|     46|    else \
  |  |  656|     46|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|     46|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     46|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 46]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1486|     46|  g_return_val_if_fail (pspec_info != NULL, 0);
  ------------------
  |  |  652|     46|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     46|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|     46|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     46|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     46| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     46|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     46|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     46|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 46, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     46|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     46|   else                                         \
  |  |  |  |  |  | 1183|     46|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     46|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     46|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 46, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|     46|      { } \
  |  |  655|     46|    else \
  |  |  656|     46|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|     46|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     46|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 46]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1487|     46|  g_return_val_if_fail (g_type_from_name (name) == 0, 0);
  ------------------
  |  |  652|     46|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     46|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|     46|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     46|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     46| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     46|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     46|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     46|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 46, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     46|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     46|   else                                         \
  |  |  |  |  |  | 1183|     46|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     46|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     46|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 46, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|     46|      { } \
  |  |  655|     46|    else \
  |  |  656|     46|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|     46|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     46|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 46]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1488|     46|  g_return_val_if_fail (pspec_info->instance_size >= sizeof (GParamSpec), 0);
  ------------------
  |  |  652|     46|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     46|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|     46|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     46|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     46| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     46|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     46|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     46|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 46, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     46|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     46|   else                                         \
  |  |  |  |  |  | 1183|     46|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     46|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     46|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 46, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|     46|      { } \
  |  |  655|     46|    else \
  |  |  656|     46|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|     46|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     46|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 46]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1489|     46|  g_return_val_if_fail (g_type_name (pspec_info->value_type) != NULL, 0);
  ------------------
  |  |  652|     46|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     46|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|     46|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     46|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     46| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     46|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     46|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     46|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 46, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     46|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     46|   else                                         \
  |  |  |  |  |  | 1183|     46|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     46|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     46|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 46, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|     46|      { } \
  |  |  655|     46|    else \
  |  |  656|     46|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|     46|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     46|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 46]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1490|       |  /* default: g_return_val_if_fail (pspec_info->value_set_default != NULL, 0); */
 1491|       |  /* optional: g_return_val_if_fail (pspec_info->value_validate != NULL, 0); */
 1492|       |  /* default: g_return_val_if_fail (pspec_info->values_cmp != NULL, 0); */
 1493|       |
 1494|     46|  info.instance_size = pspec_info->instance_size;
 1495|     46|  info.n_preallocs = pspec_info->n_preallocs;
 1496|     46|  info.instance_init = (GInstanceInitFunc) pspec_info->instance_init;
 1497|     46|  cinfo = g_new (ParamSpecClassInfo, 1);
  ------------------
  |  |  299|     46|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  244|     46|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|     46|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|     46|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|     46|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|     46|	  gpointer __p;						\
  |  |  |  |  248|     46|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 46]
  |  |  |  |  ------------------
  |  |  |  |  249|     46|	    __p = g_##func (__n);				\
  |  |  |  |  250|     46|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 46, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|     46|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|     46|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|     46|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 46]
  |  |  |  |  |  Branch (251:26): [True: 46, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|     46|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|     46|	  else							\
  |  |  |  |  254|     46|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|     46|	  __p;							\
  |  |  |  |  256|     46|	}))
  |  |  ------------------
  ------------------
 1498|     46|  cinfo->value_type = pspec_info->value_type;
 1499|     46|  cinfo->finalize = pspec_info->finalize;
 1500|     46|  cinfo->value_set_default = pspec_info->value_set_default ? pspec_info->value_set_default : default_value_set_default;
  ------------------
  |  Branch (1500:30): [True: 46, False: 0]
  ------------------
 1501|     46|  cinfo->value_validate = pspec_info->value_validate;
 1502|     46|  cinfo->values_cmp = pspec_info->values_cmp ? pspec_info->values_cmp : default_values_cmp;
  ------------------
  |  Branch (1502:23): [True: 46, False: 0]
  ------------------
 1503|     46|  info.class_data = cinfo;
 1504|       |
 1505|     46|  return g_type_register_static (G_TYPE_PARAM, name, &info, 0);
  ------------------
  |  |  176|     46|#define G_TYPE_PARAM			G_TYPE_MAKE_FUNDAMENTAL (19)
  |  |  ------------------
  |  |  |  |  226|     46|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|     46|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1506|     46|}
gparam.c:g_param_spec_class_base_init:
  150|     42|{
  151|     42|}
gparam.c:g_param_spec_class_init:
  161|      2|{
  162|      2|  class->value_type = G_TYPE_NONE;
  ------------------
  |  |   65|      2|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|      2|  class->finalize = g_param_spec_finalize;
  164|      2|  class->value_set_default = NULL;
  165|      2|  class->value_validate = NULL;
  166|      2|  class->values_cmp = NULL;
  167|       |
  168|      2|  g_type_class_adjust_private_offset (class, &g_param_private_offset);
  169|      2|}
gparam.c:param_spec_generic_class_init:
 1424|     40|{
 1425|     40|  GParamSpecClass *class = g_class;
 1426|     40|  ParamSpecClassInfo *info = class_data;
 1427|       |
 1428|     40|  class->value_type = info->value_type;
 1429|     40|  if (info->finalize)
  ------------------
  |  Branch (1429:7): [True: 10, False: 30]
  ------------------
 1430|     10|    class->finalize = info->finalize;			/* optional */
 1431|     40|  class->value_set_default = info->value_set_default;
 1432|     40|  if (info->value_validate)
  ------------------
  |  Branch (1432:7): [True: 40, False: 0]
  ------------------
 1433|     40|    class->value_validate = info->value_validate;	/* optional */
 1434|     40|  class->values_cmp = info->values_cmp;
 1435|     40|  g_free (class_data);
 1436|     40|}

_g_param_spec_types_init:
 1401|      2|{
 1402|      2|  const guint n_types = 23;
 1403|      2|  GType type, *spec_types;
 1404|      2|#ifndef G_DISABLE_ASSERT
 1405|      2|  GType *spec_types_bound;
 1406|      2|#endif
 1407|       |
 1408|      2|  g_param_spec_types = g_new0 (GType, n_types);
  ------------------
  |  |  316|      2|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|      2|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|      2|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|      2|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|      2|	  gpointer __p;						\
  |  |  |  |  248|      2|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  249|      2|	    __p = g_##func (__n);				\
  |  |  |  |  250|      2|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|      2|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      2|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      2|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 2]
  |  |  |  |  |  Branch (251:26): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|      2|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|      2|	  else							\
  |  |  |  |  254|      2|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|      2|	  __p;							\
  |  |  |  |  256|      2|	}))
  |  |  ------------------
  ------------------
 1409|      2|  spec_types = g_param_spec_types;
 1410|      2|#ifndef G_DISABLE_ASSERT
 1411|      2|  spec_types_bound = g_param_spec_types + n_types;
 1412|      2|#endif
 1413|       |  
 1414|       |  /* G_TYPE_PARAM_CHAR
 1415|       |   */
 1416|      2|  {
 1417|      2|    const GParamSpecTypeInfo pspec_info = {
 1418|      2|      sizeof (GParamSpecChar),	/* instance_size */
 1419|      2|      16,			/* n_preallocs */
 1420|      2|      param_char_init,		/* instance_init */
 1421|      2|      G_TYPE_CHAR,		/* value_type */
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1422|      2|      NULL,			/* finalize */
 1423|      2|      param_char_set_default,	/* value_set_default */
 1424|      2|      param_char_validate,	/* value_validate */
 1425|      2|      param_int_values_cmp,	/* values_cmp */
 1426|      2|    };
 1427|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamChar"), &pspec_info);
 1428|      2|    set_is_valid_vfunc (type, param_char_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1429|      2|    *spec_types++ = type;
 1430|      2|    g_assert (type == G_TYPE_PARAM_CHAR);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1431|      2|  }
 1432|       |  
 1433|       |  /* G_TYPE_PARAM_UCHAR
 1434|       |   */
 1435|      2|  {
 1436|      2|    const GParamSpecTypeInfo pspec_info = {
 1437|      2|      sizeof (GParamSpecUChar), /* instance_size */
 1438|      2|      16,                       /* n_preallocs */
 1439|      2|      param_uchar_init,         /* instance_init */
 1440|      2|      G_TYPE_UCHAR,		/* value_type */
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1441|      2|      NULL,			/* finalize */
 1442|      2|      param_uchar_set_default,	/* value_set_default */
 1443|      2|      param_uchar_validate,	/* value_validate */
 1444|      2|      param_uint_values_cmp,	/* values_cmp */
 1445|      2|    };
 1446|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamUChar"), &pspec_info);
 1447|      2|    set_is_valid_vfunc (type, param_uchar_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1448|      2|    *spec_types++ = type;
 1449|      2|    g_assert (type == G_TYPE_PARAM_UCHAR);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1450|      2|  }
 1451|       |  
 1452|       |  /* G_TYPE_PARAM_BOOLEAN
 1453|       |   */
 1454|      2|  {
 1455|      2|    const GParamSpecTypeInfo pspec_info = {
 1456|      2|      sizeof (GParamSpecBoolean), /* instance_size */
 1457|      2|      16,                         /* n_preallocs */
 1458|      2|      NULL,			  /* instance_init */
 1459|      2|      G_TYPE_BOOLEAN,             /* value_type */
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1460|      2|      NULL,                       /* finalize */
 1461|      2|      param_boolean_set_default,  /* value_set_default */
 1462|      2|      param_boolean_validate,     /* value_validate */
 1463|      2|      param_int_values_cmp,       /* values_cmp */
 1464|      2|    };
 1465|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamBoolean"), &pspec_info);
 1466|      2|    set_is_valid_vfunc (type, param_boolean_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1467|      2|    *spec_types++ = type;
 1468|      2|    g_assert (type == G_TYPE_PARAM_BOOLEAN);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1469|      2|  }
 1470|       |  
 1471|       |  /* G_TYPE_PARAM_INT
 1472|       |   */
 1473|      2|  {
 1474|      2|    const GParamSpecTypeInfo pspec_info = {
 1475|      2|      sizeof (GParamSpecInt),   /* instance_size */
 1476|      2|      16,                       /* n_preallocs */
 1477|      2|      param_int_init,           /* instance_init */
 1478|      2|      G_TYPE_INT,		/* value_type */
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1479|      2|      NULL,			/* finalize */
 1480|      2|      param_int_set_default,	/* value_set_default */
 1481|      2|      param_int_validate,	/* value_validate */
 1482|      2|      param_int_values_cmp,	/* values_cmp */
 1483|      2|    };
 1484|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamInt"), &pspec_info);
 1485|      2|    set_is_valid_vfunc (type, param_int_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1486|      2|    *spec_types++ = type;
 1487|      2|    g_assert (type == G_TYPE_PARAM_INT);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1488|      2|  }
 1489|       |  
 1490|       |  /* G_TYPE_PARAM_UINT
 1491|       |   */
 1492|      2|  {
 1493|      2|    const GParamSpecTypeInfo pspec_info = {
 1494|      2|      sizeof (GParamSpecUInt),  /* instance_size */
 1495|      2|      16,                       /* n_preallocs */
 1496|      2|      param_uint_init,          /* instance_init */
 1497|      2|      G_TYPE_UINT,		/* value_type */
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1498|      2|      NULL,			/* finalize */
 1499|      2|      param_uint_set_default,	/* value_set_default */
 1500|      2|      param_uint_validate,	/* value_validate */
 1501|      2|      param_uint_values_cmp,	/* values_cmp */
 1502|      2|    };
 1503|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamUInt"), &pspec_info);
 1504|      2|    set_is_valid_vfunc (type, param_uint_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1505|      2|    *spec_types++ = type;
 1506|      2|    g_assert (type == G_TYPE_PARAM_UINT);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1507|      2|  }
 1508|       |  
 1509|       |  /* G_TYPE_PARAM_LONG
 1510|       |   */
 1511|      2|  {
 1512|      2|    const GParamSpecTypeInfo pspec_info = {
 1513|      2|      sizeof (GParamSpecLong),  /* instance_size */
 1514|      2|      16,                       /* n_preallocs */
 1515|      2|      param_long_init,          /* instance_init */
 1516|      2|      G_TYPE_LONG,		/* value_type */
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1517|      2|      NULL,			/* finalize */
 1518|      2|      param_long_set_default,	/* value_set_default */
 1519|      2|      param_long_validate,	/* value_validate */
 1520|      2|      param_long_values_cmp,	/* values_cmp */
 1521|      2|    };
 1522|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamLong"), &pspec_info);
 1523|      2|    set_is_valid_vfunc (type, param_long_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1524|      2|    *spec_types++ = type;
 1525|      2|    g_assert (type == G_TYPE_PARAM_LONG);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1526|      2|  }
 1527|       |  
 1528|       |  /* G_TYPE_PARAM_ULONG
 1529|       |   */
 1530|      2|  {
 1531|      2|    const GParamSpecTypeInfo pspec_info = {
 1532|      2|      sizeof (GParamSpecULong), /* instance_size */
 1533|      2|      16,                       /* n_preallocs */
 1534|      2|      param_ulong_init,         /* instance_init */
 1535|      2|      G_TYPE_ULONG,		/* value_type */
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1536|      2|      NULL,			/* finalize */
 1537|      2|      param_ulong_set_default,	/* value_set_default */
 1538|      2|      param_ulong_validate,	/* value_validate */
 1539|      2|      param_ulong_values_cmp,	/* values_cmp */
 1540|      2|    };
 1541|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamULong"), &pspec_info);
 1542|      2|    set_is_valid_vfunc (type, param_ulong_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1543|      2|    *spec_types++ = type;
 1544|      2|    g_assert (type == G_TYPE_PARAM_ULONG);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1545|      2|  }
 1546|       |
 1547|       |  /* G_TYPE_PARAM_INT64
 1548|       |   */
 1549|      2|  {
 1550|      2|    const GParamSpecTypeInfo pspec_info = {
 1551|      2|      sizeof (GParamSpecInt64),  /* instance_size */
 1552|      2|      16,                       /* n_preallocs */
 1553|      2|      param_int64_init,         /* instance_init */
 1554|      2|      G_TYPE_INT64,		/* value_type */
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1555|      2|      NULL,			/* finalize */
 1556|      2|      param_int64_set_default,	/* value_set_default */
 1557|      2|      param_int64_validate,	/* value_validate */
 1558|      2|      param_int64_values_cmp,	/* values_cmp */
 1559|      2|    };
 1560|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamInt64"), &pspec_info);
 1561|      2|    set_is_valid_vfunc (type, param_int64_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1562|      2|    *spec_types++ = type;
 1563|      2|    g_assert (type == G_TYPE_PARAM_INT64);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1564|      2|  }
 1565|       |  
 1566|       |  /* G_TYPE_PARAM_UINT64
 1567|       |   */
 1568|      2|  {
 1569|      2|    const GParamSpecTypeInfo pspec_info = {
 1570|      2|      sizeof (GParamSpecUInt64), /* instance_size */
 1571|      2|      16,                       /* n_preallocs */
 1572|      2|      param_uint64_init,        /* instance_init */
 1573|      2|      G_TYPE_UINT64,		/* value_type */
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1574|      2|      NULL,			/* finalize */
 1575|      2|      param_uint64_set_default,	/* value_set_default */
 1576|      2|      param_uint64_validate,	/* value_validate */
 1577|      2|      param_uint64_values_cmp,	/* values_cmp */
 1578|      2|    };
 1579|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamUInt64"), &pspec_info);
 1580|      2|    set_is_valid_vfunc (type, param_uint64_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1581|      2|    *spec_types++ = type;
 1582|      2|    g_assert (type == G_TYPE_PARAM_UINT64);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1583|      2|  }
 1584|       |
 1585|       |  /* G_TYPE_PARAM_UNICHAR
 1586|       |   */
 1587|      2|  {
 1588|      2|    const GParamSpecTypeInfo pspec_info = {
 1589|      2|      sizeof (GParamSpecUnichar), /* instance_size */
 1590|      2|      16,                        /* n_preallocs */
 1591|      2|      param_unichar_init,	 /* instance_init */
 1592|      2|      G_TYPE_UINT,		 /* value_type */
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1593|      2|      NULL,			 /* finalize */
 1594|      2|      param_unichar_set_default, /* value_set_default */
 1595|      2|      param_unichar_validate,	 /* value_validate */
 1596|      2|      param_unichar_values_cmp,	 /* values_cmp */
 1597|      2|    };
 1598|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamUnichar"), &pspec_info);
 1599|      2|    set_is_valid_vfunc (type, param_unichar_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1600|      2|    *spec_types++ = type;
 1601|      2|    g_assert (type == G_TYPE_PARAM_UNICHAR);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1602|      2|  }
 1603|       |
 1604|       | /* G_TYPE_PARAM_ENUM
 1605|       |   */
 1606|      2|  {
 1607|      2|    const GParamSpecTypeInfo pspec_info = {
 1608|      2|      sizeof (GParamSpecEnum),  /* instance_size */
 1609|      2|      16,                       /* n_preallocs */
 1610|      2|      param_enum_init,          /* instance_init */
 1611|      2|      G_TYPE_ENUM,		/* value_type */
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1612|      2|      param_enum_finalize,	/* finalize */
 1613|      2|      param_enum_set_default,	/* value_set_default */
 1614|      2|      param_enum_validate,	/* value_validate */
 1615|      2|      param_long_values_cmp,	/* values_cmp */
 1616|      2|    };
 1617|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamEnum"), &pspec_info);
 1618|      2|    set_is_valid_vfunc (type, param_enum_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1619|      2|    *spec_types++ = type;
 1620|      2|    g_assert (type == G_TYPE_PARAM_ENUM);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1621|      2|  }
 1622|       |  
 1623|       |  /* G_TYPE_PARAM_FLAGS
 1624|       |   */
 1625|      2|  {
 1626|      2|    const GParamSpecTypeInfo pspec_info = {
 1627|      2|      sizeof (GParamSpecFlags),	/* instance_size */
 1628|      2|      16,			/* n_preallocs */
 1629|      2|      param_flags_init,		/* instance_init */
 1630|      2|      G_TYPE_FLAGS,		/* value_type */
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1631|      2|      param_flags_finalize,	/* finalize */
 1632|      2|      param_flags_set_default,	/* value_set_default */
 1633|      2|      param_flags_validate,	/* value_validate */
 1634|      2|      param_ulong_values_cmp,	/* values_cmp */
 1635|      2|    };
 1636|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamFlags"), &pspec_info);
 1637|      2|    set_is_valid_vfunc (type, param_flags_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1638|      2|    *spec_types++ = type;
 1639|      2|    g_assert (type == G_TYPE_PARAM_FLAGS);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1640|      2|  }
 1641|       |  
 1642|       |  /* G_TYPE_PARAM_FLOAT
 1643|       |   */
 1644|      2|  {
 1645|      2|    const GParamSpecTypeInfo pspec_info = {
 1646|      2|      sizeof (GParamSpecFloat), /* instance_size */
 1647|      2|      16,                       /* n_preallocs */
 1648|      2|      param_float_init,         /* instance_init */
 1649|      2|      G_TYPE_FLOAT,		/* value_type */
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1650|      2|      NULL,			/* finalize */
 1651|      2|      param_float_set_default,	/* value_set_default */
 1652|      2|      param_float_validate,	/* value_validate */
 1653|      2|      param_float_values_cmp,	/* values_cmp */
 1654|      2|    };
 1655|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamFloat"), &pspec_info);
 1656|      2|    set_is_valid_vfunc (type, param_float_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1657|      2|    *spec_types++ = type;
 1658|      2|    g_assert (type == G_TYPE_PARAM_FLOAT);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1659|      2|  }
 1660|       |  
 1661|       |  /* G_TYPE_PARAM_DOUBLE
 1662|       |   */
 1663|      2|  {
 1664|      2|    const GParamSpecTypeInfo pspec_info = {
 1665|      2|      sizeof (GParamSpecDouble),	/* instance_size */
 1666|      2|      16,				/* n_preallocs */
 1667|      2|      param_double_init,		/* instance_init */
 1668|      2|      G_TYPE_DOUBLE,			/* value_type */
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1669|      2|      NULL,				/* finalize */
 1670|      2|      param_double_set_default,		/* value_set_default */
 1671|      2|      param_double_validate,		/* value_validate */
 1672|      2|      param_double_values_cmp,		/* values_cmp */
 1673|      2|    };
 1674|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamDouble"), &pspec_info);
 1675|      2|    set_is_valid_vfunc (type, param_double_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1676|      2|    *spec_types++ = type;
 1677|      2|    g_assert (type == G_TYPE_PARAM_DOUBLE);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1678|      2|  }
 1679|       |  
 1680|       |  /* G_TYPE_PARAM_STRING
 1681|       |   */
 1682|      2|  {
 1683|      2|    const GParamSpecTypeInfo pspec_info = {
 1684|      2|      sizeof (GParamSpecString),	/* instance_size */
 1685|      2|      16,				/* n_preallocs */
 1686|      2|      param_string_init,		/* instance_init */
 1687|      2|      G_TYPE_STRING,			/* value_type */
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1688|      2|      param_string_finalize,		/* finalize */
 1689|      2|      param_string_set_default,		/* value_set_default */
 1690|      2|      param_string_validate,		/* value_validate */
 1691|      2|      param_string_values_cmp,		/* values_cmp */
 1692|      2|    };
 1693|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamString"), &pspec_info);
 1694|      2|    set_is_valid_vfunc (type, param_string_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1695|      2|    *spec_types++ = type;
 1696|      2|    g_assert (type == G_TYPE_PARAM_STRING);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1697|      2|  }
 1698|       |  
 1699|       |  /* G_TYPE_PARAM_PARAM
 1700|       |   */
 1701|      2|  {
 1702|      2|    const GParamSpecTypeInfo pspec_info = {
 1703|      2|      sizeof (GParamSpecParam),	/* instance_size */
 1704|      2|      16,			/* n_preallocs */
 1705|      2|      param_param_init,		/* instance_init */
 1706|      2|      G_TYPE_PARAM,		/* value_type */
  ------------------
  |  |  176|      2|#define G_TYPE_PARAM			G_TYPE_MAKE_FUNDAMENTAL (19)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1707|      2|      NULL,			/* finalize */
 1708|      2|      param_param_set_default,	/* value_set_default */
 1709|      2|      param_param_validate,	/* value_validate */
 1710|      2|      param_pointer_values_cmp,	/* values_cmp */
 1711|      2|    };
 1712|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamParam"), &pspec_info);
 1713|      2|    set_is_valid_vfunc (type, param_param_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1714|      2|    *spec_types++ = type;
 1715|      2|    g_assert (type == G_TYPE_PARAM_PARAM);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1716|      2|  }
 1717|       |  
 1718|       |  /* G_TYPE_PARAM_BOXED
 1719|       |   */
 1720|      2|  {
 1721|      2|    const GParamSpecTypeInfo pspec_info = {
 1722|      2|      sizeof (GParamSpecBoxed),	/* instance_size */
 1723|      2|      4,			/* n_preallocs */
 1724|      2|      param_boxed_init,		/* instance_init */
 1725|      2|      G_TYPE_BOXED,		/* value_type */
  ------------------
  |  |  170|      2|#define G_TYPE_BOXED			G_TYPE_MAKE_FUNDAMENTAL (18)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1726|      2|      NULL,			/* finalize */
 1727|      2|      param_boxed_set_default,	/* value_set_default */
 1728|      2|      NULL,                   	/* value_validate */
 1729|      2|      param_boxed_values_cmp,	/* values_cmp */
 1730|      2|    };
 1731|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamBoxed"), &pspec_info);
 1732|      2|    *spec_types++ = type;
 1733|      2|    g_assert (type == G_TYPE_PARAM_BOXED);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1734|      2|  }
 1735|       |
 1736|       |  /* G_TYPE_PARAM_POINTER
 1737|       |   */
 1738|      2|  {
 1739|      2|    const GParamSpecTypeInfo pspec_info = {
 1740|      2|      sizeof (GParamSpecPointer),  /* instance_size */
 1741|      2|      0,                           /* n_preallocs */
 1742|      2|      param_pointer_init,	   /* instance_init */
 1743|      2|      G_TYPE_POINTER,  		   /* value_type */
  ------------------
  |  |  164|      2|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1744|      2|      NULL,			   /* finalize */
 1745|      2|      param_pointer_set_default,   /* value_set_default */
 1746|      2|      NULL,
 1747|      2|      param_pointer_values_cmp,	   /* values_cmp */
 1748|      2|    };
 1749|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamPointer"), &pspec_info);
 1750|      2|    *spec_types++ = type;
 1751|      2|    g_assert (type == G_TYPE_PARAM_POINTER);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1752|      2|  }
 1753|       |  
 1754|       |  /* G_TYPE_PARAM_VALUE_ARRAY
 1755|       |   */
 1756|      2|  {
 1757|      2|    /* const */ GParamSpecTypeInfo pspec_info = {
 1758|      2|      sizeof (GParamSpecValueArray),	/* instance_size */
 1759|      2|      0,				/* n_preallocs */
 1760|      2|      param_value_array_init,		/* instance_init */
 1761|      2|      0xdeadbeef,			/* value_type, assigned further down */
 1762|      2|      param_value_array_finalize,	/* finalize */
 1763|      2|      param_value_array_set_default,	/* value_set_default */
 1764|      2|      param_value_array_validate,	/* value_validate */
 1765|      2|      param_value_array_values_cmp,	/* values_cmp */
 1766|      2|    };
 1767|      2|    pspec_info.value_type = G_TYPE_VALUE_ARRAY;
  ------------------
  |  |   40|      2|#define G_TYPE_VALUE_ARRAY (g_value_array_get_type ()) GLIB_DEPRECATED_MACRO_IN_2_32_FOR(G_TYPE_ARRAY)
  ------------------
 1768|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamValueArray"), &pspec_info);
 1769|      2|    *spec_types++ = type;
 1770|      2|    g_assert (type == G_TYPE_PARAM_VALUE_ARRAY);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1771|      2|  }
 1772|       |
 1773|       |  /* G_TYPE_PARAM_OBJECT
 1774|       |   */
 1775|      2|  {
 1776|      2|    const GParamSpecTypeInfo pspec_info = {
 1777|      2|      sizeof (GParamSpecObject), /* instance_size */
 1778|      2|      16,                        /* n_preallocs */
 1779|      2|      param_object_init,	 /* instance_init */
 1780|      2|      G_TYPE_OBJECT,		 /* value_type */
  ------------------
  |  |  182|      2|#define G_TYPE_OBJECT			G_TYPE_MAKE_FUNDAMENTAL (20)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1781|      2|      NULL,			 /* finalize */
 1782|      2|      param_object_set_default,	 /* value_set_default */
 1783|      2|      param_object_validate,	 /* value_validate */
 1784|      2|      param_object_values_cmp,	 /* values_cmp */
 1785|      2|    };
 1786|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamObject"), &pspec_info);
 1787|      2|    set_is_valid_vfunc (type, param_object_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1788|      2|    *spec_types++ = type;
 1789|      2|    g_assert (type == G_TYPE_PARAM_OBJECT);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1790|      2|  }
 1791|       |
 1792|       |  /* G_TYPE_PARAM_OVERRIDE
 1793|       |   */
 1794|      2|  {
 1795|      2|    const GParamSpecTypeInfo pspec_info = {
 1796|      2|      sizeof (GParamSpecOverride), /* instance_size */
 1797|      2|      16,                        /* n_preallocs */
 1798|      2|      param_override_init,	 /* instance_init */
 1799|      2|      G_TYPE_NONE,		 /* value_type */
  ------------------
  |  |   65|      2|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1800|      2|      param_override_finalize,	 /* finalize */
 1801|      2|      param_override_set_default, /* value_set_default */
 1802|      2|      param_override_validate,	  /* value_validate */
 1803|      2|      param_override_values_cmp,  /* values_cmp */
 1804|      2|    };
 1805|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamOverride"), &pspec_info);
 1806|      2|    set_is_valid_vfunc (type, param_override_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1807|      2|    *spec_types++ = type;
 1808|      2|    g_assert (type == G_TYPE_PARAM_OVERRIDE);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1809|      2|  }
 1810|       |
 1811|       |  /* G_TYPE_PARAM_GTYPE
 1812|       |   */
 1813|      2|  {
 1814|      2|    GParamSpecTypeInfo pspec_info = {
 1815|      2|      sizeof (GParamSpecGType),	/* instance_size */
 1816|      2|      0,			/* n_preallocs */
 1817|      2|      param_gtype_init,		/* instance_init */
 1818|      2|      0xdeadbeef,		/* value_type, assigned further down */
 1819|      2|      NULL,			/* finalize */
 1820|      2|      param_gtype_set_default,	/* value_set_default */
 1821|      2|      param_gtype_validate,	/* value_validate */
 1822|      2|      param_gtype_values_cmp,	/* values_cmp */
 1823|      2|    };
 1824|      2|    pspec_info.value_type = G_TYPE_GTYPE;
  ------------------
  |  |  168|      2|#define	G_TYPE_GTYPE			 (g_gtype_get_type())
  ------------------
 1825|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamGType"), &pspec_info);
 1826|      2|    set_is_valid_vfunc (type, param_gtype_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1827|      2|    *spec_types++ = type;
 1828|      2|    g_assert (type == G_TYPE_PARAM_GTYPE);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1829|      2|  }
 1830|       |
 1831|       |  /* G_TYPE_PARAM_VARIANT
 1832|       |   */
 1833|      2|  {
 1834|      2|    const GParamSpecTypeInfo pspec_info = {
 1835|      2|      sizeof (GParamSpecVariant), /* instance_size */
 1836|      2|      0,                          /* n_preallocs */
 1837|      2|      param_variant_init,         /* instance_init */
 1838|      2|      G_TYPE_VARIANT,             /* value_type */
  ------------------
  |  |  200|      2|#define	G_TYPE_VARIANT                  G_TYPE_MAKE_FUNDAMENTAL (21)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1839|      2|      param_variant_finalize,     /* finalize */
 1840|      2|      param_variant_set_default,  /* value_set_default */
 1841|      2|      param_variant_validate,     /* value_validate */
 1842|      2|      param_variant_values_cmp,   /* values_cmp */
 1843|      2|    };
 1844|      2|    type = g_param_type_register_static (g_intern_static_string ("GParamVariant"), &pspec_info);
 1845|      2|    set_is_valid_vfunc (type, param_variant_is_valid);
  ------------------
  |  | 1391|      2|#define set_is_valid_vfunc(type,func) { \
  |  | 1392|      2|  GParamSpecClass *class = g_type_class_ref (type); \
  |  | 1393|      2|  class->value_is_valid = func; \
  |  | 1394|      2|  g_type_class_unref (class); \
  |  | 1395|      2|}
  ------------------
 1846|      2|    *spec_types++ = type;
 1847|      2|    g_assert (type == G_TYPE_PARAM_VARIANT);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1848|      2|  }
 1849|       |
 1850|      2|  g_assert (spec_types == spec_types_bound);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1851|      2|}

_g_signal_init:
  928|      2|{
  929|      2|  SIGNAL_LOCK ();
  ------------------
  |  |  330|      2|#define	SIGNAL_LOCK()		G_LOCK (g_signal_mutex)
  |  |  ------------------
  |  |  |  |  137|      2|#  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
  |  |  |  |  ------------------
  |  |  |  |  |  |  111|      2|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  930|      2|  if (!g_n_signal_nodes)
  ------------------
  |  Branch (930:7): [True: 2, False: 0]
  ------------------
  931|      2|    {
  932|       |      /* setup handler list binary searchable array hash table (in german, that'd be one word ;) */
  933|      2|      g_handler_list_bsa_ht = g_hash_table_new (g_direct_hash, NULL);
  934|      2|      g_signal_key_bsa = g_bsearch_array_create (&g_signal_key_bconfig);
  935|       |      
  936|       |      /* invalid (0) signal_id */
  937|      2|      g_n_signal_nodes = 1;
  938|      2|      g_signal_nodes = g_renew (SignalNode*, g_signal_nodes, g_n_signal_nodes);
  ------------------
  |  |  330|      2|#define g_renew(struct_type, mem, n_structs)		_G_RENEW (struct_type, mem, n_structs, realloc)
  |  |  ------------------
  |  |  |  |  258|      2|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  259|      2|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  260|      2|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  261|      2|	  gpointer __p = (gpointer) (mem);			\
  |  |  |  |  262|      2|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (262:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  263|      2|	    __p = g_##func (__p, __n);				\
  |  |  |  |  264|      2|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (264:13): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  265|      2|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      2|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      2|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (265:14): [True: 0, False: 2]
  |  |  |  |  |  Branch (265:26): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  266|      2|	    __p = g_##func (__p, __n * __s);			\
  |  |  |  |  267|      2|	  else							\
  |  |  |  |  268|      2|	    __p = g_##func##_n (__p, __n, __s);			\
  |  |  |  |  269|      2|	  __p;							\
  |  |  |  |  270|      2|	}))
  |  |  ------------------
  ------------------
  939|      2|      g_signal_nodes[0] = NULL;
  940|      2|      g_handlers = g_hash_table_new (handler_hash, handler_equal);
  941|      2|    }
  942|      2|  SIGNAL_UNLOCK ();
  ------------------
  |  |  331|      2|#define	SIGNAL_UNLOCK()		G_UNLOCK (g_signal_mutex)
  |  |  ------------------
  |  |  |  |  138|      2|#  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
  |  |  |  |  ------------------
  |  |  |  |  |  |  111|      2|#define G_LOCK_NAME(name)             g__ ## name ## _lock
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  943|      2|}

g_type_register_fundamental:
 2690|     38|{
 2691|     38|  TypeNode *node;
 2692|       |  
 2693|     38|  g_assert_type_system_initialized ();
  ------------------
  |  |  142|     38|  g_assert (static_quark_type_flags)
  |  |  ------------------
  |  |  |  |  234|     38|#define g_assert(expr)                  G_STMT_START { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  940|     38|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |  235|     38|                                             if G_LIKELY (expr) ; else \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1186|     38|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1178|     38| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   62|     38|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1179|     38|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  |  | 1180|     38|   if (expr)                                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1180:8): [True: 38, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1181|     38|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  |  | 1182|     38|   else                                         \
  |  |  |  |  |  |  |  | 1183|     38|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  |  | 1184|     38|   _g_boolean_var_;                             \
  |  |  |  |  |  |  |  | 1185|     38|})
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1186:25): [True: 38, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|     38|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  |  |  ------------------
  |  |  |  |  237|      0|                                                                         #expr); \
  |  |  |  |  238|     38|                                        } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  948|     38|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (948:30): [Folded, False: 38]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2694|     38|  g_return_val_if_fail (type_id > 0, 0);
  ------------------
  |  |  652|     38|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     38|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|     38|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     38|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     38| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     38|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     38|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     38|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 38, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     38|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     38|   else                                         \
  |  |  |  |  |  | 1183|     38|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     38|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     38|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 38, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|     38|      { } \
  |  |  655|     38|    else \
  |  |  656|     38|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|     38|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     38|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 38]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2695|     38|  g_return_val_if_fail (type_name != NULL, 0);
  ------------------
  |  |  652|     38|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     38|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|     38|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     38|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     38| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     38|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     38|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     38|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 38, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     38|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     38|   else                                         \
  |  |  |  |  |  | 1183|     38|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     38|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     38|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 38, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|     38|      { } \
  |  |  655|     38|    else \
  |  |  656|     38|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|     38|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     38|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 38]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2696|     38|  g_return_val_if_fail (info != NULL, 0);
  ------------------
  |  |  652|     38|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     38|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|     38|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     38|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     38| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     38|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     38|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     38|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 38, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     38|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     38|   else                                         \
  |  |  |  |  |  | 1183|     38|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     38|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     38|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 38, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|     38|      { } \
  |  |  655|     38|    else \
  |  |  656|     38|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|     38|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     38|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 38]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2697|     38|  g_return_val_if_fail (finfo != NULL, 0);
  ------------------
  |  |  652|     38|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     38|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|     38|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     38|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     38| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     38|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     38|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     38|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 38, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     38|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     38|   else                                         \
  |  |  |  |  |  | 1183|     38|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     38|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     38|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 38, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|     38|      { } \
  |  |  655|     38|    else \
  |  |  656|     38|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|     38|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     38|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 38]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2698|       |  
 2699|     38|  if (!check_type_name_I (type_name))
  ------------------
  |  Branch (2699:7): [True: 0, False: 38]
  ------------------
 2700|      0|    return 0;
 2701|     38|  if ((type_id & TYPE_ID_MASK) ||
  ------------------
  |  |  269|     38|#define	TYPE_ID_MASK				((GType) ((1 << G_TYPE_FUNDAMENTAL_SHIFT) - 1))
  |  |  ------------------
  |  |  |  |  214|     38|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  ------------------
  ------------------
  |  Branch (2701:7): [True: 0, False: 38]
  ------------------
 2702|     38|      type_id > G_TYPE_FUNDAMENTAL_MAX)
  ------------------
  |  |   48|     38|#define	G_TYPE_FUNDAMENTAL_MAX		(255 << G_TYPE_FUNDAMENTAL_SHIFT)
  |  |  ------------------
  |  |  |  |  214|     38|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  ------------------
  ------------------
  |  Branch (2702:7): [True: 0, False: 38]
  ------------------
 2703|      0|    {
 2704|      0|      g_warning ("attempt to register fundamental type '%s' with invalid type id (%" G_GSIZE_FORMAT ")",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 2705|      0|		 type_name,
 2706|      0|		 type_id);
 2707|      0|      return 0;
 2708|      0|    }
 2709|     38|  if ((finfo->type_flags & G_TYPE_FLAG_INSTANTIATABLE) &&
  ------------------
  |  Branch (2709:7): [True: 4, False: 34]
  ------------------
 2710|      4|      !(finfo->type_flags & G_TYPE_FLAG_CLASSED))
  ------------------
  |  Branch (2710:7): [True: 0, False: 4]
  ------------------
 2711|      0|    {
 2712|      0|      g_warning ("cannot register instantiatable fundamental type '%s' as non-classed",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 2713|      0|		 type_name);
 2714|      0|      return 0;
 2715|      0|    }
 2716|     38|  if (lookup_type_node_I (type_id))
  ------------------
  |  Branch (2716:7): [True: 0, False: 38]
  ------------------
 2717|      0|    {
 2718|      0|      g_warning ("cannot register existing fundamental type '%s' (as '%s')",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 2719|      0|		 type_descriptive_name_I (type_id),
 2720|      0|		 type_name);
 2721|      0|      return 0;
 2722|      0|    }
 2723|       |  
 2724|     38|  G_WRITE_LOCK (&type_rw_lock);
  ------------------
  |  |  130|     38|#define G_WRITE_LOCK(rw_lock)   g_rw_lock_writer_lock (rw_lock)
  ------------------
 2725|     38|  node = type_node_fundamental_new_W (type_id, type_name, finfo->type_flags);
 2726|     38|  type_add_flags_W (node, flags);
 2727|       |  
 2728|     38|  if (check_type_info_I (NULL, NODE_FUNDAMENTAL_TYPE (node), type_name, info))
  ------------------
  |  |  256|     38|#define NODE_FUNDAMENTAL_TYPE(node)		(node->supers[node->n_supers])
  ------------------
  |  Branch (2728:7): [True: 38, False: 0]
  ------------------
 2729|     38|    type_data_make_W (node, info,
 2730|     38|		      check_value_table_I (type_name, info->value_table) ? info->value_table : NULL);
  ------------------
  |  Branch (2730:9): [True: 36, False: 2]
  ------------------
 2731|     38|  G_WRITE_UNLOCK (&type_rw_lock);
  ------------------
  |  |  131|     38|#define G_WRITE_UNLOCK(rw_lock) g_rw_lock_writer_unlock (rw_lock)
  ------------------
 2732|       |  
 2733|     38|  return NODE_TYPE (node);
  ------------------
  |  |  254|     38|#define NODE_TYPE(node)				(node->supers[0])
  ------------------
 2734|     38|}
g_type_register_static:
 2806|     52|{
 2807|     52|  TypeNode *pnode, *node;
 2808|     52|  GType type = 0;
 2809|       |  
 2810|     52|  g_assert_type_system_initialized ();
  ------------------
  |  |  142|     52|  g_assert (static_quark_type_flags)
  |  |  ------------------
  |  |  |  |  234|     52|#define g_assert(expr)                  G_STMT_START { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  940|     52|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |  235|     52|                                             if G_LIKELY (expr) ; else \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1186|     52|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1178|     52| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   62|     52|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1179|     52|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  |  | 1180|     52|   if (expr)                                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1180:8): [True: 52, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1181|     52|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  |  | 1182|     52|   else                                         \
  |  |  |  |  |  |  |  | 1183|     52|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  |  | 1184|     52|   _g_boolean_var_;                             \
  |  |  |  |  |  |  |  | 1185|     52|})
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1186:25): [True: 52, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|     52|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  |  |  ------------------
  |  |  |  |  237|      0|                                                                         #expr); \
  |  |  |  |  238|     52|                                        } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  948|     52|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (948:30): [Folded, False: 52]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2811|     52|  g_return_val_if_fail (parent_type > 0, 0);
  ------------------
  |  |  652|     52|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     52|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|     52|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     52|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     52| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     52|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     52|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     52|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 52, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     52|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     52|   else                                         \
  |  |  |  |  |  | 1183|     52|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     52|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     52|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 52, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|     52|      { } \
  |  |  655|     52|    else \
  |  |  656|     52|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|     52|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     52|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 52]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2812|     52|  g_return_val_if_fail (type_name != NULL, 0);
  ------------------
  |  |  652|     52|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     52|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|     52|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     52|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     52| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     52|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     52|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     52|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 52, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     52|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     52|   else                                         \
  |  |  |  |  |  | 1183|     52|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     52|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     52|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 52, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|     52|      { } \
  |  |  655|     52|    else \
  |  |  656|     52|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|     52|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     52|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 52]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2813|     52|  g_return_val_if_fail (info != NULL, 0);
  ------------------
  |  |  652|     52|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     52|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|     52|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     52|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     52| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     52|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     52|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     52|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 52, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     52|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     52|   else                                         \
  |  |  |  |  |  | 1183|     52|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     52|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     52|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 52, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|     52|      { } \
  |  |  655|     52|    else \
  |  |  656|     52|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|     52|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     52|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 52]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2814|       |  
 2815|     52|  if (!check_type_name_I (type_name) ||
  ------------------
  |  Branch (2815:7): [True: 0, False: 52]
  ------------------
 2816|     52|      !check_derivation_I (parent_type, type_name))
  ------------------
  |  Branch (2816:7): [True: 0, False: 52]
  ------------------
 2817|      0|    return 0;
 2818|     52|  if (info->class_finalize)
  ------------------
  |  Branch (2818:7): [True: 0, False: 52]
  ------------------
 2819|      0|    {
 2820|      0|      g_warning ("class finalizer specified for static type '%s'",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 2821|      0|		 type_name);
 2822|      0|      return 0;
 2823|      0|    }
 2824|       |  
 2825|     52|  pnode = lookup_type_node_I (parent_type);
 2826|     52|  G_WRITE_LOCK (&type_rw_lock);
  ------------------
  |  |  130|     52|#define G_WRITE_LOCK(rw_lock)   g_rw_lock_writer_lock (rw_lock)
  ------------------
 2827|     52|  type_data_ref_Wm (pnode);
 2828|     52|  if (check_type_info_I (pnode, NODE_FUNDAMENTAL_TYPE (pnode), type_name, info))
  ------------------
  |  |  256|     52|#define NODE_FUNDAMENTAL_TYPE(node)		(node->supers[node->n_supers])
  ------------------
  |  Branch (2828:7): [True: 52, False: 0]
  ------------------
 2829|     52|    {
 2830|     52|      node = type_node_new_W (pnode, type_name, NULL);
 2831|     52|      type_add_flags_W (node, flags);
 2832|     52|      type = NODE_TYPE (node);
  ------------------
  |  |  254|     52|#define NODE_TYPE(node)				(node->supers[0])
  ------------------
 2833|     52|      type_data_make_W (node, info,
 2834|     52|			check_value_table_I (type_name, info->value_table) ? info->value_table : NULL);
  ------------------
  |  Branch (2834:4): [True: 2, False: 50]
  ------------------
 2835|     52|    }
 2836|     52|  G_WRITE_UNLOCK (&type_rw_lock);
  ------------------
  |  |  131|     52|#define G_WRITE_UNLOCK(rw_lock) g_rw_lock_writer_unlock (rw_lock)
  ------------------
 2837|       |  
 2838|     52|  return type;
 2839|     52|}
g_type_class_ref:
 2973|     80|{
 2974|     80|  TypeNode *node;
 2975|     80|  GType ptype;
 2976|     80|  gboolean holds_ref;
 2977|     80|  GTypeClass *pclass;
 2978|       |
 2979|       |  /* optimize for common code path */
 2980|     80|  node = lookup_type_node_I (type);
 2981|     80|  if (!node || !node->is_classed)
  ------------------
  |  Branch (2981:7): [True: 0, False: 80]
  |  Branch (2981:16): [True: 0, False: 80]
  ------------------
 2982|      0|    {
 2983|      0|      g_warning ("cannot retrieve class for invalid (unclassed) type '%s'",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 2984|      0|		 type_descriptive_name_I (type));
 2985|      0|      return NULL;
 2986|      0|    }
 2987|       |
 2988|     80|  if (G_LIKELY (type_data_ref_U (node)))
  ------------------
  |  | 1186|     80|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|     80| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|     80|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|     80|   int _g_boolean_var_;                         \
  |  |  |  | 1180|     80|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 80, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1181|     80|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|     80|   else                                         \
  |  |  |  | 1183|     80|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|     80|   _g_boolean_var_;                             \
  |  |  |  | 1185|     80|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 80, False: 0]
  |  |  ------------------
  ------------------
 2989|     80|    {
 2990|     80|      if (G_LIKELY (g_atomic_int_get (&node->data->class.init_state) == INITIALIZED))
  ------------------
  |  | 1186|     80|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  ------------------
  |  |  |  | 1178|     80| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|     80|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|     80|   int _g_boolean_var_;                         \
  |  |  |  | 1180|    240|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [Folded, False: 80]
  |  |  |  |  |  Branch (1180:8): [True: 38, False: 42]
  |  |  |  |  ------------------
  |  |  |  | 1181|     80|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|     80|   else                                         \
  |  |  |  | 1183|     80|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|     80|   _g_boolean_var_;                             \
  |  |  |  | 1185|     80|})
  |  |  ------------------
  |  |  |  Branch (1186:24): [True: 38, False: 42]
  |  |  ------------------
  ------------------
 2991|     38|        return node->data->class.class;
 2992|     42|      holds_ref = TRUE;
  ------------------
  |  |  884|     42|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|     42|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2993|     42|    }
 2994|      0|  else
 2995|      0|    holds_ref = FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 2996|       |  
 2997|       |  /* here, we either have node->data->class.class == NULL, or a recursive
 2998|       |   * call to g_type_class_ref() with a partly initialized class, or
 2999|       |   * node->data->class.init_state == INITIALIZED, because any
 3000|       |   * concurrently running initialization was guarded by class_init_rec_mutex.
 3001|       |   */
 3002|     42|  g_rec_mutex_lock (&class_init_rec_mutex); /* required locking order: 1) class_init_rec_mutex, 2) type_rw_lock */
 3003|       |
 3004|       |  /* we need an initialized parent class for initializing derived classes */
 3005|     42|  ptype = NODE_PARENT_TYPE (node);
  ------------------
  |  |  255|     42|#define NODE_PARENT_TYPE(node)			(node->supers[1])
  ------------------
 3006|     42|  pclass = ptype ? g_type_class_ref (ptype) : NULL;
  ------------------
  |  Branch (3006:12): [True: 40, False: 2]
  ------------------
 3007|       |
 3008|     42|  G_WRITE_LOCK (&type_rw_lock);
  ------------------
  |  |  130|     42|#define G_WRITE_LOCK(rw_lock)   g_rw_lock_writer_lock (rw_lock)
  ------------------
 3009|       |
 3010|     42|  if (!holds_ref)
  ------------------
  |  Branch (3010:7): [True: 0, False: 42]
  ------------------
 3011|      0|    type_data_ref_Wm (node);
 3012|       |
 3013|     42|  if (!node->data->class.class) /* class uninitialized */
  ------------------
  |  Branch (3013:7): [True: 42, False: 0]
  ------------------
 3014|     42|    type_class_init_Wm (node, pclass);
 3015|       |
 3016|     42|  G_WRITE_UNLOCK (&type_rw_lock);
  ------------------
  |  |  131|     42|#define G_WRITE_UNLOCK(rw_lock) g_rw_lock_writer_unlock (rw_lock)
  ------------------
 3017|       |
 3018|     42|  if (pclass)
  ------------------
  |  Branch (3018:7): [True: 40, False: 2]
  ------------------
 3019|     40|    g_type_class_unref (pclass);
 3020|       |
 3021|     42|  g_rec_mutex_unlock (&class_init_rec_mutex);
 3022|       |
 3023|     42|  return node->data->class.class;
 3024|     80|}
g_type_class_unref:
 3037|     80|{
 3038|     80|  TypeNode *node;
 3039|     80|  GTypeClass *class = g_class;
 3040|       |  
 3041|     80|  g_return_if_fail (g_class != NULL);
  ------------------
  |  |  639|     80|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     80|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|     80|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     80|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     80| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     80|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     80|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     80|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 80, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     80|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     80|   else                                         \
  |  |  |  |  |  | 1183|     80|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     80|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     80|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 80, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|     80|      { } \
  |  |  642|     80|    else \
  |  |  643|     80|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|     80|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     80|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 80]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3042|       |  
 3043|     80|  node = lookup_type_node_I (class->g_type);
 3044|     80|  if (node && node->is_classed && NODE_REFCOUNT (node))
  ------------------
  |  |  258|     80|#define NODE_REFCOUNT(node)                     ((guint) g_atomic_int_get ((int *) &(node)->ref_count))
  |  |  ------------------
  |  |  |  |  110|     80|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|     80|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  111|     80|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |  824|     80|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  |  |  ------------------
  |  |  |  |  112|     80|    gint gaig_temp;                                                          \
  |  |  |  |  113|     80|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (113:13): [Folded, False: 80]
  |  |  |  |  ------------------
  |  |  |  |  114|     80|    __atomic_load ((gint *)(atomic), &gaig_temp, __ATOMIC_SEQ_CST);          \
  |  |  |  |  115|     80|    (gint) gaig_temp;                                                        \
  |  |  |  |  116|     80|  }))
  |  |  ------------------
  |  |  |  Branch (258:49): [True: 80, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3044:7): [True: 80, False: 0]
  |  Branch (3044:15): [True: 80, False: 0]
  ------------------
 3045|     80|    type_data_unref_U (node, FALSE);
  ------------------
  |  |  880|     80|#define	FALSE	(0)
  ------------------
 3046|      0|  else
 3047|      0|    g_warning ("cannot unreference class of invalid (unclassed) type '%s'",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 3048|     80|	       type_descriptive_name_I (class->g_type));
 3049|     80|}
g_type_name:
 3380|     46|{
 3381|     46|  TypeNode *node;
 3382|       |  
 3383|     46|  g_assert_type_system_initialized ();
  ------------------
  |  |  142|     46|  g_assert (static_quark_type_flags)
  |  |  ------------------
  |  |  |  |  234|     46|#define g_assert(expr)                  G_STMT_START { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  940|     46|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |  235|     46|                                             if G_LIKELY (expr) ; else \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1186|     46|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1178|     46| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   62|     46|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1179|     46|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  |  | 1180|     46|   if (expr)                                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1180:8): [True: 46, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1181|     46|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  |  | 1182|     46|   else                                         \
  |  |  |  |  |  |  |  | 1183|     46|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  |  | 1184|     46|   _g_boolean_var_;                             \
  |  |  |  |  |  |  |  | 1185|     46|})
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1186:25): [True: 46, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|     46|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  |  |  ------------------
  |  |  |  |  237|      0|                                                                         #expr); \
  |  |  |  |  238|     46|                                        } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  948|     46|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (948:30): [Folded, False: 46]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3384|       |  
 3385|     46|  node = lookup_type_node_I (type);
 3386|       |  
 3387|     46|  return node ? NODE_NAME (node) : NULL;
  ------------------
  |  |  257|     46|#define NODE_NAME(node)				(g_quark_to_string (node->qname))
  ------------------
  |  Branch (3387:10): [True: 46, False: 0]
  ------------------
 3388|     46|}
g_type_from_name:
 3421|    140|{
 3422|    140|  GType type = 0;
 3423|       |  
 3424|    140|  g_return_val_if_fail (name != NULL, 0);
  ------------------
  |  |  652|    140|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    140|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|    140|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    140|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    140| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    140|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    140|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    140|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 140, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    140|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    140|   else                                         \
  |  |  |  |  |  | 1183|    140|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    140|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    140|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 140, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|    140|      { } \
  |  |  655|    140|    else \
  |  |  656|    140|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|    140|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    140|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 140]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3425|       |  
 3426|    140|  G_READ_LOCK (&type_rw_lock);
  ------------------
  |  |  128|    140|#define G_READ_LOCK(rw_lock)    g_rw_lock_reader_lock (rw_lock)
  ------------------
 3427|    140|  type = (GType) g_hash_table_lookup (static_type_nodes_ht, name);
 3428|    140|  G_READ_UNLOCK (&type_rw_lock);
  ------------------
  |  |  129|    140|#define G_READ_UNLOCK(rw_lock)  g_rw_lock_reader_unlock (rw_lock)
  ------------------
 3429|       |  
 3430|    140|  return type;
 3431|    140|}
_g_type_boxed_init:
 4383|      2|{
 4384|      2|  TypeNode *node = lookup_type_node_I (type);
 4385|       |
 4386|      2|  node->data->boxed.copy_func = copy_func;
 4387|      2|  node->data->boxed.free_func = free_func;
 4388|      2|}
gtype.c:gobject_init_ctor:
 4609|      2|{
 4610|      2|  gobject_init ();
 4611|      2|}
g_type_add_instance_private:
 4730|      2|{
 4731|      2|  TypeNode *node = lookup_type_node_I (class_gtype);
 4732|       |
 4733|      2|  g_return_val_if_fail (private_size > 0, 0);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4734|      2|  g_return_val_if_fail (private_size <= 0xffff, 0);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4735|       |
 4736|      2|  if (!node || !node->is_classed || !node->is_instantiatable || !node->data)
  ------------------
  |  Branch (4736:7): [True: 0, False: 2]
  |  Branch (4736:16): [True: 0, False: 2]
  |  Branch (4736:37): [True: 0, False: 2]
  |  Branch (4736:65): [True: 0, False: 2]
  ------------------
 4737|      0|    {
 4738|      0|      g_warning ("cannot add private field to invalid (non-instantiatable) type '%s'",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 4739|      0|		 type_descriptive_name_I (class_gtype));
 4740|      0|      return 0;
 4741|      0|    }
 4742|       |
 4743|      2|  if (node->plugin != NULL)
  ------------------
  |  Branch (4743:7): [True: 0, False: 2]
  ------------------
 4744|      0|    {
 4745|      0|      g_warning ("cannot use g_type_add_instance_private() with dynamic type '%s'",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 4746|      0|                 type_descriptive_name_I (class_gtype));
 4747|      0|      return 0;
 4748|      0|    }
 4749|       |
 4750|       |  /* in the future, we want to register the private data size of a type
 4751|       |   * directly from the get_type() implementation so that we can take full
 4752|       |   * advantage of the type definition macros that we already have.
 4753|       |   *
 4754|       |   * unfortunately, this does not behave correctly if a class in the middle
 4755|       |   * of the type hierarchy uses the "old style" of private data registration
 4756|       |   * from the class_init() implementation, as the private data offset is not
 4757|       |   * going to be known until the full class hierarchy is initialized.
 4758|       |   *
 4759|       |   * in order to transition our code to the Glorious New Future™, we proceed
 4760|       |   * with a two-step implementation: first, we provide this new function to
 4761|       |   * register the private data size in the get_type() implementation and we
 4762|       |   * hide it behind a macro. the function will return the private size, instead
 4763|       |   * of the offset, which will be stored inside a static variable defined by
 4764|       |   * the G_DEFINE_TYPE_EXTENDED() macro. the G_DEFINE_TYPE_EXTENDED() macro will
 4765|       |   * check the variable and call g_type_class_add_instance_private(), which
 4766|       |   * will use the data size and actually register the private data, then
 4767|       |   * return the computed offset of the private data, which will be stored
 4768|       |   * inside the static variable, so we can use it to retrieve the pointer
 4769|       |   * to the private data structure.
 4770|       |   *
 4771|       |   * once all our code has been migrated to the new idiomatic form of private
 4772|       |   * data registration, we will change the g_type_add_instance_private()
 4773|       |   * function to actually perform the registration and return the offset
 4774|       |   * of the private data; g_type_class_add_instance_private() already checks
 4775|       |   * if the passed argument is negative (meaning that it's an offset in the
 4776|       |   * GTypeInstance allocation) and becomes a no-op if that's the case. this
 4777|       |   * should make the migration fully transparent even if we're effectively
 4778|       |   * copying this macro into everybody's code.
 4779|       |   */
 4780|      2|  return private_size;
 4781|      2|}
g_type_class_adjust_private_offset:
 4787|      2|{
 4788|      2|  GType class_gtype = ((GTypeClass *) g_class)->g_type;
 4789|      2|  TypeNode *node = lookup_type_node_I (class_gtype);
 4790|      2|  gssize private_size;
 4791|       |
 4792|      2|  g_return_if_fail (private_size_or_offset != NULL);
  ------------------
  |  |  639|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      2|      { } \
  |  |  642|      2|    else \
  |  |  643|      2|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4793|       |
 4794|       |  /* if we have been passed the offset instead of the private data size,
 4795|       |   * then we consider this as a no-op, and just return the value. see the
 4796|       |   * comment in g_type_add_instance_private() for the full explanation.
 4797|       |   */
 4798|      2|  if (*private_size_or_offset > 0)
  ------------------
  |  Branch (4798:7): [True: 2, False: 0]
  ------------------
 4799|      2|    g_return_if_fail (*private_size_or_offset <= 0xffff);
  ------------------
  |  |  639|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|      2|      { } \
  |  |  642|      2|    else \
  |  |  643|      2|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4800|      0|  else
 4801|      0|    return;
 4802|       |
 4803|      2|  if (!node || !node->is_classed || !node->is_instantiatable || !node->data)
  ------------------
  |  Branch (4803:7): [True: 0, False: 2]
  |  Branch (4803:16): [True: 0, False: 2]
  |  Branch (4803:37): [True: 0, False: 2]
  |  Branch (4803:65): [True: 0, False: 2]
  ------------------
 4804|      0|    {
 4805|      0|      g_warning ("cannot add private field to invalid (non-instantiatable) type '%s'",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 4806|      0|		 type_descriptive_name_I (class_gtype));
 4807|      0|      *private_size_or_offset = 0;
 4808|      0|      return;
 4809|      0|    }
 4810|       |
 4811|      2|  if (NODE_PARENT_TYPE (node))
  ------------------
  |  |  255|      2|#define NODE_PARENT_TYPE(node)			(node->supers[1])
  |  |  ------------------
  |  |  |  Branch (255:34): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 4812|      0|    {
 4813|      0|      TypeNode *pnode = lookup_type_node_I (NODE_PARENT_TYPE (node));
  ------------------
  |  |  255|      0|#define NODE_PARENT_TYPE(node)			(node->supers[1])
  ------------------
 4814|      0|      if (node->data->instance.private_size != pnode->data->instance.private_size)
  ------------------
  |  Branch (4814:11): [True: 0, False: 0]
  ------------------
 4815|      0|	{
 4816|      0|	  g_warning ("g_type_add_instance_private() called multiple times for the same type");
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 4817|      0|          *private_size_or_offset = 0;
 4818|      0|	  return;
 4819|      0|	}
 4820|      0|    }
 4821|       |
 4822|      2|  G_WRITE_LOCK (&type_rw_lock);
  ------------------
  |  |  130|      2|#define G_WRITE_LOCK(rw_lock)   g_rw_lock_writer_lock (rw_lock)
  ------------------
 4823|       |
 4824|      2|  private_size = ALIGN_STRUCT (node->data->instance.private_size + *private_size_or_offset);
  ------------------
  |  |  163|      2|      ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
  |  |  ------------------
  |  |  |  |  161|      2|#define STRUCT_ALIGNMENT (2 * sizeof (gsize))
  |  |  ------------------
  |  |                     ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
  |  |  ------------------
  |  |  |  |  161|      2|#define STRUCT_ALIGNMENT (2 * sizeof (gsize))
  |  |  ------------------
  ------------------
 4825|      2|  g_assert (private_size <= 0xffff);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4826|      2|  node->data->instance.private_size = private_size;
 4827|       |
 4828|      2|  *private_size_or_offset = -(gint) node->data->instance.private_size;
 4829|       |
 4830|      2|  G_WRITE_UNLOCK (&type_rw_lock);
  ------------------
  |  |  131|      2|#define G_WRITE_UNLOCK(rw_lock) g_rw_lock_writer_unlock (rw_lock)
  ------------------
 4831|      2|}
g_type_ensure:
 5019|      2|{
 5020|       |  /* In theory, @type has already been resolved and so there's nothing
 5021|       |   * to do here. But this protects us in the case where the function
 5022|       |   * gets inlined (as it might in gobject_init_ctor() above).
 5023|       |   */
 5024|      2|  if (G_UNLIKELY (type == (GType)-1))
  ------------------
  |  | 1187|      2|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  ------------------
  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1180:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  | 1182|      2|   else                                         \
  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  | 1185|      2|})
  |  |  ------------------
  |  |  |  Branch (1187:26): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 5025|      2|    g_error ("can't happen");
  ------------------
  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  346|      0|                        for (;;) ;                   \
  |  |  347|      0|                      } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5026|      2|}
gtype.c:lookup_type_node_I:
  397|    716|{
  398|    716|  if (utype > G_TYPE_FUNDAMENTAL_MAX)
  ------------------
  |  |   48|    716|#define	G_TYPE_FUNDAMENTAL_MAX		(255 << G_TYPE_FUNDAMENTAL_SHIFT)
  |  |  ------------------
  |  |  |  |  214|    716|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  ------------------
  ------------------
  |  Branch (398:7): [True: 86, False: 630]
  ------------------
  399|     86|    return (TypeNode*) (utype & ~TYPE_ID_MASK);
  ------------------
  |  |  269|     86|#define	TYPE_ID_MASK				((GType) ((1 << G_TYPE_FUNDAMENTAL_SHIFT) - 1))
  |  |  ------------------
  |  |  |  |  214|     86|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  ------------------
  ------------------
  400|    630|  else
  401|    630|    return static_fundamental_type_nodes[utype >> G_TYPE_FUNDAMENTAL_SHIFT];
  ------------------
  |  |  214|    630|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  ------------------
  402|    716|}
gtype.c:check_type_name_I:
  745|     90|{
  746|     90|  static const gchar extra_chars[] = "-_+";
  747|     90|  const gchar *p = type_name;
  748|     90|  gboolean name_valid;
  749|       |  
  750|     90|  if (!type_name[0] || !type_name[1] || !type_name[2])
  ------------------
  |  Branch (750:7): [True: 0, False: 90]
  |  Branch (750:24): [True: 0, False: 90]
  |  Branch (750:41): [True: 0, False: 90]
  ------------------
  751|      0|    {
  752|      0|      g_warning ("type name '%s' is too short", type_name);
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  753|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  754|      0|    }
  755|       |  /* check the first letter */
  756|     90|  name_valid = (p[0] >= 'A' && p[0] <= 'Z') || (p[0] >= 'a' && p[0] <= 'z') || p[0] == '_';
  ------------------
  |  Branch (756:17): [True: 90, False: 0]
  |  Branch (756:32): [True: 64, False: 26]
  |  Branch (756:49): [True: 26, False: 0]
  |  Branch (756:64): [True: 26, False: 0]
  |  Branch (756:80): [True: 0, False: 0]
  ------------------
  757|    830|  for (p = type_name + 1; *p; p++)
  ------------------
  |  Branch (757:27): [True: 740, False: 90]
  ------------------
  758|    740|    name_valid &= ((p[0] >= 'A' && p[0] <= 'Z') ||
  ------------------
  |  Branch (758:21): [True: 724, False: 16]
  |  Branch (758:36): [True: 126, False: 598]
  ------------------
  759|    614|		   (p[0] >= 'a' && p[0] <= 'z') ||
  ------------------
  |  Branch (759:7): [True: 598, False: 16]
  |  Branch (759:22): [True: 598, False: 0]
  ------------------
  760|     16|		   (p[0] >= '0' && p[0] <= '9') ||
  ------------------
  |  Branch (760:7): [True: 16, False: 0]
  |  Branch (760:22): [True: 16, False: 0]
  ------------------
  761|      0|		   strchr (extra_chars, p[0]));
  ------------------
  |  Branch (761:6): [True: 0, False: 0]
  ------------------
  762|     90|  if (!name_valid)
  ------------------
  |  Branch (762:7): [True: 0, False: 90]
  ------------------
  763|      0|    {
  764|      0|      g_warning ("type name '%s' contains invalid characters", type_name);
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  765|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  766|      0|    }
  767|     90|  if (g_type_from_name (type_name))
  ------------------
  |  Branch (767:7): [True: 0, False: 90]
  ------------------
  768|      0|    {
  769|      0|      g_warning ("cannot register existing type '%s'", type_name);
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  770|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  771|      0|    }
  772|       |  
  773|     90|  return TRUE;
  ------------------
  |  |  884|     90|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|     90|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  774|     90|}
gtype.c:type_node_fundamental_new_W:
  544|     42|{
  545|     42|  GTypeFundamentalInfo *finfo;
  546|     42|  TypeNode *node;
  547|       |  
  548|     42|  g_assert ((ftype & TYPE_ID_MASK) == 0);
  ------------------
  |  |  234|     42|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     42|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|     42|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|     42|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     42| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     42|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     42|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     42|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 42, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     42|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     42|   else                                         \
  |  |  |  |  |  | 1183|     42|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     42|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     42|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 42, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|     42|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|     42|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     42|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 42]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|     42|  g_assert (ftype <= G_TYPE_FUNDAMENTAL_MAX);
  ------------------
  |  |  234|     42|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     42|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|     42|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|     42|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     42| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     42|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     42|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     42|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 42, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     42|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     42|   else                                         \
  |  |  |  |  |  | 1183|     42|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     42|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     42|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 42, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|     42|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|     42|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     42|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 42]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  550|       |  
  551|     42|  if (ftype >> G_TYPE_FUNDAMENTAL_SHIFT == static_fundamental_next)
  ------------------
  |  |  214|     42|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  ------------------
  |  Branch (551:7): [True: 0, False: 42]
  ------------------
  552|      0|    static_fundamental_next++;
  553|       |  
  554|     42|  type_flags &= TYPE_FUNDAMENTAL_FLAG_MASK;
  ------------------
  |  |  144|     42|#define TYPE_FUNDAMENTAL_FLAG_MASK (G_TYPE_FLAG_CLASSED | \
  |  |  145|     42|				    G_TYPE_FLAG_INSTANTIATABLE | \
  |  |  146|     42|				    G_TYPE_FLAG_DERIVABLE | \
  |  |  147|     42|				    G_TYPE_FLAG_DEEP_DERIVABLE)
  ------------------
  555|       |  
  556|     42|  node = type_node_any_new_W (NULL, ftype, name, NULL, type_flags);
  557|       |  
  558|     42|  finfo = type_node_fundamental_info_I (node);
  559|     42|  finfo->type_flags = type_flags;
  560|       |  
  561|     42|  return node;
  562|     42|}
gtype.c:type_node_any_new_W:
  429|     94|{
  430|     94|  guint n_supers;
  431|     94|  GType type;
  432|     94|  TypeNode *node;
  433|     94|  guint i, node_size = 0;
  434|       |
  435|     94|  n_supers = pnode ? pnode->n_supers + 1 : 0;
  ------------------
  |  Branch (435:14): [True: 52, False: 42]
  ------------------
  436|       |  
  437|     94|  if (!pnode)
  ------------------
  |  Branch (437:7): [True: 42, False: 52]
  ------------------
  438|     42|    node_size += SIZEOF_FUNDAMENTAL_INFO;	      /* fundamental type info */
  ------------------
  |  |  149|     42|#define	SIZEOF_FUNDAMENTAL_INFO	   ((gssize) MAX (MAX (sizeof (GTypeFundamentalInfo), \
  |  |  ------------------
  |  |  |  |  888|     84|#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (888:21): [Folded, False: 42]
  |  |  |  |  |  Branch (888:23): [Folded, False: 42]
  |  |  |  |  |  Branch (888:36): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|     42|						       sizeof (gpointer)), \
  |  |  151|     42|                                                  sizeof (glong)))
  ------------------
  439|     94|  node_size += SIZEOF_BASE_TYPE_NODE ();	      /* TypeNode structure */
  ------------------
  |  |  249|     94|#define SIZEOF_BASE_TYPE_NODE()			(G_STRUCT_OFFSET (TypeNode, supers))
  |  |  ------------------
  |  |  |  |  919|     94|      ((glong) offsetof (struct_type, member))
  |  |  ------------------
  ------------------
  440|     94|  node_size += (sizeof (GType) * (1 + n_supers + 1)); /* self + ancestors + (0) for ->supers[] */
  441|     94|  node = g_malloc0 (node_size);
  442|     94|  if (!pnode)					      /* offset fundamental types */
  ------------------
  |  Branch (442:7): [True: 42, False: 52]
  ------------------
  443|     42|    {
  444|     42|      node = G_STRUCT_MEMBER_P (node, SIZEOF_FUNDAMENTAL_INFO);
  ------------------
  |  |  926|    168|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  |  |  |  Branch (926:50): [Folded, False: 42]
  |  |  |  Branch (926:50): [Folded, False: 0]
  |  |  |  Branch (926:50): [Folded, False: 42]
  |  |  ------------------
  ------------------
  445|     42|      static_fundamental_type_nodes[ftype >> G_TYPE_FUNDAMENTAL_SHIFT] = node;
  ------------------
  |  |  214|     42|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  ------------------
  446|     42|      type = ftype;
  447|       |
  448|     42|#if ENABLE_VALGRIND
  449|     42|      VALGRIND_MALLOCLIKE_BLOCK (node, node_size - SIZEOF_FUNDAMENTAL_INFO, FALSE, TRUE);
  ------------------
  |  | 6479|     42|    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MALLOCLIKE_BLOCK,       \
  |  |  ------------------
  |  |  |  |  203|     42|  do { (void) VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  413|     42|    __extension__                                                 \
  |  |  |  |  |  |  414|     42|    ({ volatile unsigned long int _zzq_args[6];                   \
  |  |  |  |  |  |  415|     42|    volatile unsigned long int _zzq_result;                       \
  |  |  |  |  |  |  416|     42|    _zzq_args[0] = (unsigned long int)(_zzq_request);             \
  |  |  |  |  |  |  417|     42|    _zzq_args[1] = (unsigned long int)(_zzq_arg1);                \
  |  |  |  |  |  |  418|    168|    _zzq_args[2] = (unsigned long int)(_zzq_arg2);                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (418:40): [Folded, False: 42]
  |  |  |  |  |  |  |  Branch (418:40): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (418:40): [Folded, False: 42]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|     42|    _zzq_args[3] = (unsigned long int)(_zzq_arg3);                \
  |  |  |  |  |  |  420|     42|    _zzq_args[4] = (unsigned long int)(_zzq_arg4);                \
  |  |  |  |  |  |  421|     42|    _zzq_args[5] = (unsigned long int)(_zzq_arg5);                \
  |  |  |  |  |  |  422|     42|    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
  |  |  |  |  |  |  423|     42|                     /* %RDX = client_request ( %RAX ) */         \
  |  |  |  |  |  |  424|     42|                     "xchgq %%rbx,%%rbx"                          \
  |  |  |  |  |  |  425|     42|                     : "=d" (_zzq_result)                         \
  |  |  |  |  |  |  426|     42|                     : "a" (&_zzq_args[0]), "0" (_zzq_default)    \
  |  |  |  |  |  |  427|     42|                     : "cc", "memory"                             \
  |  |  |  |  |  |  428|     42|                    );                                            \
  |  |  |  |  |  |  429|     42|    _zzq_result;                                                  \
  |  |  |  |  |  |  430|     42|    })
  |  |  |  |  ------------------
  |  |  |  |  204|     42|                    (_zzq_request), (_zzq_arg1), (_zzq_arg2),           \
  |  |  |  |  205|     42|                    (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (205:70): [Folded, False: 42]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6480|     42|                                    addr, sizeB, rzB, is_zeroed, 0)
  ------------------
  450|     42|#endif
  451|     42|    }
  452|     52|  else
  453|     52|    type = (GType) node;
  454|       |  
  455|     94|  g_assert ((type & TYPE_ID_MASK) == 0);
  ------------------
  |  |  234|     94|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     94|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|     94|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|     94|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     94| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     94|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     94|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     94|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 94, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     94|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     94|   else                                         \
  |  |  |  |  |  | 1183|     94|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     94|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     94|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 94, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|     94|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|     94|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     94|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 94]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  456|       |  
  457|     94|  node->n_supers = n_supers;
  458|     94|  if (!pnode)
  ------------------
  |  Branch (458:7): [True: 42, False: 52]
  ------------------
  459|     42|    {
  460|     42|      node->supers[0] = type;
  461|     42|      node->supers[1] = 0;
  462|       |      
  463|     42|      node->is_classed = (type_flags & G_TYPE_FLAG_CLASSED) != 0;
  464|     42|      node->is_instantiatable = (type_flags & G_TYPE_FLAG_INSTANTIATABLE) != 0;
  465|       |      
  466|     42|      if (NODE_IS_IFACE (node))
  ------------------
  |  |  260|     42|#define	NODE_IS_IFACE(node)			(NODE_FUNDAMENTAL_TYPE (node) == G_TYPE_INTERFACE)
  |  |  ------------------
  |  |  |  |  256|     42|#define NODE_FUNDAMENTAL_TYPE(node)		(node->supers[node->n_supers])
  |  |  ------------------
  |  |               #define	NODE_IS_IFACE(node)			(NODE_FUNDAMENTAL_TYPE (node) == G_TYPE_INTERFACE)
  |  |  ------------------
  |  |  |  |   71|     42|#define G_TYPE_INTERFACE		G_TYPE_MAKE_FUNDAMENTAL (2)
  |  |  |  |  ------------------
  |  |  |  |  |  |  226|     42|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  214|     42|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (260:31): [True: 2, False: 40]
  |  |  ------------------
  ------------------
  467|      2|	{
  468|      2|          IFACE_NODE_N_PREREQUISITES (node) = 0;
  ------------------
  |  |  263|      2|#define	IFACE_NODE_N_PREREQUISITES(node)	((node)->n_prerequisites)
  ------------------
  469|      2|	  IFACE_NODE_PREREQUISITES (node) = NULL;
  ------------------
  |  |  264|      2|#define	IFACE_NODE_PREREQUISITES(node)		((node)->prerequisites)
  ------------------
  470|      2|	}
  471|     40|      else
  472|     40|	_g_atomic_array_init (CLASSED_NODE_IFACES_ENTRIES (node));
  ------------------
  |  |  261|     40|#define	CLASSED_NODE_IFACES_ENTRIES(node)	(&(node)->_prot.iface_entries)
  ------------------
  473|     42|    }
  474|     52|  else
  475|     52|    {
  476|     52|      node->supers[0] = type;
  477|     52|      memcpy (node->supers + 1, pnode->supers, sizeof (GType) * (1 + pnode->n_supers + 1));
  478|       |      
  479|     52|      node->is_classed = pnode->is_classed;
  480|     52|      node->is_instantiatable = pnode->is_instantiatable;
  481|       |      
  482|     52|      if (NODE_IS_IFACE (node))
  ------------------
  |  |  260|     52|#define	NODE_IS_IFACE(node)			(NODE_FUNDAMENTAL_TYPE (node) == G_TYPE_INTERFACE)
  |  |  ------------------
  |  |  |  |  256|     52|#define NODE_FUNDAMENTAL_TYPE(node)		(node->supers[node->n_supers])
  |  |  ------------------
  |  |               #define	NODE_IS_IFACE(node)			(NODE_FUNDAMENTAL_TYPE (node) == G_TYPE_INTERFACE)
  |  |  ------------------
  |  |  |  |   71|     52|#define G_TYPE_INTERFACE		G_TYPE_MAKE_FUNDAMENTAL (2)
  |  |  |  |  ------------------
  |  |  |  |  |  |  226|     52|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  214|     52|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (260:31): [True: 2, False: 50]
  |  |  ------------------
  ------------------
  483|      2|	{
  484|      2|	  IFACE_NODE_N_PREREQUISITES (node) = 0;
  ------------------
  |  |  263|      2|#define	IFACE_NODE_N_PREREQUISITES(node)	((node)->n_prerequisites)
  ------------------
  485|      2|	  IFACE_NODE_PREREQUISITES (node) = NULL;
  ------------------
  |  |  264|      2|#define	IFACE_NODE_PREREQUISITES(node)		((node)->prerequisites)
  ------------------
  486|      2|	}
  487|     50|      else
  488|     50|	{
  489|     50|	  guint j;
  490|     50|	  IFaceEntries *entries;
  491|       |
  492|     50|	  entries = _g_atomic_array_copy (CLASSED_NODE_IFACES_ENTRIES (pnode),
  ------------------
  |  |  261|     50|#define	CLASSED_NODE_IFACES_ENTRIES(node)	(&(node)->_prot.iface_entries)
  ------------------
  493|     50|					  IFACE_ENTRIES_HEADER_SIZE,
  ------------------
  |  |  295|     50|#define IFACE_ENTRIES_HEADER_SIZE (sizeof(IFaceEntries) - sizeof(IFaceEntry))
  ------------------
  494|     50|					  0);
  495|     50|	  if (entries)
  ------------------
  |  Branch (495:8): [True: 0, False: 50]
  ------------------
  496|      0|	    {
  497|      0|	      for (j = 0; j < IFACE_ENTRIES_N_ENTRIES (entries); j++)
  ------------------
  |  |  296|      0|#define IFACE_ENTRIES_N_ENTRIES(_entries) ( (G_ATOMIC_ARRAY_DATA_SIZE((_entries)) - IFACE_ENTRIES_HEADER_SIZE) / sizeof(IFaceEntry) )
  |  |  ------------------
  |  |  |  |   30|      0|#define G_ATOMIC_ARRAY_DATA_SIZE(mem) (*((gsize *) (mem) - 1))
  |  |  ------------------
  |  |               #define IFACE_ENTRIES_N_ENTRIES(_entries) ( (G_ATOMIC_ARRAY_DATA_SIZE((_entries)) - IFACE_ENTRIES_HEADER_SIZE) / sizeof(IFaceEntry) )
  |  |  ------------------
  |  |  |  |  295|      0|#define IFACE_ENTRIES_HEADER_SIZE (sizeof(IFaceEntries) - sizeof(IFaceEntry))
  |  |  ------------------
  ------------------
  |  Branch (497:20): [True: 0, False: 0]
  ------------------
  498|      0|		{
  499|      0|		  entries->entry[j].vtable = NULL;
  500|      0|		  entries->entry[j].init_state = UNINITIALIZED;
  501|      0|		}
  502|      0|	      _g_atomic_array_update (CLASSED_NODE_IFACES_ENTRIES (node),
  ------------------
  |  |  261|      0|#define	CLASSED_NODE_IFACES_ENTRIES(node)	(&(node)->_prot.iface_entries)
  ------------------
  503|      0|				      entries);
  504|      0|	    }
  505|     50|	}
  506|       |
  507|     52|      i = pnode->n_children++;
  508|     52|      pnode->children = g_renew (GType, pnode->children, pnode->n_children);
  ------------------
  |  |  330|     52|#define g_renew(struct_type, mem, n_structs)		_G_RENEW (struct_type, mem, n_structs, realloc)
  |  |  ------------------
  |  |  |  |  258|     52|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|     52|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  259|     52|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  260|     52|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  261|     52|	  gpointer __p = (gpointer) (mem);			\
  |  |  |  |  262|     52|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (262:8): [True: 0, False: 52]
  |  |  |  |  ------------------
  |  |  |  |  263|     52|	    __p = g_##func (__p, __n);				\
  |  |  |  |  264|     52|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (264:13): [True: 0, False: 52]
  |  |  |  |  ------------------
  |  |  |  |  265|     52|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (265:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (265:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  266|     52|	    __p = g_##func (__p, __n * __s);			\
  |  |  |  |  267|     52|	  else							\
  |  |  |  |  268|     52|	    __p = g_##func##_n (__p, __n, __s);			\
  |  |  |  |  269|     52|	  __p;							\
  |  |  |  |  270|     52|	}))
  |  |  ------------------
  ------------------
  509|     52|      pnode->children[i] = type;
  510|     52|    }
  511|       |
  512|     94|  TRACE(GOBJECT_TYPE_NEW(name, node->supers[1], type));
  513|       |
  514|     94|  node->plugin = plugin;
  515|     94|  node->n_children = 0;
  516|     94|  node->children = NULL;
  517|     94|  node->data = NULL;
  518|     94|  node->qname = g_quark_from_string (name);
  519|     94|  node->global_gdata = NULL;
  520|     94|  g_hash_table_insert (static_type_nodes_ht,
  521|     94|		       (gpointer) g_quark_to_string (node->qname),
  522|     94|		       (gpointer) type);
  523|       |
  524|     94|  g_atomic_int_inc ((gint *)&type_registration_serial);
  ------------------
  |  |  162|     94|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|     94|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|     94|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|     94|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  164|     94|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded, False: 94]
  |  |  ------------------
  |  |  165|     94|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  166|     94|  }))
  ------------------
  525|       |
  526|     94|  return node;
  527|     94|}
gtype.c:check_type_info_I:
  901|     90|{
  902|     90|  GTypeFundamentalInfo *finfo = type_node_fundamental_info_I (lookup_type_node_I (ftype));
  903|     90|  gboolean is_interface = ftype == G_TYPE_INTERFACE;
  ------------------
  |  |   71|     90|#define G_TYPE_INTERFACE		G_TYPE_MAKE_FUNDAMENTAL (2)
  |  |  ------------------
  |  |  |  |  226|     90|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|     90|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  904|       |  
  905|     90|  g_assert (ftype <= G_TYPE_FUNDAMENTAL_MAX && !(ftype & TYPE_ID_MASK));
  ------------------
  |  |  234|     90|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     90|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|     90|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|     90|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     90| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     90|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     90|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    270|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 90, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 90, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     90|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     90|   else                                         \
  |  |  |  |  |  | 1183|     90|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     90|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     90|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 90, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|     90|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|     90|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     90|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  906|       |  
  907|       |  /* check instance members */
  908|     90|  if (!(finfo->type_flags & G_TYPE_FLAG_INSTANTIATABLE) &&
  ------------------
  |  Branch (908:7): [True: 40, False: 50]
  ------------------
  909|     40|      (info->instance_size || info->n_preallocs || info->instance_init))
  ------------------
  |  Branch (909:8): [True: 0, False: 40]
  |  Branch (909:31): [True: 0, False: 40]
  |  Branch (909:52): [True: 0, False: 40]
  ------------------
  910|      0|    {
  911|      0|      if (pnode)
  ------------------
  |  Branch (911:11): [True: 0, False: 0]
  ------------------
  912|      0|	g_warning ("cannot instantiate '%s', derived from non-instantiatable parent type '%s'",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  913|      0|		   type_name,
  914|      0|		   NODE_NAME (pnode));
  915|      0|      else
  916|      0|	g_warning ("cannot instantiate '%s' as non-instantiatable fundamental",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  917|      0|		   type_name);
  918|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  919|      0|    }
  920|       |  /* check class & interface members */
  921|     90|  if (!((finfo->type_flags & G_TYPE_FLAG_CLASSED) || is_interface) &&
  ------------------
  |  Branch (921:9): [True: 54, False: 36]
  |  Branch (921:54): [True: 2, False: 34]
  ------------------
  922|     34|      (info->class_init || info->class_finalize || info->class_data ||
  ------------------
  |  Branch (922:8): [True: 0, False: 34]
  |  Branch (922:28): [True: 0, False: 34]
  |  Branch (922:52): [True: 0, False: 34]
  ------------------
  923|     34|       info->class_size || info->base_init || info->base_finalize))
  ------------------
  |  Branch (923:8): [True: 0, False: 34]
  |  Branch (923:28): [True: 0, False: 34]
  |  Branch (923:47): [True: 0, False: 34]
  ------------------
  924|      0|    {
  925|      0|      if (pnode)
  ------------------
  |  Branch (925:11): [True: 0, False: 0]
  ------------------
  926|      0|	g_warning ("cannot create class for '%s', derived from non-classed parent type '%s'",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  927|      0|		   type_name,
  928|      0|                   NODE_NAME (pnode));
  929|      0|      else
  930|      0|	g_warning ("cannot create class for '%s' as non-classed fundamental",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  931|      0|		   type_name);
  932|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  933|      0|    }
  934|       |  /* check interface size */
  935|     90|  if (is_interface && info->class_size < sizeof (GTypeInterface))
  ------------------
  |  Branch (935:7): [True: 2, False: 88]
  |  Branch (935:23): [True: 0, False: 2]
  ------------------
  936|      0|    {
  937|      0|      g_warning ("specified interface size for type '%s' is smaller than 'GTypeInterface' size",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  938|      0|		 type_name);
  939|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  940|      0|    }
  941|       |  /* check class size */
  942|     90|  if (finfo->type_flags & G_TYPE_FLAG_CLASSED)
  ------------------
  |  Branch (942:7): [True: 54, False: 36]
  ------------------
  943|     54|    {
  944|     54|      if (info->class_size < sizeof (GTypeClass))
  ------------------
  |  Branch (944:11): [True: 0, False: 54]
  ------------------
  945|      0|	{
  946|      0|	  g_warning ("specified class size for type '%s' is smaller than 'GTypeClass' size",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  947|      0|		     type_name);
  948|      0|	  return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  949|      0|	}
  950|     54|      if (pnode && info->class_size < pnode->data->class.class_size)
  ------------------
  |  Branch (950:11): [True: 46, False: 8]
  |  Branch (950:20): [True: 0, False: 46]
  ------------------
  951|      0|	{
  952|      0|	  g_warning ("specified class size for type '%s' is smaller "
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  953|      0|		     "than the parent type's '%s' class size",
  954|      0|		     type_name,
  955|      0|		     NODE_NAME (pnode));
  956|      0|	  return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  957|      0|	}
  958|     54|    }
  959|       |  /* check instance size */
  960|     90|  if (finfo->type_flags & G_TYPE_FLAG_INSTANTIATABLE)
  ------------------
  |  Branch (960:7): [True: 50, False: 40]
  ------------------
  961|     50|    {
  962|     50|      if (info->instance_size < sizeof (GTypeInstance))
  ------------------
  |  Branch (962:11): [True: 0, False: 50]
  ------------------
  963|      0|	{
  964|      0|	  g_warning ("specified instance size for type '%s' is smaller than 'GTypeInstance' size",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  965|      0|		     type_name);
  966|      0|	  return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  967|      0|	}
  968|     50|      if (pnode && info->instance_size < pnode->data->instance.instance_size)
  ------------------
  |  Branch (968:11): [True: 46, False: 4]
  |  Branch (968:20): [True: 0, False: 46]
  ------------------
  969|      0|	{
  970|      0|	  g_warning ("specified instance size for type '%s' is smaller "
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  971|      0|		     "than the parent type's '%s' instance size",
  972|      0|		     type_name,
  973|      0|		     NODE_NAME (pnode));
  974|      0|	  return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  975|      0|	}
  976|     50|    }
  977|       |  
  978|     90|  return TRUE;
  ------------------
  |  |  884|     90|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|     90|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  979|     90|}
gtype.c:type_data_make_W:
 1097|     92|{
 1098|     92|  TypeData *data;
 1099|     92|  GTypeValueTable *vtable = NULL;
 1100|     92|  guint vtable_size = 0;
 1101|       |  
 1102|     92|  g_assert (node->data == NULL && info != NULL);
  ------------------
  |  |  234|     92|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     92|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|     92|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|     92|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     92| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     92|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     92|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    276|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 92, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 92, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     92|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     92|   else                                         \
  |  |  |  |  |  | 1183|     92|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     92|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     92|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 92, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|     92|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|     92|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     92|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 92]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1103|       |  
 1104|     92|  if (!value_table)
  ------------------
  |  Branch (1104:7): [True: 54, False: 38]
  ------------------
 1105|     54|    {
 1106|     54|      TypeNode *pnode = lookup_type_node_I (NODE_PARENT_TYPE (node));
  ------------------
  |  |  255|     54|#define NODE_PARENT_TYPE(node)			(node->supers[1])
  ------------------
 1107|       |      
 1108|     54|      if (pnode)
  ------------------
  |  Branch (1108:11): [True: 50, False: 4]
  ------------------
 1109|     50|	vtable = pnode->data->common.value_table;
 1110|      4|      else
 1111|      4|	{
 1112|      4|          static const GTypeValueTable zero_vtable =
 1113|      4|            { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
 1114|       |	  
 1115|      4|	  value_table = &zero_vtable;
 1116|      4|	}
 1117|     54|    }
 1118|     92|  if (value_table)
  ------------------
  |  Branch (1118:7): [True: 42, False: 50]
  ------------------
 1119|     42|    {
 1120|       |      /* need to setup vtable_size since we have to allocate it with data in one chunk */
 1121|     42|      vtable_size = sizeof (GTypeValueTable);
 1122|     42|      if (value_table->collect_format)
  ------------------
  |  Branch (1122:11): [True: 38, False: 4]
  ------------------
 1123|     38|	vtable_size += strlen (value_table->collect_format);
 1124|     42|      if (value_table->lcopy_format)
  ------------------
  |  Branch (1124:11): [True: 38, False: 4]
  ------------------
 1125|     38|	vtable_size += strlen (value_table->lcopy_format);
 1126|     42|      vtable_size += 2;
 1127|     42|    }
 1128|       |   
 1129|     92|  if (node->is_instantiatable) /* careful, is_instantiatable is also is_classed */
  ------------------
  |  Branch (1129:7): [True: 50, False: 42]
  ------------------
 1130|     50|    {
 1131|     50|      TypeNode *pnode = lookup_type_node_I (NODE_PARENT_TYPE (node));
  ------------------
  |  |  255|     50|#define NODE_PARENT_TYPE(node)			(node->supers[1])
  ------------------
 1132|       |
 1133|     50|      data = g_malloc0 (sizeof (InstanceData) + vtable_size);
 1134|     50|      if (vtable_size)
  ------------------
  |  Branch (1134:11): [True: 4, False: 46]
  ------------------
 1135|      4|	vtable = G_STRUCT_MEMBER_P (data, sizeof (InstanceData));
  ------------------
  |  |  926|      4|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  ------------------
 1136|     50|      data->instance.class_size = info->class_size;
 1137|     50|      data->instance.class_init_base = info->base_init;
 1138|     50|      data->instance.class_finalize_base = info->base_finalize;
 1139|     50|      data->instance.class_init = info->class_init;
 1140|     50|      data->instance.class_finalize = info->class_finalize;
 1141|     50|      data->instance.class_data = info->class_data;
 1142|     50|      data->instance.class = NULL;
 1143|     50|      data->instance.init_state = UNINITIALIZED;
 1144|     50|      data->instance.instance_size = info->instance_size;
 1145|       |      /* We'll set the final value for data->instance.private size
 1146|       |       * after the parent class has been initialized
 1147|       |       */
 1148|     50|      data->instance.private_size = 0;
 1149|     50|      data->instance.class_private_size = 0;
 1150|     50|      if (pnode)
  ------------------
  |  Branch (1150:11): [True: 46, False: 4]
  ------------------
 1151|     46|        data->instance.class_private_size = pnode->data->instance.class_private_size;
 1152|     50|      data->instance.n_preallocs = MIN (info->n_preallocs, 1024);
  ------------------
  |  |  891|     50|#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (891:21): [True: 50, False: 0]
  |  |  ------------------
  ------------------
 1153|     50|      data->instance.instance_init = info->instance_init;
 1154|     50|    }
 1155|     42|  else if (node->is_classed) /* only classed */
  ------------------
  |  Branch (1155:12): [True: 4, False: 38]
  ------------------
 1156|      4|    {
 1157|      4|      TypeNode *pnode = lookup_type_node_I (NODE_PARENT_TYPE (node));
  ------------------
  |  |  255|      4|#define NODE_PARENT_TYPE(node)			(node->supers[1])
  ------------------
 1158|       |
 1159|      4|      data = g_malloc0 (sizeof (ClassData) + vtable_size);
 1160|      4|      if (vtable_size)
  ------------------
  |  Branch (1160:11): [True: 4, False: 0]
  ------------------
 1161|      4|	vtable = G_STRUCT_MEMBER_P (data, sizeof (ClassData));
  ------------------
  |  |  926|      4|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  ------------------
 1162|      4|      data->class.class_size = info->class_size;
 1163|      4|      data->class.class_init_base = info->base_init;
 1164|      4|      data->class.class_finalize_base = info->base_finalize;
 1165|      4|      data->class.class_init = info->class_init;
 1166|      4|      data->class.class_finalize = info->class_finalize;
 1167|      4|      data->class.class_data = info->class_data;
 1168|      4|      data->class.class = NULL;
 1169|      4|      data->class.class_private_size = 0;
 1170|      4|      if (pnode)
  ------------------
  |  Branch (1170:11): [True: 0, False: 4]
  ------------------
 1171|      0|        data->class.class_private_size = pnode->data->class.class_private_size;
 1172|      4|      data->class.init_state = UNINITIALIZED;
 1173|      4|    }
 1174|     38|  else if (NODE_IS_IFACE (node))
  ------------------
  |  |  260|     38|#define	NODE_IS_IFACE(node)			(NODE_FUNDAMENTAL_TYPE (node) == G_TYPE_INTERFACE)
  |  |  ------------------
  |  |  |  |  256|     38|#define NODE_FUNDAMENTAL_TYPE(node)		(node->supers[node->n_supers])
  |  |  ------------------
  |  |               #define	NODE_IS_IFACE(node)			(NODE_FUNDAMENTAL_TYPE (node) == G_TYPE_INTERFACE)
  |  |  ------------------
  |  |  |  |   71|     38|#define G_TYPE_INTERFACE		G_TYPE_MAKE_FUNDAMENTAL (2)
  |  |  |  |  ------------------
  |  |  |  |  |  |  226|     38|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  214|     38|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (260:31): [True: 4, False: 34]
  |  |  ------------------
  ------------------
 1175|      4|    {
 1176|      4|      data = g_malloc0 (sizeof (IFaceData) + vtable_size);
 1177|      4|      if (vtable_size)
  ------------------
  |  Branch (1177:11): [True: 2, False: 2]
  ------------------
 1178|      2|	vtable = G_STRUCT_MEMBER_P (data, sizeof (IFaceData));
  ------------------
  |  |  926|      2|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  ------------------
 1179|      4|      data->iface.vtable_size = info->class_size;
 1180|      4|      data->iface.vtable_init_base = info->base_init;
 1181|      4|      data->iface.vtable_finalize_base = info->base_finalize;
 1182|      4|      data->iface.dflt_init = info->class_init;
 1183|      4|      data->iface.dflt_finalize = info->class_finalize;
 1184|      4|      data->iface.dflt_data = info->class_data;
 1185|      4|      data->iface.dflt_vtable = NULL;
 1186|      4|    }
 1187|     34|  else if (NODE_IS_BOXED (node))
  ------------------
  |  |  259|     34|#define	NODE_IS_BOXED(node)			(NODE_FUNDAMENTAL_TYPE (node) == G_TYPE_BOXED)
  |  |  ------------------
  |  |  |  |  256|     34|#define NODE_FUNDAMENTAL_TYPE(node)		(node->supers[node->n_supers])
  |  |  ------------------
  |  |               #define	NODE_IS_BOXED(node)			(NODE_FUNDAMENTAL_TYPE (node) == G_TYPE_BOXED)
  |  |  ------------------
  |  |  |  |  170|     34|#define G_TYPE_BOXED			G_TYPE_MAKE_FUNDAMENTAL (18)
  |  |  |  |  ------------------
  |  |  |  |  |  |  226|     34|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  214|     34|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (259:31): [True: 4, False: 30]
  |  |  ------------------
  ------------------
 1188|      4|    {
 1189|      4|      data = g_malloc0 (sizeof (BoxedData) + vtable_size);
 1190|      4|      if (vtable_size)
  ------------------
  |  Branch (1190:11): [True: 4, False: 0]
  ------------------
 1191|      4|	vtable = G_STRUCT_MEMBER_P (data, sizeof (BoxedData));
  ------------------
  |  |  926|      4|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  ------------------
 1192|      4|    }
 1193|     30|  else
 1194|     30|    {
 1195|     30|      data = g_malloc0 (sizeof (CommonData) + vtable_size);
 1196|     30|      if (vtable_size)
  ------------------
  |  Branch (1196:11): [True: 28, False: 2]
  ------------------
 1197|     28|	vtable = G_STRUCT_MEMBER_P (data, sizeof (CommonData));
  ------------------
  |  |  926|     28|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  ------------------
 1198|     30|    }
 1199|       |  
 1200|     92|  node->data = data;
 1201|       |  
 1202|     92|  if (vtable_size)
  ------------------
  |  Branch (1202:7): [True: 42, False: 50]
  ------------------
 1203|     42|    {
 1204|     42|      gchar *p;
 1205|       |      
 1206|       |      /* we allocate the vtable and its strings together with the type data, so
 1207|       |       * children can take over their parent's vtable pointer, and we don't
 1208|       |       * need to worry freeing it or not when the child data is destroyed
 1209|       |       */
 1210|     42|      *vtable = *value_table;
 1211|     42|      p = G_STRUCT_MEMBER_P (vtable, sizeof (*vtable));
  ------------------
  |  |  926|     42|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  ------------------
 1212|     42|      p[0] = 0;
 1213|     42|      vtable->collect_format = p;
 1214|     42|      if (value_table->collect_format)
  ------------------
  |  Branch (1214:11): [True: 38, False: 4]
  ------------------
 1215|     38|	{
 1216|     38|	  strcat (p, value_table->collect_format);
 1217|     38|	  p += strlen (value_table->collect_format);
 1218|     38|	}
 1219|     42|      p++;
 1220|     42|      p[0] = 0;
 1221|     42|      vtable->lcopy_format = p;
 1222|     42|      if (value_table->lcopy_format)
  ------------------
  |  Branch (1222:11): [True: 38, False: 4]
  ------------------
 1223|     38|	strcat  (p, value_table->lcopy_format);
 1224|     42|    }
 1225|     92|  node->data->common.value_table = vtable;
 1226|     92|  node->mutatable_check_cache = (node->data->common.value_table->value_init != NULL &&
  ------------------
  |  Branch (1226:34): [True: 86, False: 6]
  ------------------
 1227|     86|				 !((G_TYPE_FLAG_VALUE_ABSTRACT | G_TYPE_FLAG_ABSTRACT) &
  ------------------
  |  Branch (1227:6): [True: 80, False: 6]
  ------------------
 1228|     86|				   GPOINTER_TO_UINT (type_get_qdata_L (node, static_quark_type_flags))));
  ------------------
  |  |  101|     86|#define GPOINTER_TO_UINT(p)	((guint) (gulong) (p))
  ------------------
 1229|       |  
 1230|     92|  g_assert (node->data->common.value_table != NULL); /* paranoid */
  ------------------
  |  |  234|     92|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     92|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|     92|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|     92|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     92| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     92|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     92|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     92|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 92, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     92|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     92|   else                                         \
  |  |  |  |  |  | 1183|     92|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     92|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     92|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 92, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|     92|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|     92|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     92|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 92]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1231|       |
 1232|     92|  g_atomic_int_set ((int *) &node->ref_count, 1);
  ------------------
  |  |  118|     92|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|     92|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  119|     92|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|     92|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  120|     92|    gint gais_temp = (gint) (newval);                                        \
  |  |  121|     92|    (void) (0 ? *(atomic) ^ (newval) : 1);                                   \
  |  |  ------------------
  |  |  |  Branch (121:13): [Folded, False: 92]
  |  |  ------------------
  |  |  122|     92|    __atomic_store ((gint *)(atomic), &gais_temp, __ATOMIC_SEQ_CST);         \
  |  |  123|     92|  }))
  ------------------
 1233|     92|}
gtype.c:check_value_table_I:
  837|     90|{
  838|     90|  if (!value_table)
  ------------------
  |  Branch (838:7): [True: 52, False: 38]
  ------------------
  839|     52|    return FALSE;
  ------------------
  |  |  880|     52|#define	FALSE	(0)
  ------------------
  840|     38|  else if (value_table->value_init == NULL)
  ------------------
  |  Branch (840:12): [True: 0, False: 38]
  ------------------
  841|      0|    {
  842|      0|      if (value_table->value_free || value_table->value_copy ||
  ------------------
  |  Branch (842:11): [True: 0, False: 0]
  |  Branch (842:38): [True: 0, False: 0]
  ------------------
  843|      0|	  value_table->value_peek_pointer ||
  ------------------
  |  Branch (843:4): [True: 0, False: 0]
  ------------------
  844|      0|	  value_table->collect_format || value_table->collect_value ||
  ------------------
  |  Branch (844:4): [True: 0, False: 0]
  |  Branch (844:35): [True: 0, False: 0]
  ------------------
  845|      0|	  value_table->lcopy_format || value_table->lcopy_value)
  ------------------
  |  Branch (845:4): [True: 0, False: 0]
  |  Branch (845:33): [True: 0, False: 0]
  ------------------
  846|      0|	g_warning ("cannot handle uninitializable values of type '%s'",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  847|      0|		   type_name);
  848|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  849|      0|    }
  850|     38|  else /* value_table->value_init != NULL */
  851|     38|    {
  852|     38|      if (!value_table->value_free)
  ------------------
  |  Branch (852:11): [True: 28, False: 10]
  ------------------
  853|     28|	{
  854|       |	  /* +++ optional +++
  855|       |	   * g_warning ("missing 'value_free()' for type '%s'", type_name);
  856|       |	   * return FALSE;
  857|       |	   */
  858|     28|	}
  859|     38|      if (!value_table->value_copy)
  ------------------
  |  Branch (859:11): [True: 0, False: 38]
  ------------------
  860|      0|	{
  861|      0|	  g_warning ("missing 'value_copy()' for type '%s'", type_name);
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  862|      0|	  return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  863|      0|	}
  864|     38|      if ((value_table->collect_format || value_table->collect_value) &&
  ------------------
  |  Branch (864:12): [True: 38, False: 0]
  |  Branch (864:43): [True: 0, False: 0]
  ------------------
  865|     38|	  (!value_table->collect_format || !value_table->collect_value))
  ------------------
  |  Branch (865:5): [True: 0, False: 38]
  |  Branch (865:37): [True: 0, False: 38]
  ------------------
  866|      0|	{
  867|      0|	  g_warning ("one of 'collect_format' and 'collect_value()' is unspecified for type '%s'",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  868|      0|		     type_name);
  869|      0|	  return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  870|      0|	}
  871|     38|      if (value_table->collect_format && !check_collect_format_I (value_table->collect_format))
  ------------------
  |  Branch (871:11): [True: 38, False: 0]
  |  Branch (871:42): [True: 0, False: 38]
  ------------------
  872|      0|	{
  873|      0|	  g_warning ("the '%s' specification for type '%s' is too long or invalid",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  874|      0|		     "collect_format",
  875|      0|		     type_name);
  876|      0|	  return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  877|      0|	}
  878|     38|      if ((value_table->lcopy_format || value_table->lcopy_value) &&
  ------------------
  |  Branch (878:12): [True: 38, False: 0]
  |  Branch (878:41): [True: 0, False: 0]
  ------------------
  879|     38|	  (!value_table->lcopy_format || !value_table->lcopy_value))
  ------------------
  |  Branch (879:5): [True: 0, False: 38]
  |  Branch (879:35): [True: 0, False: 38]
  ------------------
  880|      0|	{
  881|      0|	  g_warning ("one of 'lcopy_format' and 'lcopy_value()' is unspecified for type '%s'",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  882|      0|		     type_name);
  883|      0|	  return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  884|      0|	}
  885|     38|      if (value_table->lcopy_format && !check_collect_format_I (value_table->lcopy_format))
  ------------------
  |  Branch (885:11): [True: 38, False: 0]
  |  Branch (885:40): [True: 0, False: 38]
  ------------------
  886|      0|	{
  887|      0|	  g_warning ("the '%s' specification for type '%s' is too long or invalid",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  888|      0|		     "lcopy_format",
  889|      0|		     type_name);
  890|      0|	  return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  891|      0|	}
  892|     38|    }
  893|     38|  return TRUE;
  ------------------
  |  |  884|     38|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|     38|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  894|     90|}
gtype.c:check_collect_format_I:
  822|     76|{
  823|     76|  const gchar *p = collect_format;
  824|     76|  gchar valid_format[] = { G_VALUE_COLLECT_INT, G_VALUE_COLLECT_LONG,
  825|     76|			   G_VALUE_COLLECT_INT64, G_VALUE_COLLECT_DOUBLE,
  826|     76|			   G_VALUE_COLLECT_POINTER, 0 };
  827|       |  
  828|    152|  while (*p)
  ------------------
  |  Branch (828:10): [True: 76, False: 76]
  ------------------
  829|     76|    if (!strchr (valid_format, *p++))
  ------------------
  |  Branch (829:9): [True: 0, False: 76]
  ------------------
  830|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  831|     76|  return p - collect_format <= G_VALUE_COLLECT_FORMAT_MAX_LENGTH;
  ------------------
  |  |  286|     76|#define	G_VALUE_COLLECT_FORMAT_MAX_LENGTH	(8)
  ------------------
  832|     76|}
gtype.c:check_derivation_I:
  779|     52|{
  780|     52|  TypeNode *pnode;
  781|     52|  GTypeFundamentalInfo* finfo;
  782|       |  
  783|     52|  pnode = lookup_type_node_I (parent_type);
  784|     52|  if (!pnode)
  ------------------
  |  Branch (784:7): [True: 0, False: 52]
  ------------------
  785|      0|    {
  786|      0|      g_warning ("cannot derive type '%s' from invalid parent type '%s'",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  787|      0|		 type_name,
  788|      0|		 type_descriptive_name_I (parent_type));
  789|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  790|      0|    }
  791|     52|  finfo = type_node_fundamental_info_I (pnode);
  792|       |  /* ensure flat derivability */
  793|     52|  if (!(finfo->type_flags & G_TYPE_FLAG_DERIVABLE))
  ------------------
  |  Branch (793:7): [True: 0, False: 52]
  ------------------
  794|      0|    {
  795|      0|      g_warning ("cannot derive '%s' from non-derivable parent type '%s'",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  796|      0|		 type_name,
  797|      0|		 NODE_NAME (pnode));
  798|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  799|      0|    }
  800|       |  /* ensure deep derivability */
  801|     52|  if (parent_type != NODE_FUNDAMENTAL_TYPE (pnode) &&
  ------------------
  |  |  256|    104|#define NODE_FUNDAMENTAL_TYPE(node)		(node->supers[node->n_supers])
  ------------------
  |  Branch (801:7): [True: 0, False: 52]
  ------------------
  802|      0|      !(finfo->type_flags & G_TYPE_FLAG_DEEP_DERIVABLE))
  ------------------
  |  Branch (802:7): [True: 0, False: 0]
  ------------------
  803|      0|    {
  804|      0|      g_warning ("cannot derive '%s' from non-fundamental parent type '%s'",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  805|      0|		 type_name,
  806|      0|		 NODE_NAME (pnode));
  807|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  808|      0|    }
  809|     52|  if ((G_TYPE_FLAG_FINAL & GPOINTER_TO_UINT (type_get_qdata_L (pnode, static_quark_type_flags))) == G_TYPE_FLAG_FINAL)
  ------------------
  |  |  101|     52|#define GPOINTER_TO_UINT(p)	((guint) (gulong) (p))
  ------------------
  |  Branch (809:7): [True: 0, False: 52]
  ------------------
  810|      0|    {
  811|      0|      g_warning ("cannot derive '%s' from final parent type '%s'",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
  812|      0|                 type_name,
  813|      0|                 NODE_NAME (pnode));
  814|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
  815|      0|    }
  816|       |  
  817|     52|  return TRUE;
  ------------------
  |  |  884|     52|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|     52|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  818|     52|}
gtype.c:type_data_ref_Wm:
 1237|     52|{
 1238|     52|  if (!node->data)
  ------------------
  |  Branch (1238:7): [True: 0, False: 52]
  ------------------
 1239|      0|    {
 1240|      0|      TypeNode *pnode = lookup_type_node_I (NODE_PARENT_TYPE (node));
  ------------------
  |  |  255|      0|#define NODE_PARENT_TYPE(node)			(node->supers[1])
  ------------------
 1241|      0|      GTypeInfo tmp_info;
 1242|      0|      GTypeValueTable tmp_value_table;
 1243|       |      
 1244|      0|      g_assert (node->plugin != NULL);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1245|       |      
 1246|      0|      if (pnode)
  ------------------
  |  Branch (1246:11): [True: 0, False: 0]
  ------------------
 1247|      0|	{
 1248|      0|	  type_data_ref_Wm (pnode);
 1249|      0|	  if (node->data)
  ------------------
  |  Branch (1249:8): [True: 0, False: 0]
  ------------------
 1250|      0|	    INVALID_RECURSION ("g_type_plugin_*", node->plugin, NODE_NAME (node));
  ------------------
  |  |  133|      0|#define	INVALID_RECURSION(func, arg, type_name) G_STMT_START{ \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  134|      0|    static const gchar _action[] = " invalidly modified type ";  \
  |  |  135|      0|    gpointer _arg = (gpointer) (arg); const gchar *_tname = (type_name), *_fname = (func); \
  |  |  136|      0|    if (_arg) \
  |  |  ------------------
  |  |  |  Branch (136:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  137|      0|      g_error ("%s(%p)%s'%s'", _fname, _arg, _action, _tname); \
  |  |  ------------------
  |  |  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  |  |  346|      0|                        for (;;) ;                   \
  |  |  |  |  347|      0|                      } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  138|      0|    else \
  |  |  139|      0|      g_error ("%s()%s'%s'", _fname, _action, _tname); \
  |  |  ------------------
  |  |  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  |  |  346|      0|                        for (;;) ;                   \
  |  |  |  |  347|      0|                      } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  140|      0|}G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1251|      0|	}
 1252|       |      
 1253|      0|      memset (&tmp_info, 0, sizeof (tmp_info));
 1254|      0|      memset (&tmp_value_table, 0, sizeof (tmp_value_table));
 1255|       |      
 1256|      0|      G_WRITE_UNLOCK (&type_rw_lock);
  ------------------
  |  |  131|      0|#define G_WRITE_UNLOCK(rw_lock) g_rw_lock_writer_unlock (rw_lock)
  ------------------
 1257|      0|      g_type_plugin_use (node->plugin);
 1258|      0|      g_type_plugin_complete_type_info (node->plugin, NODE_TYPE (node), &tmp_info, &tmp_value_table);
  ------------------
  |  |  254|      0|#define NODE_TYPE(node)				(node->supers[0])
  ------------------
 1259|      0|      G_WRITE_LOCK (&type_rw_lock);
  ------------------
  |  |  130|      0|#define G_WRITE_LOCK(rw_lock)   g_rw_lock_writer_lock (rw_lock)
  ------------------
 1260|      0|      if (node->data)
  ------------------
  |  Branch (1260:11): [True: 0, False: 0]
  ------------------
 1261|      0|	INVALID_RECURSION ("g_type_plugin_*", node->plugin, NODE_NAME (node));
  ------------------
  |  |  133|      0|#define	INVALID_RECURSION(func, arg, type_name) G_STMT_START{ \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  134|      0|    static const gchar _action[] = " invalidly modified type ";  \
  |  |  135|      0|    gpointer _arg = (gpointer) (arg); const gchar *_tname = (type_name), *_fname = (func); \
  |  |  136|      0|    if (_arg) \
  |  |  ------------------
  |  |  |  Branch (136:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  137|      0|      g_error ("%s(%p)%s'%s'", _fname, _arg, _action, _tname); \
  |  |  ------------------
  |  |  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  |  |  346|      0|                        for (;;) ;                   \
  |  |  |  |  347|      0|                      } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  138|      0|    else \
  |  |  139|      0|      g_error ("%s()%s'%s'", _fname, _action, _tname); \
  |  |  ------------------
  |  |  |  |  342|      0|#define g_error(...)  G_STMT_START {                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |  343|      0|                        g_log (G_LOG_DOMAIN,         \
  |  |  |  |  344|      0|                               G_LOG_LEVEL_ERROR,    \
  |  |  |  |  345|      0|                               __VA_ARGS__);         \
  |  |  |  |  346|      0|                        for (;;) ;                   \
  |  |  |  |  347|      0|                      } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  140|      0|}G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1262|       |      
 1263|      0|      check_type_info_I (pnode, NODE_FUNDAMENTAL_TYPE (node), NODE_NAME (node), &tmp_info);
  ------------------
  |  |  256|      0|#define NODE_FUNDAMENTAL_TYPE(node)		(node->supers[node->n_supers])
  ------------------
                    check_type_info_I (pnode, NODE_FUNDAMENTAL_TYPE (node), NODE_NAME (node), &tmp_info);
  ------------------
  |  |  257|      0|#define NODE_NAME(node)				(g_quark_to_string (node->qname))
  ------------------
 1264|      0|      type_data_make_W (node, &tmp_info,
 1265|      0|			check_value_table_I (NODE_NAME (node),
  ------------------
  |  |  257|      0|#define NODE_NAME(node)				(g_quark_to_string (node->qname))
  ------------------
  |  Branch (1265:4): [True: 0, False: 0]
  ------------------
 1266|      0|					     &tmp_value_table) ? &tmp_value_table : NULL);
 1267|      0|    }
 1268|     52|  else
 1269|     52|    {
 1270|     52|      g_assert (NODE_REFCOUNT (node) > 0);
  ------------------
  |  |  234|     52|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     52|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|     52|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|     52|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     52| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     52|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     52|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    156|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [Folded, False: 52]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 52, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     52|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     52|   else                                         \
  |  |  |  |  |  | 1183|     52|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     52|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     52|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 52, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|     52|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|     52|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     52|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 52]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1271|       |      
 1272|     52|      g_atomic_int_inc ((int *) &node->ref_count);
  ------------------
  |  |  162|     52|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|     52|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|     52|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|     52|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  164|     52|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded, False: 52]
  |  |  ------------------
  |  |  165|     52|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  166|     52|  }))
  ------------------
 1273|     52|    }
 1274|     52|}
gtype.c:type_node_new_W:
  569|     52|{
  570|     52|  g_assert (pnode);
  ------------------
  |  |  234|     52|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     52|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|     52|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|     52|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     52| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     52|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     52|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     52|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 52, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     52|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     52|   else                                         \
  |  |  |  |  |  | 1183|     52|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     52|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     52|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 52, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|     52|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|     52|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     52|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 52]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  571|     52|  g_assert (pnode->n_supers < MAX_N_SUPERS);
  ------------------
  |  |  234|     52|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     52|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|     52|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|     52|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     52| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     52|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     52|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     52|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 52, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     52|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     52|   else                                         \
  |  |  |  |  |  | 1183|     52|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     52|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     52|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 52, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|     52|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|     52|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     52|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 52]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  572|     52|  g_assert (pnode->n_children < MAX_N_CHILDREN);
  ------------------
  |  |  234|     52|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     52|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|     52|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|     52|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     52| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     52|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     52|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     52|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 52, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     52|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     52|   else                                         \
  |  |  |  |  |  | 1183|     52|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     52|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     52|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 52, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|     52|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|     52|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     52|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 52]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  573|       |  
  574|     52|  return type_node_any_new_W (pnode, NODE_FUNDAMENTAL_TYPE (pnode), name, plugin, 0);
  ------------------
  |  |  256|     52|#define NODE_FUNDAMENTAL_TYPE(node)		(node->supers[node->n_supers])
  ------------------
  575|     52|}
gtype.c:type_data_ref_U:
 1278|     80|{
 1279|     80|  guint current;
 1280|       |
 1281|     80|  do {
 1282|     80|    current = NODE_REFCOUNT (node);
  ------------------
  |  |  258|     80|#define NODE_REFCOUNT(node)                     ((guint) g_atomic_int_get ((int *) &(node)->ref_count))
  |  |  ------------------
  |  |  |  |  110|     80|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|     80|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  111|     80|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |  824|     80|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  |  |  ------------------
  |  |  |  |  112|     80|    gint gaig_temp;                                                          \
  |  |  |  |  113|     80|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (113:13): [Folded, False: 80]
  |  |  |  |  ------------------
  |  |  |  |  114|     80|    __atomic_load ((gint *)(atomic), &gaig_temp, __ATOMIC_SEQ_CST);          \
  |  |  |  |  115|     80|    (gint) gaig_temp;                                                        \
  |  |  |  |  116|     80|  }))
  |  |  ------------------
  ------------------
 1283|       |
 1284|     80|    if (current < 1)
  ------------------
  |  Branch (1284:9): [True: 0, False: 80]
  ------------------
 1285|      0|      return FALSE;
  ------------------
  |  |  880|      0|#define	FALSE	(0)
  ------------------
 1286|     80|  } while (!g_atomic_int_compare_and_exchange ((int *) &node->ref_count, current, current + 1));
  ------------------
  |  |  185|     80|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|     80|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  186|     80|    gint gaicae_oldval = (oldval);                                           \
  |  |  187|     80|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|     80|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  188|     80|    (void) (0 ? *(atomic) ^ (newval) ^ (oldval) : 1);                        \
  |  |  ------------------
  |  |  |  Branch (188:13): [Folded, False: 80]
  |  |  ------------------
  |  |  189|     80|    __atomic_compare_exchange_n ((atomic), (void *) (&(gaicae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  ------------------
  |  |  |  |  880|     80|#define	FALSE	(0)
  |  |  ------------------
  |  |                   __atomic_compare_exchange_n ((atomic), (void *) (&(gaicae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  ------------------
  |  |  |  |  884|     80|#define	TRUE	(!FALSE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  880|     80|#define	FALSE	(0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   __atomic_compare_exchange_n ((atomic), (void *) (&(gaicae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  |  |  |  Branch (189:5): [True: 80, False: 0]
  |  |  ------------------
  |  |  190|     80|  }))
  ------------------
  |  Branch (1286:12): [True: 0, False: 80]
  ------------------
 1287|       |
 1288|     80|  return TRUE;
  ------------------
  |  |  884|     80|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  880|     80|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1289|     80|}
gtype.c:type_class_init_Wm:
 2180|     42|{
 2181|     42|  GSList *slist, *init_slist = NULL;
 2182|     42|  GTypeClass *class;
 2183|     42|  IFaceEntries *entries;
 2184|     42|  IFaceEntry *entry;
 2185|     42|  TypeNode *bnode, *pnode;
 2186|     42|  guint i;
 2187|       |  
 2188|       |  /* Accessing data->class will work for instantiatable types
 2189|       |   * too because ClassData is a subset of InstanceData
 2190|       |   */
 2191|     42|  g_assert (node->is_classed && node->data &&
  ------------------
  |  |  234|     42|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     42|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|     42|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|     42|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     42| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     42|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     42|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    462|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 42, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 42, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 42, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 42, False: 0]
  |  |  |  |  |  |  |  Branch (1180:8): [Folded, False: 42]
  |  |  |  |  |  |  |  Branch (1180:8): [True: 42, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     42|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     42|   else                                         \
  |  |  |  |  |  | 1183|     42|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     42|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     42|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 42, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|     42|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|     42|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     42|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 42]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2192|     42|	    node->data->class.class_size &&
 2193|     42|	    !node->data->class.class &&
 2194|     42|	    g_atomic_int_get (&node->data->class.init_state) == UNINITIALIZED);
 2195|     42|  if (node->data->class.class_private_size)
  ------------------
  |  Branch (2195:7): [True: 0, False: 42]
  ------------------
 2196|      0|    class = g_malloc0 (ALIGN_STRUCT (node->data->class.class_size) + node->data->class.class_private_size);
  ------------------
  |  |  163|      0|      ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
  |  |  ------------------
  |  |  |  |  161|      0|#define STRUCT_ALIGNMENT (2 * sizeof (gsize))
  |  |  ------------------
  |  |                     ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
  |  |  ------------------
  |  |  |  |  161|      0|#define STRUCT_ALIGNMENT (2 * sizeof (gsize))
  |  |  ------------------
  ------------------
 2197|     42|  else
 2198|     42|    class = g_malloc0 (node->data->class.class_size);
 2199|     42|  node->data->class.class = class;
 2200|     42|  g_atomic_int_set (&node->data->class.init_state, BASE_CLASS_INIT);
  ------------------
  |  |  118|     42|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|     42|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  119|     42|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|     42|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  120|     42|    gint gais_temp = (gint) (newval);                                        \
  |  |  121|     42|    (void) (0 ? *(atomic) ^ (newval) : 1);                                   \
  |  |  ------------------
  |  |  |  Branch (121:13): [Folded, False: 42]
  |  |  ------------------
  |  |  122|     42|    __atomic_store ((gint *)(atomic), &gais_temp, __ATOMIC_SEQ_CST);         \
  |  |  123|     42|  }))
  ------------------
 2201|       |  
 2202|     42|  if (pclass)
  ------------------
  |  Branch (2202:7): [True: 40, False: 2]
  ------------------
 2203|     40|    {
 2204|     40|      pnode = lookup_type_node_I (pclass->g_type);
 2205|       |
 2206|     40|      memcpy (class, pclass, pnode->data->class.class_size);
 2207|     40|      memcpy (G_STRUCT_MEMBER_P (class, ALIGN_STRUCT (node->data->class.class_size)), G_STRUCT_MEMBER_P (pclass, ALIGN_STRUCT (pnode->data->class.class_size)), pnode->data->class.class_private_size);
  ------------------
  |  |  926|     40|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  ------------------
                    memcpy (G_STRUCT_MEMBER_P (class, ALIGN_STRUCT (node->data->class.class_size)), G_STRUCT_MEMBER_P (pclass, ALIGN_STRUCT (pnode->data->class.class_size)), pnode->data->class.class_private_size);
  ------------------
  |  |  926|     40|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  ------------------
 2208|       |
 2209|     40|      if (node->is_instantiatable)
  ------------------
  |  Branch (2209:11): [True: 40, False: 0]
  ------------------
 2210|     40|	{
 2211|       |	  /* We need to initialize the private_size here rather than in
 2212|       |	   * type_data_make_W() since the class init for the parent
 2213|       |	   * class may have changed pnode->data->instance.private_size.
 2214|       |	   */
 2215|     40|	  node->data->instance.private_size = pnode->data->instance.private_size;
 2216|     40|	}
 2217|     40|    }
 2218|     42|  class->g_type = NODE_TYPE (node);
  ------------------
  |  |  254|     42|#define NODE_TYPE(node)				(node->supers[0])
  ------------------
 2219|       |  
 2220|     42|  G_WRITE_UNLOCK (&type_rw_lock);
  ------------------
  |  |  131|     42|#define G_WRITE_UNLOCK(rw_lock) g_rw_lock_writer_unlock (rw_lock)
  ------------------
 2221|       |  
 2222|       |  /* stack all base class initialization functions, so we
 2223|       |   * call them in ascending order.
 2224|       |   */
 2225|    124|  for (bnode = node; bnode; bnode = lookup_type_node_I (NODE_PARENT_TYPE (bnode)))
  ------------------
  |  |  255|     82|#define NODE_PARENT_TYPE(node)			(node->supers[1])
  ------------------
  |  Branch (2225:22): [True: 82, False: 42]
  ------------------
 2226|     82|    if (bnode->data->class.class_init_base)
  ------------------
  |  Branch (2226:9): [True: 42, False: 40]
  ------------------
 2227|     42|      init_slist = g_slist_prepend (init_slist, (gpointer) bnode->data->class.class_init_base);
 2228|     84|  for (slist = init_slist; slist; slist = slist->next)
  ------------------
  |  Branch (2228:28): [True: 42, False: 42]
  ------------------
 2229|     42|    {
 2230|     42|      GBaseInitFunc class_init_base = (GBaseInitFunc) slist->data;
 2231|       |      
 2232|     42|      class_init_base (class);
 2233|     42|    }
 2234|     42|  g_slist_free (init_slist);
 2235|       |  
 2236|     42|  G_WRITE_LOCK (&type_rw_lock);
  ------------------
  |  |  130|     42|#define G_WRITE_LOCK(rw_lock)   g_rw_lock_writer_lock (rw_lock)
  ------------------
 2237|       |
 2238|     42|  g_atomic_int_set (&node->data->class.init_state, BASE_IFACE_INIT);
  ------------------
  |  |  118|     42|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|     42|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  119|     42|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|     42|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  120|     42|    gint gais_temp = (gint) (newval);                                        \
  |  |  121|     42|    (void) (0 ? *(atomic) ^ (newval) : 1);                                   \
  |  |  ------------------
  |  |  |  Branch (121:13): [Folded, False: 42]
  |  |  ------------------
  |  |  122|     42|    __atomic_store ((gint *)(atomic), &gais_temp, __ATOMIC_SEQ_CST);         \
  |  |  123|     42|  }))
  ------------------
 2239|       |  
 2240|       |  /* Before we initialize the class, base initialize all interfaces, either
 2241|       |   * from parent, or through our holder info
 2242|       |   */
 2243|     42|  pnode = lookup_type_node_I (NODE_PARENT_TYPE (node));
  ------------------
  |  |  255|     42|#define NODE_PARENT_TYPE(node)			(node->supers[1])
  ------------------
 2244|       |
 2245|     42|  i = 0;
 2246|     42|  while ((entries = CLASSED_NODE_IFACES_ENTRIES_LOCKED (node)) != NULL &&
  ------------------
  |  |  262|     42|#define	CLASSED_NODE_IFACES_ENTRIES_LOCKED(node)(G_ATOMIC_ARRAY_GET_LOCKED(CLASSED_NODE_IFACES_ENTRIES((node)), IFaceEntries))
  |  |  ------------------
  |  |  |  |   44|     42|#define  G_ATOMIC_ARRAY_GET_LOCKED(_array, _type) ((_type *)((_array)->data))
  |  |  ------------------
  ------------------
  |  Branch (2246:10): [True: 0, False: 42]
  ------------------
 2247|      0|	  i < IFACE_ENTRIES_N_ENTRIES (entries))
  ------------------
  |  |  296|      0|#define IFACE_ENTRIES_N_ENTRIES(_entries) ( (G_ATOMIC_ARRAY_DATA_SIZE((_entries)) - IFACE_ENTRIES_HEADER_SIZE) / sizeof(IFaceEntry) )
  |  |  ------------------
  |  |  |  |   30|      0|#define G_ATOMIC_ARRAY_DATA_SIZE(mem) (*((gsize *) (mem) - 1))
  |  |  ------------------
  |  |               #define IFACE_ENTRIES_N_ENTRIES(_entries) ( (G_ATOMIC_ARRAY_DATA_SIZE((_entries)) - IFACE_ENTRIES_HEADER_SIZE) / sizeof(IFaceEntry) )
  |  |  ------------------
  |  |  |  |  295|      0|#define IFACE_ENTRIES_HEADER_SIZE (sizeof(IFaceEntries) - sizeof(IFaceEntry))
  |  |  ------------------
  ------------------
  |  Branch (2247:4): [True: 0, False: 0]
  ------------------
 2248|      0|    {
 2249|      0|      entry = &entries->entry[i];
 2250|      0|      while (i < IFACE_ENTRIES_N_ENTRIES (entries) &&
  ------------------
  |  |  296|      0|#define IFACE_ENTRIES_N_ENTRIES(_entries) ( (G_ATOMIC_ARRAY_DATA_SIZE((_entries)) - IFACE_ENTRIES_HEADER_SIZE) / sizeof(IFaceEntry) )
  |  |  ------------------
  |  |  |  |   30|      0|#define G_ATOMIC_ARRAY_DATA_SIZE(mem) (*((gsize *) (mem) - 1))
  |  |  ------------------
  |  |               #define IFACE_ENTRIES_N_ENTRIES(_entries) ( (G_ATOMIC_ARRAY_DATA_SIZE((_entries)) - IFACE_ENTRIES_HEADER_SIZE) / sizeof(IFaceEntry) )
  |  |  ------------------
  |  |  |  |  295|      0|#define IFACE_ENTRIES_HEADER_SIZE (sizeof(IFaceEntries) - sizeof(IFaceEntry))
  |  |  ------------------
  ------------------
  |  Branch (2250:14): [True: 0, False: 0]
  ------------------
 2251|      0|	     entry->init_state == IFACE_INIT)
  ------------------
  |  Branch (2251:7): [True: 0, False: 0]
  ------------------
 2252|      0|	{
 2253|      0|	  entry++;
 2254|      0|	  i++;
 2255|      0|	}
 2256|       |
 2257|      0|      if (i == IFACE_ENTRIES_N_ENTRIES (entries))
  ------------------
  |  |  296|      0|#define IFACE_ENTRIES_N_ENTRIES(_entries) ( (G_ATOMIC_ARRAY_DATA_SIZE((_entries)) - IFACE_ENTRIES_HEADER_SIZE) / sizeof(IFaceEntry) )
  |  |  ------------------
  |  |  |  |   30|      0|#define G_ATOMIC_ARRAY_DATA_SIZE(mem) (*((gsize *) (mem) - 1))
  |  |  ------------------
  |  |               #define IFACE_ENTRIES_N_ENTRIES(_entries) ( (G_ATOMIC_ARRAY_DATA_SIZE((_entries)) - IFACE_ENTRIES_HEADER_SIZE) / sizeof(IFaceEntry) )
  |  |  ------------------
  |  |  |  |  295|      0|#define IFACE_ENTRIES_HEADER_SIZE (sizeof(IFaceEntries) - sizeof(IFaceEntry))
  |  |  ------------------
  ------------------
  |  Branch (2257:11): [True: 0, False: 0]
  ------------------
 2258|      0|	break;
 2259|       |
 2260|      0|      if (!type_iface_vtable_base_init_Wm (lookup_type_node_I (entry->iface_type), node))
  ------------------
  |  Branch (2260:11): [True: 0, False: 0]
  ------------------
 2261|      0|	{
 2262|      0|	  guint j;
 2263|      0|	  IFaceEntries *pentries = CLASSED_NODE_IFACES_ENTRIES_LOCKED (pnode);
  ------------------
  |  |  262|      0|#define	CLASSED_NODE_IFACES_ENTRIES_LOCKED(node)(G_ATOMIC_ARRAY_GET_LOCKED(CLASSED_NODE_IFACES_ENTRIES((node)), IFaceEntries))
  |  |  ------------------
  |  |  |  |   44|      0|#define  G_ATOMIC_ARRAY_GET_LOCKED(_array, _type) ((_type *)((_array)->data))
  |  |  ------------------
  ------------------
 2264|       |	  
 2265|       |	  /* need to get this interface from parent, type_iface_vtable_base_init_Wm()
 2266|       |	   * doesn't modify write lock upon FALSE, so entry is still valid; 
 2267|       |	   */
 2268|      0|	  g_assert (pnode != NULL);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2269|       |
 2270|      0|	  if (pentries)
  ------------------
  |  Branch (2270:8): [True: 0, False: 0]
  ------------------
 2271|      0|	    for (j = 0; j < IFACE_ENTRIES_N_ENTRIES (pentries); j++)
  ------------------
  |  |  296|      0|#define IFACE_ENTRIES_N_ENTRIES(_entries) ( (G_ATOMIC_ARRAY_DATA_SIZE((_entries)) - IFACE_ENTRIES_HEADER_SIZE) / sizeof(IFaceEntry) )
  |  |  ------------------
  |  |  |  |   30|      0|#define G_ATOMIC_ARRAY_DATA_SIZE(mem) (*((gsize *) (mem) - 1))
  |  |  ------------------
  |  |               #define IFACE_ENTRIES_N_ENTRIES(_entries) ( (G_ATOMIC_ARRAY_DATA_SIZE((_entries)) - IFACE_ENTRIES_HEADER_SIZE) / sizeof(IFaceEntry) )
  |  |  ------------------
  |  |  |  |  295|      0|#define IFACE_ENTRIES_HEADER_SIZE (sizeof(IFaceEntries) - sizeof(IFaceEntry))
  |  |  ------------------
  ------------------
  |  Branch (2271:18): [True: 0, False: 0]
  ------------------
 2272|      0|	      {
 2273|      0|		IFaceEntry *pentry = &pentries->entry[j];
 2274|       |
 2275|      0|		if (pentry->iface_type == entry->iface_type)
  ------------------
  |  Branch (2275:7): [True: 0, False: 0]
  ------------------
 2276|      0|		  {
 2277|      0|		    entry->vtable = pentry->vtable;
 2278|      0|		    entry->init_state = INITIALIZED;
 2279|      0|		    break;
 2280|      0|		  }
 2281|      0|	      }
 2282|      0|	  g_assert (entry->vtable != NULL);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2283|      0|	}
 2284|       |
 2285|       |      /* If the write lock was released, additional interface entries might
 2286|       |       * have been inserted into CLASSED_NODE_IFACES_ENTRIES (node); they'll
 2287|       |       * be base-initialized when inserted, so we don't have to worry that
 2288|       |       * we might miss them. Uninitialized entries can only be moved higher
 2289|       |       * when new ones are inserted.
 2290|       |       */
 2291|      0|      i++;
 2292|      0|    }
 2293|       |  
 2294|     42|  g_atomic_int_set (&node->data->class.init_state, CLASS_INIT);
  ------------------
  |  |  118|     42|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|     42|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  119|     42|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|     42|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  120|     42|    gint gais_temp = (gint) (newval);                                        \
  |  |  121|     42|    (void) (0 ? *(atomic) ^ (newval) : 1);                                   \
  |  |  ------------------
  |  |  |  Branch (121:13): [Folded, False: 42]
  |  |  ------------------
  |  |  122|     42|    __atomic_store ((gint *)(atomic), &gais_temp, __ATOMIC_SEQ_CST);         \
  |  |  123|     42|  }))
  ------------------
 2295|       |  
 2296|     42|  G_WRITE_UNLOCK (&type_rw_lock);
  ------------------
  |  |  131|     42|#define G_WRITE_UNLOCK(rw_lock) g_rw_lock_writer_unlock (rw_lock)
  ------------------
 2297|       |
 2298|     42|  if (node->data->class.class_init)
  ------------------
  |  Branch (2298:7): [True: 42, False: 0]
  ------------------
 2299|     42|    node->data->class.class_init (class, (gpointer) node->data->class.class_data);
 2300|       |  
 2301|     42|  G_WRITE_LOCK (&type_rw_lock);
  ------------------
  |  |  130|     42|#define G_WRITE_LOCK(rw_lock)   g_rw_lock_writer_lock (rw_lock)
  ------------------
 2302|       |  
 2303|     42|  g_atomic_int_set (&node->data->class.init_state, IFACE_INIT);
  ------------------
  |  |  118|     42|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|     42|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  119|     42|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|     42|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  120|     42|    gint gais_temp = (gint) (newval);                                        \
  |  |  121|     42|    (void) (0 ? *(atomic) ^ (newval) : 1);                                   \
  |  |  ------------------
  |  |  |  Branch (121:13): [Folded, False: 42]
  |  |  ------------------
  |  |  122|     42|    __atomic_store ((gint *)(atomic), &gais_temp, __ATOMIC_SEQ_CST);         \
  |  |  123|     42|  }))
  ------------------
 2304|       |  
 2305|       |  /* finish initializing the interfaces through our holder info.
 2306|       |   * inherited interfaces are already init_state == INITIALIZED, because
 2307|       |   * they either got setup in the above base_init loop, or during
 2308|       |   * class_init from within type_add_interface_Wm() for this or
 2309|       |   * an ancestor type.
 2310|       |   */
 2311|     42|  i = 0;
 2312|     42|  while ((entries = CLASSED_NODE_IFACES_ENTRIES_LOCKED (node)) != NULL)
  ------------------
  |  |  262|     42|#define	CLASSED_NODE_IFACES_ENTRIES_LOCKED(node)(G_ATOMIC_ARRAY_GET_LOCKED(CLASSED_NODE_IFACES_ENTRIES((node)), IFaceEntries))
  |  |  ------------------
  |  |  |  |   44|     42|#define  G_ATOMIC_ARRAY_GET_LOCKED(_array, _type) ((_type *)((_array)->data))
  |  |  ------------------
  ------------------
  |  Branch (2312:10): [True: 0, False: 42]
  ------------------
 2313|      0|    {
 2314|      0|      entry = &entries->entry[i];
 2315|      0|      while (i < IFACE_ENTRIES_N_ENTRIES (entries) &&
  ------------------
  |  |  296|      0|#define IFACE_ENTRIES_N_ENTRIES(_entries) ( (G_ATOMIC_ARRAY_DATA_SIZE((_entries)) - IFACE_ENTRIES_HEADER_SIZE) / sizeof(IFaceEntry) )
  |  |  ------------------
  |  |  |  |   30|      0|#define G_ATOMIC_ARRAY_DATA_SIZE(mem) (*((gsize *) (mem) - 1))
  |  |  ------------------
  |  |               #define IFACE_ENTRIES_N_ENTRIES(_entries) ( (G_ATOMIC_ARRAY_DATA_SIZE((_entries)) - IFACE_ENTRIES_HEADER_SIZE) / sizeof(IFaceEntry) )
  |  |  ------------------
  |  |  |  |  295|      0|#define IFACE_ENTRIES_HEADER_SIZE (sizeof(IFaceEntries) - sizeof(IFaceEntry))
  |  |  ------------------
  ------------------
  |  Branch (2315:14): [True: 0, False: 0]
  ------------------
 2316|      0|	     entry->init_state == INITIALIZED)
  ------------------
  |  Branch (2316:7): [True: 0, False: 0]
  ------------------
 2317|      0|	{
 2318|      0|	  entry++;
 2319|      0|	  i++;
 2320|      0|	}
 2321|       |
 2322|      0|      if (i == IFACE_ENTRIES_N_ENTRIES (entries))
  ------------------
  |  |  296|      0|#define IFACE_ENTRIES_N_ENTRIES(_entries) ( (G_ATOMIC_ARRAY_DATA_SIZE((_entries)) - IFACE_ENTRIES_HEADER_SIZE) / sizeof(IFaceEntry) )
  |  |  ------------------
  |  |  |  |   30|      0|#define G_ATOMIC_ARRAY_DATA_SIZE(mem) (*((gsize *) (mem) - 1))
  |  |  ------------------
  |  |               #define IFACE_ENTRIES_N_ENTRIES(_entries) ( (G_ATOMIC_ARRAY_DATA_SIZE((_entries)) - IFACE_ENTRIES_HEADER_SIZE) / sizeof(IFaceEntry) )
  |  |  ------------------
  |  |  |  |  295|      0|#define IFACE_ENTRIES_HEADER_SIZE (sizeof(IFaceEntries) - sizeof(IFaceEntry))
  |  |  ------------------
  ------------------
  |  Branch (2322:11): [True: 0, False: 0]
  ------------------
 2323|      0|	break;
 2324|       |
 2325|      0|      type_iface_vtable_iface_init_Wm (lookup_type_node_I (entry->iface_type), node);
 2326|       |      
 2327|       |      /* As in the loop above, additional initialized entries might be inserted
 2328|       |       * if the write lock is released, but that's harmless because the entries
 2329|       |       * we need to initialize only move higher in the list.
 2330|       |       */
 2331|      0|      i++;
 2332|      0|    }
 2333|       |  
 2334|       |  g_atomic_int_set (&node->data->class.init_state, INITIALIZED);
  ------------------
  |  |  118|     42|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|     42|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  119|     42|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|     42|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  120|     42|    gint gais_temp = (gint) (newval);                                        \
  |  |  121|     42|    (void) (0 ? *(atomic) ^ (newval) : 1);                                   \
  |  |  ------------------
  |  |  |  Branch (121:13): [Folded, False: 42]
  |  |  ------------------
  |  |  122|     42|    __atomic_store ((gint *)(atomic), &gais_temp, __ATOMIC_SEQ_CST);         \
  |  |  123|     42|  }))
  ------------------
 2335|     42|}
gtype.c:type_data_unref_U:
 2489|     80|{
 2490|     80|  guint current;
 2491|       |
 2492|     80|  do {
 2493|     80|    current = NODE_REFCOUNT (node);
  ------------------
  |  |  258|     80|#define NODE_REFCOUNT(node)                     ((guint) g_atomic_int_get ((int *) &(node)->ref_count))
  |  |  ------------------
  |  |  |  |  110|     80|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|     80|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  111|     80|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |  824|     80|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  |  |  ------------------
  |  |  |  |  112|     80|    gint gaig_temp;                                                          \
  |  |  |  |  113|     80|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (113:13): [Folded, False: 80]
  |  |  |  |  ------------------
  |  |  |  |  114|     80|    __atomic_load ((gint *)(atomic), &gaig_temp, __ATOMIC_SEQ_CST);          \
  |  |  |  |  115|     80|    (gint) gaig_temp;                                                        \
  |  |  |  |  116|     80|  }))
  |  |  ------------------
  ------------------
 2494|       |
 2495|     80|    if (current <= 1)
  ------------------
  |  Branch (2495:9): [True: 0, False: 80]
  ------------------
 2496|      0|    {
 2497|      0|      if (!node->plugin)
  ------------------
  |  Branch (2497:11): [True: 0, False: 0]
  ------------------
 2498|      0|	{
 2499|      0|	  g_warning ("static type '%s' unreferenced too often",
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 2500|      0|		     NODE_NAME (node));
 2501|      0|	  return;
 2502|      0|	}
 2503|      0|      else
 2504|      0|        {
 2505|       |          /* This is the last reference of a type from a plugin.  We are
 2506|       |           * experimentally disabling support for unloading type
 2507|       |           * plugins, so don't allow the last ref to drop.
 2508|       |           */
 2509|      0|          return;
 2510|      0|        }
 2511|       |
 2512|      0|      g_assert (current > 0);
  ------------------
  |  |  234|      0|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      0|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      0|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      0| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      0|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      0|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      0|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      0|   else                                         \
  |  |  |  |  |  | 1183|      0|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      0|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      0|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      0|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      0|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2513|       |
 2514|      0|      g_rec_mutex_lock (&class_init_rec_mutex); /* required locking order: 1) class_init_rec_mutex, 2) type_rw_lock */
 2515|      0|      G_WRITE_LOCK (&type_rw_lock);
  ------------------
  |  |  130|      0|#define G_WRITE_LOCK(rw_lock)   g_rw_lock_writer_lock (rw_lock)
  ------------------
 2516|      0|      type_data_last_unref_Wm (node, uncached);
 2517|      0|      G_WRITE_UNLOCK (&type_rw_lock);
  ------------------
  |  |  131|      0|#define G_WRITE_UNLOCK(rw_lock) g_rw_lock_writer_unlock (rw_lock)
  ------------------
 2518|      0|      g_rec_mutex_unlock (&class_init_rec_mutex);
 2519|      0|      return;
 2520|      0|    }
 2521|     80|  } while (!g_atomic_int_compare_and_exchange ((int *) &node->ref_count, current, current - 1));
  ------------------
  |  |  185|     80|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   62|     80|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  186|     80|    gint gaicae_oldval = (oldval);                                           \
  |  |  187|     80|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  824|     80|#define G_STATIC_ASSERT(expr) _Static_assert (expr, "Expression evaluates to false")
  |  |  ------------------
  |  |  188|     80|    (void) (0 ? *(atomic) ^ (newval) ^ (oldval) : 1);                        \
  |  |  ------------------
  |  |  |  Branch (188:13): [Folded, False: 80]
  |  |  ------------------
  |  |  189|     80|    __atomic_compare_exchange_n ((atomic), (void *) (&(gaicae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  ------------------
  |  |  |  |  880|     80|#define	FALSE	(0)
  |  |  ------------------
  |  |                   __atomic_compare_exchange_n ((atomic), (void *) (&(gaicae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  ------------------
  |  |  |  |  884|     80|#define	TRUE	(!FALSE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  880|     80|#define	FALSE	(0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   __atomic_compare_exchange_n ((atomic), (void *) (&(gaicae_oldval)), (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
  |  |  ------------------
  |  |  |  |  880|      0|#define	FALSE	(0)
  |  |  ------------------
  |  |  |  Branch (189:5): [True: 80, False: 0]
  |  |  ------------------
  |  |  190|     80|  }))
  ------------------
  |  Branch (2521:12): [True: 0, False: 80]
  ------------------
 2522|     80|}
gtype.c:type_get_qdata_L:
 3712|    228|{
 3713|    228|  GData *gdata = node->global_gdata;
 3714|       |  
 3715|    228|  if (quark && gdata && gdata->n_qdatas)
  ------------------
  |  Branch (3715:7): [True: 228, False: 0]
  |  Branch (3715:16): [True: 136, False: 92]
  |  Branch (3715:25): [True: 136, False: 0]
  ------------------
 3716|    136|    {
 3717|    136|      QData *qdatas = gdata->qdatas - 1;
 3718|    136|      guint n_qdatas = gdata->n_qdatas;
 3719|       |      
 3720|    136|      do
 3721|    136|	{
 3722|    136|	  guint i;
 3723|    136|	  QData *check;
 3724|       |	  
 3725|    136|	  i = (n_qdatas + 1) / 2;
 3726|    136|	  check = qdatas + i;
 3727|    136|	  if (quark == check->quark)
  ------------------
  |  Branch (3727:8): [True: 136, False: 0]
  ------------------
 3728|    136|	    return check->data;
 3729|      0|	  else if (quark > check->quark)
  ------------------
  |  Branch (3729:13): [True: 0, False: 0]
  ------------------
 3730|      0|	    {
 3731|      0|	      n_qdatas -= i;
 3732|      0|	      qdatas = check;
 3733|      0|	    }
 3734|      0|	  else /* if (quark < check->quark) */
 3735|      0|	    n_qdatas = i - 1;
 3736|    136|	}
 3737|    136|      while (n_qdatas);
  ------------------
  |  Branch (3737:14): [True: 0, False: 0]
  ------------------
 3738|    136|    }
 3739|     92|  return NULL;
 3740|    228|}
gtype.c:type_set_qdata_W:
 3782|     90|{
 3783|     90|  GData *gdata;
 3784|     90|  QData *qdata;
 3785|     90|  guint i;
 3786|       |  
 3787|       |  /* setup qdata list if necessary */
 3788|     90|  if (!node->global_gdata)
  ------------------
  |  Branch (3788:7): [True: 90, False: 0]
  ------------------
 3789|     90|    node->global_gdata = g_new0 (GData, 1);
  ------------------
  |  |  316|     90|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  244|     90|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|     90|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  245|     90|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  246|     90|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  247|     90|	  gpointer __p;						\
  |  |  |  |  248|     90|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (248:8): [True: 0, False: 90]
  |  |  |  |  ------------------
  |  |  |  |  249|     90|	    __p = g_##func (__n);				\
  |  |  |  |  250|     90|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (250:13): [True: 90, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  251|     90|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|     90|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|     90|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (251:14): [True: 0, False: 90]
  |  |  |  |  |  Branch (251:26): [True: 90, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  252|     90|	    __p = g_##func (__n * __s);				\
  |  |  |  |  253|     90|	  else							\
  |  |  |  |  254|     90|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  255|     90|	  __p;							\
  |  |  |  |  256|     90|	}))
  |  |  ------------------
  ------------------
 3790|     90|  gdata = node->global_gdata;
 3791|       |  
 3792|       |  /* try resetting old data */
 3793|     90|  qdata = gdata->qdatas;
 3794|     90|  for (i = 0; i < gdata->n_qdatas; i++)
  ------------------
  |  Branch (3794:15): [True: 0, False: 90]
  ------------------
 3795|      0|    if (qdata[i].quark == quark)
  ------------------
  |  Branch (3795:9): [True: 0, False: 0]
  ------------------
 3796|      0|      {
 3797|      0|	qdata[i].data = data;
 3798|      0|	return;
 3799|      0|      }
 3800|       |  
 3801|       |  /* add new entry */
 3802|     90|  gdata->n_qdatas++;
 3803|     90|  gdata->qdatas = g_renew (QData, gdata->qdatas, gdata->n_qdatas);
  ------------------
  |  |  330|     90|#define g_renew(struct_type, mem, n_structs)		_G_RENEW (struct_type, mem, n_structs, realloc)
  |  |  ------------------
  |  |  |  |  258|     90|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|     90|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  259|     90|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  260|     90|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  261|     90|	  gpointer __p = (gpointer) (mem);			\
  |  |  |  |  262|     90|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (262:8): [True: 0, False: 90]
  |  |  |  |  ------------------
  |  |  |  |  263|     90|	    __p = g_##func (__p, __n);				\
  |  |  |  |  264|     90|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (264:13): [True: 0, False: 90]
  |  |  |  |  ------------------
  |  |  |  |  265|     90|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|#define G_MAXSIZE	G_MAXULONG
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   40|      0|#define G_MAXULONG	ULONG_MAX
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (265:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (265:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  266|     90|	    __p = g_##func (__p, __n * __s);			\
  |  |  |  |  267|     90|	  else							\
  |  |  |  |  268|     90|	    __p = g_##func##_n (__p, __n, __s);			\
  |  |  |  |  269|     90|	  __p;							\
  |  |  |  |  270|     90|	}))
  |  |  ------------------
  ------------------
 3804|     90|  qdata = gdata->qdatas;
 3805|     90|  for (i = 0; i < gdata->n_qdatas - 1; i++)
  ------------------
  |  Branch (3805:15): [True: 0, False: 90]
  ------------------
 3806|      0|    if (qdata[i].quark > quark)
  ------------------
  |  Branch (3806:9): [True: 0, False: 0]
  ------------------
 3807|      0|      break;
 3808|     90|  memmove (qdata + i + 1, qdata + i, sizeof (qdata[0]) * (gdata->n_qdatas - i - 1));
 3809|     90|  qdata[i].quark = quark;
 3810|     90|  qdata[i].data = data;
 3811|     90|}
gtype.c:type_add_flags_W:
 3844|     90|{
 3845|     90|  guint dflags;
 3846|       |  
 3847|     90|  g_return_if_fail ((flags & ~TYPE_FLAG_MASK) == 0);
  ------------------
  |  |  639|     90|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     90|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|     90|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     90|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     90| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     90|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     90|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     90|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 90, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     90|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     90|   else                                         \
  |  |  |  |  |  | 1183|     90|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     90|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     90|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 90, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|     90|      { } \
  |  |  642|     90|    else \
  |  |  643|     90|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|     90|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     90|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3848|     90|  g_return_if_fail (node != NULL);
  ------------------
  |  |  639|     90|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|     90|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|     90|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|     90|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|     90| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     90|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|     90|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|     90|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 90, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|     90|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|     90|   else                                         \
  |  |  |  |  |  | 1183|     90|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|     90|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|     90|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 90, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|     90|      { } \
  |  |  642|     90|    else \
  |  |  643|     90|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|     90|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|     90|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3849|       |  
 3850|     90|  if ((flags & TYPE_FLAG_MASK) && node->is_classed && node->data && node->data->class.class)
  ------------------
  |  |  148|     90|#define	TYPE_FLAG_MASK		   (G_TYPE_FLAG_ABSTRACT | G_TYPE_FLAG_VALUE_ABSTRACT | G_TYPE_FLAG_FINAL)
  ------------------
  |  Branch (3850:7): [True: 8, False: 82]
  |  Branch (3850:35): [True: 6, False: 2]
  |  Branch (3850:55): [True: 0, False: 6]
  |  Branch (3850:69): [True: 0, False: 0]
  ------------------
 3851|      0|    g_warning ("tagging type '%s' as abstract after class initialization", NODE_NAME (node));
  ------------------
  |  |  354|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  355|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  356|      0|                               __VA_ARGS__)
  ------------------
 3852|     90|  dflags = GPOINTER_TO_UINT (type_get_qdata_L (node, static_quark_type_flags));
  ------------------
  |  |  101|     90|#define GPOINTER_TO_UINT(p)	((guint) (gulong) (p))
  ------------------
 3853|     90|  dflags |= flags;
 3854|     90|  type_set_qdata_W (node, static_quark_type_flags, GUINT_TO_POINTER (dflags));
  ------------------
  |  |  104|     90|#define GUINT_TO_POINTER(u)	((gpointer) (gulong) (u))
  ------------------
 3855|     90|}
gtype.c:type_node_fundamental_info_I:
  531|    184|{
  532|    184|  GType ftype = NODE_FUNDAMENTAL_TYPE (node);
  ------------------
  |  |  256|    184|#define NODE_FUNDAMENTAL_TYPE(node)		(node->supers[node->n_supers])
  ------------------
  533|       |  
  534|    184|  if (ftype != NODE_TYPE (node))
  ------------------
  |  |  254|    184|#define NODE_TYPE(node)				(node->supers[0])
  ------------------
  |  Branch (534:7): [True: 0, False: 184]
  ------------------
  535|      0|    node = lookup_type_node_I (ftype);
  536|       |  
  537|    184|  return node ? G_STRUCT_MEMBER_P (node, -SIZEOF_FUNDAMENTAL_INFO) : NULL;
  ------------------
  |  |  926|    736|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  |  |  |  Branch (926:50): [Folded, False: 184]
  |  |  |  Branch (926:50): [Folded, False: 0]
  |  |  |  Branch (926:50): [Folded, False: 184]
  |  |  ------------------
  ------------------
  |  Branch (537:10): [True: 184, False: 0]
  ------------------
  538|    184|}
gtype.c:gobject_init:
 4433|      2|{
 4434|      2|  const gchar *env_string;
 4435|      2|  GTypeInfo info;
 4436|      2|  TypeNode *node;
 4437|      2|  GType type G_GNUC_UNUSED  /* when compiling with G_DISABLE_ASSERT */;
 4438|       |
 4439|       |  /* Ensure GLib is initialized first, see
 4440|       |   * https://bugzilla.gnome.org/show_bug.cgi?id=756139
 4441|       |   */
 4442|      2|  GLIB_PRIVATE_CALL (glib_init) ();
  ------------------
  |  |  132|      2|#define GLIB_PRIVATE_CALL(symbol) (glib__private__()->symbol)
  ------------------
 4443|       |
 4444|      2|  G_WRITE_LOCK (&type_rw_lock);
  ------------------
  |  |  130|      2|#define G_WRITE_LOCK(rw_lock)   g_rw_lock_writer_lock (rw_lock)
  ------------------
 4445|       |
 4446|       |  /* setup GObject library wide debugging flags */
 4447|      2|  env_string = g_getenv ("GOBJECT_DEBUG");
 4448|      2|  if (env_string != NULL)
  ------------------
  |  Branch (4448:7): [True: 0, False: 2]
  ------------------
 4449|      0|    {
 4450|      0|      GDebugKey debug_keys[] = {
 4451|      0|        { "objects", G_TYPE_DEBUG_OBJECTS },
 4452|      0|        { "instance-count", G_TYPE_DEBUG_INSTANCE_COUNT },
 4453|      0|        { "signals", G_TYPE_DEBUG_SIGNALS },
 4454|      0|      };
 4455|       |
 4456|      0|      _g_type_debug_flags = g_parse_debug_string (env_string, debug_keys, G_N_ELEMENTS (debug_keys));
  ------------------
  |  |  906|      0|#define G_N_ELEMENTS(arr)		(sizeof (arr) / sizeof ((arr)[0]))
  ------------------
 4457|      0|    }
 4458|       |
 4459|       |  /* quarks */
 4460|      2|  static_quark_type_flags = g_quark_from_static_string ("-g-type-private--GTypeFlags");
 4461|      2|  static_quark_iface_holder = g_quark_from_static_string ("-g-type-private--IFaceHolder");
 4462|      2|  static_quark_dependants_array = g_quark_from_static_string ("-g-type-private--dependants-array");
 4463|       |
 4464|       |  /* type qname hash table */
 4465|      2|  static_type_nodes_ht = g_hash_table_new (g_str_hash, g_str_equal);
 4466|       |
 4467|       |  /* invalid type G_TYPE_INVALID (0)
 4468|       |   */
 4469|      2|  static_fundamental_type_nodes[0] = NULL;
 4470|       |
 4471|       |  /* void type G_TYPE_NONE
 4472|       |   */
 4473|      2|  node = type_node_fundamental_new_W (G_TYPE_NONE, g_intern_static_string ("void"), 0);
  ------------------
  |  |   65|      2|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4474|      2|  type = NODE_TYPE (node);
  ------------------
  |  |  254|      2|#define NODE_TYPE(node)				(node->supers[0])
  ------------------
 4475|      2|  g_assert (type == G_TYPE_NONE);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4476|       |
 4477|       |  /* interface fundamental type G_TYPE_INTERFACE (!classed)
 4478|       |   */
 4479|      2|  memset (&info, 0, sizeof (info));
 4480|      2|  node = type_node_fundamental_new_W (G_TYPE_INTERFACE, g_intern_static_string ("GInterface"), G_TYPE_FLAG_DERIVABLE);
  ------------------
  |  |   71|      2|#define G_TYPE_INTERFACE		G_TYPE_MAKE_FUNDAMENTAL (2)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4481|      2|  type = NODE_TYPE (node);
  ------------------
  |  |  254|      2|#define NODE_TYPE(node)				(node->supers[0])
  ------------------
 4482|      2|  type_data_make_W (node, &info, NULL);
 4483|      2|  g_assert (type == G_TYPE_INTERFACE);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4484|       |
 4485|      2|  G_WRITE_UNLOCK (&type_rw_lock);
  ------------------
  |  |  131|      2|#define G_WRITE_UNLOCK(rw_lock) g_rw_lock_writer_unlock (rw_lock)
  ------------------
 4486|       |
 4487|      2|  _g_value_c_init ();
 4488|       |
 4489|       |  /* G_TYPE_TYPE_PLUGIN
 4490|       |   */
 4491|      2|  g_type_ensure (g_type_plugin_get_type ());
 4492|       |
 4493|       |  /* G_TYPE_* value types
 4494|       |   */
 4495|      2|  _g_value_types_init ();
 4496|       |
 4497|       |  /* G_TYPE_ENUM & G_TYPE_FLAGS
 4498|       |   */
 4499|      2|  _g_enum_types_init ();
 4500|       |
 4501|       |  /* G_TYPE_BOXED
 4502|       |   */
 4503|      2|  _g_boxed_type_init ();
 4504|       |
 4505|       |  /* G_TYPE_PARAM
 4506|       |   */
 4507|      2|  _g_param_type_init ();
 4508|       |
 4509|       |  /* G_TYPE_OBJECT
 4510|       |   */
 4511|      2|  _g_object_type_init ();
 4512|       |
 4513|       |  /* G_TYPE_PARAM_* pspec types
 4514|       |   */
 4515|      2|  _g_param_spec_types_init ();
 4516|       |
 4517|       |  /* Value Transformations
 4518|       |   */
 4519|      2|  _g_value_transforms_init ();
 4520|       |
 4521|       |  /* Signal system
 4522|       |   */
 4523|      2|  _g_signal_init ();
 4524|      2|}

gvaluetypes.c:g_gtype_get_type_once:
 2405|      2|#define G_DEFINE_POINTER_TYPE_WITH_CODE(TypeName, type_name, _C_) _G_DEFINE_POINTER_TYPE_BEGIN (TypeName, type_name) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()
  ------------------
  |  | 2424|      2|type_name##_get_type_once (void) \
  |  | 2425|      2|{ \
  |  | 2426|      2|  GType g_define_type_id = \
  |  | 2427|      2|    g_pointer_type_register_static (g_intern_static_string (#TypeName)); \
  |  | 2428|      2|  { /* custom code follows */
  ------------------
              #define G_DEFINE_POINTER_TYPE_WITH_CODE(TypeName, type_name, _C_) _G_DEFINE_POINTER_TYPE_BEGIN (TypeName, type_name) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()
  ------------------
  |  | 2178|      2|    }					\
  |  | 2179|      2|  return g_define_type_id; \
  |  | 2180|      2|} /* closes type_name##_get_type_once() */
  ------------------
gboxed.c:g_value_array_get_type_once:
 2311|      2|#define G_DEFINE_BOXED_TYPE_WITH_CODE(TypeName, type_name, copy_func, free_func, _C_) _G_DEFINE_BOXED_TYPE_BEGIN (TypeName, type_name, copy_func, free_func) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()
  ------------------
  |  | 2334|      2|type_name##_get_type_once (void) \
  |  | 2335|      2|{ \
  |  | 2336|      2|  GType (* _g_register_boxed) \
  |  | 2337|      2|    (const gchar *, \
  |  | 2338|      2|     union \
  |  | 2339|      2|       { \
  |  | 2340|      2|         TypeName * (*do_copy_type) (TypeName *); \
  |  | 2341|      2|         TypeName * (*do_const_copy_type) (const TypeName *); \
  |  | 2342|      2|         GBoxedCopyFunc do_copy_boxed; \
  |  | 2343|      2|       } __attribute__((__transparent_union__)), \
  |  | 2344|      2|     union \
  |  | 2345|      2|       { \
  |  | 2346|      2|         void (* do_free_type) (TypeName *); \
  |  | 2347|      2|         GBoxedFreeFunc do_free_boxed; \
  |  | 2348|      2|       } __attribute__((__transparent_union__)) \
  |  | 2349|      2|    ) = g_boxed_type_register_static; \
  |  | 2350|      2|  GType g_define_type_id = \
  |  | 2351|      2|    _g_register_boxed (g_intern_static_string (#TypeName), copy_func, free_func); \
  |  | 2352|      2|  { /* custom code follows */
  ------------------
              #define G_DEFINE_BOXED_TYPE_WITH_CODE(TypeName, type_name, copy_func, free_func, _C_) _G_DEFINE_BOXED_TYPE_BEGIN (TypeName, type_name, copy_func, free_func) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()
  ------------------
  |  | 2178|      2|    }					\
  |  | 2179|      2|  return g_define_type_id; \
  |  | 2180|      2|} /* closes type_name##_get_type_once() */
  ------------------

g_type_plugin_get_type:
   85|      2|{
   86|      2|  static GType type_plugin_type = 0;
   87|       |  
   88|      2|  if (!type_plugin_type)
  ------------------
  |  Branch (88:7): [True: 2, False: 0]
  ------------------
   89|      2|    {
   90|      2|      const GTypeInfo type_plugin_info = {
   91|      2|        sizeof (GTypePluginClass),
   92|      2|        NULL,           /* base_init */
   93|      2|        NULL,           /* base_finalize */
   94|      2|        0,              /* class_init */
   95|      2|        NULL,           /* class_destroy */
   96|      2|        NULL,           /* class_data */
   97|      2|        0,              /* instance_size */
   98|      2|        0,              /* n_preallocs */
   99|      2|        NULL,           /* instance_init */
  100|      2|        NULL,           /* value_table */
  101|      2|      };
  102|       |      
  103|      2|      type_plugin_type = g_type_register_static (G_TYPE_INTERFACE, g_intern_static_string ("GTypePlugin"), &type_plugin_info, 0);
  ------------------
  |  |   71|      2|#define G_TYPE_INTERFACE		G_TYPE_MAKE_FUNDAMENTAL (2)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  104|      2|    }
  105|       |  
  106|      2|  return type_plugin_type;
  107|      2|}

_g_value_c_init:
  175|      2|{
  176|      2|  transform_array = g_bsearch_array_create (&transform_bconfig);
  177|      2|}
g_value_register_transform_func:
  557|    340|{
  558|    340|  TransformEntry entry;
  559|       |
  560|       |  /* these checks won't pass for dynamic types.
  561|       |   * g_return_if_fail (G_TYPE_HAS_VALUE_TABLE (src_type));
  562|       |   * g_return_if_fail (G_TYPE_HAS_VALUE_TABLE (dest_type));
  563|       |   */
  564|    340|  g_return_if_fail (transform_func != NULL);
  ------------------
  |  |  639|    340|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|    340|#define G_STMT_START  do
  |  |  ------------------
  |  |  640|    340|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|    340|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|    340| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    340|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|    340|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|    340|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 340, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|    340|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|    340|   else                                         \
  |  |  |  |  |  | 1183|    340|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|    340|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|    340|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 340, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  641|    340|      { } \
  |  |  642|    340|    else \
  |  |  643|    340|      { \
  |  |  644|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  645|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  646|      0|                                  #expr); \
  |  |  647|      0|        return; \
  |  |  648|      0|      } \
  |  |  649|    340|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|    340|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 340]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  565|       |
  566|    340|  entry.src_type = src_type;
  567|    340|  entry.dest_type = dest_type;
  568|       |
  569|       |#if 0 /* let transform function replacement be a valid operation */
  570|       |  if (g_bsearch_array_lookup (transform_array, &transform_bconfig, &entry))
  571|       |    g_warning ("reregistering value transformation function (%p) for '%s' to '%s'",
  572|       |	       transform_func,
  573|       |	       g_type_name (src_type),
  574|       |	       g_type_name (dest_type));
  575|       |#endif
  576|       |
  577|    340|  entry.func = transform_func;
  578|    340|  transform_array = g_bsearch_array_replace (transform_array, &transform_bconfig, &entry);
  579|    340|}
gvalue.c:transform_entries_cmp:
  531|  4.02k|{
  532|  4.02k|  const TransformEntry *e1 = bsearch_node1;
  533|  4.02k|  const TransformEntry *e2 = bsearch_node2;
  534|  4.02k|  gint cmp = G_BSEARCH_ARRAY_CMP (e1->src_type, e2->src_type);
  ------------------
  |  |   34|  4.02k|#define G_BSEARCH_ARRAY_CMP(v1,v2) ((v1) > (v2) ? +1 : (v1) == (v2) ? 0 : -1)
  |  |  ------------------
  |  |  |  Branch (34:37): [True: 1.78k, False: 2.24k]
  |  |  |  Branch (34:56): [True: 1.32k, False: 924]
  |  |  ------------------
  ------------------
  535|       |
  536|  4.02k|  if (cmp)
  ------------------
  |  Branch (536:7): [True: 2.70k, False: 1.32k]
  ------------------
  537|  2.70k|    return cmp;
  538|  1.32k|  else
  539|  1.32k|    return G_BSEARCH_ARRAY_CMP (e1->dest_type, e2->dest_type);
  ------------------
  |  |   34|  1.32k|#define G_BSEARCH_ARRAY_CMP(v1,v2) ((v1) > (v2) ? +1 : (v1) == (v2) ? 0 : -1)
  |  |  ------------------
  |  |  |  Branch (34:37): [True: 1.32k, False: 0]
  |  |  |  Branch (34:56): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  540|  4.02k|}

_g_value_transforms_init:
  238|      2|{
  239|       |  /* some transformations are a bit questionable,
  240|       |   * we currently skip those
  241|       |   */
  242|      2|#define SKIP____register_transform_func(type1,type2,transform_func)     /* skip questionable transforms */ \
  243|      2|  (void)0
  244|       |  
  245|       |  /* numeric types (plus to string) */
  246|      2|  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_CHAR,            value_transform_int_int);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_CHAR,            value_transform_int_int);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_CHAR,            value_transform_int_int);
  ------------------
  |  |   37|      2|#define value_transform_int_int         value_transform_memcpy_data0
  ------------------
  247|      2|  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_UCHAR,           value_transform_int_u8);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_UCHAR,           value_transform_int_u8);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  248|      2|  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_BOOLEAN,         value_transform_int_bool);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_BOOLEAN,         value_transform_int_bool);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|      2|  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_INT,             value_transform_int_int);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_INT,             value_transform_int_int);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_INT,             value_transform_int_int);
  ------------------
  |  |   37|      2|#define value_transform_int_int         value_transform_memcpy_data0
  ------------------
  250|      2|  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_UINT,            value_transform_int_uint);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_UINT,            value_transform_int_uint);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  251|      2|  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_LONG,            value_transform_int_long);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_LONG,            value_transform_int_long);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  252|      2|  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_ULONG,           value_transform_int_ulong);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_ULONG,           value_transform_int_ulong);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  253|      2|  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_INT64,           value_transform_int_int64);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_INT64,           value_transform_int_int64);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|      2|  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_UINT64,          value_transform_int_uint64);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_UINT64,          value_transform_int_uint64);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|      2|  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_ENUM,            value_transform_int_long);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_ENUM,            value_transform_int_long);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|      2|  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_FLAGS,           value_transform_int_ulong);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_FLAGS,           value_transform_int_ulong);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  257|      2|  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_FLOAT,           value_transform_int_float);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_FLOAT,           value_transform_int_float);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  258|      2|  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_DOUBLE,          value_transform_int_double);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_DOUBLE,          value_transform_int_double);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|      2|  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_STRING,          value_transform_int_string);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_STRING,          value_transform_int_string);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  260|      2|  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_CHAR,            value_transform_uint_s8);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_CHAR,            value_transform_uint_s8);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  261|      2|  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_UCHAR,           value_transform_uint_uint);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_UCHAR,           value_transform_uint_uint);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_UCHAR,           value_transform_uint_uint);
  ------------------
  |  |   38|      2|#define value_transform_uint_uint       value_transform_memcpy_data0
  ------------------
  262|      2|  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_BOOLEAN,         value_transform_uint_bool);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_BOOLEAN,         value_transform_uint_bool);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  263|      2|  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_INT,             value_transform_uint_int);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_INT,             value_transform_uint_int);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  264|      2|  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_UINT,            value_transform_uint_uint);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_UINT,            value_transform_uint_uint);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_UINT,            value_transform_uint_uint);
  ------------------
  |  |   38|      2|#define value_transform_uint_uint       value_transform_memcpy_data0
  ------------------
  265|      2|  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_LONG,            value_transform_uint_long);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_LONG,            value_transform_uint_long);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  266|      2|  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_ULONG,           value_transform_uint_ulong);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_ULONG,           value_transform_uint_ulong);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|      2|  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_INT64,           value_transform_uint_int64);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_INT64,           value_transform_uint_int64);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|      2|  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_UINT64,          value_transform_uint_uint64);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_UINT64,          value_transform_uint_uint64);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|      2|  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_ENUM,            value_transform_uint_long);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_ENUM,            value_transform_uint_long);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  270|      2|  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_FLAGS,           value_transform_uint_ulong);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_FLAGS,           value_transform_uint_ulong);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  271|      2|  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_FLOAT,           value_transform_uint_float);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_FLOAT,           value_transform_uint_float);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  272|      2|  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_DOUBLE,          value_transform_uint_double);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_DOUBLE,          value_transform_uint_double);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  273|      2|  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_STRING,          value_transform_uint_string);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_STRING,          value_transform_uint_string);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|      2|  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_CHAR,            value_transform_int_s8);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_CHAR,            value_transform_int_s8);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  275|      2|  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_UCHAR,           value_transform_int_u8);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_UCHAR,           value_transform_int_u8);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  276|      2|  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_BOOLEAN,         value_transform_int_int);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_BOOLEAN,         value_transform_int_int);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_BOOLEAN,         value_transform_int_int);
  ------------------
  |  |   37|      2|#define value_transform_int_int         value_transform_memcpy_data0
  ------------------
  277|      2|  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_INT,             value_transform_int_int);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_INT,             value_transform_int_int);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_INT,             value_transform_int_int);
  ------------------
  |  |   37|      2|#define value_transform_int_int         value_transform_memcpy_data0
  ------------------
  278|      2|  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_UINT,            value_transform_int_uint);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_UINT,            value_transform_int_uint);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  279|      2|  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_LONG,            value_transform_int_long);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_LONG,            value_transform_int_long);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  280|      2|  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_ULONG,           value_transform_int_ulong);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_ULONG,           value_transform_int_ulong);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  281|      2|  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_INT64,           value_transform_int_int64);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_INT64,           value_transform_int_int64);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  282|      2|  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_UINT64,          value_transform_int_uint64);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_UINT64,          value_transform_int_uint64);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  283|      2|  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_ENUM,            value_transform_int_long);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_ENUM,            value_transform_int_long);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|      2|  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_FLAGS,           value_transform_int_ulong);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_FLAGS,           value_transform_int_ulong);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  285|      2|  SKIP____register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_FLOAT,           value_transform_int_float);
  ------------------
  |  |  243|      2|  (void)0
  ------------------
  286|      2|  SKIP____register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_DOUBLE,          value_transform_int_double);
  ------------------
  |  |  243|      2|  (void)0
  ------------------
  287|      2|  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_STRING,          value_transform_bool_string);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_STRING,          value_transform_bool_string);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  288|      2|  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_CHAR,            value_transform_int_s8);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT,          G_TYPE_CHAR,            value_transform_int_s8);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  289|      2|  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_UCHAR,           value_transform_int_u8);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT,          G_TYPE_UCHAR,           value_transform_int_u8);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  290|      2|  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_BOOLEAN,         value_transform_int_bool);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT,          G_TYPE_BOOLEAN,         value_transform_int_bool);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  291|      2|  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_INT,             value_transform_int_int);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT,          G_TYPE_INT,             value_transform_int_int);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT,          G_TYPE_INT,             value_transform_int_int);
  ------------------
  |  |   37|      2|#define value_transform_int_int         value_transform_memcpy_data0
  ------------------
  292|      2|  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_UINT,            value_transform_int_uint);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT,          G_TYPE_UINT,            value_transform_int_uint);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  293|      2|  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_LONG,            value_transform_int_long);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT,          G_TYPE_LONG,            value_transform_int_long);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  294|      2|  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_ULONG,           value_transform_int_ulong);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT,          G_TYPE_ULONG,           value_transform_int_ulong);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  295|      2|  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_INT64,           value_transform_int_int64);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT,          G_TYPE_INT64,           value_transform_int_int64);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  296|      2|  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_UINT64,          value_transform_int_uint64);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT,          G_TYPE_UINT64,          value_transform_int_uint64);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|      2|  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_ENUM,            value_transform_int_long);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT,          G_TYPE_ENUM,            value_transform_int_long);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  298|      2|  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_FLAGS,           value_transform_int_ulong);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT,          G_TYPE_FLAGS,           value_transform_int_ulong);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  299|      2|  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_FLOAT,           value_transform_int_float);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT,          G_TYPE_FLOAT,           value_transform_int_float);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  300|      2|  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_DOUBLE,          value_transform_int_double);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT,          G_TYPE_DOUBLE,          value_transform_int_double);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|      2|  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_STRING,          value_transform_int_string);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT,          G_TYPE_STRING,          value_transform_int_string);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  302|      2|  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_CHAR,            value_transform_uint_s8);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_CHAR,            value_transform_uint_s8);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  303|      2|  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_UCHAR,           value_transform_uint_u8);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_UCHAR,           value_transform_uint_u8);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  304|      2|  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_BOOLEAN,         value_transform_uint_bool);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_BOOLEAN,         value_transform_uint_bool);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  305|      2|  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_INT,             value_transform_uint_int);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_INT,             value_transform_uint_int);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  306|      2|  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_UINT,            value_transform_uint_uint);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_UINT,            value_transform_uint_uint);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_UINT,            value_transform_uint_uint);
  ------------------
  |  |   38|      2|#define value_transform_uint_uint       value_transform_memcpy_data0
  ------------------
  307|      2|  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_LONG,            value_transform_uint_long);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_LONG,            value_transform_uint_long);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  308|      2|  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_ULONG,           value_transform_uint_ulong);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_ULONG,           value_transform_uint_ulong);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  309|      2|  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_INT64,           value_transform_uint_int64);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_INT64,           value_transform_uint_int64);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  310|      2|  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_UINT64,          value_transform_uint_uint64);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_UINT64,          value_transform_uint_uint64);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  311|      2|  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_ENUM,            value_transform_uint_long);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_ENUM,            value_transform_uint_long);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  312|      2|  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_FLAGS,           value_transform_uint_ulong);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_FLAGS,           value_transform_uint_ulong);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  313|      2|  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_FLOAT,           value_transform_uint_float);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_FLOAT,           value_transform_uint_float);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  314|      2|  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_DOUBLE,          value_transform_uint_double);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_DOUBLE,          value_transform_uint_double);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  315|      2|  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_STRING,          value_transform_uint_string);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_STRING,          value_transform_uint_string);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|      2|  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_CHAR,            value_transform_long_s8);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_CHAR,            value_transform_long_s8);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|      2|  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_UCHAR,           value_transform_long_u8);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_UCHAR,           value_transform_long_u8);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  318|      2|  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_BOOLEAN,         value_transform_long_bool);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_BOOLEAN,         value_transform_long_bool);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  319|      2|  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_INT,             value_transform_long_int);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_INT,             value_transform_long_int);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  320|      2|  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_UINT,            value_transform_long_uint);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_UINT,            value_transform_long_uint);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  321|      2|  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_LONG,            value_transform_long_long);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_LONG,            value_transform_long_long);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_LONG,            value_transform_long_long);
  ------------------
  |  |   39|      2|#define value_transform_long_long       value_transform_memcpy_data0
  ------------------
  322|      2|  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_ULONG,           value_transform_long_ulong);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_ULONG,           value_transform_long_ulong);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  323|      2|  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_INT64,           value_transform_long_int64);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_INT64,           value_transform_long_int64);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  324|      2|  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_UINT64,          value_transform_long_uint64);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_UINT64,          value_transform_long_uint64);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  325|      2|  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_ENUM,            value_transform_long_long);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_ENUM,            value_transform_long_long);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_ENUM,            value_transform_long_long);
  ------------------
  |  |   39|      2|#define value_transform_long_long       value_transform_memcpy_data0
  ------------------
  326|      2|  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_FLAGS,           value_transform_long_ulong);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_FLAGS,           value_transform_long_ulong);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  327|      2|  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_FLOAT,           value_transform_long_float);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_FLOAT,           value_transform_long_float);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  328|      2|  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_DOUBLE,          value_transform_long_double);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_DOUBLE,          value_transform_long_double);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  329|      2|  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_STRING,          value_transform_long_string);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_STRING,          value_transform_long_string);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|      2|  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_CHAR,            value_transform_ulong_s8);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_CHAR,            value_transform_ulong_s8);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  331|      2|  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_UCHAR,           value_transform_ulong_u8);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_UCHAR,           value_transform_ulong_u8);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|      2|  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_BOOLEAN,         value_transform_ulong_bool);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_BOOLEAN,         value_transform_ulong_bool);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  333|      2|  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_INT,             value_transform_ulong_int);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_INT,             value_transform_ulong_int);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  334|      2|  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_UINT,            value_transform_ulong_uint);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_UINT,            value_transform_ulong_uint);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  335|      2|  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_LONG,            value_transform_ulong_long);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_LONG,            value_transform_ulong_long);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  336|      2|  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_ULONG,           value_transform_ulong_ulong);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_ULONG,           value_transform_ulong_ulong);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_ULONG,           value_transform_ulong_ulong);
  ------------------
  |  |   40|      2|#define value_transform_ulong_ulong     value_transform_memcpy_data0
  ------------------
  337|      2|  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_INT64,           value_transform_ulong_int64);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_INT64,           value_transform_ulong_int64);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  338|      2|  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_UINT64,          value_transform_ulong_uint64);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_UINT64,          value_transform_ulong_uint64);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  339|      2|  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_ENUM,            value_transform_ulong_long);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_ENUM,            value_transform_ulong_long);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  340|      2|  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_FLAGS,           value_transform_ulong_ulong);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_FLAGS,           value_transform_ulong_ulong);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_FLAGS,           value_transform_ulong_ulong);
  ------------------
  |  |   40|      2|#define value_transform_ulong_ulong     value_transform_memcpy_data0
  ------------------
  341|      2|  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_FLOAT,           value_transform_ulong_float);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_FLOAT,           value_transform_ulong_float);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  342|      2|  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_DOUBLE,          value_transform_ulong_double);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_DOUBLE,          value_transform_ulong_double);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  343|      2|  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_STRING,          value_transform_ulong_string);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_STRING,          value_transform_ulong_string);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  344|      2|  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_CHAR,            value_transform_int64_s8);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_CHAR,            value_transform_int64_s8);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  345|      2|  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_UCHAR,           value_transform_int64_u8);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_UCHAR,           value_transform_int64_u8);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  346|      2|  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_BOOLEAN,         value_transform_int64_bool);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_BOOLEAN,         value_transform_int64_bool);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  347|      2|  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_INT,             value_transform_int64_int);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_INT,             value_transform_int64_int);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  348|      2|  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_UINT,            value_transform_int64_uint);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_UINT,            value_transform_int64_uint);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  349|      2|  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_LONG,            value_transform_int64_long);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_LONG,            value_transform_int64_long);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  350|      2|  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_ULONG,           value_transform_int64_ulong);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_ULONG,           value_transform_int64_ulong);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  351|      2|  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_INT64,           value_transform_int64_int64);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_INT64,           value_transform_int64_int64);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_INT64,           value_transform_int64_int64);
  ------------------
  |  |   41|      2|#define value_transform_int64_int64     value_transform_memcpy_data0
  ------------------
  352|      2|  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_UINT64,          value_transform_int64_uint64);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_UINT64,          value_transform_int64_uint64);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  353|      2|  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_ENUM,            value_transform_int64_long);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_ENUM,            value_transform_int64_long);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  354|      2|  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_FLAGS,           value_transform_int64_ulong);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_FLAGS,           value_transform_int64_ulong);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  355|      2|  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_FLOAT,           value_transform_int64_float);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_FLOAT,           value_transform_int64_float);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  356|      2|  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_DOUBLE,          value_transform_int64_double);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_DOUBLE,          value_transform_int64_double);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|      2|  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_STRING,          value_transform_int64_string);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_STRING,          value_transform_int64_string);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  358|      2|  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_CHAR,            value_transform_uint64_s8);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_CHAR,            value_transform_uint64_s8);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  359|      2|  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_UCHAR,           value_transform_uint64_u8);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_UCHAR,           value_transform_uint64_u8);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  360|      2|  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_BOOLEAN,         value_transform_uint64_bool);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_BOOLEAN,         value_transform_uint64_bool);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  361|      2|  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_INT,             value_transform_uint64_int);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_INT,             value_transform_uint64_int);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  362|      2|  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_UINT,            value_transform_uint64_uint);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_UINT,            value_transform_uint64_uint);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  363|      2|  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_LONG,            value_transform_uint64_long);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_LONG,            value_transform_uint64_long);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  364|      2|  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_ULONG,           value_transform_uint64_ulong);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_ULONG,           value_transform_uint64_ulong);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  365|      2|  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_INT64,           value_transform_uint64_int64);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_INT64,           value_transform_uint64_int64);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  366|      2|  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_UINT64,          value_transform_uint64_uint64);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_UINT64,          value_transform_uint64_uint64);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_UINT64,          value_transform_uint64_uint64);
  ------------------
  |  |   42|      2|#define value_transform_uint64_uint64   value_transform_memcpy_data0
  ------------------
  367|      2|  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_ENUM,            value_transform_uint64_long);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_ENUM,            value_transform_uint64_long);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  368|      2|  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_FLAGS,           value_transform_uint64_ulong);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_FLAGS,           value_transform_uint64_ulong);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  369|      2|  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_FLOAT,           value_transform_uint64_float);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_FLOAT,           value_transform_uint64_float);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  370|      2|  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_DOUBLE,          value_transform_uint64_double);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_DOUBLE,          value_transform_uint64_double);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|      2|  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_STRING,          value_transform_uint64_string);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_STRING,          value_transform_uint64_string);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  372|      2|  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_CHAR,            value_transform_long_s8);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_CHAR,            value_transform_long_s8);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  373|      2|  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_UCHAR,           value_transform_long_u8);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_UCHAR,           value_transform_long_u8);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  374|      2|  SKIP____register_transform_func (G_TYPE_ENUM,         G_TYPE_BOOLEAN,         value_transform_long_bool);
  ------------------
  |  |  243|      2|  (void)0
  ------------------
  375|      2|  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_INT,             value_transform_long_int);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_INT,             value_transform_long_int);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  376|      2|  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_UINT,            value_transform_long_uint);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_UINT,            value_transform_long_uint);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  377|      2|  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_LONG,            value_transform_long_long);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_LONG,            value_transform_long_long);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_LONG,            value_transform_long_long);
  ------------------
  |  |   39|      2|#define value_transform_long_long       value_transform_memcpy_data0
  ------------------
  378|      2|  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_ULONG,           value_transform_long_ulong);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_ULONG,           value_transform_long_ulong);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  379|      2|  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_INT64,           value_transform_long_int64);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_INT64,           value_transform_long_int64);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  380|      2|  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_UINT64,          value_transform_long_uint64);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_UINT64,          value_transform_long_uint64);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  381|      2|  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_ENUM,            value_transform_long_long);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_ENUM,            value_transform_long_long);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_ENUM,            value_transform_long_long);
  ------------------
  |  |   39|      2|#define value_transform_long_long       value_transform_memcpy_data0
  ------------------
  382|      2|  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_FLAGS,           value_transform_long_ulong);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_FLAGS,           value_transform_long_ulong);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  383|      2|  SKIP____register_transform_func (G_TYPE_ENUM,         G_TYPE_FLOAT,           value_transform_long_float);
  ------------------
  |  |  243|      2|  (void)0
  ------------------
  384|      2|  SKIP____register_transform_func (G_TYPE_ENUM,         G_TYPE_DOUBLE,          value_transform_long_double);
  ------------------
  |  |  243|      2|  (void)0
  ------------------
  385|      2|  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_STRING,          value_transform_enum_string);
  ------------------
  |  |  134|      2|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_STRING,          value_transform_enum_string);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  386|      2|  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_CHAR,            value_transform_ulong_s8);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_CHAR,            value_transform_ulong_s8);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  387|      2|  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_UCHAR,           value_transform_ulong_u8);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_UCHAR,           value_transform_ulong_u8);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  388|      2|  SKIP____register_transform_func (G_TYPE_FLAGS,        G_TYPE_BOOLEAN,         value_transform_ulong_bool);
  ------------------
  |  |  243|      2|  (void)0
  ------------------
  389|      2|  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_INT,             value_transform_ulong_int);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_INT,             value_transform_ulong_int);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  390|      2|  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_UINT,            value_transform_ulong_uint);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_UINT,            value_transform_ulong_uint);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  391|      2|  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_LONG,            value_transform_ulong_long);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_LONG,            value_transform_ulong_long);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  392|      2|  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_ULONG,           value_transform_ulong_ulong);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_ULONG,           value_transform_ulong_ulong);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_ULONG,           value_transform_ulong_ulong);
  ------------------
  |  |   40|      2|#define value_transform_ulong_ulong     value_transform_memcpy_data0
  ------------------
  393|      2|  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_INT64,           value_transform_ulong_int64);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_INT64,           value_transform_ulong_int64);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  394|      2|  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_UINT64,          value_transform_ulong_uint64);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_UINT64,          value_transform_ulong_uint64);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  395|      2|  SKIP____register_transform_func (G_TYPE_FLAGS,        G_TYPE_ENUM,            value_transform_ulong_long);
  ------------------
  |  |  243|      2|  (void)0
  ------------------
  396|      2|  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_FLAGS,           value_transform_ulong_ulong);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_FLAGS,           value_transform_ulong_ulong);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_FLAGS,           value_transform_ulong_ulong);
  ------------------
  |  |   40|      2|#define value_transform_ulong_ulong     value_transform_memcpy_data0
  ------------------
  397|      2|  SKIP____register_transform_func (G_TYPE_FLAGS,        G_TYPE_FLOAT,           value_transform_ulong_float);
  ------------------
  |  |  243|      2|  (void)0
  ------------------
  398|      2|  SKIP____register_transform_func (G_TYPE_FLAGS,        G_TYPE_DOUBLE,          value_transform_ulong_double);
  ------------------
  |  |  243|      2|  (void)0
  ------------------
  399|      2|  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_STRING,          value_transform_flags_string);
  ------------------
  |  |  140|      2|#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_STRING,          value_transform_flags_string);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  400|      2|  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_CHAR,            value_transform_float_s8);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_CHAR,            value_transform_float_s8);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  401|      2|  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_UCHAR,           value_transform_float_u8);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_UCHAR,           value_transform_float_u8);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  402|      2|  SKIP____register_transform_func (G_TYPE_FLOAT,        G_TYPE_BOOLEAN,         value_transform_float_bool);
  ------------------
  |  |  243|      2|  (void)0
  ------------------
  403|      2|  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_INT,             value_transform_float_int);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_INT,             value_transform_float_int);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  404|      2|  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_UINT,            value_transform_float_uint);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_UINT,            value_transform_float_uint);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  405|      2|  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_LONG,            value_transform_float_long);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_LONG,            value_transform_float_long);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|      2|  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_ULONG,           value_transform_float_ulong);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_ULONG,           value_transform_float_ulong);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  407|      2|  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_INT64,           value_transform_float_int64);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_INT64,           value_transform_float_int64);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  408|      2|  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_UINT64,          value_transform_float_uint64);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_UINT64,          value_transform_float_uint64);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  409|      2|  SKIP____register_transform_func (G_TYPE_FLOAT,        G_TYPE_ENUM,            value_transform_float_long);
  ------------------
  |  |  243|      2|  (void)0
  ------------------
  410|      2|  SKIP____register_transform_func (G_TYPE_FLOAT,        G_TYPE_FLAGS,           value_transform_float_ulong);
  ------------------
  |  |  243|      2|  (void)0
  ------------------
  411|      2|  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_FLOAT,           value_transform_float_float);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_FLOAT,           value_transform_float_float);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_FLOAT,           value_transform_float_float);
  ------------------
  |  |   43|      2|#define value_transform_float_float     value_transform_memcpy_data0
  ------------------
  412|      2|  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_DOUBLE,          value_transform_float_double);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_DOUBLE,          value_transform_float_double);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  413|      2|  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_STRING,          value_transform_float_string);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_STRING,          value_transform_float_string);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  414|      2|  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_CHAR,            value_transform_double_s8);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_CHAR,            value_transform_double_s8);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  415|      2|  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_UCHAR,           value_transform_double_u8);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_UCHAR,           value_transform_double_u8);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  416|      2|  SKIP____register_transform_func (G_TYPE_DOUBLE,       G_TYPE_BOOLEAN,         value_transform_double_bool);
  ------------------
  |  |  243|      2|  (void)0
  ------------------
  417|      2|  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_INT,             value_transform_double_int);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_INT,             value_transform_double_int);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  418|      2|  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_UINT,            value_transform_double_uint);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_UINT,            value_transform_double_uint);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  419|      2|  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_LONG,            value_transform_double_long);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_LONG,            value_transform_double_long);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  420|      2|  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_ULONG,           value_transform_double_ulong);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_ULONG,           value_transform_double_ulong);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  421|      2|  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_INT64,           value_transform_double_int64);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_INT64,           value_transform_double_int64);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  422|      2|  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_UINT64,          value_transform_double_uint64);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_UINT64,          value_transform_double_uint64);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  423|      2|  SKIP____register_transform_func (G_TYPE_DOUBLE,       G_TYPE_ENUM,            value_transform_double_long);
  ------------------
  |  |  243|      2|  (void)0
  ------------------
  424|      2|  SKIP____register_transform_func (G_TYPE_DOUBLE,       G_TYPE_FLAGS,           value_transform_double_ulong);
  ------------------
  |  |  243|      2|  (void)0
  ------------------
  425|      2|  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_FLOAT,           value_transform_double_float);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_FLOAT,           value_transform_double_float);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  426|      2|  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_DOUBLE,          value_transform_double_double);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_DOUBLE,          value_transform_double_double);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_DOUBLE,          value_transform_double_double);
  ------------------
  |  |   44|      2|#define value_transform_double_double   value_transform_memcpy_data0
  ------------------
  427|      2|  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_STRING,          value_transform_double_string);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_STRING,          value_transform_double_string);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  428|       |  /* string types */
  429|      2|  g_value_register_transform_func (G_TYPE_STRING,       G_TYPE_STRING,          value_transform_string_string);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                g_value_register_transform_func (G_TYPE_STRING,       G_TYPE_STRING,          value_transform_string_string);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  430|      2|}

_g_value_types_init:
  421|      2|{
  422|      2|  GTypeInfo info = {
  423|      2|    0,				/* class_size */
  424|      2|    NULL,			/* base_init */
  425|      2|    NULL,			/* base_destroy */
  426|      2|    NULL,			/* class_init */
  427|      2|    NULL,			/* class_destroy */
  428|      2|    NULL,			/* class_data */
  429|      2|    0,				/* instance_size */
  430|      2|    0,				/* n_preallocs */
  431|      2|    NULL,			/* instance_init */
  432|      2|    NULL,			/* value_table */
  433|      2|  };
  434|      2|  const GTypeFundamentalInfo finfo = { G_TYPE_FLAG_DERIVABLE, };
  435|      2|  GType type G_GNUC_UNUSED  /* when compiling with G_DISABLE_ASSERT */;
  436|       |  
  437|       |  /* G_TYPE_CHAR / G_TYPE_UCHAR
  438|       |   */
  439|      2|  {
  440|      2|    static const GTypeValueTable value_table = {
  441|      2|      value_init_long0,		/* value_init */
  442|      2|      NULL,			/* value_free */
  443|      2|      value_copy_long0,		/* value_copy */
  444|      2|      NULL,			/* value_peek_pointer */
  445|      2|      "i",			/* collect_format */
  446|      2|      value_collect_int,	/* collect_value */
  447|      2|      "p",			/* lcopy_format */
  448|      2|      value_lcopy_char,		/* lcopy_value */
  449|      2|    };
  450|      2|    info.value_table = &value_table;
  451|      2|    type = g_type_register_fundamental (G_TYPE_CHAR, g_intern_static_string ("gchar"), &info, &finfo, 0);
  ------------------
  |  |   80|      2|#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  452|      2|    g_assert (type == G_TYPE_CHAR);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  453|      2|    type = g_type_register_fundamental (G_TYPE_UCHAR, g_intern_static_string ("guchar"), &info, &finfo, 0);
  ------------------
  |  |   86|      2|#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  454|      2|    g_assert (type == G_TYPE_UCHAR);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  455|      2|  }
  456|       |
  457|       |  /* G_TYPE_BOOLEAN
  458|       |   */
  459|      2|  {
  460|      2|    static const GTypeValueTable value_table = {
  461|      2|      value_init_long0,		 /* value_init */
  462|      2|      NULL,			 /* value_free */
  463|      2|      value_copy_long0,		 /* value_copy */
  464|      2|      NULL,                      /* value_peek_pointer */
  465|      2|      "i",			 /* collect_format */
  466|      2|      value_collect_int,	 /* collect_value */
  467|      2|      "p",			 /* lcopy_format */
  468|      2|      value_lcopy_boolean,	 /* lcopy_value */
  469|      2|    };
  470|      2|    info.value_table = &value_table;
  471|      2|    type = g_type_register_fundamental (G_TYPE_BOOLEAN, g_intern_static_string ("gboolean"), &info, &finfo, 0);
  ------------------
  |  |   92|      2|#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  472|      2|    g_assert (type == G_TYPE_BOOLEAN);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  473|      2|  }
  474|       |  
  475|       |  /* G_TYPE_INT / G_TYPE_UINT
  476|       |   */
  477|      2|  {
  478|      2|    static const GTypeValueTable value_table = {
  479|      2|      value_init_long0,		/* value_init */
  480|      2|      NULL,			/* value_free */
  481|      2|      value_copy_long0,		/* value_copy */
  482|      2|      NULL,                     /* value_peek_pointer */
  483|      2|      "i",			/* collect_format */
  484|      2|      value_collect_int,	/* collect_value */
  485|      2|      "p",			/* lcopy_format */
  486|      2|      value_lcopy_int,		/* lcopy_value */
  487|      2|    };
  488|      2|    info.value_table = &value_table;
  489|      2|    type = g_type_register_fundamental (G_TYPE_INT, g_intern_static_string ("gint"), &info, &finfo, 0);
  ------------------
  |  |   98|      2|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  490|      2|    g_assert (type == G_TYPE_INT);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  491|      2|    type = g_type_register_fundamental (G_TYPE_UINT, g_intern_static_string ("guint"), &info, &finfo, 0);
  ------------------
  |  |  104|      2|#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  492|      2|    g_assert (type == G_TYPE_UINT);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  493|      2|  }
  494|       |
  495|       |  /* G_TYPE_LONG / G_TYPE_ULONG
  496|       |   */
  497|      2|  {
  498|      2|    static const GTypeValueTable value_table = {
  499|      2|      value_init_long0,		/* value_init */
  500|      2|      NULL,			/* value_free */
  501|      2|      value_copy_long0,		/* value_copy */
  502|      2|      NULL,                     /* value_peek_pointer */
  503|      2|      "l",			/* collect_format */
  504|      2|      value_collect_long,	/* collect_value */
  505|      2|      "p",			/* lcopy_format */
  506|      2|      value_lcopy_long,		/* lcopy_value */
  507|      2|    };
  508|      2|    info.value_table = &value_table;
  509|      2|    type = g_type_register_fundamental (G_TYPE_LONG, g_intern_static_string ("glong"), &info, &finfo, 0);
  ------------------
  |  |  110|      2|#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  510|      2|    g_assert (type == G_TYPE_LONG);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      2|    type = g_type_register_fundamental (G_TYPE_ULONG, g_intern_static_string ("gulong"), &info, &finfo, 0);
  ------------------
  |  |  116|      2|#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  512|      2|    g_assert (type == G_TYPE_ULONG);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  513|      2|  }
  514|       |  
  515|       |  /* G_TYPE_INT64 / G_TYPE_UINT64
  516|       |   */
  517|      2|  {
  518|      2|    static const GTypeValueTable value_table = {
  519|      2|      value_init_int64,		/* value_init */
  520|      2|      NULL,			/* value_free */
  521|      2|      value_copy_int64,		/* value_copy */
  522|      2|      NULL,                     /* value_peek_pointer */
  523|      2|      "q",			/* collect_format */
  524|      2|      value_collect_int64,	/* collect_value */
  525|      2|      "p",			/* lcopy_format */
  526|      2|      value_lcopy_int64,	/* lcopy_value */
  527|      2|    };
  528|      2|    info.value_table = &value_table;
  529|      2|    type = g_type_register_fundamental (G_TYPE_INT64, g_intern_static_string ("gint64"), &info, &finfo, 0);
  ------------------
  |  |  122|      2|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  530|      2|    g_assert (type == G_TYPE_INT64);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  531|      2|    type = g_type_register_fundamental (G_TYPE_UINT64, g_intern_static_string ("guint64"), &info, &finfo, 0);
  ------------------
  |  |  128|      2|#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  532|      2|    g_assert (type == G_TYPE_UINT64);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  533|      2|  }
  534|       |  
  535|       |  /* G_TYPE_FLOAT
  536|       |   */
  537|      2|  {
  538|      2|    static const GTypeValueTable value_table = {
  539|      2|      value_init_float,		 /* value_init */
  540|      2|      NULL,			 /* value_free */
  541|      2|      value_copy_float,		 /* value_copy */
  542|      2|      NULL,                      /* value_peek_pointer */
  543|      2|      "d",			 /* collect_format */
  544|      2|      value_collect_float,	 /* collect_value */
  545|      2|      "p",			 /* lcopy_format */
  546|      2|      value_lcopy_float,	 /* lcopy_value */
  547|      2|    };
  548|      2|    info.value_table = &value_table;
  549|      2|    type = g_type_register_fundamental (G_TYPE_FLOAT, g_intern_static_string ("gfloat"), &info, &finfo, 0);
  ------------------
  |  |  146|      2|#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  550|      2|    g_assert (type == G_TYPE_FLOAT);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  551|      2|  }
  552|       |  
  553|       |  /* G_TYPE_DOUBLE
  554|       |   */
  555|      2|  {
  556|      2|    static const GTypeValueTable value_table = {
  557|      2|      value_init_double,	/* value_init */
  558|      2|      NULL,			/* value_free */
  559|      2|      value_copy_double,	/* value_copy */
  560|      2|      NULL,                     /* value_peek_pointer */
  561|      2|      "d",			/* collect_format */
  562|      2|      value_collect_double,	/* collect_value */
  563|      2|      "p",			/* lcopy_format */
  564|      2|      value_lcopy_double,	/* lcopy_value */
  565|      2|    };
  566|      2|    info.value_table = &value_table;
  567|      2|    type = g_type_register_fundamental (G_TYPE_DOUBLE, g_intern_static_string ("gdouble"), &info, &finfo, 0);
  ------------------
  |  |  152|      2|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      2|    g_assert (type == G_TYPE_DOUBLE);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  569|      2|  }
  570|       |
  571|       |  /* G_TYPE_STRING
  572|       |   */
  573|      2|  {
  574|      2|    static const GTypeValueTable value_table = {
  575|      2|      value_init_string,	/* value_init */
  576|      2|      value_free_string,	/* value_free */
  577|      2|      value_copy_string,	/* value_copy */
  578|      2|      value_peek_pointer0,	/* value_peek_pointer */
  579|      2|      "p",			/* collect_format */
  580|      2|      value_collect_string,	/* collect_value */
  581|      2|      "p",			/* lcopy_format */
  582|      2|      value_lcopy_string,	/* lcopy_value */
  583|      2|    };
  584|      2|    info.value_table = &value_table;
  585|      2|    type = g_type_register_fundamental (G_TYPE_STRING, g_intern_static_string ("gchararray"), &info, &finfo, 0);
  ------------------
  |  |  158|      2|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  586|      2|    g_assert (type == G_TYPE_STRING);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  587|      2|  }
  588|       |
  589|       |  /* G_TYPE_POINTER
  590|       |   */
  591|      2|  {
  592|      2|    static const GTypeValueTable value_table = {
  593|      2|      value_init_pointer,	/* value_init */
  594|      2|      NULL,			/* value_free */
  595|      2|      value_copy_pointer,	/* value_copy */
  596|      2|      value_peek_pointer0,	/* value_peek_pointer */
  597|      2|      "p",			/* collect_format */
  598|      2|      value_collect_pointer,	/* collect_value */
  599|      2|      "p",			/* lcopy_format */
  600|      2|      value_lcopy_pointer,	/* lcopy_value */
  601|      2|    };
  602|      2|    info.value_table = &value_table;
  603|      2|    type = g_type_register_fundamental (G_TYPE_POINTER, g_intern_static_string ("gpointer"), &info, &finfo, 0);
  ------------------
  |  |  164|      2|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  604|      2|    g_assert (type == G_TYPE_POINTER);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  605|      2|  }
  606|       |
  607|       |  /* G_TYPE_VARIANT
  608|       |   */
  609|      2|  {
  610|      2|    static const GTypeValueTable value_table = {
  611|      2|      value_init_pointer,	/* value_init */
  612|      2|      value_free_variant,	/* value_free */
  613|      2|      value_copy_variant,	/* value_copy */
  614|      2|      value_peek_pointer0,	/* value_peek_pointer */
  615|      2|      "p",			/* collect_format */
  616|      2|      value_collect_variant,	/* collect_value */
  617|      2|      "p",			/* lcopy_format */
  618|      2|      value_lcopy_variant,	/* lcopy_value */
  619|      2|    };
  620|      2|    info.value_table = &value_table;
  621|      2|    type = g_type_register_fundamental (G_TYPE_VARIANT, g_intern_static_string ("GVariant"), &info, &finfo, 0);
  ------------------
  |  |  200|      2|#define	G_TYPE_VARIANT                  G_TYPE_MAKE_FUNDAMENTAL (21)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  622|      2|    g_assert (type == G_TYPE_VARIANT);
  ------------------
  |  |  234|      2|#define g_assert(expr)                  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  235|      2|                                             if G_LIKELY (expr) ; else \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:25): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  236|      2|                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  237|      0|                                                                         #expr); \
  |  |  238|      2|                                        } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  623|      2|  }
  624|      2|}
g_pointer_type_register_static:
 1448|      2|{
 1449|      2|  const GTypeInfo type_info = {
 1450|      2|    0,			/* class_size */
 1451|      2|    NULL,		/* base_init */
 1452|      2|    NULL,		/* base_finalize */
 1453|      2|    NULL,		/* class_init */
 1454|      2|    NULL,		/* class_finalize */
 1455|      2|    NULL,		/* class_data */
 1456|      2|    0,			/* instance_size */
 1457|      2|    0,			/* n_preallocs */
 1458|      2|    NULL,		/* instance_init */
 1459|       |    NULL		/* value_table */
 1460|      2|  };
 1461|      2|  GType type;
 1462|       |
 1463|      2|  g_return_val_if_fail (name != NULL, 0);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1464|      2|  g_return_val_if_fail (g_type_from_name (name) == 0, 0);
  ------------------
  |  |  652|      2|  G_STMT_START { \
  |  |  ------------------
  |  |  |  |  940|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |  653|      2|    if (G_LIKELY (expr)) \
  |  |  ------------------
  |  |  |  | 1186|      2|#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1178|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1179|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  | 1180|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1180:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1181|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  | 1182|      2|   else                                         \
  |  |  |  |  |  | 1183|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  | 1184|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  | 1185|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1186:24): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  654|      2|      { } \
  |  |  655|      2|    else \
  |  |  656|      2|      { \
  |  |  657|      0|        g_return_if_fail_warning (G_LOG_DOMAIN, \
  |  |  658|      0|                                  G_STRFUNC, \
  |  |  ------------------
  |  |  |  |  850|      0|#define G_STRFUNC     ((const char*) (__func__))
  |  |  ------------------
  |  |  659|      0|                                  #expr); \
  |  |  660|      0|        return (val); \
  |  |  661|      0|      } \
  |  |  662|      2|  } G_STMT_END
  |  |  ------------------
  |  |  |  |  948|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (948:30): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1465|       |
 1466|      2|  type = g_type_register_static (G_TYPE_POINTER, name, &type_info, 0);
  ------------------
  |  |  164|      2|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  226|      2|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|      2|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1467|       |
 1468|      2|  return type;
 1469|      2|}

AES_set_encrypt_key:
 1264|  1.01M|{
 1265|       |
 1266|  1.01M|    u32 *rk;
 1267|  1.01M|    int i = 0;
 1268|  1.01M|    u32 temp;
 1269|       |
 1270|  1.01M|    if (!userKey || !key)
  ------------------
  |  Branch (1270:9): [True: 0, False: 1.01M]
  |  Branch (1270:21): [True: 0, False: 1.01M]
  ------------------
 1271|      0|        return -1;
 1272|  1.01M|    if (bits != 128 && bits != 192 && bits != 256)
  ------------------
  |  Branch (1272:9): [True: 1.01M, False: 0]
  |  Branch (1272:24): [True: 1.01M, False: 0]
  |  Branch (1272:39): [True: 0, False: 1.01M]
  ------------------
 1273|      0|        return -2;
 1274|       |
 1275|  1.01M|    rk = key->rd_key;
 1276|       |
 1277|  1.01M|    if (bits == 128)
  ------------------
  |  Branch (1277:9): [True: 0, False: 1.01M]
  ------------------
 1278|      0|        key->rounds = 10;
 1279|  1.01M|    else if (bits == 192)
  ------------------
  |  Branch (1279:14): [True: 0, False: 1.01M]
  ------------------
 1280|      0|        key->rounds = 12;
 1281|  1.01M|    else
 1282|  1.01M|        key->rounds = 14;
 1283|       |
 1284|  1.01M|    rk[0] = GETU32(userKey     );
  ------------------
  |  |   23|  1.01M|#  define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
 1285|  1.01M|    rk[1] = GETU32(userKey +  4);
  ------------------
  |  |   23|  1.01M|#  define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
 1286|  1.01M|    rk[2] = GETU32(userKey +  8);
  ------------------
  |  |   23|  1.01M|#  define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
 1287|  1.01M|    rk[3] = GETU32(userKey + 12);
  ------------------
  |  |   23|  1.01M|#  define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
 1288|  1.01M|    if (bits == 128) {
  ------------------
  |  Branch (1288:9): [True: 0, False: 1.01M]
  ------------------
 1289|      0|        while (1) {
  ------------------
  |  Branch (1289:16): [True: 0, Folded]
  ------------------
 1290|      0|            temp  = rk[3];
 1291|      0|            rk[4] = rk[0] ^
 1292|      0|                (Te2[(temp >> 16) & 0xff] & 0xff000000) ^
 1293|      0|                (Te3[(temp >>  8) & 0xff] & 0x00ff0000) ^
 1294|      0|                (Te0[(temp      ) & 0xff] & 0x0000ff00) ^
 1295|      0|                (Te1[(temp >> 24)       ] & 0x000000ff) ^
 1296|      0|                rcon[i];
 1297|      0|            rk[5] = rk[1] ^ rk[4];
 1298|      0|            rk[6] = rk[2] ^ rk[5];
 1299|      0|            rk[7] = rk[3] ^ rk[6];
 1300|      0|            if (++i == 10) {
  ------------------
  |  Branch (1300:17): [True: 0, False: 0]
  ------------------
 1301|      0|                return 0;
 1302|      0|            }
 1303|      0|            rk += 4;
 1304|      0|        }
 1305|      0|    }
 1306|  1.01M|    rk[4] = GETU32(userKey + 16);
  ------------------
  |  |   23|  1.01M|#  define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
 1307|  1.01M|    rk[5] = GETU32(userKey + 20);
  ------------------
  |  |   23|  1.01M|#  define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
 1308|  1.01M|    if (bits == 192) {
  ------------------
  |  Branch (1308:9): [True: 0, False: 1.01M]
  ------------------
 1309|      0|        while (1) {
  ------------------
  |  Branch (1309:16): [True: 0, Folded]
  ------------------
 1310|      0|            temp = rk[ 5];
 1311|      0|            rk[ 6] = rk[ 0] ^
 1312|      0|                (Te2[(temp >> 16) & 0xff] & 0xff000000) ^
 1313|      0|                (Te3[(temp >>  8) & 0xff] & 0x00ff0000) ^
 1314|      0|                (Te0[(temp      ) & 0xff] & 0x0000ff00) ^
 1315|      0|                (Te1[(temp >> 24)       ] & 0x000000ff) ^
 1316|      0|                rcon[i];
 1317|      0|            rk[ 7] = rk[ 1] ^ rk[ 6];
 1318|      0|            rk[ 8] = rk[ 2] ^ rk[ 7];
 1319|      0|            rk[ 9] = rk[ 3] ^ rk[ 8];
 1320|      0|            if (++i == 8) {
  ------------------
  |  Branch (1320:17): [True: 0, False: 0]
  ------------------
 1321|      0|                return 0;
 1322|      0|            }
 1323|      0|            rk[10] = rk[ 4] ^ rk[ 9];
 1324|      0|            rk[11] = rk[ 5] ^ rk[10];
 1325|      0|            rk += 6;
 1326|      0|        }
 1327|      0|    }
 1328|  1.01M|    rk[6] = GETU32(userKey + 24);
  ------------------
  |  |   23|  1.01M|#  define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
 1329|  1.01M|    rk[7] = GETU32(userKey + 28);
  ------------------
  |  |   23|  1.01M|#  define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
 1330|  1.01M|    if (bits == 256) {
  ------------------
  |  Branch (1330:9): [True: 1.01M, False: 0]
  ------------------
 1331|  7.10M|        while (1) {
  ------------------
  |  Branch (1331:16): [True: 7.10M, Folded]
  ------------------
 1332|  7.10M|            temp = rk[ 7];
 1333|  7.10M|            rk[ 8] = rk[ 0] ^
 1334|  7.10M|                (Te2[(temp >> 16) & 0xff] & 0xff000000) ^
 1335|  7.10M|                (Te3[(temp >>  8) & 0xff] & 0x00ff0000) ^
 1336|  7.10M|                (Te0[(temp      ) & 0xff] & 0x0000ff00) ^
 1337|  7.10M|                (Te1[(temp >> 24)       ] & 0x000000ff) ^
 1338|  7.10M|                rcon[i];
 1339|  7.10M|            rk[ 9] = rk[ 1] ^ rk[ 8];
 1340|  7.10M|            rk[10] = rk[ 2] ^ rk[ 9];
 1341|  7.10M|            rk[11] = rk[ 3] ^ rk[10];
 1342|  7.10M|            if (++i == 7) {
  ------------------
  |  Branch (1342:17): [True: 1.01M, False: 6.08M]
  ------------------
 1343|  1.01M|                return 0;
 1344|  1.01M|            }
 1345|  6.08M|            temp = rk[11];
 1346|  6.08M|            rk[12] = rk[ 4] ^
 1347|  6.08M|                (Te2[(temp >> 24)       ] & 0xff000000) ^
 1348|  6.08M|                (Te3[(temp >> 16) & 0xff] & 0x00ff0000) ^
 1349|  6.08M|                (Te0[(temp >>  8) & 0xff] & 0x0000ff00) ^
 1350|  6.08M|                (Te1[(temp      ) & 0xff] & 0x000000ff);
 1351|  6.08M|            rk[13] = rk[ 5] ^ rk[12];
 1352|  6.08M|            rk[14] = rk[ 6] ^ rk[13];
 1353|  6.08M|            rk[15] = rk[ 7] ^ rk[14];
 1354|       |
 1355|  6.08M|            rk += 8;
 1356|  6.08M|            }
 1357|  1.01M|    }
 1358|      0|    return 0;
 1359|  1.01M|}
AES_encrypt:
 1418|  4.63M|                 const AES_KEY *key) {
 1419|       |
 1420|  4.63M|    const u32 *rk;
 1421|  4.63M|    u32 s0, s1, s2, s3, t0, t1, t2, t3;
 1422|  4.63M|#ifndef FULL_UNROLL
 1423|  4.63M|    int r;
 1424|  4.63M|#endif /* ?FULL_UNROLL */
 1425|       |
 1426|  4.63M|    assert(in && out && key);
  ------------------
  |  Branch (1426:5): [True: 0, False: 4.63M]
  |  Branch (1426:5): [True: 0, False: 0]
  |  Branch (1426:5): [True: 0, False: 0]
  |  Branch (1426:5): [True: 4.63M, False: 0]
  |  Branch (1426:5): [True: 4.63M, False: 0]
  |  Branch (1426:5): [True: 4.63M, False: 0]
  ------------------
 1427|  4.63M|    rk = key->rd_key;
 1428|       |
 1429|       |    /*
 1430|       |     * map byte array block to cipher state
 1431|       |     * and add initial round key:
 1432|       |     */
 1433|  4.63M|    s0 = GETU32(in     ) ^ rk[0];
  ------------------
  |  |   23|  4.63M|#  define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
 1434|  4.63M|    s1 = GETU32(in +  4) ^ rk[1];
  ------------------
  |  |   23|  4.63M|#  define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
 1435|  4.63M|    s2 = GETU32(in +  8) ^ rk[2];
  ------------------
  |  |   23|  4.63M|#  define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
 1436|  4.63M|    s3 = GETU32(in + 12) ^ rk[3];
  ------------------
  |  |   23|  4.63M|#  define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
 1437|       |#ifdef FULL_UNROLL
 1438|       |    /* round 1: */
 1439|       |    t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[ 4];
 1440|       |    t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[ 5];
 1441|       |    t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[ 6];
 1442|       |    t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[ 7];
 1443|       |    /* round 2: */
 1444|       |    s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[ 8];
 1445|       |    s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[ 9];
 1446|       |    s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[10];
 1447|       |    s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[11];
 1448|       |    /* round 3: */
 1449|       |    t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[12];
 1450|       |    t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[13];
 1451|       |    t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[14];
 1452|       |    t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[15];
 1453|       |    /* round 4: */
 1454|       |    s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[16];
 1455|       |    s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[17];
 1456|       |    s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[18];
 1457|       |    s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[19];
 1458|       |    /* round 5: */
 1459|       |    t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[20];
 1460|       |    t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[21];
 1461|       |    t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[22];
 1462|       |    t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[23];
 1463|       |    /* round 6: */
 1464|       |    s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[24];
 1465|       |    s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[25];
 1466|       |    s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[26];
 1467|       |    s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[27];
 1468|       |    /* round 7: */
 1469|       |    t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[28];
 1470|       |    t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[29];
 1471|       |    t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[30];
 1472|       |    t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[31];
 1473|       |    /* round 8: */
 1474|       |    s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[32];
 1475|       |    s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[33];
 1476|       |    s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[34];
 1477|       |    s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[35];
 1478|       |    /* round 9: */
 1479|       |    t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[36];
 1480|       |    t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[37];
 1481|       |    t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[38];
 1482|       |    t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[39];
 1483|       |    if (key->rounds > 10) {
 1484|       |        /* round 10: */
 1485|       |        s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[40];
 1486|       |        s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[41];
 1487|       |        s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[42];
 1488|       |        s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[43];
 1489|       |        /* round 11: */
 1490|       |        t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[44];
 1491|       |        t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[45];
 1492|       |        t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[46];
 1493|       |        t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[47];
 1494|       |        if (key->rounds > 12) {
 1495|       |            /* round 12: */
 1496|       |            s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[48];
 1497|       |            s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[49];
 1498|       |            s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[50];
 1499|       |            s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[51];
 1500|       |            /* round 13: */
 1501|       |            t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[52];
 1502|       |            t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[53];
 1503|       |            t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[54];
 1504|       |            t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[55];
 1505|       |        }
 1506|       |    }
 1507|       |    rk += key->rounds << 2;
 1508|       |#else  /* !FULL_UNROLL */
 1509|       |    /*
 1510|       |     * Nr - 1 full rounds:
 1511|       |     */
 1512|  4.63M|    r = key->rounds >> 1;
 1513|  32.4M|    for (;;) {
 1514|  32.4M|        t0 =
 1515|  32.4M|            Te0[(s0 >> 24)       ] ^
 1516|  32.4M|            Te1[(s1 >> 16) & 0xff] ^
 1517|  32.4M|            Te2[(s2 >>  8) & 0xff] ^
 1518|  32.4M|            Te3[(s3      ) & 0xff] ^
 1519|  32.4M|            rk[4];
 1520|  32.4M|        t1 =
 1521|  32.4M|            Te0[(s1 >> 24)       ] ^
 1522|  32.4M|            Te1[(s2 >> 16) & 0xff] ^
 1523|  32.4M|            Te2[(s3 >>  8) & 0xff] ^
 1524|  32.4M|            Te3[(s0      ) & 0xff] ^
 1525|  32.4M|            rk[5];
 1526|  32.4M|        t2 =
 1527|  32.4M|            Te0[(s2 >> 24)       ] ^
 1528|  32.4M|            Te1[(s3 >> 16) & 0xff] ^
 1529|  32.4M|            Te2[(s0 >>  8) & 0xff] ^
 1530|  32.4M|            Te3[(s1      ) & 0xff] ^
 1531|  32.4M|            rk[6];
 1532|  32.4M|        t3 =
 1533|  32.4M|            Te0[(s3 >> 24)       ] ^
 1534|  32.4M|            Te1[(s0 >> 16) & 0xff] ^
 1535|  32.4M|            Te2[(s1 >>  8) & 0xff] ^
 1536|  32.4M|            Te3[(s2      ) & 0xff] ^
 1537|  32.4M|            rk[7];
 1538|       |
 1539|  32.4M|        rk += 8;
 1540|  32.4M|        if (--r == 0) {
  ------------------
  |  Branch (1540:13): [True: 4.63M, False: 27.8M]
  ------------------
 1541|  4.63M|            break;
 1542|  4.63M|        }
 1543|       |
 1544|  27.8M|        s0 =
 1545|  27.8M|            Te0[(t0 >> 24)       ] ^
 1546|  27.8M|            Te1[(t1 >> 16) & 0xff] ^
 1547|  27.8M|            Te2[(t2 >>  8) & 0xff] ^
 1548|  27.8M|            Te3[(t3      ) & 0xff] ^
 1549|  27.8M|            rk[0];
 1550|  27.8M|        s1 =
 1551|  27.8M|            Te0[(t1 >> 24)       ] ^
 1552|  27.8M|            Te1[(t2 >> 16) & 0xff] ^
 1553|  27.8M|            Te2[(t3 >>  8) & 0xff] ^
 1554|  27.8M|            Te3[(t0      ) & 0xff] ^
 1555|  27.8M|            rk[1];
 1556|  27.8M|        s2 =
 1557|  27.8M|            Te0[(t2 >> 24)       ] ^
 1558|  27.8M|            Te1[(t3 >> 16) & 0xff] ^
 1559|  27.8M|            Te2[(t0 >>  8) & 0xff] ^
 1560|  27.8M|            Te3[(t1      ) & 0xff] ^
 1561|  27.8M|            rk[2];
 1562|  27.8M|        s3 =
 1563|  27.8M|            Te0[(t3 >> 24)       ] ^
 1564|  27.8M|            Te1[(t0 >> 16) & 0xff] ^
 1565|  27.8M|            Te2[(t1 >>  8) & 0xff] ^
 1566|  27.8M|            Te3[(t2      ) & 0xff] ^
 1567|  27.8M|            rk[3];
 1568|  27.8M|    }
 1569|  4.63M|#endif /* ?FULL_UNROLL */
 1570|       |    /*
 1571|       |     * apply last round and
 1572|       |     * map cipher state to byte array block:
 1573|       |     */
 1574|  4.63M|    s0 =
 1575|  4.63M|        (Te2[(t0 >> 24)       ] & 0xff000000) ^
 1576|  4.63M|        (Te3[(t1 >> 16) & 0xff] & 0x00ff0000) ^
 1577|  4.63M|        (Te0[(t2 >>  8) & 0xff] & 0x0000ff00) ^
 1578|  4.63M|        (Te1[(t3      ) & 0xff] & 0x000000ff) ^
 1579|  4.63M|        rk[0];
 1580|  4.63M|    PUTU32(out     , s0);
  ------------------
  |  |   24|  4.63M|#  define PUTU32(ct, st) { (ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); (ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
  ------------------
 1581|  4.63M|    s1 =
 1582|  4.63M|        (Te2[(t1 >> 24)       ] & 0xff000000) ^
 1583|  4.63M|        (Te3[(t2 >> 16) & 0xff] & 0x00ff0000) ^
 1584|  4.63M|        (Te0[(t3 >>  8) & 0xff] & 0x0000ff00) ^
 1585|  4.63M|        (Te1[(t0      ) & 0xff] & 0x000000ff) ^
 1586|  4.63M|        rk[1];
 1587|  4.63M|    PUTU32(out +  4, s1);
  ------------------
  |  |   24|  4.63M|#  define PUTU32(ct, st) { (ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); (ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
  ------------------
 1588|  4.63M|    s2 =
 1589|  4.63M|        (Te2[(t2 >> 24)       ] & 0xff000000) ^
 1590|  4.63M|        (Te3[(t3 >> 16) & 0xff] & 0x00ff0000) ^
 1591|  4.63M|        (Te0[(t0 >>  8) & 0xff] & 0x0000ff00) ^
 1592|  4.63M|        (Te1[(t1      ) & 0xff] & 0x000000ff) ^
 1593|  4.63M|        rk[2];
 1594|  4.63M|    PUTU32(out +  8, s2);
  ------------------
  |  |   24|  4.63M|#  define PUTU32(ct, st) { (ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); (ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
  ------------------
 1595|  4.63M|    s3 =
 1596|  4.63M|        (Te2[(t3 >> 24)       ] & 0xff000000) ^
 1597|  4.63M|        (Te3[(t0 >> 16) & 0xff] & 0x00ff0000) ^
 1598|  4.63M|        (Te0[(t1 >>  8) & 0xff] & 0x0000ff00) ^
 1599|  4.63M|        (Te1[(t2      ) & 0xff] & 0x000000ff) ^
 1600|  4.63M|        rk[3];
 1601|  4.63M|    PUTU32(out + 12, s3);
  ------------------
  |  |   24|  4.63M|#  define PUTU32(ct, st) { (ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); (ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
  ------------------
 1602|  4.63M|}

EVP_PKEY_asn1_get_count:
   37|     10|{
   38|     10|    int num = OSSL_NELEM(standard_methods);
  ------------------
  |  |   13|     10|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
   39|     10|    if (app_methods)
  ------------------
  |  Branch (39:9): [True: 0, False: 10]
  ------------------
   40|      0|        num += sk_EVP_PKEY_ASN1_METHOD_num(app_methods);
   41|     10|    return num;
   42|     10|}
EVP_PKEY_asn1_get0:
   45|    200|{
   46|    200|    int num = OSSL_NELEM(standard_methods);
  ------------------
  |  |   13|    200|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
   47|    200|    if (idx < 0)
  ------------------
  |  Branch (47:9): [True: 0, False: 200]
  ------------------
   48|      0|        return NULL;
   49|    200|    if (idx < num)
  ------------------
  |  Branch (49:9): [True: 200, False: 0]
  ------------------
   50|    200|        return standard_methods[idx];
   51|      0|    idx -= num;
   52|      0|    return sk_EVP_PKEY_ASN1_METHOD_value(app_methods, idx);
   53|    200|}
EVP_PKEY_asn1_find:
   79|  28.9k|{
   80|  28.9k|    const EVP_PKEY_ASN1_METHOD *t;
   81|       |
   82|  28.9k|    for (;;) {
   83|  28.9k|        t = pkey_asn1_find(type);
   84|  28.9k|        if (!t || !(t->pkey_flags & ASN1_PKEY_ALIAS))
  ------------------
  |  | 1131|  28.9k|# define ASN1_PKEY_ALIAS         0x1
  ------------------
  |  Branch (84:13): [True: 0, False: 28.9k]
  |  Branch (84:19): [True: 28.9k, False: 0]
  ------------------
   85|  28.9k|            break;
   86|      0|        type = t->pkey_base_id;
   87|      0|    }
   88|  28.9k|    if (pe) {
  ------------------
  |  Branch (88:9): [True: 28.9k, False: 0]
  ------------------
   89|  28.9k|#ifndef OPENSSL_NO_ENGINE
   90|  28.9k|        ENGINE *e;
   91|       |        /* type will contain the final unaliased type */
   92|  28.9k|        e = ENGINE_get_pkey_asn1_meth_engine(type);
   93|  28.9k|        if (e) {
  ------------------
  |  Branch (93:13): [True: 0, False: 28.9k]
  ------------------
   94|      0|            *pe = e;
   95|      0|            return ENGINE_get_pkey_asn1_meth(e, type);
   96|      0|        }
   97|  28.9k|#endif
   98|  28.9k|        *pe = NULL;
   99|  28.9k|    }
  100|  28.9k|    return t;
  101|  28.9k|}
EVP_PKEY_asn1_find_str:
  105|     10|{
  106|     10|    int i;
  107|     10|    const EVP_PKEY_ASN1_METHOD *ameth = NULL;
  108|       |
  109|     10|    if (len == -1)
  ------------------
  |  Branch (109:9): [True: 10, False: 0]
  ------------------
  110|     10|        len = strlen(str);
  111|     10|    if (pe) {
  ------------------
  |  Branch (111:9): [True: 10, False: 0]
  ------------------
  112|     10|#ifndef OPENSSL_NO_ENGINE
  113|     10|        ENGINE *e;
  114|     10|        ameth = ENGINE_pkey_asn1_find_str(&e, str, len);
  115|     10|        if (ameth) {
  ------------------
  |  Branch (115:13): [True: 0, False: 10]
  ------------------
  116|       |            /*
  117|       |             * Convert structural into functional reference
  118|       |             */
  119|      0|            if (!ENGINE_init(e))
  ------------------
  |  Branch (119:17): [True: 0, False: 0]
  ------------------
  120|      0|                ameth = NULL;
  121|      0|            ENGINE_free(e);
  122|      0|            *pe = e;
  123|      0|            return ameth;
  124|      0|        }
  125|     10|#endif
  126|     10|        *pe = NULL;
  127|     10|    }
  128|    210|    for (i = EVP_PKEY_asn1_get_count(); i-- > 0; ) {
  ------------------
  |  Branch (128:41): [True: 200, False: 10]
  ------------------
  129|    200|        ameth = EVP_PKEY_asn1_get0(i);
  130|    200|        if (ameth->pkey_flags & ASN1_PKEY_ALIAS)
  ------------------
  |  | 1131|    200|# define ASN1_PKEY_ALIAS         0x1
  ------------------
  |  Branch (130:13): [True: 60, False: 140]
  ------------------
  131|     60|            continue;
  132|    140|        if ((int)strlen(ameth->pem_str) == len
  ------------------
  |  Branch (132:13): [True: 8, False: 132]
  ------------------
  133|      8|            && strncasecmp(ameth->pem_str, str, len) == 0)
  ------------------
  |  Branch (133:16): [True: 0, False: 8]
  ------------------
  134|      0|            return ameth;
  135|    140|    }
  136|     10|    return NULL;
  137|     10|}
ameth_lib.c:pkey_asn1_find:
   56|  28.9k|{
   57|  28.9k|    EVP_PKEY_ASN1_METHOD tmp;
   58|  28.9k|    const EVP_PKEY_ASN1_METHOD *t = &tmp, **ret;
   59|  28.9k|    tmp.pkey_id = type;
   60|  28.9k|    if (app_methods) {
  ------------------
  |  Branch (60:9): [True: 0, False: 28.9k]
  ------------------
   61|      0|        int idx;
   62|      0|        idx = sk_EVP_PKEY_ASN1_METHOD_find(app_methods, &tmp);
   63|      0|        if (idx >= 0)
  ------------------
  |  Branch (63:13): [True: 0, False: 0]
  ------------------
   64|      0|            return sk_EVP_PKEY_ASN1_METHOD_value(app_methods, idx);
   65|      0|    }
   66|  28.9k|    ret = OBJ_bsearch_ameth(&t, standard_methods, OSSL_NELEM(standard_methods));
  ------------------
  |  |   13|  28.9k|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
   67|  28.9k|    if (!ret || !*ret)
  ------------------
  |  Branch (67:9): [True: 0, False: 28.9k]
  |  Branch (67:17): [True: 0, False: 28.9k]
  ------------------
   68|      0|        return NULL;
   69|  28.9k|    return *ret;
   70|  28.9k|}
ameth_lib.c:ameth_cmp:
   29|  86.9k|{
   30|  86.9k|    return ((*a)->pkey_id - (*b)->pkey_id);
   31|  86.9k|}

ERR_load_ASN1_strings:
  344|      2|{
  345|      2|#ifndef OPENSSL_NO_ERR
  346|      2|    if (ERR_func_error_string(ASN1_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (346:9): [True: 2, False: 0]
  ------------------
  347|      2|        ERR_load_strings_const(ASN1_str_functs);
  348|      2|        ERR_load_strings_const(ASN1_str_reasons);
  349|      2|    }
  350|      2|#endif
  351|      2|    return 1;
  352|      2|}

ASN1_add_oid_module:
   50|      2|{
   51|      2|    CONF_module_add("oid_section", oid_module_init, oid_module_finish);
   52|      2|}

ASN1_add_stable_module:
   48|      2|{
   49|      2|    CONF_module_add("stbl_section", stbl_module_init, stbl_module_finish);
   50|      2|}

ASN1_item_free:
   19|   637k|{
   20|   637k|    asn1_item_embed_free(&val, it, 0);
   21|   637k|}
asn1_item_embed_free:
   29|   637k|{
   30|   637k|    const ASN1_TEMPLATE *tt = NULL, *seqtt;
   31|   637k|    const ASN1_EXTERN_FUNCS *ef;
   32|   637k|    const ASN1_AUX *aux = it->funcs;
   33|   637k|    ASN1_aux_cb *asn1_cb;
   34|   637k|    int i;
   35|       |
   36|   637k|    if (!pval)
  ------------------
  |  Branch (36:9): [True: 0, False: 637k]
  ------------------
   37|      0|        return;
   38|   637k|    if ((it->itype != ASN1_ITYPE_PRIMITIVE) && !*pval)
  ------------------
  |  |  633|   637k|# define ASN1_ITYPE_PRIMITIVE            0x0
  ------------------
  |  Branch (38:9): [True: 637k, False: 0]
  |  Branch (38:48): [True: 637k, False: 0]
  ------------------
   39|   637k|        return;
   40|      0|    if (aux && aux->asn1_cb)
  ------------------
  |  Branch (40:9): [True: 0, False: 0]
  |  Branch (40:16): [True: 0, False: 0]
  ------------------
   41|      0|        asn1_cb = aux->asn1_cb;
   42|      0|    else
   43|      0|        asn1_cb = 0;
   44|       |
   45|      0|    switch (it->itype) {
  ------------------
  |  Branch (45:13): [True: 0, False: 0]
  ------------------
   46|       |
   47|      0|    case ASN1_ITYPE_PRIMITIVE:
  ------------------
  |  |  633|      0|# define ASN1_ITYPE_PRIMITIVE            0x0
  ------------------
  |  Branch (47:5): [True: 0, False: 0]
  ------------------
   48|      0|        if (it->templates)
  ------------------
  |  Branch (48:13): [True: 0, False: 0]
  ------------------
   49|      0|            asn1_template_free(pval, it->templates);
   50|      0|        else
   51|      0|            asn1_primitive_free(pval, it, embed);
   52|      0|        break;
   53|       |
   54|      0|    case ASN1_ITYPE_MSTRING:
  ------------------
  |  |  641|      0|# define ASN1_ITYPE_MSTRING              0x5
  ------------------
  |  Branch (54:5): [True: 0, False: 0]
  ------------------
   55|      0|        asn1_primitive_free(pval, it, embed);
   56|      0|        break;
   57|       |
   58|      0|    case ASN1_ITYPE_CHOICE:
  ------------------
  |  |  637|      0|# define ASN1_ITYPE_CHOICE               0x2
  ------------------
  |  Branch (58:5): [True: 0, False: 0]
  ------------------
   59|      0|        if (asn1_cb) {
  ------------------
  |  Branch (59:13): [True: 0, False: 0]
  ------------------
   60|      0|            i = asn1_cb(ASN1_OP_FREE_PRE, pval, it, NULL);
  ------------------
  |  |  758|      0|# define ASN1_OP_FREE_PRE        2
  ------------------
   61|      0|            if (i == 2)
  ------------------
  |  Branch (61:17): [True: 0, False: 0]
  ------------------
   62|      0|                return;
   63|      0|        }
   64|      0|        i = asn1_get_choice_selector(pval, it);
   65|      0|        if ((i >= 0) && (i < it->tcount)) {
  ------------------
  |  Branch (65:13): [True: 0, False: 0]
  |  Branch (65:25): [True: 0, False: 0]
  ------------------
   66|      0|            ASN1_VALUE **pchval;
   67|       |
   68|      0|            tt = it->templates + i;
   69|      0|            pchval = asn1_get_field_ptr(pval, tt);
   70|      0|            asn1_template_free(pchval, tt);
   71|      0|        }
   72|      0|        if (asn1_cb)
  ------------------
  |  Branch (72:13): [True: 0, False: 0]
  ------------------
   73|      0|            asn1_cb(ASN1_OP_FREE_POST, pval, it, NULL);
  ------------------
  |  |  759|      0|# define ASN1_OP_FREE_POST       3
  ------------------
   74|      0|        if (embed == 0) {
  ------------------
  |  Branch (74:13): [True: 0, False: 0]
  ------------------
   75|      0|            OPENSSL_free(*pval);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   76|      0|            *pval = NULL;
   77|      0|        }
   78|      0|        break;
   79|       |
   80|      0|    case ASN1_ITYPE_EXTERN:
  ------------------
  |  |  639|      0|# define ASN1_ITYPE_EXTERN               0x4
  ------------------
  |  Branch (80:5): [True: 0, False: 0]
  ------------------
   81|      0|        ef = it->funcs;
   82|      0|        if (ef && ef->asn1_ex_free)
  ------------------
  |  Branch (82:13): [True: 0, False: 0]
  |  Branch (82:19): [True: 0, False: 0]
  ------------------
   83|      0|            ef->asn1_ex_free(pval, it);
   84|      0|        break;
   85|       |
   86|      0|    case ASN1_ITYPE_NDEF_SEQUENCE:
  ------------------
  |  |  643|      0|# define ASN1_ITYPE_NDEF_SEQUENCE        0x6
  ------------------
  |  Branch (86:5): [True: 0, False: 0]
  ------------------
   87|      0|    case ASN1_ITYPE_SEQUENCE:
  ------------------
  |  |  635|      0|# define ASN1_ITYPE_SEQUENCE             0x1
  ------------------
  |  Branch (87:5): [True: 0, False: 0]
  ------------------
   88|      0|        if (asn1_do_lock(pval, -1, it) != 0) /* if error or ref-counter > 0 */
  ------------------
  |  Branch (88:13): [True: 0, False: 0]
  ------------------
   89|      0|            return;
   90|      0|        if (asn1_cb) {
  ------------------
  |  Branch (90:13): [True: 0, False: 0]
  ------------------
   91|      0|            i = asn1_cb(ASN1_OP_FREE_PRE, pval, it, NULL);
  ------------------
  |  |  758|      0|# define ASN1_OP_FREE_PRE        2
  ------------------
   92|      0|            if (i == 2)
  ------------------
  |  Branch (92:17): [True: 0, False: 0]
  ------------------
   93|      0|                return;
   94|      0|        }
   95|      0|        asn1_enc_free(pval, it);
   96|       |        /*
   97|       |         * If we free up as normal we will invalidate any ANY DEFINED BY
   98|       |         * field and we won't be able to determine the type of the field it
   99|       |         * defines. So free up in reverse order.
  100|       |         */
  101|      0|        tt = it->templates + it->tcount;
  102|      0|        for (i = 0; i < it->tcount; i++) {
  ------------------
  |  Branch (102:21): [True: 0, False: 0]
  ------------------
  103|      0|            ASN1_VALUE **pseqval;
  104|       |
  105|      0|            tt--;
  106|      0|            seqtt = asn1_do_adb(pval, tt, 0);
  107|      0|            if (!seqtt)
  ------------------
  |  Branch (107:17): [True: 0, False: 0]
  ------------------
  108|      0|                continue;
  109|      0|            pseqval = asn1_get_field_ptr(pval, seqtt);
  110|      0|            asn1_template_free(pseqval, seqtt);
  111|      0|        }
  112|      0|        if (asn1_cb)
  ------------------
  |  Branch (112:13): [True: 0, False: 0]
  ------------------
  113|      0|            asn1_cb(ASN1_OP_FREE_POST, pval, it, NULL);
  ------------------
  |  |  759|      0|# define ASN1_OP_FREE_POST       3
  ------------------
  114|      0|        if (embed == 0) {
  ------------------
  |  Branch (114:13): [True: 0, False: 0]
  ------------------
  115|      0|            OPENSSL_free(*pval);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  116|       |            *pval = NULL;
  117|      0|        }
  118|      0|        break;
  119|      0|    }
  120|      0|}

ERR_load_ASYNC_strings:
   43|      2|{
   44|      2|#ifndef OPENSSL_NO_ERR
   45|      2|    if (ERR_func_error_string(ASYNC_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (45:9): [True: 2, False: 0]
  ------------------
   46|      2|        ERR_load_strings_const(ASYNC_str_functs);
   47|      2|        ERR_load_strings_const(ASYNC_str_reasons);
   48|      2|    }
   49|      2|#endif
   50|      2|    return 1;
   51|      2|}

ASYNC_WAIT_CTX_free:
   21|  28.9k|{
   22|  28.9k|    struct fd_lookup_st *curr;
   23|  28.9k|    struct fd_lookup_st *next;
   24|       |
   25|  28.9k|    if (ctx == NULL)
  ------------------
  |  Branch (25:9): [True: 28.9k, False: 0]
  ------------------
   26|  28.9k|        return;
   27|       |
   28|      0|    curr = ctx->fds;
   29|      0|    while (curr != NULL) {
  ------------------
  |  Branch (29:12): [True: 0, False: 0]
  ------------------
   30|      0|        if (!curr->del) {
  ------------------
  |  Branch (30:13): [True: 0, False: 0]
  ------------------
   31|       |            /* Only try and cleanup if it hasn't been marked deleted */
   32|      0|            if (curr->cleanup != NULL)
  ------------------
  |  Branch (32:17): [True: 0, False: 0]
  ------------------
   33|      0|                curr->cleanup(ctx, curr->key, curr->fd, curr->custom_data);
   34|      0|        }
   35|       |        /* Always free the fd_lookup_st */
   36|      0|        next = curr->next;
   37|      0|        OPENSSL_free(curr);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   38|      0|        curr = next;
   39|      0|    }
   40|       |
   41|      0|    OPENSSL_free(ctx);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   42|      0|}

BIO_snprintf:
  904|      2|{
  905|      2|    va_list args;
  906|      2|    int ret;
  907|       |
  908|      2|    va_start(args, format);
  909|       |
  910|      2|    ret = BIO_vsnprintf(buf, n, format, args);
  911|       |
  912|       |    va_end(args);
  913|      2|    return ret;
  914|      2|}
BIO_vsnprintf:
  917|      2|{
  918|      2|    size_t retlen;
  919|      2|    int truncated;
  920|       |
  921|      2|    if (!_dopr(&buf, NULL, &n, &retlen, &truncated, format, args))
  ------------------
  |  Branch (921:9): [True: 0, False: 2]
  ------------------
  922|      0|        return -1;
  923|       |
  924|      2|    if (truncated)
  ------------------
  |  Branch (924:9): [True: 0, False: 2]
  ------------------
  925|       |        /*
  926|       |         * In case of truncation, return -1 like traditional snprintf.
  927|       |         * (Current drafts for ISO/IEC 9899 say snprintf should return the
  928|       |         * number of characters that would have been written, had the buffer
  929|       |         * been large enough.)
  930|       |         */
  931|      0|        return -1;
  932|      2|    else
  933|      2|        return (retlen <= INT_MAX) ? (int)retlen : -1;
  ------------------
  |  Branch (933:16): [True: 2, False: 0]
  ------------------
  934|      2|}
b_print.c:_dopr:
   88|      2|{
   89|      2|    char ch;
   90|      2|    int64_t value;
   91|      2|    LDOUBLE fvalue;
  ------------------
  |  |   27|      2|# define LDOUBLE double
  ------------------
   92|      2|    char *strvalue;
   93|      2|    int min;
   94|      2|    int max;
   95|      2|    int state;
   96|      2|    int flags;
   97|      2|    int cflags;
   98|      2|    size_t currlen;
   99|       |
  100|      2|    state = DP_S_DEFAULT;
  ------------------
  |  |   42|      2|#define DP_S_DEFAULT    0
  ------------------
  101|      2|    flags = currlen = cflags = min = 0;
  102|      2|    max = -1;
  103|      2|    ch = *format++;
  104|       |
  105|     40|    while (state != DP_S_DONE) {
  ------------------
  |  |   49|     40|#define DP_S_DONE       7
  ------------------
  |  Branch (105:12): [True: 38, False: 2]
  ------------------
  106|     38|        if (ch == '\0' || (buffer == NULL && currlen >= *maxlen))
  ------------------
  |  Branch (106:13): [True: 2, False: 36]
  |  Branch (106:28): [True: 36, False: 0]
  |  Branch (106:46): [True: 0, False: 36]
  ------------------
  107|      2|            state = DP_S_DONE;
  ------------------
  |  |   49|      2|#define DP_S_DONE       7
  ------------------
  108|       |
  109|     38|        switch (state) {
  110|      6|        case DP_S_DEFAULT:
  ------------------
  |  |   42|      6|#define DP_S_DEFAULT    0
  ------------------
  |  Branch (110:9): [True: 6, False: 32]
  ------------------
  111|      6|            if (ch == '%')
  ------------------
  |  Branch (111:17): [True: 6, False: 0]
  ------------------
  112|      6|                state = DP_S_FLAGS;
  ------------------
  |  |   43|      6|#define DP_S_FLAGS      1
  ------------------
  113|      0|            else
  114|      0|                if (!doapr_outch(sbuffer, buffer, &currlen, maxlen, ch))
  ------------------
  |  Branch (114:21): [True: 0, False: 0]
  ------------------
  115|      0|                    return 0;
  116|      6|            ch = *format++;
  117|      6|            break;
  118|      6|        case DP_S_FLAGS:
  ------------------
  |  |   43|      6|#define DP_S_FLAGS      1
  ------------------
  |  Branch (118:9): [True: 6, False: 32]
  ------------------
  119|      6|            switch (ch) {
  120|      0|            case '-':
  ------------------
  |  Branch (120:13): [True: 0, False: 6]
  ------------------
  121|      0|                flags |= DP_F_MINUS;
  ------------------
  |  |   53|      0|#define DP_F_MINUS      (1 << 0)
  ------------------
  122|      0|                ch = *format++;
  123|      0|                break;
  124|      0|            case '+':
  ------------------
  |  Branch (124:13): [True: 0, False: 6]
  ------------------
  125|      0|                flags |= DP_F_PLUS;
  ------------------
  |  |   55|      0|#define DP_F_PLUS       (1 << 1)
  ------------------
  126|      0|                ch = *format++;
  127|      0|                break;
  128|      0|            case ' ':
  ------------------
  |  Branch (128:13): [True: 0, False: 6]
  ------------------
  129|      0|                flags |= DP_F_SPACE;
  ------------------
  |  |   57|      0|#define DP_F_SPACE      (1 << 2)
  ------------------
  130|      0|                ch = *format++;
  131|      0|                break;
  132|      0|            case '#':
  ------------------
  |  Branch (132:13): [True: 0, False: 6]
  ------------------
  133|      0|                flags |= DP_F_NUM;
  ------------------
  |  |   59|      0|#define DP_F_NUM        (1 << 3)
  ------------------
  134|      0|                ch = *format++;
  135|      0|                break;
  136|      0|            case '0':
  ------------------
  |  Branch (136:13): [True: 0, False: 6]
  ------------------
  137|      0|                flags |= DP_F_ZERO;
  ------------------
  |  |   61|      0|#define DP_F_ZERO       (1 << 4)
  ------------------
  138|      0|                ch = *format++;
  139|      0|                break;
  140|      6|            default:
  ------------------
  |  Branch (140:13): [True: 6, False: 0]
  ------------------
  141|      6|                state = DP_S_MIN;
  ------------------
  |  |   44|      6|#define DP_S_MIN        2
  ------------------
  142|      6|                break;
  143|      6|            }
  144|      6|            break;
  145|      6|        case DP_S_MIN:
  ------------------
  |  |   44|      6|#define DP_S_MIN        2
  ------------------
  |  Branch (145:9): [True: 6, False: 32]
  ------------------
  146|      6|            if (ossl_isdigit(ch)) {
  ------------------
  |  |   71|      6|# define ossl_isdigit(c)        (ossl_ctype_check((c), CTYPE_MASK_digit))
  |  |  ------------------
  |  |  |  |   26|      6|# define CTYPE_MASK_digit       0x4
  |  |  ------------------
  |  |  |  Branch (71:33): [True: 0, False: 6]
  |  |  ------------------
  ------------------
  147|      0|                min = 10 * min + char_to_int(ch);
  ------------------
  |  |   80|      0|#define char_to_int(p) (p - '0')
  ------------------
  148|      0|                ch = *format++;
  149|      6|            } else if (ch == '*') {
  ------------------
  |  Branch (149:24): [True: 0, False: 6]
  ------------------
  150|      0|                min = va_arg(args, int);
  151|      0|                ch = *format++;
  152|      0|                state = DP_S_DOT;
  ------------------
  |  |   45|      0|#define DP_S_DOT        3
  ------------------
  153|      0|            } else
  154|      6|                state = DP_S_DOT;
  ------------------
  |  |   45|      6|#define DP_S_DOT        3
  ------------------
  155|      6|            break;
  156|      6|        case DP_S_DOT:
  ------------------
  |  |   45|      6|#define DP_S_DOT        3
  ------------------
  |  Branch (156:9): [True: 6, False: 32]
  ------------------
  157|      6|            if (ch == '.') {
  ------------------
  |  Branch (157:17): [True: 0, False: 6]
  ------------------
  158|      0|                state = DP_S_MAX;
  ------------------
  |  |   46|      0|#define DP_S_MAX        4
  ------------------
  159|      0|                ch = *format++;
  160|      0|            } else
  161|      6|                state = DP_S_MOD;
  ------------------
  |  |   47|      6|#define DP_S_MOD        5
  ------------------
  162|      6|            break;
  163|      0|        case DP_S_MAX:
  ------------------
  |  |   46|      0|#define DP_S_MAX        4
  ------------------
  |  Branch (163:9): [True: 0, False: 38]
  ------------------
  164|      0|            if (ossl_isdigit(ch)) {
  ------------------
  |  |   71|      0|# define ossl_isdigit(c)        (ossl_ctype_check((c), CTYPE_MASK_digit))
  |  |  ------------------
  |  |  |  |   26|      0|# define CTYPE_MASK_digit       0x4
  |  |  ------------------
  |  |  |  Branch (71:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  165|      0|                if (max < 0)
  ------------------
  |  Branch (165:21): [True: 0, False: 0]
  ------------------
  166|      0|                    max = 0;
  167|      0|                max = 10 * max + char_to_int(ch);
  ------------------
  |  |   80|      0|#define char_to_int(p) (p - '0')
  ------------------
  168|      0|                ch = *format++;
  169|      0|            } else if (ch == '*') {
  ------------------
  |  Branch (169:24): [True: 0, False: 0]
  ------------------
  170|      0|                max = va_arg(args, int);
  171|      0|                ch = *format++;
  172|      0|                state = DP_S_MOD;
  ------------------
  |  |   47|      0|#define DP_S_MOD        5
  ------------------
  173|      0|            } else
  174|      0|                state = DP_S_MOD;
  ------------------
  |  |   47|      0|#define DP_S_MOD        5
  ------------------
  175|      0|            break;
  176|      6|        case DP_S_MOD:
  ------------------
  |  |   47|      6|#define DP_S_MOD        5
  ------------------
  |  Branch (176:9): [True: 6, False: 32]
  ------------------
  177|      6|            switch (ch) {
  178|      0|            case 'h':
  ------------------
  |  Branch (178:13): [True: 0, False: 6]
  ------------------
  179|      0|                cflags = DP_C_SHORT;
  ------------------
  |  |   68|      0|#define DP_C_SHORT      1
  ------------------
  180|      0|                ch = *format++;
  181|      0|                break;
  182|      0|            case 'l':
  ------------------
  |  Branch (182:13): [True: 0, False: 6]
  ------------------
  183|      0|                if (*format == 'l') {
  ------------------
  |  Branch (183:21): [True: 0, False: 0]
  ------------------
  184|      0|                    cflags = DP_C_LLONG;
  ------------------
  |  |   71|      0|#define DP_C_LLONG      4
  ------------------
  185|      0|                    format++;
  186|      0|                } else
  187|      0|                    cflags = DP_C_LONG;
  ------------------
  |  |   69|      0|#define DP_C_LONG       2
  ------------------
  188|      0|                ch = *format++;
  189|      0|                break;
  190|      0|            case 'q':
  ------------------
  |  Branch (190:13): [True: 0, False: 6]
  ------------------
  191|      0|            case 'j':
  ------------------
  |  Branch (191:13): [True: 0, False: 6]
  ------------------
  192|      0|                cflags = DP_C_LLONG;
  ------------------
  |  |   71|      0|#define DP_C_LLONG      4
  ------------------
  193|      0|                ch = *format++;
  194|      0|                break;
  195|      0|            case 'L':
  ------------------
  |  Branch (195:13): [True: 0, False: 6]
  ------------------
  196|      0|                cflags = DP_C_LDOUBLE;
  ------------------
  |  |   70|      0|#define DP_C_LDOUBLE    3
  ------------------
  197|      0|                ch = *format++;
  198|      0|                break;
  199|      0|            case 'z':
  ------------------
  |  Branch (199:13): [True: 0, False: 6]
  ------------------
  200|      0|                cflags = DP_C_SIZE;
  ------------------
  |  |   72|      0|#define DP_C_SIZE       5
  ------------------
  201|      0|                ch = *format++;
  202|      0|                break;
  203|      6|            default:
  ------------------
  |  Branch (203:13): [True: 6, False: 0]
  ------------------
  204|      6|                break;
  205|      6|            }
  206|      6|            state = DP_S_CONV;
  ------------------
  |  |   48|      6|#define DP_S_CONV       6
  ------------------
  207|      6|            break;
  208|      6|        case DP_S_CONV:
  ------------------
  |  |   48|      6|#define DP_S_CONV       6
  ------------------
  |  Branch (208:9): [True: 6, False: 32]
  ------------------
  209|      6|            switch (ch) {
  210|      0|            case 'd':
  ------------------
  |  Branch (210:13): [True: 0, False: 6]
  ------------------
  211|      0|            case 'i':
  ------------------
  |  Branch (211:13): [True: 0, False: 6]
  ------------------
  212|      0|                switch (cflags) {
  213|      0|                case DP_C_SHORT:
  ------------------
  |  |   68|      0|#define DP_C_SHORT      1
  ------------------
  |  Branch (213:17): [True: 0, False: 0]
  ------------------
  214|      0|                    value = (short int)va_arg(args, int);
  215|      0|                    break;
  216|      0|                case DP_C_LONG:
  ------------------
  |  |   69|      0|#define DP_C_LONG       2
  ------------------
  |  Branch (216:17): [True: 0, False: 0]
  ------------------
  217|      0|                    value = va_arg(args, long int);
  218|      0|                    break;
  219|      0|                case DP_C_LLONG:
  ------------------
  |  |   71|      0|#define DP_C_LLONG      4
  ------------------
  |  Branch (219:17): [True: 0, False: 0]
  ------------------
  220|      0|                    value = va_arg(args, int64_t);
  221|      0|                    break;
  222|      0|                case DP_C_SIZE:
  ------------------
  |  |   72|      0|#define DP_C_SIZE       5
  ------------------
  |  Branch (222:17): [True: 0, False: 0]
  ------------------
  223|      0|                    value = va_arg(args, ossl_ssize_t);
  224|      0|                    break;
  225|      0|                default:
  ------------------
  |  Branch (225:17): [True: 0, False: 0]
  ------------------
  226|      0|                    value = va_arg(args, int);
  227|      0|                    break;
  228|      0|                }
  229|      0|                if (!fmtint(sbuffer, buffer, &currlen, maxlen, value, 10, min,
  ------------------
  |  Branch (229:21): [True: 0, False: 0]
  ------------------
  230|      0|                            max, flags))
  231|      0|                    return 0;
  232|      0|                break;
  233|      0|            case 'X':
  ------------------
  |  Branch (233:13): [True: 0, False: 6]
  ------------------
  234|      0|                flags |= DP_F_UP;
  ------------------
  |  |   63|      0|#define DP_F_UP         (1 << 5)
  ------------------
  235|       |                /* FALLTHROUGH */
  236|      0|            case 'x':
  ------------------
  |  Branch (236:13): [True: 0, False: 6]
  ------------------
  237|      0|            case 'o':
  ------------------
  |  Branch (237:13): [True: 0, False: 6]
  ------------------
  238|      0|            case 'u':
  ------------------
  |  Branch (238:13): [True: 0, False: 6]
  ------------------
  239|      0|                flags |= DP_F_UNSIGNED;
  ------------------
  |  |   65|      0|#define DP_F_UNSIGNED   (1 << 6)
  ------------------
  240|      0|                switch (cflags) {
  241|      0|                case DP_C_SHORT:
  ------------------
  |  |   68|      0|#define DP_C_SHORT      1
  ------------------
  |  Branch (241:17): [True: 0, False: 0]
  ------------------
  242|      0|                    value = (unsigned short int)va_arg(args, unsigned int);
  243|      0|                    break;
  244|      0|                case DP_C_LONG:
  ------------------
  |  |   69|      0|#define DP_C_LONG       2
  ------------------
  |  Branch (244:17): [True: 0, False: 0]
  ------------------
  245|      0|                    value = va_arg(args, unsigned long int);
  246|      0|                    break;
  247|      0|                case DP_C_LLONG:
  ------------------
  |  |   71|      0|#define DP_C_LLONG      4
  ------------------
  |  Branch (247:17): [True: 0, False: 0]
  ------------------
  248|      0|                    value = va_arg(args, uint64_t);
  249|      0|                    break;
  250|      0|                case DP_C_SIZE:
  ------------------
  |  |   72|      0|#define DP_C_SIZE       5
  ------------------
  |  Branch (250:17): [True: 0, False: 0]
  ------------------
  251|      0|                    value = va_arg(args, size_t);
  252|      0|                    break;
  253|      0|                default:
  ------------------
  |  Branch (253:17): [True: 0, False: 0]
  ------------------
  254|      0|                    value = va_arg(args, unsigned int);
  255|      0|                    break;
  256|      0|                }
  257|      0|                if (!fmtint(sbuffer, buffer, &currlen, maxlen, value,
  ------------------
  |  Branch (257:21): [True: 0, False: 0]
  ------------------
  258|      0|                            ch == 'o' ? 8 : (ch == 'u' ? 10 : 16),
  ------------------
  |  Branch (258:29): [True: 0, False: 0]
  |  Branch (258:46): [True: 0, False: 0]
  ------------------
  259|      0|                            min, max, flags))
  260|      0|                    return 0;
  261|      0|                break;
  262|      0|            case 'f':
  ------------------
  |  Branch (262:13): [True: 0, False: 6]
  ------------------
  263|      0|                if (cflags == DP_C_LDOUBLE)
  ------------------
  |  |   70|      0|#define DP_C_LDOUBLE    3
  ------------------
  |  Branch (263:21): [True: 0, False: 0]
  ------------------
  264|      0|                    fvalue = va_arg(args, LDOUBLE);
  265|      0|                else
  266|      0|                    fvalue = va_arg(args, double);
  267|      0|                if (!fmtfp(sbuffer, buffer, &currlen, maxlen, fvalue, min, max,
  ------------------
  |  Branch (267:21): [True: 0, False: 0]
  ------------------
  268|      0|                           flags, F_FORMAT))
  ------------------
  |  |   75|      0|#define F_FORMAT        0
  ------------------
  269|      0|                    return 0;
  270|      0|                break;
  271|      0|            case 'E':
  ------------------
  |  Branch (271:13): [True: 0, False: 6]
  ------------------
  272|      0|                flags |= DP_F_UP;
  ------------------
  |  |   63|      0|#define DP_F_UP         (1 << 5)
  ------------------
  273|       |                /* fall thru */
  274|      0|            case 'e':
  ------------------
  |  Branch (274:13): [True: 0, False: 6]
  ------------------
  275|      0|                if (cflags == DP_C_LDOUBLE)
  ------------------
  |  |   70|      0|#define DP_C_LDOUBLE    3
  ------------------
  |  Branch (275:21): [True: 0, False: 0]
  ------------------
  276|      0|                    fvalue = va_arg(args, LDOUBLE);
  277|      0|                else
  278|      0|                    fvalue = va_arg(args, double);
  279|      0|                if (!fmtfp(sbuffer, buffer, &currlen, maxlen, fvalue, min, max,
  ------------------
  |  Branch (279:21): [True: 0, False: 0]
  ------------------
  280|      0|                           flags, E_FORMAT))
  ------------------
  |  |   76|      0|#define E_FORMAT        1
  ------------------
  281|      0|                    return 0;
  282|      0|                break;
  283|      0|            case 'G':
  ------------------
  |  Branch (283:13): [True: 0, False: 6]
  ------------------
  284|      0|                flags |= DP_F_UP;
  ------------------
  |  |   63|      0|#define DP_F_UP         (1 << 5)
  ------------------
  285|       |                /* fall thru */
  286|      0|            case 'g':
  ------------------
  |  Branch (286:13): [True: 0, False: 6]
  ------------------
  287|      0|                if (cflags == DP_C_LDOUBLE)
  ------------------
  |  |   70|      0|#define DP_C_LDOUBLE    3
  ------------------
  |  Branch (287:21): [True: 0, False: 0]
  ------------------
  288|      0|                    fvalue = va_arg(args, LDOUBLE);
  289|      0|                else
  290|      0|                    fvalue = va_arg(args, double);
  291|      0|                if (!fmtfp(sbuffer, buffer, &currlen, maxlen, fvalue, min, max,
  ------------------
  |  Branch (291:21): [True: 0, False: 0]
  ------------------
  292|      0|                           flags, G_FORMAT))
  ------------------
  |  |   77|      0|#define G_FORMAT        2
  ------------------
  293|      0|                    return 0;
  294|      0|                break;
  295|      0|            case 'c':
  ------------------
  |  Branch (295:13): [True: 0, False: 6]
  ------------------
  296|      0|                if (!doapr_outch(sbuffer, buffer, &currlen, maxlen,
  ------------------
  |  Branch (296:21): [True: 0, False: 0]
  ------------------
  297|      0|                                 va_arg(args, int)))
  298|      0|                    return 0;
  299|      0|                break;
  300|      6|            case 's':
  ------------------
  |  Branch (300:13): [True: 6, False: 0]
  ------------------
  301|      6|                strvalue = va_arg(args, char *);
  302|      6|                if (max < 0) {
  ------------------
  |  Branch (302:21): [True: 6, False: 0]
  ------------------
  303|      6|                    if (buffer)
  ------------------
  |  Branch (303:25): [True: 0, False: 6]
  ------------------
  304|      0|                        max = INT_MAX;
  305|      6|                    else
  306|      6|                        max = *maxlen;
  307|      6|                }
  308|      6|                if (!fmtstr(sbuffer, buffer, &currlen, maxlen, strvalue,
  ------------------
  |  Branch (308:21): [True: 0, False: 6]
  ------------------
  309|      6|                            flags, min, max))
  310|      0|                    return 0;
  311|      6|                break;
  312|      6|            case 'p':
  ------------------
  |  Branch (312:13): [True: 0, False: 6]
  ------------------
  313|      0|                value = (size_t)va_arg(args, void *);
  314|      0|                if (!fmtint(sbuffer, buffer, &currlen, maxlen,
  ------------------
  |  Branch (314:21): [True: 0, False: 0]
  ------------------
  315|      0|                            value, 16, min, max, flags | DP_F_NUM))
  ------------------
  |  |   59|      0|#define DP_F_NUM        (1 << 3)
  ------------------
  316|      0|                    return 0;
  317|      0|                break;
  318|      0|            case 'n':
  ------------------
  |  Branch (318:13): [True: 0, False: 6]
  ------------------
  319|      0|                {
  320|      0|                    int *num;
  321|      0|                    num = va_arg(args, int *);
  322|      0|                    *num = currlen;
  323|      0|                }
  324|      0|                break;
  325|      0|            case '%':
  ------------------
  |  Branch (325:13): [True: 0, False: 6]
  ------------------
  326|      0|                if (!doapr_outch(sbuffer, buffer, &currlen, maxlen, ch))
  ------------------
  |  Branch (326:21): [True: 0, False: 0]
  ------------------
  327|      0|                    return 0;
  328|      0|                break;
  329|      0|            case 'w':
  ------------------
  |  Branch (329:13): [True: 0, False: 6]
  ------------------
  330|       |                /* not supported yet, treat as next char */
  331|      0|                ch = *format++;
  332|      0|                break;
  333|      0|            default:
  ------------------
  |  Branch (333:13): [True: 0, False: 6]
  ------------------
  334|       |                /* unknown, skip */
  335|      0|                break;
  336|      6|            }
  337|      6|            ch = *format++;
  338|      6|            state = DP_S_DEFAULT;
  ------------------
  |  |   42|      6|#define DP_S_DEFAULT    0
  ------------------
  339|      6|            flags = cflags = min = 0;
  340|      6|            max = -1;
  341|      6|            break;
  342|      2|        case DP_S_DONE:
  ------------------
  |  |   49|      2|#define DP_S_DONE       7
  ------------------
  |  Branch (342:9): [True: 2, False: 36]
  ------------------
  343|      2|            break;
  344|      0|        default:
  ------------------
  |  Branch (344:9): [True: 0, False: 38]
  ------------------
  345|      0|            break;
  346|     38|        }
  347|     38|    }
  348|       |    /*
  349|       |     * We have to truncate if there is no dynamic buffer and we have filled the
  350|       |     * static buffer.
  351|       |     */
  352|      2|    if (buffer == NULL) {
  ------------------
  |  Branch (352:9): [True: 2, False: 0]
  ------------------
  353|      2|        *truncated = (currlen > *maxlen - 1);
  354|      2|        if (*truncated)
  ------------------
  |  Branch (354:13): [True: 0, False: 2]
  ------------------
  355|      0|            currlen = *maxlen - 1;
  356|      2|    }
  357|      2|    if (!doapr_outch(sbuffer, buffer, &currlen, maxlen, '\0'))
  ------------------
  |  Branch (357:9): [True: 0, False: 2]
  ------------------
  358|      0|        return 0;
  359|      2|    *retlen = currlen - 1;
  360|      2|    return 1;
  361|      2|}
b_print.c:doapr_outch:
  811|     42|{
  812|       |    /* If we haven't at least one buffer, someone has done a big booboo */
  813|     42|    if (!ossl_assert(*sbuffer != NULL || buffer != NULL))
  ------------------
  |  |   40|     42|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |  ------------------
  |  |  |  Branch (40:42): [True: 42, False: 0]
  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  ------------------
  |  |   41|     42|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (813:9): [True: 0, False: 42]
  ------------------
  814|      0|        return 0;
  815|       |
  816|       |    /* |currlen| must always be <= |*maxlen| */
  817|     42|    if (!ossl_assert(*currlen <= *maxlen))
  ------------------
  |  |   40|     42|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|     42|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (817:9): [True: 0, False: 42]
  ------------------
  818|      0|        return 0;
  819|       |
  820|     42|    if (buffer && *currlen == *maxlen) {
  ------------------
  |  Branch (820:9): [True: 0, False: 42]
  |  Branch (820:19): [True: 0, False: 0]
  ------------------
  821|      0|        if (*maxlen > INT_MAX - BUFFER_INC)
  ------------------
  |  |  806|      0|#define BUFFER_INC  1024
  ------------------
  |  Branch (821:13): [True: 0, False: 0]
  ------------------
  822|      0|            return 0;
  823|       |
  824|      0|        *maxlen += BUFFER_INC;
  ------------------
  |  |  806|      0|#define BUFFER_INC  1024
  ------------------
  825|      0|        if (*buffer == NULL) {
  ------------------
  |  Branch (825:13): [True: 0, False: 0]
  ------------------
  826|      0|            if ((*buffer = OPENSSL_malloc(*maxlen)) == NULL) {
  ------------------
  |  |  118|      0|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (826:17): [True: 0, False: 0]
  ------------------
  827|      0|                BIOerr(BIO_F_DOAPR_OUTCH, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  828|      0|                return 0;
  829|      0|            }
  830|      0|            if (*currlen > 0) {
  ------------------
  |  Branch (830:17): [True: 0, False: 0]
  ------------------
  831|      0|                if (!ossl_assert(*sbuffer != NULL))
  ------------------
  |  |   40|      0|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|      0|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (831:21): [True: 0, False: 0]
  ------------------
  832|      0|                    return 0;
  833|      0|                memcpy(*buffer, *sbuffer, *currlen);
  834|      0|            }
  835|      0|            *sbuffer = NULL;
  836|      0|        } else {
  837|      0|            char *tmpbuf;
  838|      0|            tmpbuf = OPENSSL_realloc(*buffer, *maxlen);
  ------------------
  |  |  122|      0|        CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  839|      0|            if (tmpbuf == NULL)
  ------------------
  |  Branch (839:17): [True: 0, False: 0]
  ------------------
  840|      0|                return 0;
  841|      0|            *buffer = tmpbuf;
  842|      0|        }
  843|      0|    }
  844|       |
  845|     42|    if (*currlen < *maxlen) {
  ------------------
  |  Branch (845:9): [True: 42, False: 0]
  ------------------
  846|     42|        if (*sbuffer)
  ------------------
  |  Branch (846:13): [True: 42, False: 0]
  ------------------
  847|     42|            (*sbuffer)[(*currlen)++] = (char)c;
  848|      0|        else
  849|      0|            (*buffer)[(*currlen)++] = (char)c;
  850|     42|    }
  851|       |
  852|     42|    return 1;
  853|     42|}
b_print.c:fmtstr:
  368|      6|{
  369|      6|    int padlen;
  370|      6|    size_t strln;
  371|      6|    int cnt = 0;
  372|       |
  373|      6|    if (value == 0)
  ------------------
  |  Branch (373:9): [True: 0, False: 6]
  ------------------
  374|      0|        value = "<NULL>";
  375|       |
  376|      6|    strln = OPENSSL_strnlen(value, max < 0 ? SIZE_MAX : (size_t)max);
  ------------------
  |  Branch (376:36): [True: 0, False: 6]
  ------------------
  377|       |
  378|      6|    padlen = min - strln;
  379|      6|    if (min < 0 || padlen < 0)
  ------------------
  |  Branch (379:9): [True: 0, False: 6]
  |  Branch (379:20): [True: 6, False: 0]
  ------------------
  380|      6|        padlen = 0;
  381|      6|    if (max >= 0) {
  ------------------
  |  Branch (381:9): [True: 6, False: 0]
  ------------------
  382|       |        /*
  383|       |         * Calculate the maximum output including padding.
  384|       |         * Make sure max doesn't overflow into negativity
  385|       |         */
  386|      6|        if (max < INT_MAX - padlen)
  ------------------
  |  Branch (386:13): [True: 6, False: 0]
  ------------------
  387|      6|            max += padlen;
  388|      0|        else
  389|      0|            max = INT_MAX;
  390|      6|    }
  391|      6|    if (flags & DP_F_MINUS)
  ------------------
  |  |   53|      6|#define DP_F_MINUS      (1 << 0)
  ------------------
  |  Branch (391:9): [True: 0, False: 6]
  ------------------
  392|      0|        padlen = -padlen;
  393|       |
  394|      6|    while ((padlen > 0) && (max < 0 || cnt < max)) {
  ------------------
  |  Branch (394:12): [True: 0, False: 6]
  |  Branch (394:29): [True: 0, False: 0]
  |  Branch (394:40): [True: 0, False: 0]
  ------------------
  395|      0|        if (!doapr_outch(sbuffer, buffer, currlen, maxlen, ' '))
  ------------------
  |  Branch (395:13): [True: 0, False: 0]
  ------------------
  396|      0|            return 0;
  397|      0|        --padlen;
  398|      0|        ++cnt;
  399|      0|    }
  400|     46|    while (strln > 0 && (max < 0 || cnt < max)) {
  ------------------
  |  Branch (400:12): [True: 40, False: 6]
  |  Branch (400:26): [True: 0, False: 40]
  |  Branch (400:37): [True: 40, False: 0]
  ------------------
  401|     40|        if (!doapr_outch(sbuffer, buffer, currlen, maxlen, *value++))
  ------------------
  |  Branch (401:13): [True: 0, False: 40]
  ------------------
  402|      0|            return 0;
  403|     40|        --strln;
  404|     40|        ++cnt;
  405|     40|    }
  406|      6|    while ((padlen < 0) && (max < 0 || cnt < max)) {
  ------------------
  |  Branch (406:12): [True: 0, False: 6]
  |  Branch (406:29): [True: 0, False: 0]
  |  Branch (406:40): [True: 0, False: 0]
  ------------------
  407|      0|        if (!doapr_outch(sbuffer, buffer, currlen, maxlen, ' '))
  ------------------
  |  Branch (407:13): [True: 0, False: 0]
  ------------------
  408|      0|            return 0;
  409|      0|        ++padlen;
  410|      0|        ++cnt;
  411|      0|    }
  412|      6|    return 1;
  413|      6|}

bio_sock_cleanup_int:
  152|      2|{
  153|       |# ifdef OPENSSL_SYS_WINDOWS
  154|       |    if (wsa_init_done) {
  155|       |        wsa_init_done = 0;
  156|       |        WSACleanup();
  157|       |    }
  158|       |# endif
  159|      2|}

BIO_f_buffer:
   43|  28.9k|{
   44|  28.9k|    return &methods_buffer;
   45|  28.9k|}
bf_buff.c:buffer_write:
  161|  28.9k|{
  162|  28.9k|    int i, num = 0;
  163|  28.9k|    BIO_F_BUFFER_CTX *ctx;
  164|       |
  165|  28.9k|    if ((in == NULL) || (inl <= 0))
  ------------------
  |  Branch (165:9): [True: 0, False: 28.9k]
  |  Branch (165:25): [True: 0, False: 28.9k]
  ------------------
  166|      0|        return 0;
  167|  28.9k|    ctx = (BIO_F_BUFFER_CTX *)b->ptr;
  168|  28.9k|    if ((ctx == NULL) || (b->next_bio == NULL))
  ------------------
  |  Branch (168:9): [True: 0, False: 28.9k]
  |  Branch (168:26): [True: 0, False: 28.9k]
  ------------------
  169|      0|        return 0;
  170|       |
  171|  28.9k|    BIO_clear_retry_flags(b);
  ------------------
  |  |  192|  28.9k|                BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  153|  28.9k|# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  150|  28.9k|# define BIO_FLAGS_READ          0x01
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|  28.9k|# define BIO_FLAGS_WRITE         0x02
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  152|  28.9k|# define BIO_FLAGS_IO_SPECIAL    0x04
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  154|  28.9k|# define BIO_FLAGS_SHOULD_RETRY  0x08
  |  |  ------------------
  ------------------
  172|  28.9k| start:
  173|  28.9k|    i = ctx->obuf_size - (ctx->obuf_len + ctx->obuf_off);
  174|       |    /* add to buffer and return */
  175|  28.9k|    if (i >= inl) {
  ------------------
  |  Branch (175:9): [True: 28.9k, False: 0]
  ------------------
  176|  28.9k|        memcpy(&(ctx->obuf[ctx->obuf_off + ctx->obuf_len]), in, inl);
  177|  28.9k|        ctx->obuf_len += inl;
  178|  28.9k|        return (num + inl);
  179|  28.9k|    }
  180|       |    /* else */
  181|       |    /* stuff already in buffer, so add to it first, then flush */
  182|      0|    if (ctx->obuf_len != 0) {
  ------------------
  |  Branch (182:9): [True: 0, False: 0]
  ------------------
  183|      0|        if (i > 0) {            /* lets fill it up if we can */
  ------------------
  |  Branch (183:13): [True: 0, False: 0]
  ------------------
  184|      0|            memcpy(&(ctx->obuf[ctx->obuf_off + ctx->obuf_len]), in, i);
  185|      0|            in += i;
  186|      0|            inl -= i;
  187|      0|            num += i;
  188|      0|            ctx->obuf_len += i;
  189|      0|        }
  190|       |        /* we now have a full buffer needing flushing */
  191|      0|        for (;;) {
  192|      0|            i = BIO_write(b->next_bio, &(ctx->obuf[ctx->obuf_off]),
  193|      0|                          ctx->obuf_len);
  194|      0|            if (i <= 0) {
  ------------------
  |  Branch (194:17): [True: 0, False: 0]
  ------------------
  195|      0|                BIO_copy_next_retry(b);
  196|       |
  197|      0|                if (i < 0)
  ------------------
  |  Branch (197:21): [True: 0, False: 0]
  ------------------
  198|      0|                    return ((num > 0) ? num : i);
  ------------------
  |  Branch (198:29): [True: 0, False: 0]
  ------------------
  199|      0|                if (i == 0)
  ------------------
  |  Branch (199:21): [True: 0, False: 0]
  ------------------
  200|      0|                    return num;
  201|      0|            }
  202|      0|            ctx->obuf_off += i;
  203|      0|            ctx->obuf_len -= i;
  204|      0|            if (ctx->obuf_len == 0)
  ------------------
  |  Branch (204:17): [True: 0, False: 0]
  ------------------
  205|      0|                break;
  206|      0|        }
  207|      0|    }
  208|       |    /*
  209|       |     * we only get here if the buffer has been flushed and we still have
  210|       |     * stuff to write
  211|       |     */
  212|      0|    ctx->obuf_off = 0;
  213|       |
  214|       |    /* we now have inl bytes to write */
  215|      0|    while (inl >= ctx->obuf_size) {
  ------------------
  |  Branch (215:12): [True: 0, False: 0]
  ------------------
  216|      0|        i = BIO_write(b->next_bio, in, inl);
  217|      0|        if (i <= 0) {
  ------------------
  |  Branch (217:13): [True: 0, False: 0]
  ------------------
  218|      0|            BIO_copy_next_retry(b);
  219|      0|            if (i < 0)
  ------------------
  |  Branch (219:17): [True: 0, False: 0]
  ------------------
  220|      0|                return ((num > 0) ? num : i);
  ------------------
  |  Branch (220:25): [True: 0, False: 0]
  ------------------
  221|      0|            if (i == 0)
  ------------------
  |  Branch (221:17): [True: 0, False: 0]
  ------------------
  222|      0|                return num;
  223|      0|        }
  224|      0|        num += i;
  225|      0|        in += i;
  226|      0|        inl -= i;
  227|      0|        if (inl == 0)
  ------------------
  |  Branch (227:13): [True: 0, False: 0]
  ------------------
  228|      0|            return num;
  229|      0|    }
  230|       |
  231|       |    /*
  232|       |     * copy the rest into the buffer since we have only a small amount left
  233|       |     */
  234|      0|    goto start;
  235|      0|}
bf_buff.c:buffer_ctrl:
  238|   115k|{
  239|   115k|    BIO *dbio;
  240|   115k|    BIO_F_BUFFER_CTX *ctx;
  241|   115k|    long ret = 1;
  242|   115k|    char *p1, *p2;
  243|   115k|    int r, i, *ip;
  244|   115k|    int ibs, obs;
  245|       |
  246|   115k|    ctx = (BIO_F_BUFFER_CTX *)b->ptr;
  247|       |
  248|   115k|    switch (cmd) {
  249|      0|    case BIO_CTRL_RESET:
  ------------------
  |  |   71|      0|# define BIO_CTRL_RESET          1/* opt - rewind/zero etc */
  ------------------
  |  Branch (249:5): [True: 0, False: 115k]
  ------------------
  250|      0|        ctx->ibuf_off = 0;
  251|      0|        ctx->ibuf_len = 0;
  252|      0|        ctx->obuf_off = 0;
  253|      0|        ctx->obuf_len = 0;
  254|      0|        if (b->next_bio == NULL)
  ------------------
  |  Branch (254:13): [True: 0, False: 0]
  ------------------
  255|      0|            return 0;
  256|      0|        ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
  257|      0|        break;
  258|      0|    case BIO_CTRL_EOF:
  ------------------
  |  |   72|      0|# define BIO_CTRL_EOF            2/* opt - are we at the eof */
  ------------------
  |  Branch (258:5): [True: 0, False: 115k]
  ------------------
  259|      0|        if (ctx->ibuf_len > 0)
  ------------------
  |  Branch (259:13): [True: 0, False: 0]
  ------------------
  260|      0|            return 0;
  261|      0|        ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
  262|      0|        break;
  263|      0|    case BIO_CTRL_INFO:
  ------------------
  |  |   73|      0|# define BIO_CTRL_INFO           3/* opt - extra tit-bits */
  ------------------
  |  Branch (263:5): [True: 0, False: 115k]
  ------------------
  264|      0|        ret = (long)ctx->obuf_len;
  265|      0|        break;
  266|      0|    case BIO_C_GET_BUFF_NUM_LINES:
  ------------------
  |  |  309|      0|# define BIO_C_GET_BUFF_NUM_LINES                116
  ------------------
  |  Branch (266:5): [True: 0, False: 115k]
  ------------------
  267|      0|        ret = 0;
  268|      0|        p1 = ctx->ibuf;
  269|      0|        for (i = 0; i < ctx->ibuf_len; i++) {
  ------------------
  |  Branch (269:21): [True: 0, False: 0]
  ------------------
  270|      0|            if (p1[ctx->ibuf_off + i] == '\n')
  ------------------
  |  Branch (270:17): [True: 0, False: 0]
  ------------------
  271|      0|                ret++;
  272|      0|        }
  273|      0|        break;
  274|      0|    case BIO_CTRL_WPENDING:
  ------------------
  |  |   83|      0|# define BIO_CTRL_WPENDING       13/* opt - number of bytes still to write */
  ------------------
  |  Branch (274:5): [True: 0, False: 115k]
  ------------------
  275|      0|        ret = (long)ctx->obuf_len;
  276|      0|        if (ret == 0) {
  ------------------
  |  Branch (276:13): [True: 0, False: 0]
  ------------------
  277|      0|            if (b->next_bio == NULL)
  ------------------
  |  Branch (277:17): [True: 0, False: 0]
  ------------------
  278|      0|                return 0;
  279|      0|            ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
  280|      0|        }
  281|      0|        break;
  282|      0|    case BIO_CTRL_PENDING:
  ------------------
  |  |   80|      0|# define BIO_CTRL_PENDING        10/* opt - is their more data buffered */
  ------------------
  |  Branch (282:5): [True: 0, False: 115k]
  ------------------
  283|      0|        ret = (long)ctx->ibuf_len;
  284|      0|        if (ret == 0) {
  ------------------
  |  Branch (284:13): [True: 0, False: 0]
  ------------------
  285|      0|            if (b->next_bio == NULL)
  ------------------
  |  Branch (285:17): [True: 0, False: 0]
  ------------------
  286|      0|                return 0;
  287|      0|            ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
  288|      0|        }
  289|      0|        break;
  290|      0|    case BIO_C_SET_BUFF_READ_DATA:
  ------------------
  |  |  315|      0|# define BIO_C_SET_BUFF_READ_DATA                122/* data to read first */
  ------------------
  |  Branch (290:5): [True: 0, False: 115k]
  ------------------
  291|      0|        if (num > ctx->ibuf_size) {
  ------------------
  |  Branch (291:13): [True: 0, False: 0]
  ------------------
  292|      0|            p1 = OPENSSL_malloc((int)num);
  ------------------
  |  |  118|      0|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  293|      0|            if (p1 == NULL)
  ------------------
  |  Branch (293:17): [True: 0, False: 0]
  ------------------
  294|      0|                goto malloc_error;
  295|      0|            OPENSSL_free(ctx->ibuf);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  296|      0|            ctx->ibuf = p1;
  297|      0|        }
  298|      0|        ctx->ibuf_off = 0;
  299|      0|        ctx->ibuf_len = (int)num;
  300|      0|        memcpy(ctx->ibuf, ptr, (int)num);
  301|      0|        ret = 1;
  302|      0|        break;
  303|  28.9k|    case BIO_C_SET_BUFF_SIZE:
  ------------------
  |  |  310|  28.9k|# define BIO_C_SET_BUFF_SIZE                     117
  ------------------
  |  Branch (303:5): [True: 28.9k, False: 86.9k]
  ------------------
  304|  28.9k|        if (ptr != NULL) {
  ------------------
  |  Branch (304:13): [True: 28.9k, False: 0]
  ------------------
  305|  28.9k|            ip = (int *)ptr;
  306|  28.9k|            if (*ip == 0) {
  ------------------
  |  Branch (306:17): [True: 28.9k, False: 0]
  ------------------
  307|  28.9k|                ibs = (int)num;
  308|  28.9k|                obs = ctx->obuf_size;
  309|  28.9k|            } else {            /* if (*ip == 1) */
  310|       |
  311|      0|                ibs = ctx->ibuf_size;
  312|      0|                obs = (int)num;
  313|      0|            }
  314|  28.9k|        } else {
  315|      0|            ibs = (int)num;
  316|      0|            obs = (int)num;
  317|      0|        }
  318|  28.9k|        p1 = ctx->ibuf;
  319|  28.9k|        p2 = ctx->obuf;
  320|  28.9k|        if ((ibs > DEFAULT_BUFFER_SIZE) && (ibs != ctx->ibuf_size)) {
  ------------------
  |  |   23|  28.9k|#define DEFAULT_BUFFER_SIZE     4096
  ------------------
  |  Branch (320:13): [True: 0, False: 28.9k]
  |  Branch (320:44): [True: 0, False: 0]
  ------------------
  321|      0|            p1 = OPENSSL_malloc((int)num);
  ------------------
  |  |  118|      0|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  322|      0|            if (p1 == NULL)
  ------------------
  |  Branch (322:17): [True: 0, False: 0]
  ------------------
  323|      0|                goto malloc_error;
  324|      0|        }
  325|  28.9k|        if ((obs > DEFAULT_BUFFER_SIZE) && (obs != ctx->obuf_size)) {
  ------------------
  |  |   23|  28.9k|#define DEFAULT_BUFFER_SIZE     4096
  ------------------
  |  Branch (325:13): [True: 0, False: 28.9k]
  |  Branch (325:44): [True: 0, False: 0]
  ------------------
  326|      0|            p2 = OPENSSL_malloc((int)num);
  ------------------
  |  |  118|      0|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  327|      0|            if (p2 == NULL) {
  ------------------
  |  Branch (327:17): [True: 0, False: 0]
  ------------------
  328|      0|                if (p1 != ctx->ibuf)
  ------------------
  |  Branch (328:21): [True: 0, False: 0]
  ------------------
  329|      0|                    OPENSSL_free(p1);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  330|      0|                goto malloc_error;
  331|      0|            }
  332|      0|        }
  333|  28.9k|        if (ctx->ibuf != p1) {
  ------------------
  |  Branch (333:13): [True: 0, False: 28.9k]
  ------------------
  334|      0|            OPENSSL_free(ctx->ibuf);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  335|      0|            ctx->ibuf = p1;
  336|      0|            ctx->ibuf_off = 0;
  337|      0|            ctx->ibuf_len = 0;
  338|      0|            ctx->ibuf_size = ibs;
  339|      0|        }
  340|  28.9k|        if (ctx->obuf != p2) {
  ------------------
  |  Branch (340:13): [True: 0, False: 28.9k]
  ------------------
  341|      0|            OPENSSL_free(ctx->obuf);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  342|      0|            ctx->obuf = p2;
  343|      0|            ctx->obuf_off = 0;
  344|      0|            ctx->obuf_len = 0;
  345|      0|            ctx->obuf_size = obs;
  346|      0|        }
  347|  28.9k|        break;
  348|      0|    case BIO_C_DO_STATE_MACHINE:
  ------------------
  |  |  294|      0|# define BIO_C_DO_STATE_MACHINE                  101
  ------------------
  |  Branch (348:5): [True: 0, False: 115k]
  ------------------
  349|      0|        if (b->next_bio == NULL)
  ------------------
  |  Branch (349:13): [True: 0, False: 0]
  ------------------
  350|      0|            return 0;
  351|      0|        BIO_clear_retry_flags(b);
  ------------------
  |  |  192|      0|                BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  153|      0|# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  150|      0|# define BIO_FLAGS_READ          0x01
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|# define BIO_FLAGS_WRITE         0x02
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  152|      0|# define BIO_FLAGS_IO_SPECIAL    0x04
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  154|      0|# define BIO_FLAGS_SHOULD_RETRY  0x08
  |  |  ------------------
  ------------------
  352|      0|        ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
  353|      0|        BIO_copy_next_retry(b);
  354|      0|        break;
  355|       |
  356|  28.9k|    case BIO_CTRL_FLUSH:
  ------------------
  |  |   81|  28.9k|# define BIO_CTRL_FLUSH          11/* opt - 'flush' buffered output */
  ------------------
  |  Branch (356:5): [True: 28.9k, False: 86.9k]
  ------------------
  357|  28.9k|        if (b->next_bio == NULL)
  ------------------
  |  Branch (357:13): [True: 0, False: 28.9k]
  ------------------
  358|      0|            return 0;
  359|  28.9k|        if (ctx->obuf_len <= 0) {
  ------------------
  |  Branch (359:13): [True: 0, False: 28.9k]
  ------------------
  360|      0|            ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
  361|      0|            break;
  362|      0|        }
  363|       |
  364|  57.9k|        for (;;) {
  365|  57.9k|            BIO_clear_retry_flags(b);
  ------------------
  |  |  192|  57.9k|                BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  153|  57.9k|# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  150|  57.9k|# define BIO_FLAGS_READ          0x01
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|  57.9k|# define BIO_FLAGS_WRITE         0x02
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  152|  57.9k|# define BIO_FLAGS_IO_SPECIAL    0x04
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  154|  57.9k|# define BIO_FLAGS_SHOULD_RETRY  0x08
  |  |  ------------------
  ------------------
  366|  57.9k|            if (ctx->obuf_len > 0) {
  ------------------
  |  Branch (366:17): [True: 28.9k, False: 28.9k]
  ------------------
  367|  28.9k|                r = BIO_write(b->next_bio,
  368|  28.9k|                              &(ctx->obuf[ctx->obuf_off]), ctx->obuf_len);
  369|  28.9k|                BIO_copy_next_retry(b);
  370|  28.9k|                if (r <= 0)
  ------------------
  |  Branch (370:21): [True: 0, False: 28.9k]
  ------------------
  371|      0|                    return (long)r;
  372|  28.9k|                ctx->obuf_off += r;
  373|  28.9k|                ctx->obuf_len -= r;
  374|  28.9k|            } else {
  375|  28.9k|                ctx->obuf_len = 0;
  376|  28.9k|                ctx->obuf_off = 0;
  377|  28.9k|                break;
  378|  28.9k|            }
  379|  57.9k|        }
  380|  28.9k|        ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
  381|  28.9k|        break;
  382|      0|    case BIO_CTRL_DUP:
  ------------------
  |  |   82|      0|# define BIO_CTRL_DUP            12/* man - extra stuff for 'duped' BIO */
  ------------------
  |  Branch (382:5): [True: 0, False: 115k]
  ------------------
  383|      0|        dbio = (BIO *)ptr;
  384|      0|        if (!BIO_set_read_buffer_size(dbio, ctx->ibuf_size) ||
  ------------------
  |  |  473|      0|# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0)
  |  |  ------------------
  |  |  |  |  310|      0|# define BIO_C_SET_BUFF_SIZE                     117
  |  |  ------------------
  ------------------
  |  Branch (384:13): [True: 0, False: 0]
  ------------------
  385|      0|            !BIO_set_write_buffer_size(dbio, ctx->obuf_size))
  ------------------
  |  |  474|      0|# define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1)
  |  |  ------------------
  |  |  |  |  310|      0|# define BIO_C_SET_BUFF_SIZE                     117
  |  |  ------------------
  ------------------
  |  Branch (385:13): [True: 0, False: 0]
  ------------------
  386|      0|            ret = 0;
  387|      0|        break;
  388|      0|    case BIO_CTRL_PEEK:
  ------------------
  |  |   87|      0|# define BIO_CTRL_PEEK           29/* BIO_f_buffer special */
  ------------------
  |  Branch (388:5): [True: 0, False: 115k]
  ------------------
  389|       |        /* Ensure there's stuff in the input buffer */
  390|      0|        {
  391|      0|            char fake_buf[1];
  392|      0|            (void)buffer_read(b, fake_buf, 0);
  393|      0|        }
  394|      0|        if (num > ctx->ibuf_len)
  ------------------
  |  Branch (394:13): [True: 0, False: 0]
  ------------------
  395|      0|            num = ctx->ibuf_len;
  396|      0|        memcpy(ptr, &(ctx->ibuf[ctx->ibuf_off]), num);
  397|      0|        ret = num;
  398|      0|        break;
  399|  57.9k|    default:
  ------------------
  |  Branch (399:5): [True: 57.9k, False: 57.9k]
  ------------------
  400|  57.9k|        if (b->next_bio == NULL)
  ------------------
  |  Branch (400:13): [True: 0, False: 57.9k]
  ------------------
  401|      0|            return 0;
  402|  57.9k|        ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
  403|  57.9k|        break;
  404|   115k|    }
  405|   115k|    return ret;
  406|      0| malloc_error:
  407|      0|    BIOerr(BIO_F_BUFFER_CTRL, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  408|      0|    return 0;
  409|   115k|}
bf_buff.c:buffer_new:
   48|  28.9k|{
   49|  28.9k|    BIO_F_BUFFER_CTX *ctx = OPENSSL_zalloc(sizeof(*ctx));
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   50|       |
   51|  28.9k|    if (ctx == NULL)
  ------------------
  |  Branch (51:9): [True: 0, False: 28.9k]
  ------------------
   52|      0|        return 0;
   53|  28.9k|    ctx->ibuf_size = DEFAULT_BUFFER_SIZE;
  ------------------
  |  |   23|  28.9k|#define DEFAULT_BUFFER_SIZE     4096
  ------------------
   54|  28.9k|    ctx->ibuf = OPENSSL_malloc(DEFAULT_BUFFER_SIZE);
  ------------------
  |  |  118|  28.9k|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   55|  28.9k|    if (ctx->ibuf == NULL) {
  ------------------
  |  Branch (55:9): [True: 0, False: 28.9k]
  ------------------
   56|      0|        OPENSSL_free(ctx);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   57|      0|        return 0;
   58|      0|    }
   59|  28.9k|    ctx->obuf_size = DEFAULT_BUFFER_SIZE;
  ------------------
  |  |   23|  28.9k|#define DEFAULT_BUFFER_SIZE     4096
  ------------------
   60|  28.9k|    ctx->obuf = OPENSSL_malloc(DEFAULT_BUFFER_SIZE);
  ------------------
  |  |  118|  28.9k|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   61|  28.9k|    if (ctx->obuf == NULL) {
  ------------------
  |  Branch (61:9): [True: 0, False: 28.9k]
  ------------------
   62|      0|        OPENSSL_free(ctx->ibuf);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   63|      0|        OPENSSL_free(ctx);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   64|      0|        return 0;
   65|      0|    }
   66|       |
   67|  28.9k|    bi->init = 1;
   68|  28.9k|    bi->ptr = (char *)ctx;
   69|  28.9k|    bi->flags = 0;
   70|  28.9k|    return 1;
   71|  28.9k|}
bf_buff.c:buffer_free:
   74|  28.9k|{
   75|  28.9k|    BIO_F_BUFFER_CTX *b;
   76|       |
   77|  28.9k|    if (a == NULL)
  ------------------
  |  Branch (77:9): [True: 0, False: 28.9k]
  ------------------
   78|      0|        return 0;
   79|  28.9k|    b = (BIO_F_BUFFER_CTX *)a->ptr;
   80|  28.9k|    OPENSSL_free(b->ibuf);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   81|  28.9k|    OPENSSL_free(b->obuf);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   82|  28.9k|    OPENSSL_free(a->ptr);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   83|       |    a->ptr = NULL;
   84|  28.9k|    a->init = 0;
   85|  28.9k|    a->flags = 0;
   86|  28.9k|    return 1;
   87|  28.9k|}

ERR_load_BIO_strings:
  137|      2|{
  138|      2|#ifndef OPENSSL_NO_ERR
  139|      2|    if (ERR_func_error_string(BIO_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (139:9): [True: 2, False: 0]
  ------------------
  140|      2|        ERR_load_strings_const(BIO_str_functs);
  141|      2|        ERR_load_strings_const(BIO_str_reasons);
  142|      2|    }
  143|      2|#endif
  144|      2|    return 1;
  145|      2|}

BIO_new:
   72|  86.9k|{
   73|  86.9k|    BIO *bio = OPENSSL_zalloc(sizeof(*bio));
  ------------------
  |  |  120|  86.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   74|       |
   75|  86.9k|    if (bio == NULL) {
  ------------------
  |  Branch (75:9): [True: 0, False: 86.9k]
  ------------------
   76|      0|        BIOerr(BIO_F_BIO_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|  86.9k|    bio->method = method;
   81|  86.9k|    bio->shutdown = 1;
   82|  86.9k|    bio->references = 1;
   83|       |
   84|  86.9k|    if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_BIO, bio, &bio->ex_data))
  ------------------
  |  |  106|  86.9k|# define CRYPTO_EX_INDEX_BIO             12
  ------------------
  |  Branch (84:9): [True: 0, False: 86.9k]
  ------------------
   85|      0|        goto err;
   86|       |
   87|  86.9k|    bio->lock = CRYPTO_THREAD_lock_new();
   88|  86.9k|    if (bio->lock == NULL) {
  ------------------
  |  Branch (88:9): [True: 0, False: 86.9k]
  ------------------
   89|      0|        BIOerr(BIO_F_BIO_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   90|      0|        CRYPTO_free_ex_data(CRYPTO_EX_INDEX_BIO, bio, &bio->ex_data);
  ------------------
  |  |  106|      0|# define CRYPTO_EX_INDEX_BIO             12
  ------------------
   91|      0|        goto err;
   92|      0|    }
   93|       |
   94|  86.9k|    if (method->create != NULL && !method->create(bio)) {
  ------------------
  |  Branch (94:9): [True: 86.9k, False: 0]
  |  Branch (94:35): [True: 0, False: 86.9k]
  ------------------
   95|      0|        BIOerr(BIO_F_BIO_NEW, ERR_R_INIT_FAIL);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   96|      0|        CRYPTO_free_ex_data(CRYPTO_EX_INDEX_BIO, bio, &bio->ex_data);
  ------------------
  |  |  106|      0|# define CRYPTO_EX_INDEX_BIO             12
  ------------------
   97|      0|        CRYPTO_THREAD_lock_free(bio->lock);
   98|      0|        goto err;
   99|      0|    }
  100|  86.9k|    if (method->create == NULL)
  ------------------
  |  Branch (100:9): [True: 0, False: 86.9k]
  ------------------
  101|      0|        bio->init = 1;
  102|       |
  103|  86.9k|    return bio;
  104|       |
  105|      0|err:
  106|      0|    OPENSSL_free(bio);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  107|       |    return NULL;
  108|  86.9k|}
BIO_free:
  111|   260k|{
  112|   260k|    int ret;
  113|       |
  114|   260k|    if (a == NULL)
  ------------------
  |  Branch (114:9): [True: 144k, False: 115k]
  ------------------
  115|   144k|        return 0;
  116|       |
  117|   115k|    if (CRYPTO_DOWN_REF(&a->references, &ret, a->lock) <= 0)
  ------------------
  |  Branch (117:9): [True: 0, False: 115k]
  ------------------
  118|      0|        return 0;
  119|       |
  120|   115k|    REF_PRINT_COUNT("BIO", a);
  121|   115k|    if (ret > 0)
  ------------------
  |  Branch (121:9): [True: 28.9k, False: 86.9k]
  ------------------
  122|  28.9k|        return 1;
  123|  86.9k|    REF_ASSERT_ISNT(ret < 0);
  ------------------
  |  |  138|  86.9k|    (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0)
  |  |  ------------------
  |  |  |  Branch (138:12): [True: 0, False: 86.9k]
  |  |  ------------------
  ------------------
  124|       |
  125|  86.9k|    if (a->callback != NULL || a->callback_ex != NULL) {
  ------------------
  |  Branch (125:9): [True: 0, False: 86.9k]
  |  Branch (125:32): [True: 0, False: 86.9k]
  ------------------
  126|      0|        ret = (int)bio_call_callback(a, BIO_CB_FREE, NULL, 0, 0, 0L, 1L, NULL);
  ------------------
  |  |  220|      0|# define BIO_CB_FREE     0x01
  ------------------
  127|      0|        if (ret <= 0)
  ------------------
  |  Branch (127:13): [True: 0, False: 0]
  ------------------
  128|      0|            return ret;
  129|      0|    }
  130|       |
  131|  86.9k|    if ((a->method != NULL) && (a->method->destroy != NULL))
  ------------------
  |  Branch (131:9): [True: 86.9k, False: 0]
  |  Branch (131:32): [True: 86.9k, False: 0]
  ------------------
  132|  86.9k|        a->method->destroy(a);
  133|       |
  134|  86.9k|    CRYPTO_free_ex_data(CRYPTO_EX_INDEX_BIO, a, &a->ex_data);
  ------------------
  |  |  106|  86.9k|# define CRYPTO_EX_INDEX_BIO             12
  ------------------
  135|       |
  136|  86.9k|    CRYPTO_THREAD_lock_free(a->lock);
  137|       |
  138|  86.9k|    OPENSSL_free(a);
  ------------------
  |  |  128|  86.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  139|       |
  140|  86.9k|    return 1;
  141|  86.9k|}
BIO_up_ref:
  179|  28.9k|{
  180|  28.9k|    int i;
  181|       |
  182|  28.9k|    if (CRYPTO_UP_REF(&a->references, &i, a->lock) <= 0)
  ------------------
  |  Branch (182:9): [True: 0, False: 28.9k]
  ------------------
  183|      0|        return 0;
  184|       |
  185|  28.9k|    REF_PRINT_COUNT("BIO", a);
  186|  28.9k|    REF_ASSERT_ISNT(i < 2);
  ------------------
  |  |  138|  28.9k|    (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0)
  |  |  ------------------
  |  |  |  Branch (138:12): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  187|  28.9k|    return ((i > 1) ? 1 : 0);
  ------------------
  |  Branch (187:13): [True: 28.9k, False: 0]
  ------------------
  188|  28.9k|}
BIO_clear_flags:
  191|   173k|{
  192|   173k|    b->flags &= ~flags;
  193|   173k|}
BIO_test_flags:
  196|   115k|{
  197|   115k|    return (b->flags & flags);
  198|   115k|}
BIO_set_flags:
  201|  28.9k|{
  202|  28.9k|    b->flags |= flags;
  203|  28.9k|}
BIO_read:
  289|  28.9k|{
  290|  28.9k|    size_t readbytes;
  291|  28.9k|    int ret;
  292|       |
  293|  28.9k|    if (dlen < 0)
  ------------------
  |  Branch (293:9): [True: 0, False: 28.9k]
  ------------------
  294|      0|        return 0;
  295|       |
  296|  28.9k|    ret = bio_read_intern(b, data, (size_t)dlen, &readbytes);
  297|       |
  298|  28.9k|    if (ret > 0) {
  ------------------
  |  Branch (298:9): [True: 0, False: 28.9k]
  ------------------
  299|       |        /* *readbytes should always be <= dlen */
  300|      0|        ret = (int)readbytes;
  301|      0|    }
  302|       |
  303|  28.9k|    return ret;
  304|  28.9k|}
BIO_write:
  356|  86.9k|{
  357|  86.9k|    size_t written;
  358|  86.9k|    int ret;
  359|       |
  360|  86.9k|    if (dlen < 0)
  ------------------
  |  Branch (360:9): [True: 0, False: 86.9k]
  ------------------
  361|      0|        return 0;
  362|       |
  363|  86.9k|    ret = bio_write_intern(b, data, (size_t)dlen, &written);
  364|       |
  365|  86.9k|    if (ret > 0) {
  ------------------
  |  Branch (365:9): [True: 86.9k, False: 0]
  ------------------
  366|       |        /* *written should always be <= dlen */
  367|  86.9k|        ret = (int)written;
  368|  86.9k|    }
  369|       |
  370|  86.9k|    return ret;
  371|  86.9k|}
BIO_gets:
  433|    702|{
  434|    702|    int ret;
  435|    702|    size_t readbytes = 0;
  436|       |
  437|    702|    if ((b == NULL) || (b->method == NULL) || (b->method->bgets == NULL)) {
  ------------------
  |  Branch (437:9): [True: 0, False: 702]
  |  Branch (437:24): [True: 0, False: 702]
  |  Branch (437:47): [True: 0, False: 702]
  ------------------
  438|      0|        BIOerr(BIO_F_BIO_GETS, BIO_R_UNSUPPORTED_METHOD);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  439|      0|        return -2;
  440|      0|    }
  441|       |
  442|    702|    if (size < 0) {
  ------------------
  |  Branch (442:9): [True: 0, False: 702]
  ------------------
  443|      0|        BIOerr(BIO_F_BIO_GETS, BIO_R_INVALID_ARGUMENT);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  444|      0|        return 0;
  445|      0|    }
  446|       |
  447|    702|    if (b->callback != NULL || b->callback_ex != NULL) {
  ------------------
  |  Branch (447:9): [True: 0, False: 702]
  |  Branch (447:32): [True: 0, False: 702]
  ------------------
  448|      0|        ret = (int)bio_call_callback(b, BIO_CB_GETS, buf, size, 0, 0L, 1, NULL);
  ------------------
  |  |  224|      0|# define BIO_CB_GETS     0x05
  ------------------
  449|      0|        if (ret <= 0)
  ------------------
  |  Branch (449:13): [True: 0, False: 0]
  ------------------
  450|      0|            return ret;
  451|      0|    }
  452|       |
  453|    702|    if (!b->init) {
  ------------------
  |  Branch (453:9): [True: 0, False: 702]
  ------------------
  454|      0|        BIOerr(BIO_F_BIO_GETS, BIO_R_UNINITIALIZED);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  455|      0|        return -2;
  456|      0|    }
  457|       |
  458|    702|    ret = b->method->bgets(b, buf, size);
  459|       |
  460|    702|    if (ret > 0) {
  ------------------
  |  Branch (460:9): [True: 700, False: 2]
  ------------------
  461|    700|        readbytes = ret;
  462|    700|        ret = 1;
  463|    700|    }
  464|       |
  465|    702|    if (b->callback != NULL || b->callback_ex != NULL)
  ------------------
  |  Branch (465:9): [True: 0, False: 702]
  |  Branch (465:32): [True: 0, False: 702]
  ------------------
  466|      0|        ret = (int)bio_call_callback(b, BIO_CB_GETS | BIO_CB_RETURN, buf, size,
  ------------------
  |  |  224|      0|# define BIO_CB_GETS     0x05
  ------------------
                      ret = (int)bio_call_callback(b, BIO_CB_GETS | BIO_CB_RETURN, buf, size,
  ------------------
  |  |  231|      0|# define BIO_CB_RETURN   0x80
  ------------------
  467|      0|                                     0, 0L, ret, &readbytes);
  468|       |
  469|    702|    if (ret > 0) {
  ------------------
  |  Branch (469:9): [True: 700, False: 2]
  ------------------
  470|       |        /* Shouldn't happen */
  471|    700|        if (readbytes > (size_t)size)
  ------------------
  |  Branch (471:13): [True: 0, False: 700]
  ------------------
  472|      0|            ret = -1;
  473|    700|        else
  474|    700|            ret = (int)readbytes;
  475|    700|    }
  476|       |
  477|    702|    return ret;
  478|    702|}
BIO_int_ctrl:
  493|  57.9k|{
  494|  57.9k|    int i;
  495|       |
  496|  57.9k|    i = iarg;
  497|  57.9k|    return BIO_ctrl(b, cmd, larg, (char *)&i);
  498|  57.9k|}
BIO_ctrl:
  511|   260k|{
  512|   260k|    long ret;
  513|       |
  514|   260k|    if (b == NULL)
  ------------------
  |  Branch (514:9): [True: 0, False: 260k]
  ------------------
  515|      0|        return 0;
  516|       |
  517|   260k|    if ((b->method == NULL) || (b->method->ctrl == NULL)) {
  ------------------
  |  Branch (517:9): [True: 0, False: 260k]
  |  Branch (517:32): [True: 0, False: 260k]
  ------------------
  518|      0|        BIOerr(BIO_F_BIO_CTRL, BIO_R_UNSUPPORTED_METHOD);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  519|      0|        return -2;
  520|      0|    }
  521|       |
  522|   260k|    if (b->callback != NULL || b->callback_ex != NULL) {
  ------------------
  |  Branch (522:9): [True: 0, False: 260k]
  |  Branch (522:32): [True: 0, False: 260k]
  ------------------
  523|      0|        ret = bio_call_callback(b, BIO_CB_CTRL, parg, 0, cmd, larg, 1L, NULL);
  ------------------
  |  |  225|      0|# define BIO_CB_CTRL     0x06
  ------------------
  524|      0|        if (ret <= 0)
  ------------------
  |  Branch (524:13): [True: 0, False: 0]
  ------------------
  525|      0|            return ret;
  526|      0|    }
  527|       |
  528|   260k|    ret = b->method->ctrl(b, cmd, larg, parg);
  529|       |
  530|   260k|    if (b->callback != NULL || b->callback_ex != NULL)
  ------------------
  |  Branch (530:9): [True: 0, False: 260k]
  |  Branch (530:32): [True: 0, False: 260k]
  ------------------
  531|      0|        ret = bio_call_callback(b, BIO_CB_CTRL | BIO_CB_RETURN, parg, 0, cmd,
  ------------------
  |  |  225|      0|# define BIO_CB_CTRL     0x06
  ------------------
                      ret = bio_call_callback(b, BIO_CB_CTRL | BIO_CB_RETURN, parg, 0, cmd,
  ------------------
  |  |  231|      0|# define BIO_CB_RETURN   0x80
  ------------------
  532|      0|                                larg, ret, NULL);
  533|       |
  534|   260k|    return ret;
  535|   260k|}
BIO_push:
  583|  28.9k|{
  584|  28.9k|    BIO *lb;
  585|       |
  586|  28.9k|    if (b == NULL)
  ------------------
  |  Branch (586:9): [True: 0, False: 28.9k]
  ------------------
  587|      0|        return bio;
  588|  28.9k|    lb = b;
  589|  28.9k|    while (lb->next_bio != NULL)
  ------------------
  |  Branch (589:12): [True: 0, False: 28.9k]
  ------------------
  590|      0|        lb = lb->next_bio;
  591|  28.9k|    lb->next_bio = bio;
  592|  28.9k|    if (bio != NULL)
  ------------------
  |  Branch (592:9): [True: 28.9k, False: 0]
  ------------------
  593|  28.9k|        bio->prev_bio = lb;
  594|       |    /* called to do internal processing */
  595|  28.9k|    BIO_ctrl(b, BIO_CTRL_PUSH, 0, lb);
  ------------------
  |  |   76|  28.9k|# define BIO_CTRL_PUSH           6/* opt - internal, used to signify change */
  ------------------
  596|  28.9k|    return b;
  597|  28.9k|}
BIO_pop:
  601|  28.9k|{
  602|  28.9k|    BIO *ret;
  603|       |
  604|  28.9k|    if (b == NULL)
  ------------------
  |  Branch (604:9): [True: 0, False: 28.9k]
  ------------------
  605|      0|        return NULL;
  606|  28.9k|    ret = b->next_bio;
  607|       |
  608|  28.9k|    BIO_ctrl(b, BIO_CTRL_POP, 0, b);
  ------------------
  |  |   77|  28.9k|# define BIO_CTRL_POP            7/* opt - internal, used to signify change */
  ------------------
  609|       |
  610|  28.9k|    if (b->prev_bio != NULL)
  ------------------
  |  Branch (610:9): [True: 0, False: 28.9k]
  ------------------
  611|      0|        b->prev_bio->next_bio = b->next_bio;
  612|  28.9k|    if (b->next_bio != NULL)
  ------------------
  |  Branch (612:9): [True: 28.9k, False: 0]
  ------------------
  613|  28.9k|        b->next_bio->prev_bio = b->prev_bio;
  614|       |
  615|  28.9k|    b->next_bio = NULL;
  616|       |    b->prev_bio = NULL;
  617|  28.9k|    return ret;
  618|  28.9k|}
BIO_free_all:
  683|   115k|{
  684|   115k|    BIO *b;
  685|   115k|    int ref;
  686|       |
  687|   144k|    while (bio != NULL) {
  ------------------
  |  Branch (687:12): [True: 57.9k, False: 86.9k]
  ------------------
  688|  57.9k|        b = bio;
  689|  57.9k|        ref = b->references;
  690|  57.9k|        bio = bio->next_bio;
  691|  57.9k|        BIO_free(b);
  692|       |        /* Since ref count > 1, don't free anyone else. */
  693|  57.9k|        if (ref > 1)
  ------------------
  |  Branch (693:13): [True: 28.9k, False: 28.9k]
  ------------------
  694|  28.9k|            break;
  695|  57.9k|    }
  696|   115k|}
BIO_copy_next_retry:
  743|  28.9k|{
  744|  28.9k|    BIO_set_flags(b, BIO_get_retry_flags(b->next_bio));
  ------------------
  |  |  194|  28.9k|                BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  153|  28.9k|# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  150|  28.9k|# define BIO_FLAGS_READ          0x01
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|  28.9k|# define BIO_FLAGS_WRITE         0x02
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  152|  28.9k|# define BIO_FLAGS_IO_SPECIAL    0x04
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  154|  28.9k|# define BIO_FLAGS_SHOULD_RETRY  0x08
  |  |  ------------------
  ------------------
  745|  28.9k|    b->retry_reason = b->next_bio->retry_reason;
  746|  28.9k|}
bio_cleanup:
  778|      2|{
  779|      2|#ifndef OPENSSL_NO_SOCK
  780|      2|    bio_sock_cleanup_int();
  781|      2|    CRYPTO_THREAD_lock_free(bio_lookup_lock);
  782|      2|    bio_lookup_lock = NULL;
  783|      2|#endif
  784|      2|    CRYPTO_THREAD_lock_free(bio_type_lock);
  785|       |    bio_type_lock = NULL;
  786|      2|}
bio_lib.c:bio_read_intern:
  252|  28.9k|{
  253|  28.9k|    int ret;
  254|       |
  255|  28.9k|    if ((b == NULL) || (b->method == NULL) || (b->method->bread == NULL)) {
  ------------------
  |  Branch (255:9): [True: 0, False: 28.9k]
  |  Branch (255:24): [True: 0, False: 28.9k]
  |  Branch (255:47): [True: 0, False: 28.9k]
  ------------------
  256|      0|        BIOerr(BIO_F_BIO_READ_INTERN, BIO_R_UNSUPPORTED_METHOD);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  257|      0|        return -2;
  258|      0|    }
  259|       |
  260|  28.9k|    if ((b->callback != NULL || b->callback_ex != NULL) &&
  ------------------
  |  Branch (260:10): [True: 0, False: 28.9k]
  |  Branch (260:33): [True: 0, False: 28.9k]
  ------------------
  261|      0|        ((ret = (int)bio_call_callback(b, BIO_CB_READ, data, dlen, 0, 0L, 1L,
  ------------------
  |  |  221|      0|# define BIO_CB_READ     0x02
  ------------------
  |  Branch (261:9): [True: 0, False: 0]
  ------------------
  262|      0|                                       NULL)) <= 0))
  263|      0|        return ret;
  264|       |
  265|  28.9k|    if (!b->init) {
  ------------------
  |  Branch (265:9): [True: 0, False: 28.9k]
  ------------------
  266|      0|        BIOerr(BIO_F_BIO_READ_INTERN, BIO_R_UNINITIALIZED);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  267|      0|        return -2;
  268|      0|    }
  269|       |
  270|  28.9k|    ret = b->method->bread(b, data, dlen, readbytes);
  271|       |
  272|  28.9k|    if (ret > 0)
  ------------------
  |  Branch (272:9): [True: 0, False: 28.9k]
  ------------------
  273|      0|        b->num_read += (uint64_t)*readbytes;
  274|       |
  275|  28.9k|    if (b->callback != NULL || b->callback_ex != NULL)
  ------------------
  |  Branch (275:9): [True: 0, False: 28.9k]
  |  Branch (275:32): [True: 0, False: 28.9k]
  ------------------
  276|      0|        ret = (int)bio_call_callback(b, BIO_CB_READ | BIO_CB_RETURN, data,
  ------------------
  |  |  221|      0|# define BIO_CB_READ     0x02
  ------------------
                      ret = (int)bio_call_callback(b, BIO_CB_READ | BIO_CB_RETURN, data,
  ------------------
  |  |  231|      0|# define BIO_CB_RETURN   0x80
  ------------------
  277|      0|                                     dlen, 0, 0L, ret, readbytes);
  278|       |
  279|       |    /* Shouldn't happen */
  280|  28.9k|    if (ret > 0 && *readbytes > dlen) {
  ------------------
  |  Branch (280:9): [True: 0, False: 28.9k]
  |  Branch (280:20): [True: 0, False: 0]
  ------------------
  281|      0|        BIOerr(BIO_F_BIO_READ_INTERN, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  282|      0|        return -1;
  283|      0|    }
  284|       |
  285|  28.9k|    return ret;
  286|  28.9k|}
bio_lib.c:bio_write_intern:
  322|  86.9k|{
  323|  86.9k|    int ret;
  324|       |
  325|  86.9k|    if (b == NULL)
  ------------------
  |  Branch (325:9): [True: 0, False: 86.9k]
  ------------------
  326|      0|        return 0;
  327|       |
  328|  86.9k|    if ((b->method == NULL) || (b->method->bwrite == NULL)) {
  ------------------
  |  Branch (328:9): [True: 0, False: 86.9k]
  |  Branch (328:32): [True: 0, False: 86.9k]
  ------------------
  329|      0|        BIOerr(BIO_F_BIO_WRITE_INTERN, BIO_R_UNSUPPORTED_METHOD);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  330|      0|        return -2;
  331|      0|    }
  332|       |
  333|  86.9k|    if ((b->callback != NULL || b->callback_ex != NULL) &&
  ------------------
  |  Branch (333:10): [True: 0, False: 86.9k]
  |  Branch (333:33): [True: 0, False: 86.9k]
  ------------------
  334|      0|        ((ret = (int)bio_call_callback(b, BIO_CB_WRITE, data, dlen, 0, 0L, 1L,
  ------------------
  |  |  222|      0|# define BIO_CB_WRITE    0x03
  ------------------
  |  Branch (334:9): [True: 0, False: 0]
  ------------------
  335|      0|                                       NULL)) <= 0))
  336|      0|        return ret;
  337|       |
  338|  86.9k|    if (!b->init) {
  ------------------
  |  Branch (338:9): [True: 0, False: 86.9k]
  ------------------
  339|      0|        BIOerr(BIO_F_BIO_WRITE_INTERN, BIO_R_UNINITIALIZED);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  340|      0|        return -2;
  341|      0|    }
  342|       |
  343|  86.9k|    ret = b->method->bwrite(b, data, dlen, written);
  344|       |
  345|  86.9k|    if (ret > 0)
  ------------------
  |  Branch (345:9): [True: 86.9k, False: 0]
  ------------------
  346|  86.9k|        b->num_write += (uint64_t)*written;
  347|       |
  348|  86.9k|    if (b->callback != NULL || b->callback_ex != NULL)
  ------------------
  |  Branch (348:9): [True: 0, False: 86.9k]
  |  Branch (348:32): [True: 0, False: 86.9k]
  ------------------
  349|      0|        ret = (int)bio_call_callback(b, BIO_CB_WRITE | BIO_CB_RETURN, data,
  ------------------
  |  |  222|      0|# define BIO_CB_WRITE    0x03
  ------------------
                      ret = (int)bio_call_callback(b, BIO_CB_WRITE | BIO_CB_RETURN, data,
  ------------------
  |  |  231|      0|# define BIO_CB_RETURN   0x80
  ------------------
  350|      0|                                     dlen, 0, 0L, ret, written);
  351|       |
  352|  86.9k|    return ret;
  353|  86.9k|}

bwrite_conv:
   71|  86.9k|{
   72|  86.9k|    int ret;
   73|       |
   74|  86.9k|    if (datal > INT_MAX)
  ------------------
  |  Branch (74:9): [True: 0, False: 86.9k]
  ------------------
   75|      0|        datal = INT_MAX;
   76|       |
   77|  86.9k|    ret = bio->method->bwrite_old(bio, data, (int)datal);
   78|       |
   79|  86.9k|    if (ret <= 0) {
  ------------------
  |  Branch (79:9): [True: 0, False: 86.9k]
  ------------------
   80|      0|        *written = 0;
   81|      0|        return ret;
   82|      0|    }
   83|       |
   84|  86.9k|    *written = (size_t)ret;
   85|       |
   86|  86.9k|    return 1;
   87|  86.9k|}
bread_conv:
  117|  28.9k|{
  118|  28.9k|    int ret;
  119|       |
  120|  28.9k|    if (datal > INT_MAX)
  ------------------
  |  Branch (120:9): [True: 0, False: 28.9k]
  ------------------
  121|      0|        datal = INT_MAX;
  122|       |
  123|  28.9k|    ret = bio->method->bread_old(bio, data, (int)datal);
  124|       |
  125|  28.9k|    if (ret <= 0) {
  ------------------
  |  Branch (125:9): [True: 28.9k, False: 0]
  ------------------
  126|  28.9k|        *readbytes = 0;
  127|  28.9k|        return ret;
  128|  28.9k|    }
  129|       |
  130|      0|    *readbytes = (size_t)ret;
  131|       |
  132|      0|    return 1;
  133|  28.9k|}

BIO_new_file:
   60|      4|{
   61|      4|    BIO  *ret;
   62|      4|    FILE *file = openssl_fopen(filename, mode);
   63|      4|    int fp_flags = BIO_CLOSE;
  ------------------
  |  |   66|      4|# define BIO_CLOSE               0x01
  ------------------
   64|       |
   65|      4|    if (strchr(mode, 'b') == NULL)
  ------------------
  |  Branch (65:9): [True: 2, False: 2]
  ------------------
   66|      2|        fp_flags |= BIO_FP_TEXT;
  ------------------
  |  |  148|      2|# define BIO_FP_TEXT             0x10
  ------------------
   67|       |
   68|      4|    if (file == NULL) {
  ------------------
  |  Branch (68:9): [True: 2, False: 2]
  ------------------
   69|      2|        SYSerr(SYS_F_FOPEN, get_last_sys_error());
  ------------------
  |  |  101|      2|# define SYSerr(f,r)  ERR_PUT_error(ERR_LIB_SYS,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      2|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   70|      2|        ERR_add_error_data(5, "fopen('", filename, "','", mode, "')");
   71|      2|        if (errno == ENOENT
  ------------------
  |  Branch (71:13): [True: 2, False: 0]
  ------------------
   72|      0|#ifdef ENXIO
   73|      2|            || errno == ENXIO
  ------------------
  |  Branch (73:16): [True: 0, False: 0]
  ------------------
   74|      2|#endif
   75|      2|            )
   76|      2|            BIOerr(BIO_F_BIO_NEW_FILE, BIO_R_NO_SUCH_FILE);
  ------------------
  |  |  116|      2|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      2|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   77|      0|        else
   78|      2|            BIOerr(BIO_F_BIO_NEW_FILE, ERR_R_SYS_LIB);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   79|      2|        return NULL;
   80|      2|    }
   81|      2|    if ((ret = BIO_new(BIO_s_file())) == NULL) {
  ------------------
  |  Branch (81:9): [True: 0, False: 2]
  ------------------
   82|      0|        fclose(file);
   83|      0|        return NULL;
   84|      0|    }
   85|       |
   86|      2|    BIO_clear_flags(ret, BIO_FLAGS_UPLINK); /* we did fopen -> we disengage
  ------------------
  |  |  160|      2|#  define BIO_FLAGS_UPLINK        0
  ------------------
   87|       |                                             * UPLINK */
   88|      2|    BIO_set_fp(ret, file, fp_flags);
  ------------------
  |  |  416|      2|# define BIO_set_fp(b,fp,c)      BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)(fp))
  |  |  ------------------
  |  |  |  |  299|      2|# define BIO_C_SET_FILE_PTR                      106
  |  |  ------------------
  ------------------
   89|      2|    return ret;
   90|      2|}
BIO_s_file:
  106|      2|{
  107|      2|    return &methods_filep;
  108|      2|}
bss_file.c:file_gets:
  338|    702|{
  339|    702|    int ret = 0;
  340|       |
  341|    702|    buf[0] = '\0';
  342|    702|    if (bp->flags & BIO_FLAGS_UPLINK) {
  ------------------
  |  |  160|    702|#  define BIO_FLAGS_UPLINK        0
  ------------------
  |  Branch (342:9): [True: 0, False: 702]
  ------------------
  343|      0|        if (!UP_fgets(buf, size, bp->ptr))
  ------------------
  |  |  161|      0|# define UP_fgets        fgets
  ------------------
  |  Branch (343:13): [True: 0, False: 0]
  ------------------
  344|      0|            goto err;
  345|    702|    } else {
  346|    702|        if (!fgets(buf, size, (FILE *)bp->ptr))
  ------------------
  |  Branch (346:13): [True: 2, False: 700]
  ------------------
  347|      2|            goto err;
  348|    702|    }
  349|    700|    if (buf[0] != '\0')
  ------------------
  |  Branch (349:9): [True: 700, False: 0]
  ------------------
  350|    700|        ret = strlen(buf);
  351|    702| err:
  352|    702|    return ret;
  353|    700|}
bss_file.c:file_ctrl:
  179|      2|{
  180|      2|    long ret = 1;
  181|      2|    FILE *fp = (FILE *)b->ptr;
  182|      2|    FILE **fpp;
  183|      2|    char p[4];
  184|      2|    int st;
  185|       |
  186|      2|    switch (cmd) {
  187|      0|    case BIO_C_FILE_SEEK:
  ------------------
  |  |  321|      0|# define BIO_C_FILE_SEEK                         128
  ------------------
  |  Branch (187:5): [True: 0, False: 2]
  ------------------
  188|      0|    case BIO_CTRL_RESET:
  ------------------
  |  |   71|      0|# define BIO_CTRL_RESET          1/* opt - rewind/zero etc */
  ------------------
  |  Branch (188:5): [True: 0, False: 2]
  ------------------
  189|      0|        if (b->flags & BIO_FLAGS_UPLINK)
  ------------------
  |  |  160|      0|#  define BIO_FLAGS_UPLINK        0
  ------------------
  |  Branch (189:13): [True: 0, False: 0]
  ------------------
  190|      0|            ret = (long)UP_fseek(b->ptr, num, 0);
  ------------------
  |  |  169|      0|# define UP_fseek        fseek
  ------------------
  191|      0|        else
  192|      0|            ret = (long)fseek(fp, num, 0);
  193|      0|        break;
  194|      0|    case BIO_CTRL_EOF:
  ------------------
  |  |   72|      0|# define BIO_CTRL_EOF            2/* opt - are we at the eof */
  ------------------
  |  Branch (194:5): [True: 0, False: 2]
  ------------------
  195|      0|        if (b->flags & BIO_FLAGS_UPLINK)
  ------------------
  |  |  160|      0|#  define BIO_FLAGS_UPLINK        0
  ------------------
  |  Branch (195:13): [True: 0, False: 0]
  ------------------
  196|      0|            ret = (long)UP_feof(fp);
  ------------------
  |  |  165|      0|# define UP_feof         feof
  ------------------
  197|      0|        else
  198|      0|            ret = (long)feof(fp);
  199|      0|        break;
  200|      0|    case BIO_C_FILE_TELL:
  ------------------
  |  |  327|      0|# define BIO_C_FILE_TELL                         133
  ------------------
  |  Branch (200:5): [True: 0, False: 2]
  ------------------
  201|      0|    case BIO_CTRL_INFO:
  ------------------
  |  |   73|      0|# define BIO_CTRL_INFO           3/* opt - extra tit-bits */
  ------------------
  |  Branch (201:5): [True: 0, False: 2]
  ------------------
  202|      0|        if (b->flags & BIO_FLAGS_UPLINK)
  ------------------
  |  |  160|      0|#  define BIO_FLAGS_UPLINK        0
  ------------------
  |  Branch (202:13): [True: 0, False: 0]
  ------------------
  203|      0|            ret = UP_ftell(b->ptr);
  ------------------
  |  |  170|      0|# define UP_ftell        ftell
  ------------------
  204|      0|        else
  205|      0|            ret = ftell(fp);
  206|      0|        break;
  207|      2|    case BIO_C_SET_FILE_PTR:
  ------------------
  |  |  299|      2|# define BIO_C_SET_FILE_PTR                      106
  ------------------
  |  Branch (207:5): [True: 2, False: 0]
  ------------------
  208|      2|        file_free(b);
  209|      2|        b->shutdown = (int)num & BIO_CLOSE;
  ------------------
  |  |   66|      2|# define BIO_CLOSE               0x01
  ------------------
  210|      2|        b->ptr = ptr;
  211|      2|        b->init = 1;
  212|       |# if BIO_FLAGS_UPLINK!=0
  213|       |#  if defined(__MINGW32__) && defined(__MSVCRT__) && !defined(_IOB_ENTRIES)
  214|       |#   define _IOB_ENTRIES 20
  215|       |#  endif
  216|       |        /* Safety net to catch purely internal BIO_set_fp calls */
  217|       |#  if defined(_MSC_VER) && _MSC_VER>=1900
  218|       |        if (ptr == stdin || ptr == stdout || ptr == stderr)
  219|       |            BIO_clear_flags(b, BIO_FLAGS_UPLINK);
  220|       |#  elif defined(_IOB_ENTRIES)
  221|       |        if ((size_t)ptr >= (size_t)stdin &&
  222|       |            (size_t)ptr < (size_t)(stdin + _IOB_ENTRIES))
  223|       |            BIO_clear_flags(b, BIO_FLAGS_UPLINK);
  224|       |#  endif
  225|       |# endif
  226|       |# ifdef UP_fsetmod
  227|       |        if (b->flags & BIO_FLAGS_UPLINK)
  228|       |            UP_fsetmod(b->ptr, (char)((num & BIO_FP_TEXT) ? 't' : 'b'));
  229|       |        else
  230|       |# endif
  231|      2|        {
  232|       |# if defined(OPENSSL_SYS_WINDOWS)
  233|       |            int fd = _fileno((FILE *)ptr);
  234|       |            if (num & BIO_FP_TEXT)
  235|       |                _setmode(fd, _O_TEXT);
  236|       |            else
  237|       |                _setmode(fd, _O_BINARY);
  238|       |# elif defined(OPENSSL_SYS_MSDOS)
  239|       |            int fd = fileno((FILE *)ptr);
  240|       |            /* Set correct text/binary mode */
  241|       |            if (num & BIO_FP_TEXT)
  242|       |                _setmode(fd, _O_TEXT);
  243|       |            /* Dangerous to set stdin/stdout to raw (unless redirected) */
  244|       |            else {
  245|       |                if (fd == STDIN_FILENO || fd == STDOUT_FILENO) {
  246|       |                    if (isatty(fd) <= 0)
  247|       |                        _setmode(fd, _O_BINARY);
  248|       |                } else
  249|       |                    _setmode(fd, _O_BINARY);
  250|       |            }
  251|       |# elif defined(OPENSSL_SYS_WIN32_CYGWIN)
  252|       |            int fd = fileno((FILE *)ptr);
  253|       |            if (!(num & BIO_FP_TEXT))
  254|       |                setmode(fd, O_BINARY);
  255|       |# endif
  256|      2|        }
  257|      2|        break;
  258|      0|    case BIO_C_SET_FILENAME:
  ------------------
  |  |  301|      0|# define BIO_C_SET_FILENAME                      108
  ------------------
  |  Branch (258:5): [True: 0, False: 2]
  ------------------
  259|      0|        file_free(b);
  260|      0|        b->shutdown = (int)num & BIO_CLOSE;
  ------------------
  |  |   66|      0|# define BIO_CLOSE               0x01
  ------------------
  261|      0|        if (num & BIO_FP_APPEND) {
  ------------------
  |  |  147|      0|# define BIO_FP_APPEND           0x08
  ------------------
  |  Branch (261:13): [True: 0, False: 0]
  ------------------
  262|      0|            if (num & BIO_FP_READ)
  ------------------
  |  |  145|      0|# define BIO_FP_READ             0x02
  ------------------
  |  Branch (262:17): [True: 0, False: 0]
  ------------------
  263|      0|                OPENSSL_strlcpy(p, "a+", sizeof(p));
  264|      0|            else
  265|      0|                OPENSSL_strlcpy(p, "a", sizeof(p));
  266|      0|        } else if ((num & BIO_FP_READ) && (num & BIO_FP_WRITE))
  ------------------
  |  |  145|      0|# define BIO_FP_READ             0x02
  ------------------
                      } else if ((num & BIO_FP_READ) && (num & BIO_FP_WRITE))
  ------------------
  |  |  146|      0|# define BIO_FP_WRITE            0x04
  ------------------
  |  Branch (266:20): [True: 0, False: 0]
  |  Branch (266:43): [True: 0, False: 0]
  ------------------
  267|      0|            OPENSSL_strlcpy(p, "r+", sizeof(p));
  268|      0|        else if (num & BIO_FP_WRITE)
  ------------------
  |  |  146|      0|# define BIO_FP_WRITE            0x04
  ------------------
  |  Branch (268:18): [True: 0, False: 0]
  ------------------
  269|      0|            OPENSSL_strlcpy(p, "w", sizeof(p));
  270|      0|        else if (num & BIO_FP_READ)
  ------------------
  |  |  145|      0|# define BIO_FP_READ             0x02
  ------------------
  |  Branch (270:18): [True: 0, False: 0]
  ------------------
  271|      0|            OPENSSL_strlcpy(p, "r", sizeof(p));
  272|      0|        else {
  273|      0|            BIOerr(BIO_F_FILE_CTRL, BIO_R_BAD_FOPEN_MODE);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  274|      0|            ret = 0;
  275|      0|            break;
  276|      0|        }
  277|       |# if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS)
  278|       |        if (!(num & BIO_FP_TEXT))
  279|       |            OPENSSL_strlcat(p, "b", sizeof(p));
  280|       |        else
  281|       |            OPENSSL_strlcat(p, "t", sizeof(p));
  282|       |# elif defined(OPENSSL_SYS_WIN32_CYGWIN)
  283|       |        if (!(num & BIO_FP_TEXT))
  284|       |            OPENSSL_strlcat(p, "b", sizeof(p));
  285|       |# endif
  286|      0|        fp = openssl_fopen(ptr, p);
  287|      0|        if (fp == NULL) {
  ------------------
  |  Branch (287:13): [True: 0, False: 0]
  ------------------
  288|      0|            SYSerr(SYS_F_FOPEN, get_last_sys_error());
  ------------------
  |  |  101|      0|# define SYSerr(f,r)  ERR_PUT_error(ERR_LIB_SYS,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  289|      0|            ERR_add_error_data(5, "fopen('", ptr, "','", p, "')");
  290|      0|            BIOerr(BIO_F_FILE_CTRL, ERR_R_SYS_LIB);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  291|      0|            ret = 0;
  292|      0|            break;
  293|      0|        }
  294|      0|        b->ptr = fp;
  295|      0|        b->init = 1;
  296|      0|        BIO_clear_flags(b, BIO_FLAGS_UPLINK); /* we did fopen -> we disengage
  ------------------
  |  |  160|      0|#  define BIO_FLAGS_UPLINK        0
  ------------------
  297|       |                                               * UPLINK */
  298|      0|        break;
  299|      0|    case BIO_C_GET_FILE_PTR:
  ------------------
  |  |  300|      0|# define BIO_C_GET_FILE_PTR                      107
  ------------------
  |  Branch (299:5): [True: 0, False: 2]
  ------------------
  300|       |        /* the ptr parameter is actually a FILE ** in this case. */
  301|      0|        if (ptr != NULL) {
  ------------------
  |  Branch (301:13): [True: 0, False: 0]
  ------------------
  302|      0|            fpp = (FILE **)ptr;
  303|      0|            *fpp = (FILE *)b->ptr;
  304|      0|        }
  305|      0|        break;
  306|      0|    case BIO_CTRL_GET_CLOSE:
  ------------------
  |  |   78|      0|# define BIO_CTRL_GET_CLOSE      8/* man - set the 'close' on free */
  ------------------
  |  Branch (306:5): [True: 0, False: 2]
  ------------------
  307|      0|        ret = (long)b->shutdown;
  308|      0|        break;
  309|      0|    case BIO_CTRL_SET_CLOSE:
  ------------------
  |  |   79|      0|# define BIO_CTRL_SET_CLOSE      9/* man - set the 'close' on free */
  ------------------
  |  Branch (309:5): [True: 0, False: 2]
  ------------------
  310|      0|        b->shutdown = (int)num;
  311|      0|        break;
  312|      0|    case BIO_CTRL_FLUSH:
  ------------------
  |  |   81|      0|# define BIO_CTRL_FLUSH          11/* opt - 'flush' buffered output */
  ------------------
  |  Branch (312:5): [True: 0, False: 2]
  ------------------
  313|      0|        st = b->flags & BIO_FLAGS_UPLINK
  ------------------
  |  |  160|      0|#  define BIO_FLAGS_UPLINK        0
  ------------------
  |  Branch (313:14): [True: 0, False: 0]
  ------------------
  314|      0|                ? UP_fflush(b->ptr) : fflush((FILE *)b->ptr);
  ------------------
  |  |  171|      0|# define UP_fflush       fflush
  ------------------
  315|      0|        if (st == EOF) {
  ------------------
  |  Branch (315:13): [True: 0, False: 0]
  ------------------
  316|      0|            SYSerr(SYS_F_FFLUSH, get_last_sys_error());
  ------------------
  |  |  101|      0|# define SYSerr(f,r)  ERR_PUT_error(ERR_LIB_SYS,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  317|      0|            ERR_add_error_data(1, "fflush()");
  318|      0|            BIOerr(BIO_F_FILE_CTRL, ERR_R_SYS_LIB);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  319|      0|            ret = 0;
  320|      0|        }
  321|      0|        break;
  322|      0|    case BIO_CTRL_DUP:
  ------------------
  |  |   82|      0|# define BIO_CTRL_DUP            12/* man - extra stuff for 'duped' BIO */
  ------------------
  |  Branch (322:5): [True: 0, False: 2]
  ------------------
  323|      0|        ret = 1;
  324|      0|        break;
  325|       |
  326|      0|    case BIO_CTRL_WPENDING:
  ------------------
  |  |   83|      0|# define BIO_CTRL_WPENDING       13/* opt - number of bytes still to write */
  ------------------
  |  Branch (326:5): [True: 0, False: 2]
  ------------------
  327|      0|    case BIO_CTRL_PENDING:
  ------------------
  |  |   80|      0|# define BIO_CTRL_PENDING        10/* opt - is their more data buffered */
  ------------------
  |  Branch (327:5): [True: 0, False: 2]
  ------------------
  328|      0|    case BIO_CTRL_PUSH:
  ------------------
  |  |   76|      0|# define BIO_CTRL_PUSH           6/* opt - internal, used to signify change */
  ------------------
  |  Branch (328:5): [True: 0, False: 2]
  ------------------
  329|      0|    case BIO_CTRL_POP:
  ------------------
  |  |   77|      0|# define BIO_CTRL_POP            7/* opt - internal, used to signify change */
  ------------------
  |  Branch (329:5): [True: 0, False: 2]
  ------------------
  330|      0|    default:
  ------------------
  |  Branch (330:5): [True: 0, False: 2]
  ------------------
  331|      0|        ret = 0;
  332|      0|        break;
  333|      2|    }
  334|      2|    return ret;
  335|      2|}
bss_file.c:file_new:
  111|      2|{
  112|      2|    bi->init = 0;
  113|      2|    bi->num = 0;
  114|      2|    bi->ptr = NULL;
  115|      2|    bi->flags = BIO_FLAGS_UPLINK; /* default to UPLINK */
  ------------------
  |  |  160|      2|#  define BIO_FLAGS_UPLINK        0
  ------------------
  116|      2|    return 1;
  117|      2|}
bss_file.c:file_free:
  120|      4|{
  121|      4|    if (a == NULL)
  ------------------
  |  Branch (121:9): [True: 0, False: 4]
  ------------------
  122|      0|        return 0;
  123|      4|    if (a->shutdown) {
  ------------------
  |  Branch (123:9): [True: 4, False: 0]
  ------------------
  124|      4|        if ((a->init) && (a->ptr != NULL)) {
  ------------------
  |  Branch (124:13): [True: 2, False: 2]
  |  Branch (124:26): [True: 2, False: 0]
  ------------------
  125|      2|            if (a->flags & BIO_FLAGS_UPLINK)
  ------------------
  |  |  160|      2|#  define BIO_FLAGS_UPLINK        0
  ------------------
  |  Branch (125:17): [True: 0, False: 2]
  ------------------
  126|      0|                UP_fclose(a->ptr);
  ------------------
  |  |  166|      0|# define UP_fclose       fclose
  ------------------
  127|      2|            else
  128|      2|                fclose(a->ptr);
  129|      2|            a->ptr = NULL;
  130|      2|            a->flags = BIO_FLAGS_UPLINK;
  ------------------
  |  |  160|      2|#  define BIO_FLAGS_UPLINK        0
  ------------------
  131|      2|        }
  132|      4|        a->init = 0;
  133|      4|    }
  134|      4|    return 1;
  135|      4|}

BIO_s_mem:
   77|  28.9k|{
   78|  28.9k|    return &mem_method;
   79|  28.9k|}
bss_mem.c:mem_write:
  218|  28.9k|{
  219|  28.9k|    int ret = -1;
  220|  28.9k|    int blen;
  221|  28.9k|    BIO_BUF_MEM *bbm = (BIO_BUF_MEM *)b->ptr;
  222|       |
  223|  28.9k|    if (in == NULL) {
  ------------------
  |  Branch (223:9): [True: 0, False: 28.9k]
  ------------------
  224|      0|        BIOerr(BIO_F_MEM_WRITE, BIO_R_NULL_PARAMETER);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  225|      0|        goto end;
  226|      0|    }
  227|  28.9k|    if (b->flags & BIO_FLAGS_MEM_RDONLY) {
  ------------------
  |  |  170|  28.9k|# define BIO_FLAGS_MEM_RDONLY    0x200
  ------------------
  |  Branch (227:9): [True: 0, False: 28.9k]
  ------------------
  228|      0|        BIOerr(BIO_F_MEM_WRITE, BIO_R_WRITE_TO_READ_ONLY_BIO);
  ------------------
  |  |  116|      0|# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  229|      0|        goto end;
  230|      0|    }
  231|  28.9k|    BIO_clear_retry_flags(b);
  ------------------
  |  |  192|  28.9k|                BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  153|  28.9k|# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  150|  28.9k|# define BIO_FLAGS_READ          0x01
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|  28.9k|# define BIO_FLAGS_WRITE         0x02
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  152|  28.9k|# define BIO_FLAGS_IO_SPECIAL    0x04
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  154|  28.9k|# define BIO_FLAGS_SHOULD_RETRY  0x08
  |  |  ------------------
  ------------------
  232|  28.9k|    if (inl == 0)
  ------------------
  |  Branch (232:9): [True: 0, False: 28.9k]
  ------------------
  233|      0|        return 0;
  234|  28.9k|    blen = bbm->readp->length;
  235|  28.9k|    mem_buf_sync(b);
  236|  28.9k|    if (BUF_MEM_grow_clean(bbm->buf, blen + inl) == 0)
  ------------------
  |  Branch (236:9): [True: 0, False: 28.9k]
  ------------------
  237|      0|        goto end;
  238|  28.9k|    memcpy(bbm->buf->data + blen, in, inl);
  239|  28.9k|    *bbm->readp = *bbm->buf;
  240|  28.9k|    ret = inl;
  241|  28.9k| end:
  242|  28.9k|    return ret;
  243|  28.9k|}
bss_mem.c:mem_buf_sync:
  181|  28.9k|{
  182|  28.9k|    if (b != NULL && b->init != 0 && b->ptr != NULL) {
  ------------------
  |  Branch (182:9): [True: 28.9k, False: 0]
  |  Branch (182:22): [True: 28.9k, False: 0]
  |  Branch (182:38): [True: 28.9k, False: 0]
  ------------------
  183|  28.9k|        BIO_BUF_MEM *bbm = (BIO_BUF_MEM *)b->ptr;
  184|       |
  185|  28.9k|        if (bbm->readp->data != bbm->buf->data) {
  ------------------
  |  Branch (185:13): [True: 0, False: 28.9k]
  ------------------
  186|      0|            memmove(bbm->buf->data, bbm->readp->data, bbm->readp->length);
  187|      0|            bbm->buf->length = bbm->readp->length;
  188|      0|            bbm->readp->data = bbm->buf->data;
  189|      0|        }
  190|  28.9k|    }
  191|  28.9k|    return 0;
  192|  28.9k|}
bss_mem.c:mem_ctrl:
  246|  28.9k|{
  247|  28.9k|    long ret = 1;
  248|  28.9k|    char **pptr;
  249|  28.9k|    BIO_BUF_MEM *bbm = (BIO_BUF_MEM *)b->ptr;
  250|  28.9k|    BUF_MEM *bm;
  251|       |
  252|  28.9k|    if (b->flags & BIO_FLAGS_MEM_RDONLY)
  ------------------
  |  |  170|  28.9k|# define BIO_FLAGS_MEM_RDONLY    0x200
  ------------------
  |  Branch (252:9): [True: 0, False: 28.9k]
  ------------------
  253|      0|        bm = bbm->buf;
  254|  28.9k|    else
  255|  28.9k|        bm = bbm->readp;
  256|       |
  257|  28.9k|    switch (cmd) {
  258|      0|    case BIO_CTRL_RESET:
  ------------------
  |  |   71|      0|# define BIO_CTRL_RESET          1/* opt - rewind/zero etc */
  ------------------
  |  Branch (258:5): [True: 0, False: 28.9k]
  ------------------
  259|      0|        bm = bbm->buf;
  260|      0|        if (bm->data != NULL) {
  ------------------
  |  Branch (260:13): [True: 0, False: 0]
  ------------------
  261|      0|            if (!(b->flags & BIO_FLAGS_MEM_RDONLY)) {
  ------------------
  |  |  170|      0|# define BIO_FLAGS_MEM_RDONLY    0x200
  ------------------
  |  Branch (261:17): [True: 0, False: 0]
  ------------------
  262|      0|                if (!(b->flags & BIO_FLAGS_NONCLEAR_RST)) {
  ------------------
  |  |  171|      0|# define BIO_FLAGS_NONCLEAR_RST  0x400
  ------------------
  |  Branch (262:21): [True: 0, False: 0]
  ------------------
  263|      0|                    memset(bm->data, 0, bm->max);
  264|      0|                    bm->length = 0;
  265|      0|                }
  266|      0|                *bbm->readp = *bbm->buf;
  267|      0|            } else {
  268|       |                /* For read only case just reset to the start again */
  269|      0|                *bbm->buf = *bbm->readp;
  270|      0|            }
  271|      0|        }
  272|      0|        break;
  273|      0|    case BIO_CTRL_EOF:
  ------------------
  |  |   72|      0|# define BIO_CTRL_EOF            2/* opt - are we at the eof */
  ------------------
  |  Branch (273:5): [True: 0, False: 28.9k]
  ------------------
  274|      0|        ret = (long)(bm->length == 0);
  275|      0|        break;
  276|      0|    case BIO_C_SET_BUF_MEM_EOF_RETURN:
  ------------------
  |  |  323|      0|# define BIO_C_SET_BUF_MEM_EOF_RETURN            130/* return end of input
  ------------------
  |  Branch (276:5): [True: 0, False: 28.9k]
  ------------------
  277|      0|        b->num = (int)num;
  278|      0|        break;
  279|      0|    case BIO_CTRL_INFO:
  ------------------
  |  |   73|      0|# define BIO_CTRL_INFO           3/* opt - extra tit-bits */
  ------------------
  |  Branch (279:5): [True: 0, False: 28.9k]
  ------------------
  280|      0|        ret = (long)bm->length;
  281|      0|        if (ptr != NULL) {
  ------------------
  |  Branch (281:13): [True: 0, False: 0]
  ------------------
  282|      0|            pptr = (char **)ptr;
  283|      0|            *pptr = (char *)&(bm->data[0]);
  284|      0|        }
  285|      0|        break;
  286|      0|    case BIO_C_SET_BUF_MEM:
  ------------------
  |  |  307|      0|# define BIO_C_SET_BUF_MEM                       114
  ------------------
  |  Branch (286:5): [True: 0, False: 28.9k]
  ------------------
  287|      0|        mem_buf_free(b);
  288|      0|        b->shutdown = (int)num;
  289|      0|        bbm->buf = ptr;
  290|      0|        *bbm->readp = *bbm->buf;
  291|      0|        break;
  292|      0|    case BIO_C_GET_BUF_MEM_PTR:
  ------------------
  |  |  308|      0|# define BIO_C_GET_BUF_MEM_PTR                   115
  ------------------
  |  Branch (292:5): [True: 0, False: 28.9k]
  ------------------
  293|      0|        if (ptr != NULL) {
  ------------------
  |  Branch (293:13): [True: 0, False: 0]
  ------------------
  294|      0|            if (!(b->flags & BIO_FLAGS_MEM_RDONLY))
  ------------------
  |  |  170|      0|# define BIO_FLAGS_MEM_RDONLY    0x200
  ------------------
  |  Branch (294:17): [True: 0, False: 0]
  ------------------
  295|      0|                mem_buf_sync(b);
  296|      0|            bm = bbm->buf;
  297|      0|            pptr = (char **)ptr;
  298|      0|            *pptr = (char *)bm;
  299|      0|        }
  300|      0|        break;
  301|      0|    case BIO_CTRL_GET_CLOSE:
  ------------------
  |  |   78|      0|# define BIO_CTRL_GET_CLOSE      8/* man - set the 'close' on free */
  ------------------
  |  Branch (301:5): [True: 0, False: 28.9k]
  ------------------
  302|      0|        ret = (long)b->shutdown;
  303|      0|        break;
  304|  28.9k|    case BIO_CTRL_SET_CLOSE:
  ------------------
  |  |   79|  28.9k|# define BIO_CTRL_SET_CLOSE      9/* man - set the 'close' on free */
  ------------------
  |  Branch (304:5): [True: 28.9k, False: 0]
  ------------------
  305|  28.9k|        b->shutdown = (int)num;
  306|  28.9k|        break;
  307|      0|    case BIO_CTRL_WPENDING:
  ------------------
  |  |   83|      0|# define BIO_CTRL_WPENDING       13/* opt - number of bytes still to write */
  ------------------
  |  Branch (307:5): [True: 0, False: 28.9k]
  ------------------
  308|      0|        ret = 0L;
  309|      0|        break;
  310|      0|    case BIO_CTRL_PENDING:
  ------------------
  |  |   80|      0|# define BIO_CTRL_PENDING        10/* opt - is their more data buffered */
  ------------------
  |  Branch (310:5): [True: 0, False: 28.9k]
  ------------------
  311|      0|        ret = (long)bm->length;
  312|      0|        break;
  313|      0|    case BIO_CTRL_DUP:
  ------------------
  |  |   82|      0|# define BIO_CTRL_DUP            12/* man - extra stuff for 'duped' BIO */
  ------------------
  |  Branch (313:5): [True: 0, False: 28.9k]
  ------------------
  314|      0|    case BIO_CTRL_FLUSH:
  ------------------
  |  |   81|      0|# define BIO_CTRL_FLUSH          11/* opt - 'flush' buffered output */
  ------------------
  |  Branch (314:5): [True: 0, False: 28.9k]
  ------------------
  315|      0|        ret = 1;
  316|      0|        break;
  317|      0|    case BIO_CTRL_PUSH:
  ------------------
  |  |   76|      0|# define BIO_CTRL_PUSH           6/* opt - internal, used to signify change */
  ------------------
  |  Branch (317:5): [True: 0, False: 28.9k]
  ------------------
  318|      0|    case BIO_CTRL_POP:
  ------------------
  |  |   77|      0|# define BIO_CTRL_POP            7/* opt - internal, used to signify change */
  ------------------
  |  Branch (318:5): [True: 0, False: 28.9k]
  ------------------
  319|      0|    default:
  ------------------
  |  Branch (319:5): [True: 0, False: 28.9k]
  ------------------
  320|      0|        ret = 0;
  321|      0|        break;
  322|  28.9k|    }
  323|  28.9k|    return ret;
  324|  28.9k|}
bss_mem.c:mem_buf_free:
  162|  28.9k|{
  163|  28.9k|    if (a == NULL)
  ------------------
  |  Branch (163:9): [True: 0, False: 28.9k]
  ------------------
  164|      0|        return 0;
  165|       |
  166|  28.9k|    if (a->shutdown && a->init && a->ptr != NULL) {
  ------------------
  |  Branch (166:9): [True: 28.9k, False: 0]
  |  Branch (166:24): [True: 28.9k, False: 0]
  |  Branch (166:35): [True: 28.9k, False: 0]
  ------------------
  167|  28.9k|        BIO_BUF_MEM *bb = (BIO_BUF_MEM *)a->ptr;
  168|  28.9k|        BUF_MEM *b = bb->buf;
  169|       |
  170|  28.9k|        if (a->flags & BIO_FLAGS_MEM_RDONLY)
  ------------------
  |  |  170|  28.9k|# define BIO_FLAGS_MEM_RDONLY    0x200
  ------------------
  |  Branch (170:13): [True: 0, False: 28.9k]
  ------------------
  171|      0|            b->data = NULL;
  172|  28.9k|        BUF_MEM_free(b);
  173|  28.9k|    }
  174|  28.9k|    return 1;
  175|  28.9k|}
bss_mem.c:mem_new:
  137|  28.9k|{
  138|  28.9k|    return mem_init(bi, 0L);
  139|  28.9k|}
bss_mem.c:mem_init:
  114|  28.9k|{
  115|  28.9k|    BIO_BUF_MEM *bb = OPENSSL_zalloc(sizeof(*bb));
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  116|       |
  117|  28.9k|    if (bb == NULL)
  ------------------
  |  Branch (117:9): [True: 0, False: 28.9k]
  ------------------
  118|      0|        return 0;
  119|  28.9k|    if ((bb->buf = BUF_MEM_new_ex(flags)) == NULL) {
  ------------------
  |  Branch (119:9): [True: 0, False: 28.9k]
  ------------------
  120|      0|        OPENSSL_free(bb);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  121|      0|        return 0;
  122|      0|    }
  123|  28.9k|    if ((bb->readp = OPENSSL_zalloc(sizeof(*bb->readp))) == NULL) {
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (123:9): [True: 0, False: 28.9k]
  ------------------
  124|      0|        BUF_MEM_free(bb->buf);
  125|      0|        OPENSSL_free(bb);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  126|      0|        return 0;
  127|      0|    }
  128|  28.9k|    *bb->readp = *bb->buf;
  129|  28.9k|    bi->shutdown = 1;
  130|  28.9k|    bi->init = 1;
  131|  28.9k|    bi->num = -1;
  132|  28.9k|    bi->ptr = (char *)bb;
  133|  28.9k|    return 1;
  134|  28.9k|}
bss_mem.c:mem_free:
  147|  28.9k|{
  148|  28.9k|    BIO_BUF_MEM *bb;
  149|       |
  150|  28.9k|    if (a == NULL)
  ------------------
  |  Branch (150:9): [True: 0, False: 28.9k]
  ------------------
  151|      0|        return 0;
  152|       |
  153|  28.9k|    bb = (BIO_BUF_MEM *)a->ptr;
  154|  28.9k|    if (!mem_buf_free(a))
  ------------------
  |  Branch (154:9): [True: 0, False: 28.9k]
  ------------------
  155|      0|        return 0;
  156|  28.9k|    OPENSSL_free(bb->readp);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  157|  28.9k|    OPENSSL_free(bb);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  158|  28.9k|    return 1;
  159|  28.9k|}

BIO_s_socket:
   55|  28.9k|{
   56|  28.9k|    return &methods_sockp;
   57|  28.9k|}
BIO_sock_should_retry:
  176|  28.9k|{
  177|  28.9k|    int err;
  178|       |
  179|  28.9k|    if ((i == 0) || (i == -1)) {
  ------------------
  |  Branch (179:9): [True: 28.9k, False: 0]
  |  Branch (179:21): [True: 0, False: 0]
  ------------------
  180|  28.9k|        err = get_last_socket_error();
  ------------------
  |  |  122|  28.9k|# define get_last_socket_error() errno
  ------------------
  181|       |
  182|  28.9k|        return BIO_sock_non_fatal_error(err);
  183|  28.9k|    }
  184|      0|    return 0;
  185|  28.9k|}
BIO_sock_non_fatal_error:
  188|  28.9k|{
  189|  28.9k|    switch (err) {
  190|       |# if defined(OPENSSL_SYS_WINDOWS)
  191|       |#  if defined(WSAEWOULDBLOCK)
  192|       |    case WSAEWOULDBLOCK:
  193|       |#  endif
  194|       |# endif
  195|       |
  196|      0|# ifdef EWOULDBLOCK
  197|       |#  ifdef WSAEWOULDBLOCK
  198|       |#   if WSAEWOULDBLOCK != EWOULDBLOCK
  199|       |    case EWOULDBLOCK:
  200|       |#   endif
  201|       |#  else
  202|      0|    case EWOULDBLOCK:
  ------------------
  |  Branch (202:5): [True: 0, False: 28.9k]
  ------------------
  203|      0|#  endif
  204|      0|# endif
  205|       |
  206|      0|# if defined(ENOTCONN)
  207|      0|    case ENOTCONN:
  ------------------
  |  Branch (207:5): [True: 0, False: 28.9k]
  ------------------
  208|      0|# endif
  209|       |
  210|      0|# ifdef EINTR
  211|      0|    case EINTR:
  ------------------
  |  Branch (211:5): [True: 0, False: 28.9k]
  ------------------
  212|      0|# endif
  213|       |
  214|      0|# ifdef EAGAIN
  215|       |#  if EWOULDBLOCK != EAGAIN
  216|       |    case EAGAIN:
  217|       |#  endif
  218|      0|# endif
  219|       |
  220|      0|# ifdef EPROTO
  221|      0|    case EPROTO:
  ------------------
  |  Branch (221:5): [True: 0, False: 28.9k]
  ------------------
  222|      0|# endif
  223|       |
  224|      0|# ifdef EINPROGRESS
  225|      0|    case EINPROGRESS:
  ------------------
  |  Branch (225:5): [True: 0, False: 28.9k]
  ------------------
  226|      0|# endif
  227|       |
  228|      0|# ifdef EALREADY
  229|      0|    case EALREADY:
  ------------------
  |  Branch (229:5): [True: 0, False: 28.9k]
  ------------------
  230|      0|# endif
  231|      0|        return 1;
  232|  28.9k|    default:
  ------------------
  |  Branch (232:5): [True: 28.9k, False: 0]
  ------------------
  233|  28.9k|        break;
  234|  28.9k|    }
  235|  28.9k|    return 0;
  236|  28.9k|}
bss_sock.c:sock_write:
  112|  28.9k|{
  113|  28.9k|    int ret;
  114|       |
  115|  28.9k|    clear_socket_error();
  ------------------
  |  |  123|  28.9k|# define clear_socket_error()    errno=0
  ------------------
  116|  28.9k|    ret = writesocket(b->num, in, inl);
  ------------------
  |  |  152|  28.9k|#  define writesocket(s,b,n)      write((s),(b),(n))
  ------------------
  117|  28.9k|    BIO_clear_retry_flags(b);
  ------------------
  |  |  192|  28.9k|                BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  153|  28.9k|# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  150|  28.9k|# define BIO_FLAGS_READ          0x01
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|  28.9k|# define BIO_FLAGS_WRITE         0x02
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  152|  28.9k|# define BIO_FLAGS_IO_SPECIAL    0x04
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  154|  28.9k|# define BIO_FLAGS_SHOULD_RETRY  0x08
  |  |  ------------------
  ------------------
  118|  28.9k|    if (ret <= 0) {
  ------------------
  |  Branch (118:9): [True: 0, False: 28.9k]
  ------------------
  119|      0|        if (BIO_sock_should_retry(ret))
  ------------------
  |  Branch (119:13): [True: 0, False: 0]
  ------------------
  120|      0|            BIO_set_retry_write(b);
  ------------------
  |  |  188|      0|                BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  151|      0|# define BIO_FLAGS_WRITE         0x02
  |  |  ------------------
  |  |                               BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  154|      0|# define BIO_FLAGS_SHOULD_RETRY  0x08
  |  |  ------------------
  ------------------
  121|      0|    }
  122|  28.9k|    return ret;
  123|  28.9k|}
bss_sock.c:sock_read:
   94|  28.9k|{
   95|  28.9k|    int ret = 0;
   96|       |
   97|  28.9k|    if (out != NULL) {
  ------------------
  |  Branch (97:9): [True: 28.9k, False: 0]
  ------------------
   98|  28.9k|        clear_socket_error();
  ------------------
  |  |  123|  28.9k|# define clear_socket_error()    errno=0
  ------------------
   99|  28.9k|        ret = readsocket(b->num, out, outl);
  ------------------
  |  |  151|  28.9k|#  define readsocket(s,b,n)       read((s),(b),(n))
  ------------------
  100|  28.9k|        BIO_clear_retry_flags(b);
  ------------------
  |  |  192|  28.9k|                BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  153|  28.9k|# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  150|  28.9k|# define BIO_FLAGS_READ          0x01
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|  28.9k|# define BIO_FLAGS_WRITE         0x02
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  152|  28.9k|# define BIO_FLAGS_IO_SPECIAL    0x04
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  154|  28.9k|# define BIO_FLAGS_SHOULD_RETRY  0x08
  |  |  ------------------
  ------------------
  101|  28.9k|        if (ret <= 0) {
  ------------------
  |  Branch (101:13): [True: 28.9k, False: 0]
  ------------------
  102|  28.9k|            if (BIO_sock_should_retry(ret))
  ------------------
  |  Branch (102:17): [True: 0, False: 28.9k]
  ------------------
  103|      0|                BIO_set_retry_read(b);
  ------------------
  |  |  186|      0|                BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  150|      0|# define BIO_FLAGS_READ          0x01
  |  |  ------------------
  |  |                               BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  154|      0|# define BIO_FLAGS_SHOULD_RETRY  0x08
  |  |  ------------------
  ------------------
  104|  28.9k|            else if (ret == 0)
  ------------------
  |  Branch (104:22): [True: 28.9k, False: 0]
  ------------------
  105|  28.9k|                b->flags |= BIO_FLAGS_IN_EOF;
  ------------------
  |  |  172|  28.9k|# define BIO_FLAGS_IN_EOF        0x800
  ------------------
  106|  28.9k|        }
  107|  28.9k|    }
  108|  28.9k|    return ret;
  109|  28.9k|}
bss_sock.c:sock_ctrl:
  126|   115k|{
  127|   115k|    long ret = 1;
  128|   115k|    int *ip;
  129|       |
  130|   115k|    switch (cmd) {
  131|  28.9k|    case BIO_C_SET_FD:
  ------------------
  |  |  297|  28.9k|# define BIO_C_SET_FD                            104
  ------------------
  |  Branch (131:5): [True: 28.9k, False: 86.9k]
  ------------------
  132|  28.9k|        sock_free(b);
  133|  28.9k|        b->num = *((int *)ptr);
  134|  28.9k|        b->shutdown = (int)num;
  135|  28.9k|        b->init = 1;
  136|  28.9k|        break;
  137|      0|    case BIO_C_GET_FD:
  ------------------
  |  |  298|      0|# define BIO_C_GET_FD                            105
  ------------------
  |  Branch (137:5): [True: 0, False: 115k]
  ------------------
  138|      0|        if (b->init) {
  ------------------
  |  Branch (138:13): [True: 0, False: 0]
  ------------------
  139|      0|            ip = (int *)ptr;
  140|      0|            if (ip != NULL)
  ------------------
  |  Branch (140:17): [True: 0, False: 0]
  ------------------
  141|      0|                *ip = b->num;
  142|      0|            ret = b->num;
  143|      0|        } else
  144|      0|            ret = -1;
  145|      0|        break;
  146|      0|    case BIO_CTRL_GET_CLOSE:
  ------------------
  |  |   78|      0|# define BIO_CTRL_GET_CLOSE      8/* man - set the 'close' on free */
  ------------------
  |  Branch (146:5): [True: 0, False: 115k]
  ------------------
  147|      0|        ret = b->shutdown;
  148|      0|        break;
  149|      0|    case BIO_CTRL_SET_CLOSE:
  ------------------
  |  |   79|      0|# define BIO_CTRL_SET_CLOSE      9/* man - set the 'close' on free */
  ------------------
  |  Branch (149:5): [True: 0, False: 115k]
  ------------------
  150|      0|        b->shutdown = (int)num;
  151|      0|        break;
  152|      0|    case BIO_CTRL_DUP:
  ------------------
  |  |   82|      0|# define BIO_CTRL_DUP            12/* man - extra stuff for 'duped' BIO */
  ------------------
  |  Branch (152:5): [True: 0, False: 115k]
  ------------------
  153|  28.9k|    case BIO_CTRL_FLUSH:
  ------------------
  |  |   81|  28.9k|# define BIO_CTRL_FLUSH          11/* opt - 'flush' buffered output */
  ------------------
  |  Branch (153:5): [True: 28.9k, False: 86.9k]
  ------------------
  154|  28.9k|        ret = 1;
  155|  28.9k|        break;
  156|      0|    case BIO_CTRL_EOF:
  ------------------
  |  |   72|      0|# define BIO_CTRL_EOF            2/* opt - are we at the eof */
  ------------------
  |  Branch (156:5): [True: 0, False: 115k]
  ------------------
  157|      0|        ret = (b->flags & BIO_FLAGS_IN_EOF) != 0 ? 1 : 0;
  ------------------
  |  |  172|      0|# define BIO_FLAGS_IN_EOF        0x800
  ------------------
  |  Branch (157:15): [True: 0, False: 0]
  ------------------
  158|      0|        break;
  159|  57.9k|    default:
  ------------------
  |  Branch (159:5): [True: 57.9k, False: 57.9k]
  ------------------
  160|  57.9k|        ret = 0;
  161|  57.9k|        break;
  162|   115k|    }
  163|   115k|    return ret;
  164|   115k|}
bss_sock.c:sock_new:
   71|  28.9k|{
   72|  28.9k|    bi->init = 0;
   73|  28.9k|    bi->num = 0;
   74|       |    bi->ptr = NULL;
   75|  28.9k|    bi->flags = 0;
   76|  28.9k|    return 1;
   77|  28.9k|}
bss_sock.c:sock_free:
   80|  57.9k|{
   81|  57.9k|    if (a == NULL)
  ------------------
  |  Branch (81:9): [True: 0, False: 57.9k]
  ------------------
   82|      0|        return 0;
   83|  57.9k|    if (a->shutdown) {
  ------------------
  |  Branch (83:9): [True: 28.9k, False: 28.9k]
  ------------------
   84|  28.9k|        if (a->init) {
  ------------------
  |  Branch (84:13): [True: 0, False: 28.9k]
  ------------------
   85|      0|            BIO_closesocket(a->num);
   86|      0|        }
   87|  28.9k|        a->init = 0;
   88|  28.9k|        a->flags = 0;
   89|  28.9k|    }
   90|  57.9k|    return 1;
   91|  57.9k|}

EVP_blake2b512:
   56|      2|{
   57|      2|    return &blake2b_md;
   58|      2|}

EVP_blake2s256:
   56|      2|{
   57|      2|    return &blake2s_md;
   58|      2|}

ERR_load_BN_strings:
  110|      2|{
  111|      2|#ifndef OPENSSL_NO_ERR
  112|      2|    if (ERR_func_error_string(BN_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (112:9): [True: 2, False: 0]
  ------------------
  113|      2|        ERR_load_strings_const(BN_str_functs);
  114|      2|        ERR_load_strings_const(BN_str_reasons);
  115|      2|    }
  116|      2|#endif
  117|      2|    return 1;
  118|      2|}

BN_free:
  225|   463k|{
  226|   463k|    if (a == NULL)
  ------------------
  |  Branch (226:9): [True: 463k, False: 0]
  ------------------
  227|   463k|        return;
  228|      0|    if (!BN_get_flags(a, BN_FLG_STATIC_DATA))
  ------------------
  |  |   53|      0|# define BN_FLG_STATIC_DATA      0x02
  ------------------
  |  Branch (228:9): [True: 0, False: 0]
  ------------------
  229|      0|        bn_free_d(a, 0);
  230|      0|    if (a->flags & BN_FLG_MALLOCED)
  ------------------
  |  |   52|      0|# define BN_FLG_MALLOCED         0x01
  ------------------
  |  Branch (230:9): [True: 0, False: 0]
  ------------------
  231|      0|        OPENSSL_free(a);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  232|      0|}

ERR_load_BUF_strings:
   30|      2|{
   31|      2|#ifndef OPENSSL_NO_ERR
   32|      2|    if (ERR_func_error_string(BUF_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (32:9): [True: 2, False: 0]
  ------------------
   33|      2|        ERR_load_strings_const(BUF_str_functs);
   34|      2|        ERR_load_strings_const(BUF_str_reasons);
   35|      2|    }
   36|      2|#endif
   37|      2|    return 1;
   38|      2|}

BUF_MEM_new_ex:
   22|  28.9k|{
   23|  28.9k|    BUF_MEM *ret;
   24|       |
   25|  28.9k|    ret = BUF_MEM_new();
   26|  28.9k|    if (ret != NULL)
  ------------------
  |  Branch (26:9): [True: 28.9k, False: 0]
  ------------------
   27|  28.9k|        ret->flags = flags;
   28|  28.9k|    return ret;
   29|  28.9k|}
BUF_MEM_new:
   32|  58.1k|{
   33|  58.1k|    BUF_MEM *ret;
   34|       |
   35|  58.1k|    ret = OPENSSL_zalloc(sizeof(*ret));
  ------------------
  |  |  120|  58.1k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   36|  58.1k|    if (ret == NULL) {
  ------------------
  |  Branch (36:9): [True: 0, False: 58.1k]
  ------------------
   37|      0|        BUFerr(BUF_F_BUF_MEM_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  106|      0|# define BUFerr(f,r)  ERR_PUT_error(ERR_LIB_BUF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   38|      0|        return NULL;
   39|      0|    }
   40|  58.1k|    return ret;
   41|  58.1k|}
BUF_MEM_free:
   44|   144k|{
   45|   144k|    if (a == NULL)
  ------------------
  |  Branch (45:9): [True: 86.9k, False: 57.9k]
  ------------------
   46|  86.9k|        return;
   47|  57.9k|    if (a->data != NULL) {
  ------------------
  |  Branch (47:9): [True: 57.9k, False: 0]
  ------------------
   48|  57.9k|        if (a->flags & BUF_MEM_FLAG_SECURE)
  ------------------
  |  |   45|  57.9k|# define BUF_MEM_FLAG_SECURE  0x01
  ------------------
  |  Branch (48:13): [True: 0, False: 57.9k]
  ------------------
   49|      0|            OPENSSL_secure_clear_free(a->data, a->max);
  ------------------
  |  |  142|      0|        CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   50|  57.9k|        else
   51|  57.9k|            OPENSSL_clear_free(a->data, a->max);
  ------------------
  |  |  126|  57.9k|        CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   52|  57.9k|    }
   53|  57.9k|    OPENSSL_free(a);
  ------------------
  |  |  128|  57.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   54|  57.9k|}
BUF_MEM_grow:
   74|  29.9k|{
   75|  29.9k|    char *ret;
   76|  29.9k|    size_t n;
   77|       |
   78|  29.9k|    if (str->length >= len) {
  ------------------
  |  Branch (78:9): [True: 700, False: 29.2k]
  ------------------
   79|    700|        str->length = len;
   80|    700|        return len;
   81|    700|    }
   82|  29.2k|    if (str->max >= len) {
  ------------------
  |  Branch (82:9): [True: 0, False: 29.2k]
  ------------------
   83|      0|        if (str->data != NULL)
  ------------------
  |  Branch (83:13): [True: 0, False: 0]
  ------------------
   84|      0|            memset(&str->data[str->length], 0, len - str->length);
   85|      0|        str->length = len;
   86|      0|        return len;
   87|      0|    }
   88|       |    /* This limit is sufficient to ensure (len+3)/3*4 < 2**31 */
   89|  29.2k|    if (len > LIMIT_BEFORE_EXPANSION) {
  ------------------
  |  |   19|  29.2k|#define LIMIT_BEFORE_EXPANSION 0x5ffffffc
  ------------------
  |  Branch (89:9): [True: 0, False: 29.2k]
  ------------------
   90|      0|        BUFerr(BUF_F_BUF_MEM_GROW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  106|      0|# define BUFerr(f,r)  ERR_PUT_error(ERR_LIB_BUF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   91|      0|        return 0;
   92|      0|    }
   93|  29.2k|    n = (len + 3) / 3 * 4;
   94|  29.2k|    if ((str->flags & BUF_MEM_FLAG_SECURE))
  ------------------
  |  |   45|  29.2k|# define BUF_MEM_FLAG_SECURE  0x01
  ------------------
  |  Branch (94:9): [True: 0, False: 29.2k]
  ------------------
   95|      0|        ret = sec_alloc_realloc(str, n);
   96|  29.2k|    else
   97|  29.2k|        ret = OPENSSL_realloc(str->data, n);
  ------------------
  |  |  122|  29.2k|        CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   98|  29.2k|    if (ret == NULL) {
  ------------------
  |  Branch (98:9): [True: 0, False: 29.2k]
  ------------------
   99|      0|        BUFerr(BUF_F_BUF_MEM_GROW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  106|      0|# define BUFerr(f,r)  ERR_PUT_error(ERR_LIB_BUF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  100|      0|        len = 0;
  101|  29.2k|    } else {
  102|  29.2k|        str->data = ret;
  103|  29.2k|        str->max = n;
  104|  29.2k|        memset(&str->data[str->length], 0, len - str->length);
  105|  29.2k|        str->length = len;
  106|  29.2k|    }
  107|  29.2k|    return len;
  108|  29.2k|}
BUF_MEM_grow_clean:
  111|  29.0k|{
  112|  29.0k|    char *ret;
  113|  29.0k|    size_t n;
  114|       |
  115|  29.0k|    if (str->length >= len) {
  ------------------
  |  Branch (115:9): [True: 0, False: 29.0k]
  ------------------
  116|      0|        if (str->data != NULL)
  ------------------
  |  Branch (116:13): [True: 0, False: 0]
  ------------------
  117|      0|            memset(&str->data[len], 0, str->length - len);
  118|      0|        str->length = len;
  119|      0|        return len;
  120|      0|    }
  121|  29.0k|    if (str->max >= len) {
  ------------------
  |  Branch (121:9): [True: 26, False: 28.9k]
  ------------------
  122|     26|        memset(&str->data[str->length], 0, len - str->length);
  123|     26|        str->length = len;
  124|     26|        return len;
  125|     26|    }
  126|       |    /* This limit is sufficient to ensure (len+3)/3*4 < 2**31 */
  127|  28.9k|    if (len > LIMIT_BEFORE_EXPANSION) {
  ------------------
  |  |   19|  28.9k|#define LIMIT_BEFORE_EXPANSION 0x5ffffffc
  ------------------
  |  Branch (127:9): [True: 0, False: 28.9k]
  ------------------
  128|      0|        BUFerr(BUF_F_BUF_MEM_GROW_CLEAN, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  106|      0|# define BUFerr(f,r)  ERR_PUT_error(ERR_LIB_BUF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  129|      0|        return 0;
  130|      0|    }
  131|  28.9k|    n = (len + 3) / 3 * 4;
  132|  28.9k|    if ((str->flags & BUF_MEM_FLAG_SECURE))
  ------------------
  |  |   45|  28.9k|# define BUF_MEM_FLAG_SECURE  0x01
  ------------------
  |  Branch (132:9): [True: 0, False: 28.9k]
  ------------------
  133|      0|        ret = sec_alloc_realloc(str, n);
  134|  28.9k|    else
  135|  28.9k|        ret = OPENSSL_clear_realloc(str->data, str->max, n);
  ------------------
  |  |  124|  28.9k|        CRYPTO_clear_realloc(addr, old_num, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_clear_realloc(addr, old_num, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  136|  28.9k|    if (ret == NULL) {
  ------------------
  |  Branch (136:9): [True: 0, False: 28.9k]
  ------------------
  137|      0|        BUFerr(BUF_F_BUF_MEM_GROW_CLEAN, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  106|      0|# define BUFerr(f,r)  ERR_PUT_error(ERR_LIB_BUF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  138|      0|        len = 0;
  139|  28.9k|    } else {
  140|  28.9k|        str->data = ret;
  141|  28.9k|        str->max = n;
  142|  28.9k|        memset(&str->data[str->length], 0, len - str->length);
  143|  28.9k|        str->length = len;
  144|  28.9k|    }
  145|  28.9k|    return len;
  146|  28.9k|}

ERR_load_CMS_strings:
  289|      2|{
  290|      2|#ifndef OPENSSL_NO_ERR
  291|      2|    if (ERR_func_error_string(CMS_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (291:9): [True: 2, False: 0]
  ------------------
  292|      2|        ERR_load_strings_const(CMS_str_functs);
  293|      2|        ERR_load_strings_const(CMS_str_reasons);
  294|      2|    }
  295|      2|#endif
  296|      2|    return 1;
  297|      2|}

_CONF_get_section:
   24|     30|{
   25|     30|    CONF_VALUE *v, vv;
   26|       |
   27|     30|    if ((conf == NULL) || (section == NULL))
  ------------------
  |  Branch (27:9): [True: 0, False: 30]
  |  Branch (27:27): [True: 0, False: 30]
  ------------------
   28|      0|        return NULL;
   29|     30|    vv.name = NULL;
   30|     30|    vv.section = (char *)section;
   31|     30|    v = lh_CONF_VALUE_retrieve(conf->data, &vv);
   32|     30|    return v;
   33|     30|}
_CONF_add_string:
   49|    186|{
   50|    186|    CONF_VALUE *v = NULL;
   51|    186|    STACK_OF(CONF_VALUE) *ts;
  ------------------
  |  |   20|    186|# define STACK_OF(type) struct stack_st_##type
  ------------------
   52|       |
   53|    186|    ts = (STACK_OF(CONF_VALUE) *)section->value;
   54|       |
   55|    186|    value->section = section->section;
   56|    186|    if (!sk_CONF_VALUE_push(ts, value)) {
  ------------------
  |  Branch (56:9): [True: 0, False: 186]
  ------------------
   57|      0|        return 0;
   58|      0|    }
   59|       |
   60|    186|    v = lh_CONF_VALUE_insert(conf->data, value);
   61|    186|    if (v != NULL) {
  ------------------
  |  Branch (61:9): [True: 0, False: 186]
  ------------------
   62|      0|        (void)sk_CONF_VALUE_delete_ptr(ts, v);
   63|      0|        OPENSSL_free(v->name);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   64|      0|        OPENSSL_free(v->value);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   65|      0|        OPENSSL_free(v);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   66|      0|    }
   67|    186|    return 1;
   68|    186|}
_CONF_get_string:
   72|     28|{
   73|     28|    CONF_VALUE *v, vv;
   74|     28|    char *p;
   75|       |
   76|     28|    if (name == NULL)
  ------------------
  |  Branch (76:9): [True: 0, False: 28]
  ------------------
   77|      0|        return NULL;
   78|     28|    if (conf != NULL) {
  ------------------
  |  Branch (78:9): [True: 28, False: 0]
  ------------------
   79|     28|        if (section != NULL) {
  ------------------
  |  Branch (79:13): [True: 26, False: 2]
  ------------------
   80|     26|            vv.name = (char *)name;
   81|     26|            vv.section = (char *)section;
   82|     26|            v = lh_CONF_VALUE_retrieve(conf->data, &vv);
   83|     26|            if (v != NULL)
  ------------------
  |  Branch (83:17): [True: 26, False: 0]
  ------------------
   84|     26|                return v->value;
   85|      0|            if (strcmp(section, "ENV") == 0) {
  ------------------
  |  Branch (85:17): [True: 0, False: 0]
  ------------------
   86|      0|                p = ossl_safe_getenv(name);
   87|      0|                if (p != NULL)
  ------------------
  |  Branch (87:21): [True: 0, False: 0]
  ------------------
   88|      0|                    return p;
   89|      0|            }
   90|      0|        }
   91|      2|        vv.section = "default";
   92|      2|        vv.name = (char *)name;
   93|      2|        v = lh_CONF_VALUE_retrieve(conf->data, &vv);
   94|      2|        if (v != NULL)
  ------------------
  |  Branch (94:13): [True: 0, False: 2]
  ------------------
   95|      0|            return v->value;
   96|      2|        else
   97|      2|            return NULL;
   98|      2|    } else
   99|      0|        return ossl_safe_getenv(name);
  100|     28|}
_CONF_new_data:
  127|      2|{
  128|      2|    if (conf == NULL) {
  ------------------
  |  Branch (128:9): [True: 0, False: 2]
  ------------------
  129|      0|        return 0;
  130|      0|    }
  131|      2|    if (conf->data == NULL) {
  ------------------
  |  Branch (131:9): [True: 2, False: 0]
  ------------------
  132|      2|        conf->data = lh_CONF_VALUE_new(conf_value_hash, conf_value_cmp);
  133|      2|        if (conf->data == NULL)
  ------------------
  |  Branch (133:13): [True: 0, False: 2]
  ------------------
  134|      0|            return 0;
  135|      2|    }
  136|      2|    return 1;
  137|      2|}
_CONF_free_data:
  144|      2|{
  145|      2|    if (conf == NULL || conf->data == NULL)
  ------------------
  |  Branch (145:9): [True: 0, False: 2]
  |  Branch (145:25): [True: 0, False: 2]
  ------------------
  146|      0|        return;
  147|       |
  148|       |    /* evil thing to make sure the 'OPENSSL_free()' works as expected */
  149|      2|    lh_CONF_VALUE_set_down_load(conf->data, 0);
  150|      2|    lh_CONF_VALUE_doall_LH_CONF_VALUE(conf->data, value_free_hash, conf->data);
  151|       |
  152|       |    /*
  153|       |     * We now have only 'section' entries in the hash table. Due to problems
  154|       |     * with
  155|       |     */
  156|       |
  157|      2|    lh_CONF_VALUE_doall(conf->data, value_free_stack_doall);
  158|      2|    lh_CONF_VALUE_free(conf->data);
  159|      2|}
_CONF_new_section:
  190|     32|{
  191|     32|    STACK_OF(CONF_VALUE) *sk = NULL;
  ------------------
  |  |   20|     32|# define STACK_OF(type) struct stack_st_##type
  ------------------
  192|     32|    int i;
  193|     32|    CONF_VALUE *v = NULL, *vv;
  194|       |
  195|     32|    if ((sk = sk_CONF_VALUE_new_null()) == NULL)
  ------------------
  |  Branch (195:9): [True: 0, False: 32]
  ------------------
  196|      0|        goto err;
  197|     32|    if ((v = OPENSSL_malloc(sizeof(*v))) == NULL)
  ------------------
  |  |  118|     32|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (197:9): [True: 0, False: 32]
  ------------------
  198|      0|        goto err;
  199|     32|    i = strlen(section) + 1;
  200|     32|    if ((v->section = OPENSSL_malloc(i)) == NULL)
  ------------------
  |  |  118|     32|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (200:9): [True: 0, False: 32]
  ------------------
  201|      0|        goto err;
  202|       |
  203|     32|    memcpy(v->section, section, i);
  204|     32|    v->name = NULL;
  205|     32|    v->value = (char *)sk;
  206|       |
  207|     32|    vv = lh_CONF_VALUE_insert(conf->data, v);
  208|     32|    if (vv != NULL || lh_CONF_VALUE_error(conf->data) > 0)
  ------------------
  |  Branch (208:9): [True: 0, False: 32]
  |  Branch (208:23): [True: 0, False: 32]
  ------------------
  209|      0|        goto err;
  210|     32|    return v;
  211|       |
  212|      0| err:
  213|      0|    sk_CONF_VALUE_free(sk);
  214|      0|    if (v != NULL)
  ------------------
  |  Branch (214:9): [True: 0, False: 0]
  ------------------
  215|      0|        OPENSSL_free(v->section);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  216|      0|    OPENSSL_free(v);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  217|       |    return NULL;
  218|     32|}
conf_api.c:conf_value_hash:
  103|    462|{
  104|    462|    return (OPENSSL_LH_strhash(v->section) << 2) ^ OPENSSL_LH_strhash(v->name);
  105|    462|}
conf_api.c:conf_value_cmp:
  108|    212|{
  109|    212|    int i;
  110|       |
  111|    212|    if (a->section != b->section) {
  ------------------
  |  Branch (111:9): [True: 26, False: 186]
  ------------------
  112|     26|        i = strcmp(a->section, b->section);
  113|     26|        if (i)
  ------------------
  |  Branch (113:13): [True: 0, False: 26]
  ------------------
  114|      0|            return i;
  115|     26|    }
  116|       |
  117|    212|    if ((a->name != NULL) && (b->name != NULL)) {
  ------------------
  |  Branch (117:9): [True: 212, False: 0]
  |  Branch (117:30): [True: 212, False: 0]
  ------------------
  118|    212|        i = strcmp(a->name, b->name);
  119|    212|        return i;
  120|    212|    } else if (a->name == b->name)
  ------------------
  |  Branch (120:16): [True: 0, False: 0]
  ------------------
  121|      0|        return 0;
  122|      0|    else
  123|      0|        return ((a->name == NULL) ? -1 : 1);
  ------------------
  |  Branch (123:17): [True: 0, False: 0]
  ------------------
  124|    212|}
conf_api.c:value_free_hash:
  162|    218|{
  163|    218|    if (a->name != NULL)
  ------------------
  |  Branch (163:9): [True: 186, False: 32]
  ------------------
  164|    186|        (void)lh_CONF_VALUE_delete(conf, a);
  165|    218|}
conf_api.c:value_free_stack_doall:
  168|     32|{
  169|     32|    CONF_VALUE *vv;
  170|     32|    STACK_OF(CONF_VALUE) *sk;
  ------------------
  |  |   20|     32|# define STACK_OF(type) struct stack_st_##type
  ------------------
  171|     32|    int i;
  172|       |
  173|     32|    if (a->name != NULL)
  ------------------
  |  Branch (173:9): [True: 0, False: 32]
  ------------------
  174|      0|        return;
  175|       |
  176|     32|    sk = (STACK_OF(CONF_VALUE) *)a->value;
  177|    218|    for (i = sk_CONF_VALUE_num(sk) - 1; i >= 0; i--) {
  ------------------
  |  Branch (177:41): [True: 186, False: 32]
  ------------------
  178|    186|        vv = sk_CONF_VALUE_value(sk, i);
  179|    186|        OPENSSL_free(vv->value);
  ------------------
  |  |  128|    186|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  180|    186|        OPENSSL_free(vv->name);
  ------------------
  |  |  128|    186|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  181|    186|        OPENSSL_free(vv);
  ------------------
  |  |  128|    186|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  182|    186|    }
  183|     32|    sk_CONF_VALUE_free(sk);
  184|     32|    OPENSSL_free(a->section);
  ------------------
  |  |  128|     32|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  185|     32|    OPENSSL_free(a);
  ------------------
  |  |  128|     32|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  186|     32|}

NCONF_default:
   93|      2|{
   94|      2|    return &default_method;
   95|      2|}
conf_def.c:def_create:
  103|      2|{
  104|      2|    CONF *ret;
  105|       |
  106|      2|    ret = OPENSSL_malloc(sizeof(*ret));
  ------------------
  |  |  118|      2|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  107|      2|    if (ret != NULL)
  ------------------
  |  Branch (107:9): [True: 2, False: 0]
  ------------------
  108|      2|        if (meth->init(ret) == 0) {
  ------------------
  |  Branch (108:13): [True: 0, False: 2]
  ------------------
  109|      0|            OPENSSL_free(ret);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  110|       |            ret = NULL;
  111|      0|        }
  112|      2|    return ret;
  113|      2|}
conf_def.c:def_init_default:
  116|      2|{
  117|      2|    if (conf == NULL)
  ------------------
  |  Branch (117:9): [True: 0, False: 2]
  ------------------
  118|      0|        return 0;
  119|       |
  120|      2|    conf->meth = &default_method;
  121|      2|    conf->meth_data = (void *)CONF_type_default;
  122|      2|    conf->data = NULL;
  123|       |
  124|      2|    return 1;
  125|      2|}
conf_def.c:def_destroy:
  140|      2|{
  141|      2|    if (def_destroy_data(conf)) {
  ------------------
  |  Branch (141:9): [True: 2, False: 0]
  ------------------
  142|      2|        OPENSSL_free(conf);
  ------------------
  |  |  128|      2|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  143|      2|        return 1;
  144|      2|    }
  145|      0|    return 0;
  146|      2|}
conf_def.c:def_destroy_data:
  149|      2|{
  150|      2|    if (conf == NULL)
  ------------------
  |  Branch (150:9): [True: 0, False: 2]
  ------------------
  151|      0|        return 0;
  152|      2|    _CONF_free_data(conf);
  153|      2|    return 1;
  154|      2|}
conf_def.c:def_load_bio:
  181|      2|{
  182|       |/* The macro BUFSIZE conflicts with a system macro in VxWorks */
  183|      2|#define CONFBUFSIZE     512
  184|      2|    int bufnum = 0, i, ii;
  185|      2|    BUF_MEM *buff = NULL;
  186|      2|    char *s, *p, *end;
  187|      2|    int again;
  188|      2|    int first_call = 1;
  189|      2|    long eline = 0;
  190|      2|    char btmp[DECIMAL_SIZE(eline) + 1];
  191|      2|    CONF_VALUE *v = NULL, *tv;
  192|      2|    CONF_VALUE *sv = NULL;
  193|      2|    char *section = NULL, *buf;
  194|      2|    char *start, *psection, *pname;
  195|      2|    void *h = (void *)(conf->data);
  196|      2|    STACK_OF(BIO) *biosk = NULL;
  ------------------
  |  |   20|      2|# define STACK_OF(type) struct stack_st_##type
  ------------------
  197|      2|#ifndef OPENSSL_NO_POSIX_IO
  198|      2|    char *dirpath = NULL;
  199|      2|    OPENSSL_DIR_CTX *dirctx = NULL;
  200|      2|#endif
  201|       |
  202|      2|    if ((buff = BUF_MEM_new()) == NULL) {
  ------------------
  |  Branch (202:9): [True: 0, False: 2]
  ------------------
  203|      0|        CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_BUF_LIB);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  204|      0|        goto err;
  205|      0|    }
  206|       |
  207|      2|    section = OPENSSL_strdup("default");
  ------------------
  |  |  132|      2|        CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  208|      2|    if (section == NULL) {
  ------------------
  |  Branch (208:9): [True: 0, False: 2]
  ------------------
  209|      0|        CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  210|      0|        goto err;
  211|      0|    }
  212|       |
  213|      2|    if (_CONF_new_data(conf) == 0) {
  ------------------
  |  Branch (213:9): [True: 0, False: 2]
  ------------------
  214|      0|        CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  215|      0|        goto err;
  216|      0|    }
  217|       |
  218|      2|    sv = _CONF_new_section(conf, section);
  219|      2|    if (sv == NULL) {
  ------------------
  |  Branch (219:9): [True: 0, False: 2]
  ------------------
  220|      0|        CONFerr(CONF_F_DEF_LOAD_BIO, CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  221|      0|        goto err;
  222|      0|    }
  223|       |
  224|      2|    bufnum = 0;
  225|      2|    again = 0;
  226|    702|    for (;;) {
  227|    702|        if (!BUF_MEM_grow(buff, bufnum + CONFBUFSIZE)) {
  ------------------
  |  |  183|    702|#define CONFBUFSIZE     512
  ------------------
  |  Branch (227:13): [True: 0, False: 702]
  ------------------
  228|      0|            CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_BUF_LIB);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  229|      0|            goto err;
  230|      0|        }
  231|    702|        p = &(buff->data[bufnum]);
  232|    702|        *p = '\0';
  233|    702| read_retry:
  234|    702|        BIO_gets(in, p, CONFBUFSIZE - 1);
  ------------------
  |  |  183|    702|#define CONFBUFSIZE     512
  ------------------
  235|    702|        p[CONFBUFSIZE - 1] = '\0';
  ------------------
  |  |  183|    702|#define CONFBUFSIZE     512
  ------------------
  236|    702|        ii = i = strlen(p);
  237|    702|        if (first_call) {
  ------------------
  |  Branch (237:13): [True: 2, False: 700]
  ------------------
  238|       |            /* Other BOMs imply unsupported multibyte encoding,
  239|       |             * so don't strip them and let the error raise */
  240|      2|            const unsigned char utf8_bom[3] = {0xEF, 0xBB, 0xBF};
  241|       |
  242|      2|            if (i >= 3 && memcmp(p, utf8_bom, 3) == 0) {
  ------------------
  |  Branch (242:17): [True: 0, False: 2]
  |  Branch (242:27): [True: 0, False: 0]
  ------------------
  243|      0|                memmove(p, p + 3, i - 3);
  244|      0|                p[i - 3] = 0;
  245|      0|                i -= 3;
  246|      0|                ii -= 3;
  247|      0|            }
  248|      2|            first_call = 0;
  249|      2|        }
  250|    702|        if (i == 0 && !again) {
  ------------------
  |  Branch (250:13): [True: 2, False: 700]
  |  Branch (250:23): [True: 2, False: 0]
  ------------------
  251|       |            /* the currently processed BIO is at EOF */
  252|      2|            BIO *parent;
  253|       |
  254|      2|#ifndef OPENSSL_NO_POSIX_IO
  255|       |            /* continue processing with the next file from directory */
  256|      2|            if (dirctx != NULL) {
  ------------------
  |  Branch (256:17): [True: 0, False: 2]
  ------------------
  257|      0|                BIO *next;
  258|       |
  259|      0|                if ((next = get_next_file(dirpath, &dirctx)) != NULL) {
  ------------------
  |  Branch (259:21): [True: 0, False: 0]
  ------------------
  260|      0|                    BIO_vfree(in);
  261|      0|                    in = next;
  262|      0|                    goto read_retry;
  263|      0|                } else {
  264|      0|                    OPENSSL_free(dirpath);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  265|      0|                    dirpath = NULL;
  266|      0|                }
  267|      0|            }
  268|      2|#endif
  269|       |            /* no more files in directory, continue with processing parent */
  270|      2|            if ((parent = sk_BIO_pop(biosk)) == NULL) {
  ------------------
  |  Branch (270:17): [True: 2, False: 0]
  ------------------
  271|       |                /* everything processed get out of the loop */
  272|      2|                break;
  273|      2|            } else {
  274|      0|                BIO_vfree(in);
  275|      0|                in = parent;
  276|      0|                goto read_retry;
  277|      0|            }
  278|      2|        }
  279|    700|        again = 0;
  280|  1.40k|        while (i > 0) {
  ------------------
  |  Branch (280:16): [True: 1.22k, False: 174]
  ------------------
  281|  1.22k|            if ((p[i - 1] != '\r') && (p[i - 1] != '\n'))
  ------------------
  |  Branch (281:17): [True: 1.22k, False: 0]
  |  Branch (281:39): [True: 526, False: 700]
  ------------------
  282|    526|                break;
  283|    700|            else
  284|    700|                i--;
  285|  1.22k|        }
  286|       |        /*
  287|       |         * we removed some trailing stuff so there is a new line on the end.
  288|       |         */
  289|    700|        if (ii && i == ii)
  ------------------
  |  Branch (289:13): [True: 700, False: 0]
  |  Branch (289:19): [True: 0, False: 700]
  ------------------
  290|      0|            again = 1;          /* long line */
  291|    700|        else {
  292|    700|            p[i] = '\0';
  293|    700|            eline++;            /* another input line */
  294|    700|        }
  295|       |
  296|       |        /* we now have a line with trailing \r\n removed */
  297|       |
  298|       |        /* i is the number of bytes */
  299|    700|        bufnum += i;
  300|       |
  301|    700|        v = NULL;
  302|       |        /* check for line continuation */
  303|    700|        if (bufnum >= 1) {
  ------------------
  |  Branch (303:13): [True: 526, False: 174]
  ------------------
  304|       |            /*
  305|       |             * If we have bytes and the last char '\\' and second last char
  306|       |             * is not '\\'
  307|       |             */
  308|    526|            p = &(buff->data[bufnum - 1]);
  309|    526|            if (IS_ESC(conf, p[0]) && ((bufnum <= 1) || !IS_ESC(conf, p[-1]))) {
  ------------------
  |  |   32|  1.05k|#define IS_ESC(conf,c)         is_keytype(conf, c, CONF_ESC)
  |  |  ------------------
  |  |  |  |   18|    526|#define CONF_ESC          32
  |  |  ------------------
  |  |  |  Branch (32:32): [True: 0, False: 526]
  |  |  ------------------
  ------------------
                          if (IS_ESC(conf, p[0]) && ((bufnum <= 1) || !IS_ESC(conf, p[-1]))) {
  ------------------
  |  |   32|      0|#define IS_ESC(conf,c)         is_keytype(conf, c, CONF_ESC)
  |  |  ------------------
  |  |  |  |   18|      0|#define CONF_ESC          32
  |  |  ------------------
  ------------------
  |  Branch (309:40): [True: 0, False: 0]
  |  Branch (309:57): [True: 0, False: 0]
  ------------------
  310|      0|                bufnum--;
  311|      0|                again = 1;
  312|      0|            }
  313|    526|        }
  314|    700|        if (again)
  ------------------
  |  Branch (314:13): [True: 0, False: 700]
  ------------------
  315|      0|            continue;
  316|    700|        bufnum = 0;
  317|    700|        buf = buff->data;
  318|       |
  319|    700|        clear_comments(conf, buf);
  320|    700|        s = eat_ws(conf, buf);
  321|    700|        if (IS_EOF(conf, *s))
  ------------------
  |  |   31|    700|#define IS_EOF(conf,c)         is_keytype(conf, c, CONF_EOF)
  |  |  ------------------
  |  |  |  |   23|    700|#define CONF_EOF          8
  |  |  ------------------
  |  |  |  Branch (31:32): [True: 484, False: 216]
  |  |  ------------------
  ------------------
  322|    484|            continue;           /* blank line */
  323|    216|        if (*s == '[') {
  ------------------
  |  Branch (323:13): [True: 30, False: 186]
  ------------------
  324|     30|            char *ss;
  325|       |
  326|     30|            s++;
  327|     30|            start = eat_ws(conf, s);
  328|     30|            ss = start;
  329|     30| again:
  330|     30|            end = eat_alpha_numeric(conf, ss);
  331|     30|            p = eat_ws(conf, end);
  332|     30|            if (*p != ']') {
  ------------------
  |  Branch (332:17): [True: 0, False: 30]
  ------------------
  333|      0|                if (*p != '\0' && ss != p) {
  ------------------
  |  Branch (333:21): [True: 0, False: 0]
  |  Branch (333:35): [True: 0, False: 0]
  ------------------
  334|      0|                    ss = p;
  335|      0|                    goto again;
  336|      0|                }
  337|      0|                CONFerr(CONF_F_DEF_LOAD_BIO,
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  338|      0|                        CONF_R_MISSING_CLOSE_SQUARE_BRACKET);
  339|      0|                goto err;
  340|      0|            }
  341|     30|            *end = '\0';
  342|     30|            if (!str_copy(conf, NULL, &section, start))
  ------------------
  |  Branch (342:17): [True: 0, False: 30]
  ------------------
  343|      0|                goto err;
  344|     30|            if ((sv = _CONF_get_section(conf, section)) == NULL)
  ------------------
  |  Branch (344:17): [True: 30, False: 0]
  ------------------
  345|     30|                sv = _CONF_new_section(conf, section);
  346|     30|            if (sv == NULL) {
  ------------------
  |  Branch (346:17): [True: 0, False: 30]
  ------------------
  347|      0|                CONFerr(CONF_F_DEF_LOAD_BIO,
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  348|      0|                        CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
  349|      0|                goto err;
  350|      0|            }
  351|     30|            continue;
  352|    186|        } else {
  353|    186|            pname = s;
  354|    186|            end = eat_alpha_numeric(conf, s);
  355|    186|            if ((end[0] == ':') && (end[1] == ':')) {
  ------------------
  |  Branch (355:17): [True: 0, False: 186]
  |  Branch (355:36): [True: 0, False: 0]
  ------------------
  356|      0|                *end = '\0';
  357|      0|                end += 2;
  358|      0|                psection = pname;
  359|      0|                pname = end;
  360|      0|                end = eat_alpha_numeric(conf, end);
  361|    186|            } else {
  362|    186|                psection = section;
  363|    186|            }
  364|    186|            p = eat_ws(conf, end);
  365|    186|            if (strncmp(pname, ".include", 8) == 0
  ------------------
  |  Branch (365:17): [True: 0, False: 186]
  ------------------
  366|      0|                && (p != pname + 8 || *p == '=')) {
  ------------------
  |  Branch (366:21): [True: 0, False: 0]
  |  Branch (366:39): [True: 0, False: 0]
  ------------------
  367|      0|                char *include = NULL;
  368|      0|                BIO *next;
  369|       |
  370|      0|                if (*p == '=') {
  ------------------
  |  Branch (370:21): [True: 0, False: 0]
  ------------------
  371|      0|                    p++;
  372|      0|                    p = eat_ws(conf, p);
  373|      0|                }
  374|      0|                trim_ws(conf, p);
  375|      0|                if (!str_copy(conf, psection, &include, p))
  ------------------
  |  Branch (375:21): [True: 0, False: 0]
  ------------------
  376|      0|                    goto err;
  377|       |                /* get the BIO of the included file */
  378|      0|#ifndef OPENSSL_NO_POSIX_IO
  379|      0|                next = process_include(include, &dirctx, &dirpath);
  380|      0|                if (include != dirpath) {
  ------------------
  |  Branch (380:21): [True: 0, False: 0]
  ------------------
  381|       |                    /* dirpath will contain include in case of a directory */
  382|      0|                    OPENSSL_free(include);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  383|      0|                }
  384|       |#else
  385|       |                next = BIO_new_file(include, "r");
  386|       |                OPENSSL_free(include);
  387|       |#endif
  388|      0|                if (next != NULL) {
  ------------------
  |  Branch (388:21): [True: 0, False: 0]
  ------------------
  389|       |                    /* push the currently processing BIO onto stack */
  390|      0|                    if (biosk == NULL) {
  ------------------
  |  Branch (390:25): [True: 0, False: 0]
  ------------------
  391|      0|                        if ((biosk = sk_BIO_new_null()) == NULL) {
  ------------------
  |  Branch (391:29): [True: 0, False: 0]
  ------------------
  392|      0|                            CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  393|      0|                            BIO_free(next);
  394|      0|                            goto err;
  395|      0|                        }
  396|      0|                    }
  397|      0|                    if (!sk_BIO_push(biosk, in)) {
  ------------------
  |  Branch (397:25): [True: 0, False: 0]
  ------------------
  398|      0|                        CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  399|      0|                        BIO_free(next);
  400|      0|                        goto err;
  401|      0|                    }
  402|       |                    /* continue with reading from the included BIO */
  403|      0|                    in = next;
  404|      0|                }
  405|      0|                continue;
  406|    186|            } else if (*p != '=') {
  ------------------
  |  Branch (406:24): [True: 0, False: 186]
  ------------------
  407|      0|                CONFerr(CONF_F_DEF_LOAD_BIO, CONF_R_MISSING_EQUAL_SIGN);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  408|      0|                goto err;
  409|      0|            }
  410|    186|            *end = '\0';
  411|    186|            p++;
  412|    186|            start = eat_ws(conf, p);
  413|    186|            trim_ws(conf, start);
  414|       |
  415|    186|            if ((v = OPENSSL_malloc(sizeof(*v))) == NULL) {
  ------------------
  |  |  118|    186|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (415:17): [True: 0, False: 186]
  ------------------
  416|      0|                CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  417|      0|                goto err;
  418|      0|            }
  419|    186|            v->name = OPENSSL_strdup(pname);
  ------------------
  |  |  132|    186|        CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  420|    186|            v->value = NULL;
  421|    186|            if (v->name == NULL) {
  ------------------
  |  Branch (421:17): [True: 0, False: 186]
  ------------------
  422|      0|                CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  423|      0|                goto err;
  424|      0|            }
  425|    186|            if (!str_copy(conf, psection, &(v->value), start))
  ------------------
  |  Branch (425:17): [True: 0, False: 186]
  ------------------
  426|      0|                goto err;
  427|       |
  428|    186|            if (strcmp(psection, section) != 0) {
  ------------------
  |  Branch (428:17): [True: 0, False: 186]
  ------------------
  429|      0|                if ((tv = _CONF_get_section(conf, psection))
  ------------------
  |  Branch (429:21): [True: 0, False: 0]
  ------------------
  430|      0|                    == NULL)
  431|      0|                    tv = _CONF_new_section(conf, psection);
  432|      0|                if (tv == NULL) {
  ------------------
  |  Branch (432:21): [True: 0, False: 0]
  ------------------
  433|      0|                    CONFerr(CONF_F_DEF_LOAD_BIO,
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  434|      0|                            CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
  435|      0|                    goto err;
  436|      0|                }
  437|      0|            } else
  438|    186|                tv = sv;
  439|    186|            if (_CONF_add_string(conf, tv, v) == 0) {
  ------------------
  |  Branch (439:17): [True: 0, False: 186]
  ------------------
  440|      0|                CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  441|      0|                goto err;
  442|      0|            }
  443|    186|            v = NULL;
  444|    186|        }
  445|    216|    }
  446|      2|    BUF_MEM_free(buff);
  447|      2|    OPENSSL_free(section);
  ------------------
  |  |  128|      2|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  448|       |    /*
  449|       |     * No need to pop, since we only get here if the stack is empty.
  450|       |     * If this causes a BIO leak, THE ISSUE IS SOMEWHERE ELSE!
  451|       |     */
  452|      2|    sk_BIO_free(biosk);
  453|      2|    return 1;
  454|      0| err:
  455|      0|    BUF_MEM_free(buff);
  456|      0|    OPENSSL_free(section);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  457|       |    /*
  458|       |     * Since |in| is the first element of the stack and should NOT be freed
  459|       |     * here, we cannot use sk_BIO_pop_free().  Instead, we pop and free one
  460|       |     * BIO at a time, making sure that the last one popped isn't.
  461|       |     */
  462|      0|    while (sk_BIO_num(biosk) > 0) {
  ------------------
  |  Branch (462:12): [True: 0, False: 0]
  ------------------
  463|      0|        BIO *popped = sk_BIO_pop(biosk);
  464|      0|        BIO_vfree(in);
  465|      0|        in = popped;
  466|      0|    }
  467|      0|    sk_BIO_free(biosk);
  468|      0|#ifndef OPENSSL_NO_POSIX_IO
  469|      0|    OPENSSL_free(dirpath);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  470|      0|    if (dirctx != NULL)
  ------------------
  |  Branch (470:9): [True: 0, False: 0]
  ------------------
  471|      0|        OPENSSL_DIR_end(&dirctx);
  472|      0|#endif
  473|      0|    if (line != NULL)
  ------------------
  |  Branch (473:9): [True: 0, False: 0]
  ------------------
  474|      0|        *line = eline;
  475|      0|    BIO_snprintf(btmp, sizeof(btmp), "%ld", eline);
  476|      0|    ERR_add_error_data(2, "line ", btmp);
  477|      0|    if (h != conf->data) {
  ------------------
  |  Branch (477:9): [True: 0, False: 0]
  ------------------
  478|      0|        CONF_free(conf->data);
  479|      0|        conf->data = NULL;
  480|      0|    }
  481|      0|    if (v != NULL) {
  ------------------
  |  Branch (481:9): [True: 0, False: 0]
  ------------------
  482|      0|        OPENSSL_free(v->name);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  483|      0|        OPENSSL_free(v->value);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  484|      0|        OPENSSL_free(v);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  485|      0|    }
  486|      0|    return 0;
  487|      2|}
conf_def.c:is_keytype:
  775|  56.4k|{
  776|  56.4k|    const unsigned short * keytypes = (const unsigned short *) conf->meth_data;
  777|  56.4k|    unsigned char key = (unsigned char)c;
  778|       |
  779|       |#ifdef CHARSET_EBCDIC
  780|       |# if CHAR_BIT > 8
  781|       |    if (key > 255) {
  782|       |        /* key is out of range for os_toascii table */
  783|       |        return 0;
  784|       |    }
  785|       |# endif
  786|       |    /* convert key from ebcdic to ascii */
  787|       |    key = os_toascii[key];
  788|       |#endif
  789|       |
  790|  56.4k|    if (key > 127) {
  ------------------
  |  Branch (790:9): [True: 0, False: 56.4k]
  ------------------
  791|       |        /* key is not a seven bit ascii character */
  792|      0|        return 0;
  793|      0|    }
  794|       |
  795|  56.4k|    return (keytypes[key] & type) ? 1 : 0;
  ------------------
  |  Branch (795:12): [True: 5.22k, False: 51.2k]
  ------------------
  796|  56.4k|}
conf_def.c:clear_comments:
  490|    700|{
  491|    782|    for (;;) {
  492|    782|        if (IS_FCOMMENT(conf, *p)) {
  ------------------
  |  |   30|    782|#define IS_FCOMMENT(conf,c)    is_keytype(conf, c, CONF_FCOMMENT)
  |  |  ------------------
  |  |  |  |   22|    782|#define CONF_FCOMMENT     2048
  |  |  ------------------
  |  |  |  Branch (30:32): [True: 0, False: 782]
  |  |  ------------------
  ------------------
  493|      0|            *p = '\0';
  494|      0|            return;
  495|      0|        }
  496|    782|        if (!IS_WS(conf, *p)) {
  ------------------
  |  |   34|    782|#define IS_WS(conf,c)          is_keytype(conf, c, CONF_WS)
  |  |  ------------------
  |  |  |  |   17|    782|#define CONF_WS           16
  |  |  ------------------
  ------------------
  |  Branch (496:13): [True: 700, False: 82]
  ------------------
  497|    700|            break;
  498|    700|        }
  499|     82|        p++;
  500|     82|    }
  501|       |
  502|  6.56k|    for (;;) {
  503|  6.56k|        if (IS_COMMENT(conf, *p)) {
  ------------------
  |  |   29|  6.56k|#define IS_COMMENT(conf,c)     is_keytype(conf, c, CONF_COMMENT)
  |  |  ------------------
  |  |  |  |   21|  6.56k|#define CONF_COMMENT      128
  |  |  ------------------
  |  |  |  Branch (29:32): [True: 382, False: 6.18k]
  |  |  ------------------
  ------------------
  504|    382|            *p = '\0';
  505|    382|            return;
  506|    382|        }
  507|  6.18k|        if (IS_DQUOTE(conf, *p)) {
  ------------------
  |  |   38|  6.18k|#define IS_DQUOTE(conf,c)      is_keytype(conf, c, CONF_DQUOTE)
  |  |  ------------------
  |  |  |  |   20|  6.18k|#define CONF_DQUOTE       1024
  |  |  ------------------
  |  |  |  Branch (38:32): [True: 0, False: 6.18k]
  |  |  ------------------
  ------------------
  508|      0|            p = scan_dquote(conf, p);
  509|      0|            continue;
  510|      0|        }
  511|  6.18k|        if (IS_QUOTE(conf, *p)) {
  ------------------
  |  |   37|  6.18k|#define IS_QUOTE(conf,c)       is_keytype(conf, c, CONF_QUOTE)
  |  |  ------------------
  |  |  |  |   19|  6.18k|#define CONF_QUOTE        64
  |  |  ------------------
  |  |  |  Branch (37:32): [True: 4, False: 6.18k]
  |  |  ------------------
  ------------------
  512|      4|            p = scan_quote(conf, p);
  513|      4|            continue;
  514|      4|        }
  515|  6.18k|        if (IS_ESC(conf, *p)) {
  ------------------
  |  |   32|  6.18k|#define IS_ESC(conf,c)         is_keytype(conf, c, CONF_ESC)
  |  |  ------------------
  |  |  |  |   18|  6.18k|#define CONF_ESC          32
  |  |  ------------------
  |  |  |  Branch (32:32): [True: 0, False: 6.18k]
  |  |  ------------------
  ------------------
  516|      0|            p = scan_esc(conf, p);
  ------------------
  |  |   48|      0|#define scan_esc(conf,p)        (((IS_EOF((conf),(p)[1]))?((p)+1):((p)+2)))
  |  |  ------------------
  |  |  |  |   31|      0|#define IS_EOF(conf,c)         is_keytype(conf, c, CONF_EOF)
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define CONF_EOF          8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (48:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  517|      0|            continue;
  518|      0|        }
  519|  6.18k|        if (IS_EOF(conf, *p))
  ------------------
  |  |   31|  6.18k|#define IS_EOF(conf,c)         is_keytype(conf, c, CONF_EOF)
  |  |  ------------------
  |  |  |  |   23|  6.18k|#define CONF_EOF          8
  |  |  ------------------
  |  |  |  Branch (31:32): [True: 318, False: 5.86k]
  |  |  ------------------
  ------------------
  520|    318|            return;
  521|  5.86k|        else
  522|  5.86k|            p++;
  523|  6.18k|    }
  524|    700|}
conf_def.c:scan_quote:
  832|      4|{
  833|      4|    int q = *p;
  834|       |
  835|      4|    p++;
  836|    120|    while (!(IS_EOF(conf, *p)) && (*p != q)) {
  ------------------
  |  |   31|    120|#define IS_EOF(conf,c)         is_keytype(conf, c, CONF_EOF)
  |  |  ------------------
  |  |  |  |   23|    120|#define CONF_EOF          8
  |  |  ------------------
  ------------------
  |  Branch (836:12): [True: 120, False: 0]
  |  Branch (836:35): [True: 116, False: 4]
  ------------------
  837|    116|        if (IS_ESC(conf, *p)) {
  ------------------
  |  |   32|    116|#define IS_ESC(conf,c)         is_keytype(conf, c, CONF_ESC)
  |  |  ------------------
  |  |  |  |   18|    116|#define CONF_ESC          32
  |  |  ------------------
  |  |  |  Branch (32:32): [True: 0, False: 116]
  |  |  ------------------
  ------------------
  838|      0|            p++;
  839|      0|            if (IS_EOF(conf, *p))
  ------------------
  |  |   31|      0|#define IS_EOF(conf,c)         is_keytype(conf, c, CONF_EOF)
  |  |  ------------------
  |  |  |  |   23|      0|#define CONF_EOF          8
  |  |  ------------------
  |  |  |  Branch (31:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  840|      0|                return p;
  841|      0|        }
  842|    116|        p++;
  843|    116|    }
  844|      4|    if (*p == q)
  ------------------
  |  Branch (844:9): [True: 4, False: 0]
  ------------------
  845|      4|        p++;
  846|      4|    return p;
  847|      4|}
conf_def.c:eat_ws:
  799|  1.13k|{
  800|  1.72k|    while (IS_WS(conf, *p) && (!IS_EOF(conf, *p)))
  ------------------
  |  |   34|  3.44k|#define IS_WS(conf,c)          is_keytype(conf, c, CONF_WS)
  |  |  ------------------
  |  |  |  |   17|  1.72k|#define CONF_WS           16
  |  |  ------------------
  |  |  |  Branch (34:32): [True: 592, False: 1.13k]
  |  |  ------------------
  ------------------
                  while (IS_WS(conf, *p) && (!IS_EOF(conf, *p)))
  ------------------
  |  |   31|    592|#define IS_EOF(conf,c)         is_keytype(conf, c, CONF_EOF)
  |  |  ------------------
  |  |  |  |   23|    592|#define CONF_EOF          8
  |  |  ------------------
  ------------------
  |  Branch (800:31): [True: 592, False: 0]
  ------------------
  801|    592|        p++;
  802|  1.13k|    return p;
  803|  1.13k|}
conf_def.c:eat_alpha_numeric:
  819|    216|{
  820|  2.97k|    for (;;) {
  821|  2.97k|        if (IS_ESC(conf, *p)) {
  ------------------
  |  |   32|  2.97k|#define IS_ESC(conf,c)         is_keytype(conf, c, CONF_ESC)
  |  |  ------------------
  |  |  |  |   18|  2.97k|#define CONF_ESC          32
  |  |  ------------------
  |  |  |  Branch (32:32): [True: 0, False: 2.97k]
  |  |  ------------------
  ------------------
  822|      0|            p = scan_esc(conf, p);
  ------------------
  |  |   48|      0|#define scan_esc(conf,p)        (((IS_EOF((conf),(p)[1]))?((p)+1):((p)+2)))
  |  |  ------------------
  |  |  |  |   31|      0|#define IS_EOF(conf,c)         is_keytype(conf, c, CONF_EOF)
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define CONF_EOF          8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (48:35): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  823|      0|            continue;
  824|      0|        }
  825|  2.97k|        if (!IS_ALNUM_PUNCT(conf, *p))
  ------------------
  |  |   36|  2.97k|#define IS_ALNUM_PUNCT(conf,c) is_keytype(conf, c, CONF_ALNUM_PUNCT)
  |  |  ------------------
  |  |  |  |   26|  2.97k|#define CONF_ALNUM_PUNCT  (CONF_ALPHA|CONF_NUMBER|CONF_UNDER|CONF_PUNCT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   24|  2.97k|#define CONF_ALPHA        (CONF_UPPER|CONF_LOWER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   13|  2.97k|#define CONF_UPPER        2
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CONF_ALPHA        (CONF_UPPER|CONF_LOWER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   14|  2.97k|#define CONF_LOWER        4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define CONF_ALNUM_PUNCT  (CONF_ALPHA|CONF_NUMBER|CONF_UNDER|CONF_PUNCT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   12|  2.97k|#define CONF_NUMBER       1
  |  |  |  |  ------------------
  |  |  |  |               #define CONF_ALNUM_PUNCT  (CONF_ALPHA|CONF_NUMBER|CONF_UNDER|CONF_PUNCT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   15|  2.97k|#define CONF_UNDER        256
  |  |  |  |  ------------------
  |  |  |  |               #define CONF_ALNUM_PUNCT  (CONF_ALPHA|CONF_NUMBER|CONF_UNDER|CONF_PUNCT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  2.97k|#define CONF_PUNCT        512
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (825:13): [True: 216, False: 2.75k]
  ------------------
  826|    216|            return p;
  827|  2.75k|        p++;
  828|  2.75k|    }
  829|    216|}
conf_def.c:str_copy:
  527|    216|{
  528|    216|    int q, r, rr = 0, to = 0, len = 0;
  529|    216|    char *s, *e, *rp, *p, *rrp, *np, *cp, v;
  530|    216|    BUF_MEM *buf;
  531|       |
  532|    216|    if ((buf = BUF_MEM_new()) == NULL)
  ------------------
  |  Branch (532:9): [True: 0, False: 216]
  ------------------
  533|      0|        return 0;
  534|       |
  535|    216|    len = strlen(from) + 1;
  536|    216|    if (!BUF_MEM_grow(buf, len))
  ------------------
  |  Branch (536:9): [True: 0, False: 216]
  ------------------
  537|      0|        goto err;
  538|       |
  539|  2.65k|    for (;;) {
  540|  2.65k|        if (IS_QUOTE(conf, *from)) {
  ------------------
  |  |   37|  2.65k|#define IS_QUOTE(conf,c)       is_keytype(conf, c, CONF_QUOTE)
  |  |  ------------------
  |  |  |  |   19|  2.65k|#define CONF_QUOTE        64
  |  |  ------------------
  |  |  |  Branch (37:32): [True: 4, False: 2.64k]
  |  |  ------------------
  ------------------
  541|      4|            q = *from;
  542|      4|            from++;
  543|    120|            while (!IS_EOF(conf, *from) && (*from != q)) {
  ------------------
  |  |   31|    240|#define IS_EOF(conf,c)         is_keytype(conf, c, CONF_EOF)
  |  |  ------------------
  |  |  |  |   23|    120|#define CONF_EOF          8
  |  |  ------------------
  ------------------
  |  Branch (543:20): [True: 120, False: 0]
  |  Branch (543:44): [True: 116, False: 4]
  ------------------
  544|    116|                if (IS_ESC(conf, *from)) {
  ------------------
  |  |   32|    116|#define IS_ESC(conf,c)         is_keytype(conf, c, CONF_ESC)
  |  |  ------------------
  |  |  |  |   18|    116|#define CONF_ESC          32
  |  |  ------------------
  |  |  |  Branch (32:32): [True: 0, False: 116]
  |  |  ------------------
  ------------------
  545|      0|                    from++;
  546|      0|                    if (IS_EOF(conf, *from))
  ------------------
  |  |   31|      0|#define IS_EOF(conf,c)         is_keytype(conf, c, CONF_EOF)
  |  |  ------------------
  |  |  |  |   23|      0|#define CONF_EOF          8
  |  |  ------------------
  |  |  |  Branch (31:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  547|      0|                        break;
  548|      0|                }
  549|    116|                buf->data[to++] = *(from++);
  550|    116|            }
  551|      4|            if (*from == q)
  ------------------
  |  Branch (551:17): [True: 4, False: 0]
  ------------------
  552|      4|                from++;
  553|  2.64k|        } else if (IS_DQUOTE(conf, *from)) {
  ------------------
  |  |   38|  2.64k|#define IS_DQUOTE(conf,c)      is_keytype(conf, c, CONF_DQUOTE)
  |  |  ------------------
  |  |  |  |   20|  2.64k|#define CONF_DQUOTE       1024
  |  |  ------------------
  |  |  |  Branch (38:32): [True: 0, False: 2.64k]
  |  |  ------------------
  ------------------
  554|      0|            q = *from;
  555|      0|            from++;
  556|      0|            while (!IS_EOF(conf, *from)) {
  ------------------
  |  |   31|      0|#define IS_EOF(conf,c)         is_keytype(conf, c, CONF_EOF)
  |  |  ------------------
  |  |  |  |   23|      0|#define CONF_EOF          8
  |  |  ------------------
  ------------------
  |  Branch (556:20): [True: 0, False: 0]
  ------------------
  557|      0|                if (*from == q) {
  ------------------
  |  Branch (557:21): [True: 0, False: 0]
  ------------------
  558|      0|                    if (*(from + 1) == q) {
  ------------------
  |  Branch (558:25): [True: 0, False: 0]
  ------------------
  559|      0|                        from++;
  560|      0|                    } else {
  561|      0|                        break;
  562|      0|                    }
  563|      0|                }
  564|      0|                buf->data[to++] = *(from++);
  565|      0|            }
  566|      0|            if (*from == q)
  ------------------
  |  Branch (566:17): [True: 0, False: 0]
  ------------------
  567|      0|                from++;
  568|  2.64k|        } else if (IS_ESC(conf, *from)) {
  ------------------
  |  |   32|  2.64k|#define IS_ESC(conf,c)         is_keytype(conf, c, CONF_ESC)
  |  |  ------------------
  |  |  |  |   18|  2.64k|#define CONF_ESC          32
  |  |  ------------------
  |  |  |  Branch (32:32): [True: 0, False: 2.64k]
  |  |  ------------------
  ------------------
  569|      0|            from++;
  570|      0|            v = *(from++);
  571|      0|            if (IS_EOF(conf, v))
  ------------------
  |  |   31|      0|#define IS_EOF(conf,c)         is_keytype(conf, c, CONF_EOF)
  |  |  ------------------
  |  |  |  |   23|      0|#define CONF_EOF          8
  |  |  ------------------
  |  |  |  Branch (31:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  572|      0|                break;
  573|      0|            else if (v == 'r')
  ------------------
  |  Branch (573:22): [True: 0, False: 0]
  ------------------
  574|      0|                v = '\r';
  575|      0|            else if (v == 'n')
  ------------------
  |  Branch (575:22): [True: 0, False: 0]
  ------------------
  576|      0|                v = '\n';
  577|      0|            else if (v == 'b')
  ------------------
  |  Branch (577:22): [True: 0, False: 0]
  ------------------
  578|      0|                v = '\b';
  579|      0|            else if (v == 't')
  ------------------
  |  Branch (579:22): [True: 0, False: 0]
  ------------------
  580|      0|                v = '\t';
  581|      0|            buf->data[to++] = v;
  582|  2.64k|        } else if (IS_EOF(conf, *from))
  ------------------
  |  |   31|  2.64k|#define IS_EOF(conf,c)         is_keytype(conf, c, CONF_EOF)
  |  |  ------------------
  |  |  |  |   23|  2.64k|#define CONF_EOF          8
  |  |  ------------------
  |  |  |  Branch (31:32): [True: 216, False: 2.43k]
  |  |  ------------------
  ------------------
  583|    216|            break;
  584|  2.43k|        else if (*from == '$') {
  ------------------
  |  Branch (584:18): [True: 26, False: 2.40k]
  ------------------
  585|     26|            size_t newsize;
  586|       |
  587|       |            /* try to expand it */
  588|     26|            rrp = NULL;
  589|     26|            s = &(from[1]);
  590|     26|            if (*s == '{')
  ------------------
  |  Branch (590:17): [True: 0, False: 26]
  ------------------
  591|      0|                q = '}';
  592|     26|            else if (*s == '(')
  ------------------
  |  Branch (592:22): [True: 0, False: 26]
  ------------------
  593|      0|                q = ')';
  594|     26|            else
  595|     26|                q = 0;
  596|       |
  597|     26|            if (q)
  ------------------
  |  Branch (597:17): [True: 0, False: 26]
  ------------------
  598|      0|                s++;
  599|     26|            cp = section;
  600|     26|            e = np = s;
  601|    104|            while (IS_ALNUM(conf, *e))
  ------------------
  |  |   35|    104|#define IS_ALNUM(conf,c)       is_keytype(conf, c, CONF_ALNUM)
  |  |  ------------------
  |  |  |  |   25|    104|#define CONF_ALNUM        (CONF_ALPHA|CONF_NUMBER|CONF_UNDER)
  |  |  |  |  ------------------
  |  |  |  |  |  |   24|    104|#define CONF_ALPHA        (CONF_UPPER|CONF_LOWER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   13|    104|#define CONF_UPPER        2
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CONF_ALPHA        (CONF_UPPER|CONF_LOWER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   14|    104|#define CONF_LOWER        4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define CONF_ALNUM        (CONF_ALPHA|CONF_NUMBER|CONF_UNDER)
  |  |  |  |  ------------------
  |  |  |  |  |  |   12|    104|#define CONF_NUMBER       1
  |  |  |  |  ------------------
  |  |  |  |               #define CONF_ALNUM        (CONF_ALPHA|CONF_NUMBER|CONF_UNDER)
  |  |  |  |  ------------------
  |  |  |  |  |  |   15|    104|#define CONF_UNDER        256
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (35:32): [True: 78, False: 26]
  |  |  ------------------
  ------------------
  602|     78|                e++;
  603|     26|            if ((e[0] == ':') && (e[1] == ':')) {
  ------------------
  |  Branch (603:17): [True: 0, False: 26]
  |  Branch (603:34): [True: 0, False: 0]
  ------------------
  604|      0|                cp = np;
  605|      0|                rrp = e;
  606|      0|                rr = *e;
  607|      0|                *rrp = '\0';
  608|      0|                e += 2;
  609|      0|                np = e;
  610|      0|                while (IS_ALNUM(conf, *e))
  ------------------
  |  |   35|      0|#define IS_ALNUM(conf,c)       is_keytype(conf, c, CONF_ALNUM)
  |  |  ------------------
  |  |  |  |   25|      0|#define CONF_ALNUM        (CONF_ALPHA|CONF_NUMBER|CONF_UNDER)
  |  |  |  |  ------------------
  |  |  |  |  |  |   24|      0|#define CONF_ALPHA        (CONF_UPPER|CONF_LOWER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   13|      0|#define CONF_UPPER        2
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CONF_ALPHA        (CONF_UPPER|CONF_LOWER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   14|      0|#define CONF_LOWER        4
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define CONF_ALNUM        (CONF_ALPHA|CONF_NUMBER|CONF_UNDER)
  |  |  |  |  ------------------
  |  |  |  |  |  |   12|      0|#define CONF_NUMBER       1
  |  |  |  |  ------------------
  |  |  |  |               #define CONF_ALNUM        (CONF_ALPHA|CONF_NUMBER|CONF_UNDER)
  |  |  |  |  ------------------
  |  |  |  |  |  |   15|      0|#define CONF_UNDER        256
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (35:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  611|      0|                    e++;
  612|      0|            }
  613|     26|            r = *e;
  614|     26|            *e = '\0';
  615|     26|            rp = e;
  616|     26|            if (q) {
  ------------------
  |  Branch (616:17): [True: 0, False: 26]
  ------------------
  617|      0|                if (r != q) {
  ------------------
  |  Branch (617:21): [True: 0, False: 0]
  ------------------
  618|      0|                    CONFerr(CONF_F_STR_COPY, CONF_R_NO_CLOSE_BRACE);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  619|      0|                    goto err;
  620|      0|                }
  621|      0|                e++;
  622|      0|            }
  623|       |            /*-
  624|       |             * So at this point we have
  625|       |             * np which is the start of the name string which is
  626|       |             *   '\0' terminated.
  627|       |             * cp which is the start of the section string which is
  628|       |             *   '\0' terminated.
  629|       |             * e is the 'next point after'.
  630|       |             * r and rr are the chars replaced by the '\0'
  631|       |             * rp and rrp is where 'r' and 'rr' came from.
  632|       |             */
  633|     26|            p = _CONF_get_string(conf, cp, np);
  634|     26|            if (rrp != NULL)
  ------------------
  |  Branch (634:17): [True: 0, False: 26]
  ------------------
  635|      0|                *rrp = rr;
  636|     26|            *rp = r;
  637|     26|            if (p == NULL) {
  ------------------
  |  Branch (637:17): [True: 0, False: 26]
  ------------------
  638|      0|                CONFerr(CONF_F_STR_COPY, CONF_R_VARIABLE_HAS_NO_VALUE);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  639|      0|                goto err;
  640|      0|            }
  641|     26|            newsize = strlen(p) + buf->length - (e - from);
  642|     26|            if (newsize > MAX_CONF_VALUE_LENGTH) {
  ------------------
  |  |   38|     26|#define MAX_CONF_VALUE_LENGTH       65536
  ------------------
  |  Branch (642:17): [True: 0, False: 26]
  ------------------
  643|      0|                CONFerr(CONF_F_STR_COPY, CONF_R_VARIABLE_EXPANSION_TOO_LONG);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  644|      0|                goto err;
  645|      0|            }
  646|     26|            if (!BUF_MEM_grow_clean(buf, newsize)) {
  ------------------
  |  Branch (646:17): [True: 0, False: 26]
  ------------------
  647|      0|                CONFerr(CONF_F_STR_COPY, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  648|      0|                goto err;
  649|      0|            }
  650|    234|            while (*p)
  ------------------
  |  Branch (650:20): [True: 208, False: 26]
  ------------------
  651|    208|                buf->data[to++] = *(p++);
  652|       |
  653|       |            /*
  654|       |             * Since we change the pointer 'from', we also have to change the
  655|       |             * perceived length of the string it points at.  /RL
  656|       |             */
  657|     26|            len -= e - from;
  658|     26|            from = e;
  659|       |
  660|       |            /*
  661|       |             * In case there were no braces or parenthesis around the
  662|       |             * variable reference, we have to put back the character that was
  663|       |             * replaced with a '\0'.  /RL
  664|       |             */
  665|     26|            *rp = r;
  666|     26|        } else
  667|  2.40k|            buf->data[to++] = *(from++);
  668|  2.65k|    }
  669|    216|    buf->data[to] = '\0';
  670|    216|    OPENSSL_free(*pto);
  ------------------
  |  |  128|    216|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  671|    216|    *pto = buf->data;
  672|    216|    OPENSSL_free(buf);
  ------------------
  |  |  128|    216|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  673|    216|    return 1;
  674|      0| err:
  675|      0|    BUF_MEM_free(buf);
  676|      0|    return 0;
  677|    216|}
conf_def.c:trim_ws:
  806|    186|{
  807|    186|    char *p = start;
  808|       |
  809|  2.66k|    while (!IS_EOF(conf, *p))
  ------------------
  |  |   31|  2.66k|#define IS_EOF(conf,c)         is_keytype(conf, c, CONF_EOF)
  |  |  ------------------
  |  |  |  |   23|  2.66k|#define CONF_EOF          8
  |  |  ------------------
  ------------------
  |  Branch (809:12): [True: 2.47k, False: 186]
  ------------------
  810|  2.47k|        p++;
  811|    186|    p--;
  812|    310|    while ((p >= start) && IS_WS(conf, *p))
  ------------------
  |  |   34|    310|#define IS_WS(conf,c)          is_keytype(conf, c, CONF_WS)
  |  |  ------------------
  |  |  |  |   17|    310|#define CONF_WS           16
  |  |  ------------------
  |  |  |  Branch (34:32): [True: 124, False: 186]
  |  |  ------------------
  ------------------
  |  Branch (812:12): [True: 310, False: 0]
  ------------------
  813|    124|        p--;
  814|    186|    p++;
  815|    186|    *p = '\0';
  816|    186|}
conf_def.c:def_load:
  157|      2|{
  158|      2|    int ret;
  159|      2|    BIO *in = NULL;
  160|       |
  161|       |#ifdef OPENSSL_SYS_VMS
  162|       |    in = BIO_new_file(name, "r");
  163|       |#else
  164|      2|    in = BIO_new_file(name, "rb");
  165|      2|#endif
  166|      2|    if (in == NULL) {
  ------------------
  |  Branch (166:9): [True: 0, False: 2]
  ------------------
  167|      0|        if (ERR_GET_REASON(ERR_peek_last_error()) == BIO_R_NO_SUCH_FILE)
  ------------------
  |  |  144|      0|# define ERR_GET_REASON(l)       (int)( (l)         & 0xFFFL)
  ------------------
                      if (ERR_GET_REASON(ERR_peek_last_error()) == BIO_R_NO_SUCH_FILE)
  ------------------
  |  |  107|      0|# define BIO_R_NO_SUCH_FILE                               128
  ------------------
  |  Branch (167:13): [True: 0, False: 0]
  ------------------
  168|      0|            CONFerr(CONF_F_DEF_LOAD, CONF_R_NO_SUCH_FILE);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  169|      0|        else
  170|      0|            CONFerr(CONF_F_DEF_LOAD, ERR_R_SYS_LIB);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  171|      0|        return 0;
  172|      0|    }
  173|       |
  174|      2|    ret = def_load_bio(conf, in, line);
  175|      2|    BIO_free(in);
  176|       |
  177|      2|    return ret;
  178|      2|}

ERR_load_CONF_strings:
   87|      2|{
   88|      2|#ifndef OPENSSL_NO_ERR
   89|      2|    if (ERR_func_error_string(CONF_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (89:9): [True: 2, False: 0]
  ------------------
   90|      2|        ERR_load_strings_const(CONF_str_functs);
   91|      2|        ERR_load_strings_const(CONF_str_reasons);
   92|      2|    }
   93|      2|#endif
   94|      2|    return 1;
   95|      2|}

NCONF_new:
  178|      2|{
  179|      2|    CONF *ret;
  180|       |
  181|      2|    if (meth == NULL)
  ------------------
  |  Branch (181:9): [True: 2, False: 0]
  ------------------
  182|      2|        meth = NCONF_default();
  183|       |
  184|      2|    ret = meth->create(meth);
  185|      2|    if (ret == NULL) {
  ------------------
  |  Branch (185:9): [True: 0, False: 2]
  ------------------
  186|      0|        CONFerr(CONF_F_NCONF_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  187|      0|        return NULL;
  188|      0|    }
  189|       |
  190|      2|    return ret;
  191|      2|}
NCONF_free:
  194|      2|{
  195|      2|    if (conf == NULL)
  ------------------
  |  Branch (195:9): [True: 0, False: 2]
  ------------------
  196|      0|        return;
  197|      2|    conf->meth->destroy(conf);
  198|      2|}
NCONF_load:
  208|      2|{
  209|      2|    if (conf == NULL) {
  ------------------
  |  Branch (209:9): [True: 0, False: 2]
  ------------------
  210|      0|        CONFerr(CONF_F_NCONF_LOAD, CONF_R_NO_CONF);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  211|      0|        return 0;
  212|      0|    }
  213|       |
  214|      2|    return conf->meth->load(conf, file, eline);
  215|      2|}
NCONF_get_string:
  258|      2|{
  259|      2|    char *s = _CONF_get_string(conf, group, name);
  260|       |
  261|       |    /*
  262|       |     * Since we may get a value from an environment variable even if conf is
  263|       |     * NULL, let's check the value first
  264|       |     */
  265|      2|    if (s)
  ------------------
  |  Branch (265:9): [True: 0, False: 2]
  ------------------
  266|      0|        return s;
  267|       |
  268|      2|    if (conf == NULL) {
  ------------------
  |  Branch (268:9): [True: 0, False: 2]
  ------------------
  269|      0|        CONFerr(CONF_F_NCONF_GET_STRING,
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  270|      0|                CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE);
  271|      0|        return NULL;
  272|      0|    }
  273|      2|    CONFerr(CONF_F_NCONF_GET_STRING, CONF_R_NO_VALUE);
  ------------------
  |  |  112|      2|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      2|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  274|      2|    ERR_add_error_data(4, "group=", group, " name=", name);
  275|       |    return NULL;
  276|      2|}

OPENSSL_load_builtin_modules:
   22|      2|{
   23|       |    /* Add builtin modules here */
   24|      2|    ASN1_add_oid_module();
   25|      2|    ASN1_add_stable_module();
   26|      2|#ifndef OPENSSL_NO_ENGINE
   27|      2|    ENGINE_add_conf_module();
   28|      2|#endif
   29|      2|    EVP_add_alg_module();
   30|      2|    conf_add_ssl_module();
   31|      2|}

CONF_modules_load:
   74|      2|{
   75|      2|    STACK_OF(CONF_VALUE) *values;
  ------------------
  |  |   20|      2|# define STACK_OF(type) struct stack_st_##type
  ------------------
   76|      2|    CONF_VALUE *vl;
   77|      2|    char *vsection = NULL;
   78|       |
   79|      2|    int ret, i;
   80|       |
   81|      2|    if (!cnf)
  ------------------
  |  Branch (81:9): [True: 0, False: 2]
  ------------------
   82|      0|        return 1;
   83|       |
   84|      2|    if (appname)
  ------------------
  |  Branch (84:9): [True: 0, False: 2]
  ------------------
   85|      0|        vsection = NCONF_get_string(cnf, NULL, appname);
   86|       |
   87|      2|    if (!appname || (!vsection && (flags & CONF_MFLAGS_DEFAULT_SECTION)))
  ------------------
  |  |   67|      0|# define CONF_MFLAGS_DEFAULT_SECTION     0x20
  ------------------
  |  Branch (87:9): [True: 2, False: 0]
  |  Branch (87:22): [True: 0, False: 0]
  |  Branch (87:35): [True: 0, False: 0]
  ------------------
   88|      2|        vsection = NCONF_get_string(cnf, NULL, "openssl_conf");
   89|       |
   90|      2|    if (!vsection) {
  ------------------
  |  Branch (90:9): [True: 2, False: 0]
  ------------------
   91|      2|        ERR_clear_error();
   92|      2|        return 1;
   93|      2|    }
   94|       |
   95|      0|    values = NCONF_get_section(cnf, vsection);
   96|       |
   97|      0|    if (!values)
  ------------------
  |  Branch (97:9): [True: 0, False: 0]
  ------------------
   98|      0|        return 0;
   99|       |
  100|      0|    for (i = 0; i < sk_CONF_VALUE_num(values); i++) {
  ------------------
  |  Branch (100:17): [True: 0, False: 0]
  ------------------
  101|      0|        vl = sk_CONF_VALUE_value(values, i);
  102|      0|        ret = module_run(cnf, vl->name, vl->value, flags);
  103|      0|        if (ret <= 0)
  ------------------
  |  Branch (103:13): [True: 0, False: 0]
  ------------------
  104|      0|            if (!(flags & CONF_MFLAGS_IGNORE_ERRORS))
  ------------------
  |  |   62|      0|# define CONF_MFLAGS_IGNORE_ERRORS       0x1
  ------------------
  |  Branch (104:17): [True: 0, False: 0]
  ------------------
  105|      0|                return ret;
  106|      0|    }
  107|       |
  108|      0|    return 1;
  109|       |
  110|      0|}
CONF_modules_load_file:
  114|      2|{
  115|      2|    char *file = NULL;
  116|      2|    CONF *conf = NULL;
  117|      2|    int ret = 0;
  118|      2|    conf = NCONF_new(NULL);
  119|      2|    if (conf == NULL)
  ------------------
  |  Branch (119:9): [True: 0, False: 2]
  ------------------
  120|      0|        goto err;
  121|       |
  122|      2|    if (filename == NULL) {
  ------------------
  |  Branch (122:9): [True: 2, False: 0]
  ------------------
  123|      2|        file = CONF_get1_default_config_file();
  124|      2|        if (!file)
  ------------------
  |  Branch (124:13): [True: 0, False: 2]
  ------------------
  125|      0|            goto err;
  126|      2|    } else
  127|      0|        file = (char *)filename;
  128|       |
  129|      2|    if (NCONF_load(conf, file, NULL) <= 0) {
  ------------------
  |  Branch (129:9): [True: 0, False: 2]
  ------------------
  130|      0|        if ((flags & CONF_MFLAGS_IGNORE_MISSING_FILE) &&
  ------------------
  |  |   66|      0|# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10
  ------------------
  |  Branch (130:13): [True: 0, False: 0]
  ------------------
  131|      0|            (ERR_GET_REASON(ERR_peek_last_error()) == CONF_R_NO_SUCH_FILE)) {
  ------------------
  |  |  144|      0|# define ERR_GET_REASON(l)       (int)( (l)         & 0xFFFL)
  ------------------
                          (ERR_GET_REASON(ERR_peek_last_error()) == CONF_R_NO_SUCH_FILE)) {
  ------------------
  |  |   63|      0|# define CONF_R_NO_SUCH_FILE                              114
  ------------------
  |  Branch (131:13): [True: 0, False: 0]
  ------------------
  132|      0|            ERR_clear_error();
  133|      0|            ret = 1;
  134|      0|        }
  135|      0|        goto err;
  136|      0|    }
  137|       |
  138|      2|    ret = CONF_modules_load(conf, appname, flags);
  139|       |
  140|      2| err:
  141|      2|    if (filename == NULL)
  ------------------
  |  Branch (141:9): [True: 2, False: 0]
  ------------------
  142|      2|        OPENSSL_free(file);
  ------------------
  |  |  128|      2|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  143|      2|    NCONF_free(conf);
  144|       |
  145|      2|    if (flags & CONF_MFLAGS_IGNORE_RETURN_CODES)
  ------------------
  |  |   63|      2|# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2
  ------------------
  |  Branch (145:9): [True: 2, False: 0]
  ------------------
  146|      2|        return 1;
  147|       |
  148|      0|    return ret;
  149|      2|}
CONF_modules_unload:
  360|      2|{
  361|      2|    int i;
  362|      2|    CONF_MODULE *md;
  363|      2|    CONF_modules_finish();
  364|       |    /* unload modules in reverse order */
  365|     12|    for (i = sk_CONF_MODULE_num(supported_modules) - 1; i >= 0; i--) {
  ------------------
  |  Branch (365:57): [True: 10, False: 2]
  ------------------
  366|     10|        md = sk_CONF_MODULE_value(supported_modules, i);
  367|       |        /* If static or in use and 'all' not set ignore it */
  368|     10|        if (((md->links > 0) || !md->dso) && !all)
  ------------------
  |  Branch (368:14): [True: 0, False: 10]
  |  Branch (368:33): [True: 10, False: 0]
  |  Branch (368:46): [True: 0, False: 10]
  ------------------
  369|      0|            continue;
  370|       |        /* Since we're working in reverse this is OK */
  371|     10|        (void)sk_CONF_MODULE_delete(supported_modules, i);
  372|     10|        module_free(md);
  373|     10|    }
  374|      2|    if (sk_CONF_MODULE_num(supported_modules) == 0) {
  ------------------
  |  Branch (374:9): [True: 2, False: 0]
  ------------------
  375|      2|        sk_CONF_MODULE_free(supported_modules);
  376|       |        supported_modules = NULL;
  377|      2|    }
  378|      2|}
CONF_modules_finish:
  391|      4|{
  392|      4|    CONF_IMODULE *imod;
  393|      4|    while (sk_CONF_IMODULE_num(initialized_modules) > 0) {
  ------------------
  |  Branch (393:12): [True: 0, False: 4]
  ------------------
  394|      0|        imod = sk_CONF_IMODULE_pop(initialized_modules);
  395|      0|        module_finish(imod);
  396|      0|    }
  397|      4|    sk_CONF_IMODULE_free(initialized_modules);
  398|       |    initialized_modules = NULL;
  399|      4|}
CONF_module_add:
  419|     10|{
  420|     10|    if (module_add(NULL, name, ifunc, ffunc))
  ------------------
  |  Branch (420:9): [True: 10, False: 0]
  ------------------
  421|     10|        return 1;
  422|      0|    else
  423|      0|        return 0;
  424|     10|}
conf_modules_free_int:
  427|      2|{
  428|      2|    CONF_modules_finish();
  429|      2|    CONF_modules_unload(1);
  430|      2|}
CONF_get1_default_config_file:
  482|      2|{
  483|      2|    char *file, *sep = "";
  484|      2|    int len;
  485|       |
  486|      2|    if ((file = ossl_safe_getenv("OPENSSL_CONF")) != NULL)
  ------------------
  |  Branch (486:9): [True: 0, False: 2]
  ------------------
  487|      0|        return OPENSSL_strdup(file);
  ------------------
  |  |  132|      0|        CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  488|       |
  489|      2|    len = strlen(X509_get_default_cert_area());
  490|      2|#ifndef OPENSSL_SYS_VMS
  491|      2|    len++;
  492|      2|    sep = "/";
  493|      2|#endif
  494|      2|    len += strlen(OPENSSL_CONF);
  ------------------
  |  |   54|      2|# define OPENSSL_CONF             "openssl.cnf"
  ------------------
  495|       |
  496|      2|    file = OPENSSL_malloc(len + 1);
  ------------------
  |  |  118|      2|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  497|       |
  498|      2|    if (file == NULL)
  ------------------
  |  Branch (498:9): [True: 0, False: 2]
  ------------------
  499|      0|        return NULL;
  500|      2|    BIO_snprintf(file, len + 1, "%s%s%s", X509_get_default_cert_area(),
  501|      2|                 sep, OPENSSL_CONF);
  ------------------
  |  |   54|      2|# define OPENSSL_CONF             "openssl.cnf"
  ------------------
  502|       |
  503|      2|    return file;
  504|      2|}
CONF_parse_list:
  516|  28.9k|{
  517|  28.9k|    int ret;
  518|  28.9k|    const char *lstart, *tmpend, *p;
  519|       |
  520|  28.9k|    if (list_ == NULL) {
  ------------------
  |  Branch (520:9): [True: 0, False: 28.9k]
  ------------------
  521|      0|        CONFerr(CONF_F_CONF_PARSE_LIST, CONF_R_LIST_CANNOT_BE_NULL);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  522|      0|        return 0;
  523|      0|    }
  524|       |
  525|  28.9k|    lstart = list_;
  526|  86.9k|    for (;;) {
  527|  86.9k|        if (nospc) {
  ------------------
  |  Branch (527:13): [True: 86.9k, False: 0]
  ------------------
  528|  86.9k|            while (*lstart && isspace((unsigned char)*lstart))
  ------------------
  |  Branch (528:20): [True: 86.9k, False: 0]
  |  Branch (528:31): [True: 0, False: 86.9k]
  ------------------
  529|      0|                lstart++;
  530|  86.9k|        }
  531|  86.9k|        p = strchr(lstart, sep);
  532|  86.9k|        if (p == lstart || !*lstart)
  ------------------
  |  Branch (532:13): [True: 0, False: 86.9k]
  |  Branch (532:28): [True: 0, False: 86.9k]
  ------------------
  533|      0|            ret = list_cb(NULL, 0, arg);
  534|  86.9k|        else {
  535|  86.9k|            if (p)
  ------------------
  |  Branch (535:17): [True: 57.9k, False: 28.9k]
  ------------------
  536|  57.9k|                tmpend = p - 1;
  537|  28.9k|            else
  538|  28.9k|                tmpend = lstart + strlen(lstart) - 1;
  539|  86.9k|            if (nospc) {
  ------------------
  |  Branch (539:17): [True: 86.9k, False: 0]
  ------------------
  540|  86.9k|                while (isspace((unsigned char)*tmpend))
  ------------------
  |  Branch (540:24): [True: 0, False: 86.9k]
  ------------------
  541|      0|                    tmpend--;
  542|  86.9k|            }
  543|  86.9k|            ret = list_cb(lstart, tmpend - lstart + 1, arg);
  544|  86.9k|        }
  545|  86.9k|        if (ret <= 0)
  ------------------
  |  Branch (545:13): [True: 0, False: 86.9k]
  ------------------
  546|      0|            return ret;
  547|  86.9k|        if (p == NULL)
  ------------------
  |  Branch (547:13): [True: 28.9k, False: 57.9k]
  ------------------
  548|  28.9k|            return 1;
  549|  57.9k|        lstart = p + 1;
  550|  57.9k|    }
  551|  28.9k|}
conf_mod.c:module_free:
  382|     10|{
  383|     10|    DSO_free(md->dso);
  384|     10|    OPENSSL_free(md->name);
  ------------------
  |  |  128|     10|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  385|     10|    OPENSSL_free(md);
  ------------------
  |  |  128|     10|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  386|     10|}
conf_mod.c:module_add:
  232|     10|{
  233|     10|    CONF_MODULE *tmod = NULL;
  234|     10|    if (supported_modules == NULL)
  ------------------
  |  Branch (234:9): [True: 2, False: 8]
  ------------------
  235|      2|        supported_modules = sk_CONF_MODULE_new_null();
  236|     10|    if (supported_modules == NULL)
  ------------------
  |  Branch (236:9): [True: 0, False: 10]
  ------------------
  237|      0|        return NULL;
  238|     10|    if ((tmod = OPENSSL_zalloc(sizeof(*tmod))) == NULL) {
  ------------------
  |  |  120|     10|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (238:9): [True: 0, False: 10]
  ------------------
  239|      0|        CONFerr(CONF_F_MODULE_ADD, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  112|      0|# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  240|      0|        return NULL;
  241|      0|    }
  242|       |
  243|     10|    tmod->dso = dso;
  244|     10|    tmod->name = OPENSSL_strdup(name);
  ------------------
  |  |  132|     10|        CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  245|     10|    tmod->init = ifunc;
  246|     10|    tmod->finish = ffunc;
  247|     10|    if (tmod->name == NULL) {
  ------------------
  |  Branch (247:9): [True: 0, False: 10]
  ------------------
  248|      0|        OPENSSL_free(tmod);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  249|      0|        return NULL;
  250|      0|    }
  251|       |
  252|     10|    if (!sk_CONF_MODULE_push(supported_modules, tmod)) {
  ------------------
  |  Branch (252:9): [True: 0, False: 10]
  ------------------
  253|      0|        OPENSSL_free(tmod->name);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  254|      0|        OPENSSL_free(tmod);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  255|      0|        return NULL;
  256|      0|    }
  257|       |
  258|     10|    return tmod;
  259|     10|}

openssl_config_int:
   44|      2|{
   45|      2|    int ret = 0;
   46|      2|    const char *filename;
   47|      2|    const char *appname;
   48|      2|    unsigned long flags;
   49|       |
   50|      2|    if (openssl_configured)
  ------------------
  |  Branch (50:9): [True: 0, False: 2]
  ------------------
   51|      0|        return 1;
   52|       |
   53|      2|    filename = settings ? settings->filename : NULL;
  ------------------
  |  Branch (53:16): [True: 0, False: 2]
  ------------------
   54|      2|    appname = settings ? settings->appname : NULL;
  ------------------
  |  Branch (54:15): [True: 0, False: 2]
  ------------------
   55|      2|    flags = settings ? settings->flags : DEFAULT_CONF_MFLAGS;
  ------------------
  |  |   16|      4|    (CONF_MFLAGS_DEFAULT_SECTION | \
  |  |  ------------------
  |  |  |  |   67|      2|# define CONF_MFLAGS_DEFAULT_SECTION     0x20
  |  |  ------------------
  |  |   17|      4|     CONF_MFLAGS_IGNORE_MISSING_FILE | \
  |  |  ------------------
  |  |  |  |   66|      2|# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10
  |  |  ------------------
  |  |   18|      4|     CONF_MFLAGS_IGNORE_RETURN_CODES)
  |  |  ------------------
  |  |  |  |   63|      2|# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2
  |  |  ------------------
  ------------------
  |  Branch (55:13): [True: 0, False: 2]
  ------------------
   56|       |
   57|       |#ifdef OPENSSL_INIT_DEBUG
   58|       |    fprintf(stderr, "OPENSSL_INIT: openssl_config_int(%s, %s, %lu)\n",
   59|       |            filename, appname, flags);
   60|       |#endif
   61|       |
   62|      2|    OPENSSL_load_builtin_modules();
   63|      2|#ifndef OPENSSL_NO_ENGINE
   64|       |    /* Need to load ENGINEs */
   65|      2|    ENGINE_load_builtin_engines();
   66|      2|#endif
   67|      2|    ERR_clear_error();
   68|      2|#ifndef OPENSSL_SYS_UEFI
   69|      2|    ret = CONF_modules_load_file(filename, appname, flags);
   70|      2|#endif
   71|      2|    openssl_configured = 1;
   72|      2|    return ret;
   73|      2|}

conf_ssl_name_find:
  150|  28.9k|{
  151|  28.9k|    size_t i;
  152|  28.9k|    const struct ssl_conf_name_st *nm;
  153|       |
  154|  28.9k|    if (name == NULL)
  ------------------
  |  Branch (154:9): [True: 0, False: 28.9k]
  ------------------
  155|      0|        return 0;
  156|  28.9k|    for (i = 0, nm = ssl_names; i < ssl_names_count; i++, nm++) {
  ------------------
  |  Branch (156:33): [True: 0, False: 28.9k]
  ------------------
  157|      0|        if (strcmp(nm->name, name) == 0) {
  ------------------
  |  Branch (157:13): [True: 0, False: 0]
  ------------------
  158|      0|            *idx = i;
  159|      0|            return 1;
  160|      0|        }
  161|      0|    }
  162|  28.9k|    return 0;
  163|  28.9k|}
conf_add_ssl_module:
  179|      2|{
  180|      2|    CONF_module_add("ssl_conf", ssl_module_init, ssl_module_free);
  181|      2|}

ERR_load_CRYPTO_strings:
   69|      2|{
   70|      2|#ifndef OPENSSL_NO_ERR
   71|      2|    if (ERR_func_error_string(CRYPTO_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (71:9): [True: 2, False: 0]
  ------------------
   72|      2|        ERR_load_strings_const(CRYPTO_str_functs);
   73|      2|        ERR_load_strings_const(CRYPTO_str_reasons);
   74|      2|    }
   75|      2|#endif
   76|      2|    return 1;
   77|      2|}

OPENSSL_cpuid_setup:
  166|      4|{
  167|      4|}
OPENSSL_rdtsc:
  460|   202k|{
  461|   202k|    return 0;
  462|   202k|}

ERR_load_CT_strings:
   88|      2|{
   89|      2|#ifndef OPENSSL_NO_ERR
   90|      2|    if (ERR_func_error_string(CT_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (90:9): [True: 2, False: 0]
  ------------------
   91|      2|        ERR_load_strings_const(CT_str_functs);
   92|      2|        ERR_load_strings_const(CT_str_reasons);
   93|      2|    }
   94|      2|#endif
   95|      2|    return 1;
   96|      2|}

CTLOG_STORE_new:
   93|  28.9k|{
   94|  28.9k|    CTLOG_STORE *ret = OPENSSL_zalloc(sizeof(*ret));
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   95|       |
   96|  28.9k|    if (ret == NULL) {
  ------------------
  |  Branch (96:9): [True: 0, False: 28.9k]
  ------------------
   97|      0|        CTerr(CT_F_CTLOG_STORE_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  133|      0|# define CTerr(f,r) ERR_PUT_error(ERR_LIB_CT,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   98|      0|        return NULL;
   99|      0|    }
  100|       |
  101|  28.9k|    ret->logs = sk_CTLOG_new_null();
  102|  28.9k|    if (ret->logs == NULL)
  ------------------
  |  Branch (102:9): [True: 0, False: 28.9k]
  ------------------
  103|      0|        goto err;
  104|       |
  105|  28.9k|    return ret;
  106|      0|err:
  107|      0|    OPENSSL_free(ret);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  108|       |    return NULL;
  109|  28.9k|}
CTLOG_STORE_free:
  112|  28.9k|{
  113|  28.9k|    if (store != NULL) {
  ------------------
  |  Branch (113:9): [True: 28.9k, False: 0]
  ------------------
  114|  28.9k|        sk_CTLOG_pop_free(store->logs, CTLOG_free);
  115|  28.9k|        OPENSSL_free(store);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  116|  28.9k|    }
  117|  28.9k|}

SCT_LIST_free:
   49|  28.9k|{
   50|  28.9k|    sk_SCT_pop_free(a, SCT_free);
   51|  28.9k|}

ossl_ctype_check:
  253|   712k|{
  254|   712k|    const int max = sizeof(ctype_char_map) / sizeof(*ctype_char_map);
  255|   712k|    const int a = ossl_toascii(c);
  ------------------
  |  |   53|   712k|#  define ossl_toascii(c)       (c)
  ------------------
  256|       |
  257|   712k|    return a >= 0 && a < max && (ctype_char_map[a] & mask) != 0;
  ------------------
  |  Branch (257:12): [True: 712k, False: 0]
  |  Branch (257:22): [True: 712k, False: 0]
  |  Branch (257:33): [True: 148k, False: 563k]
  ------------------
  258|   712k|}
ossl_tolower:
  267|   711k|{
  268|   711k|    return ossl_isupper(c) ? c ^ case_change : c;
  ------------------
  |  |   77|   711k|# define ossl_isupper(c)        (ossl_ctype_check((c), CTYPE_MASK_upper))
  |  |  ------------------
  |  |  |  |   25|   711k|# define CTYPE_MASK_upper       0x2
  |  |  ------------------
  |  |  |  Branch (77:33): [True: 148k, False: 563k]
  |  |  ------------------
  ------------------
  269|   711k|}

ERR_load_DH_strings:
   93|      2|{
   94|      2|#ifndef OPENSSL_NO_ERR
   95|      2|    if (ERR_func_error_string(DH_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (95:9): [True: 2, False: 0]
  ------------------
   96|      2|        ERR_load_strings_const(DH_str_functs);
   97|      2|        ERR_load_strings_const(DH_str_reasons);
   98|      2|    }
   99|      2|#endif
  100|      2|    return 1;
  101|      2|}

ERR_load_DSA_strings:
   70|      2|{
   71|      2|#ifndef OPENSSL_NO_ERR
   72|      2|    if (ERR_func_error_string(DSA_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (72:9): [True: 2, False: 0]
  ------------------
   73|      2|        ERR_load_strings_const(DSA_str_functs);
   74|      2|        ERR_load_strings_const(DSA_str_reasons);
   75|      2|    }
   76|      2|#endif
   77|      2|    return 1;
   78|      2|}

ERR_load_DSO_strings:
   92|      2|{
   93|      2|#ifndef OPENSSL_NO_ERR
   94|      2|    if (ERR_func_error_string(DSO_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (94:9): [True: 2, False: 0]
  ------------------
   95|      2|        ERR_load_strings_const(DSO_str_functs);
   96|      2|        ERR_load_strings_const(DSO_str_reasons);
   97|      2|    }
   98|      2|#endif
   99|      2|    return 1;
  100|      2|}

DSO_free:
   63|     10|{
   64|     10|    int i;
   65|       |
   66|     10|    if (dso == NULL)
  ------------------
  |  Branch (66:9): [True: 10, False: 0]
  ------------------
   67|     10|        return 1;
   68|       |
   69|      0|    if (CRYPTO_DOWN_REF(&dso->references, &i, dso->lock) <= 0)
  ------------------
  |  Branch (69:9): [True: 0, False: 0]
  ------------------
   70|      0|        return 0;
   71|       |
   72|      0|    REF_PRINT_COUNT("DSO", dso);
   73|      0|    if (i > 0)
  ------------------
  |  Branch (73:9): [True: 0, False: 0]
  ------------------
   74|      0|        return 1;
   75|      0|    REF_ASSERT_ISNT(i < 0);
  ------------------
  |  |  138|      0|    (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0)
  |  |  ------------------
  |  |  |  Branch (138:12): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   76|       |
   77|      0|    if ((dso->flags & DSO_FLAG_NO_UNLOAD_ON_FREE) == 0) {
  ------------------
  |  |   45|      0|# define DSO_FLAG_NO_UNLOAD_ON_FREE              0x04
  ------------------
  |  Branch (77:9): [True: 0, False: 0]
  ------------------
   78|      0|        if ((dso->meth->dso_unload != NULL) && !dso->meth->dso_unload(dso)) {
  ------------------
  |  Branch (78:13): [True: 0, False: 0]
  |  Branch (78:48): [True: 0, False: 0]
  ------------------
   79|      0|            DSOerr(DSO_F_DSO_FREE, DSO_R_UNLOAD_FAILED);
  ------------------
  |  |  121|      0|# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   80|      0|            return 0;
   81|      0|        }
   82|      0|    }
   83|       |
   84|      0|    if ((dso->meth->finish != NULL) && !dso->meth->finish(dso)) {
  ------------------
  |  Branch (84:9): [True: 0, False: 0]
  |  Branch (84:40): [True: 0, False: 0]
  ------------------
   85|      0|        DSOerr(DSO_F_DSO_FREE, DSO_R_FINISH_FAILED);
  ------------------
  |  |  121|      0|# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   86|      0|        return 0;
   87|      0|    }
   88|       |
   89|      0|    sk_void_free(dso->meth_data);
   90|      0|    OPENSSL_free(dso->filename);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   91|      0|    OPENSSL_free(dso->loaded_filename);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   92|      0|    CRYPTO_THREAD_lock_free(dso->lock);
   93|      0|    OPENSSL_free(dso);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   94|      0|    return 1;
   95|      0|}

X25519_public_from_private:
 5573|  28.9k|{
 5574|  28.9k|    uint8_t e[32];
 5575|  28.9k|    ge_p3 A;
 5576|  28.9k|    fe zplusy, zminusy, zminusy_inv;
 5577|       |
 5578|  28.9k|    memcpy(e, private_key, 32);
 5579|  28.9k|    e[0] &= 248;
 5580|  28.9k|    e[31] &= 127;
 5581|  28.9k|    e[31] |= 64;
 5582|       |
 5583|  28.9k|    ge_scalarmult_base(&A, e);
 5584|       |
 5585|       |    /*
 5586|       |     * We only need the u-coordinate of the curve25519 point.
 5587|       |     * The map is u=(y+1)/(1-y). Since y=Y/Z, this gives
 5588|       |     * u=(Z+Y)/(Z-Y).
 5589|       |     */
 5590|  28.9k|    fe_add(zplusy, A.Z, A.Y);
 5591|  28.9k|    fe_sub(zminusy, A.Z, A.Y);
 5592|  28.9k|    fe_invert(zminusy_inv, zminusy);
 5593|  28.9k|    fe_mul(zplusy, zplusy, zminusy_inv);
 5594|  28.9k|    fe_tobytes(out_public_value, zplusy);
 5595|       |
 5596|  28.9k|    OPENSSL_cleanse(e, sizeof(e));
 5597|  28.9k|}
curve25519.c:ge_scalarmult_base:
 4229|  28.9k|{
 4230|  28.9k|    signed char e[64];
 4231|  28.9k|    signed char carry;
 4232|  28.9k|    ge_p1p1 r;
 4233|  28.9k|    ge_p2 s;
 4234|  28.9k|    ge_precomp t;
 4235|  28.9k|    int i;
 4236|       |
 4237|   956k|    for (i = 0; i < 32; ++i) {
  ------------------
  |  Branch (4237:17): [True: 927k, False: 28.9k]
  ------------------
 4238|   927k|        e[2 * i + 0] = (a[i] >> 0) & 15;
 4239|   927k|        e[2 * i + 1] = (a[i] >> 4) & 15;
 4240|   927k|    }
 4241|       |    /* each e[i] is between 0 and 15 */
 4242|       |    /* e[63] is between 0 and 7 */
 4243|       |
 4244|  28.9k|    carry = 0;
 4245|  1.85M|    for (i = 0; i < 63; ++i) {
  ------------------
  |  Branch (4245:17): [True: 1.82M, False: 28.9k]
  ------------------
 4246|  1.82M|        e[i] += carry;
 4247|  1.82M|        carry = e[i] + 8;
 4248|  1.82M|        carry >>= 4;
 4249|  1.82M|        e[i] -= carry << 4;
 4250|  1.82M|    }
 4251|  28.9k|    e[63] += carry;
 4252|       |    /* each e[i] is between -8 and 8 */
 4253|       |
 4254|  28.9k|    ge_p3_0(h);
 4255|   956k|    for (i = 1; i < 64; i += 2) {
  ------------------
  |  Branch (4255:17): [True: 927k, False: 28.9k]
  ------------------
 4256|   927k|        table_select(&t, i / 2, e[i]);
 4257|   927k|        ge_madd(&r, h, &t);
 4258|   927k|        ge_p1p1_to_p3(h, &r);
 4259|   927k|    }
 4260|       |
 4261|  28.9k|    ge_p3_dbl(&r, h);
 4262|  28.9k|    ge_p1p1_to_p2(&s, &r);
 4263|  28.9k|    ge_p2_dbl(&r, &s);
 4264|  28.9k|    ge_p1p1_to_p2(&s, &r);
 4265|  28.9k|    ge_p2_dbl(&r, &s);
 4266|  28.9k|    ge_p1p1_to_p2(&s, &r);
 4267|  28.9k|    ge_p2_dbl(&r, &s);
 4268|  28.9k|    ge_p1p1_to_p3(h, &r);
 4269|       |
 4270|   956k|    for (i = 0; i < 64; i += 2) {
  ------------------
  |  Branch (4270:17): [True: 927k, False: 28.9k]
  ------------------
 4271|   927k|        table_select(&t, i / 2, e[i]);
 4272|   927k|        ge_madd(&r, h, &t);
 4273|   927k|        ge_p1p1_to_p3(h, &r);
 4274|   927k|    }
 4275|       |
 4276|  28.9k|    OPENSSL_cleanse(e, sizeof(e));
 4277|  28.9k|}
curve25519.c:ge_p3_0:
 1909|  28.9k|{
 1910|  28.9k|    fe_0(h->X);
 1911|  28.9k|    fe_1(h->Y);
 1912|  28.9k|    fe_1(h->Z);
 1913|  28.9k|    fe_0(h->T);
 1914|  28.9k|}
curve25519.c:fe_0:
  952|  1.91M|{
  953|  1.91M|    memset(h, 0, sizeof(int32_t) * 10);
  954|  1.91M|}
curve25519.c:fe_1:
  958|  3.76M|{
  959|  3.76M|    memset(h, 0, sizeof(int32_t) * 10);
  960|  3.76M|    h[0] = 1;
  961|  3.76M|}
curve25519.c:table_select:
 4199|  1.85M|{
 4200|  1.85M|    ge_precomp minust;
 4201|  1.85M|    uint8_t bnegative = negative(b);
 4202|  1.85M|    uint8_t babs = b - ((uint8_t)((-bnegative) & b) << 1);
 4203|       |
 4204|  1.85M|    ge_precomp_0(t);
 4205|  1.85M|    cmov(t, &k25519Precomp[pos][0], equal(babs, 1));
 4206|  1.85M|    cmov(t, &k25519Precomp[pos][1], equal(babs, 2));
 4207|  1.85M|    cmov(t, &k25519Precomp[pos][2], equal(babs, 3));
 4208|  1.85M|    cmov(t, &k25519Precomp[pos][3], equal(babs, 4));
 4209|  1.85M|    cmov(t, &k25519Precomp[pos][4], equal(babs, 5));
 4210|  1.85M|    cmov(t, &k25519Precomp[pos][5], equal(babs, 6));
 4211|  1.85M|    cmov(t, &k25519Precomp[pos][6], equal(babs, 7));
 4212|  1.85M|    cmov(t, &k25519Precomp[pos][7], equal(babs, 8));
 4213|  1.85M|    fe_copy(minust.yplusx, t->yminusx);
 4214|  1.85M|    fe_copy(minust.yminusx, t->yplusx);
 4215|  1.85M|    fe_neg(minust.xy2d, t->xy2d);
 4216|  1.85M|    cmov(t, &minust, bnegative);
 4217|  1.85M|}
curve25519.c:negative:
 4191|  1.85M|{
 4192|  1.85M|    uint32_t x = b;
 4193|       |
 4194|  1.85M|    x >>= 31; /* 1: yes; 0: no */
 4195|  1.85M|    return x;
 4196|  1.85M|}
curve25519.c:ge_precomp_0:
 1917|  1.85M|{
 1918|  1.85M|    fe_1(h->yplusx);
 1919|  1.85M|    fe_1(h->yminusx);
 1920|  1.85M|    fe_0(h->xy2d);
 1921|  1.85M|}
curve25519.c:cmov:
 2068|  16.6M|{
 2069|  16.6M|    fe_cmov(t->yplusx, u->yplusx, b);
 2070|  16.6M|    fe_cmov(t->yminusx, u->yminusx, b);
 2071|  16.6M|    fe_cmov(t->xy2d, u->xy2d, b);
 2072|  16.6M|}
curve25519.c:fe_cmov:
 1518|  50.0M|{
 1519|  50.0M|    size_t i;
 1520|       |
 1521|  50.0M|    b = 0-b;
 1522|   551M|    for (i = 0; i < 10; i++) {
  ------------------
  |  Branch (1522:17): [True: 500M, False: 50.0M]
  ------------------
 1523|   500M|        int32_t x = f[i] ^ g[i];
 1524|   500M|        x &= b;
 1525|   500M|        f[i] ^= x;
 1526|   500M|    }
 1527|  50.0M|}
curve25519.c:equal:
 2057|  14.8M|{
 2058|  14.8M|    uint8_t ub = b;
 2059|  14.8M|    uint8_t uc = c;
 2060|  14.8M|    uint8_t x = ub ^ uc; /* 0: yes; 1..255: no */
 2061|  14.8M|    uint32_t y = x;      /* 0: yes; 1..255: no */
 2062|  14.8M|    y -= 1;              /* 4294967295: yes; 0..254: no */
 2063|  14.8M|    y >>= 31;            /* 1: yes; 0: no */
 2064|  14.8M|    return y;
 2065|  14.8M|}
curve25519.c:fe_copy:
  946|  3.79M|{
  947|  3.79M|    memmove(h, f, sizeof(int32_t) * 10);
  948|  3.79M|}
curve25519.c:ge_madd:
 1988|  1.85M|{
 1989|  1.85M|    fe t0;
 1990|       |
 1991|  1.85M|    fe_add(r->X, p->Y, p->X);
 1992|  1.85M|    fe_sub(r->Y, p->Y, p->X);
 1993|  1.85M|    fe_mul(r->Z, r->X, q->yplusx);
 1994|  1.85M|    fe_mul(r->Y, r->Y, q->yminusx);
 1995|  1.85M|    fe_mul(r->T, q->xy2d, p->T);
 1996|  1.85M|    fe_add(t0, p->Z, p->Z);
 1997|  1.85M|    fe_sub(r->X, r->Z, r->Y);
 1998|  1.85M|    fe_add(r->Y, r->Z, r->Y);
 1999|  1.85M|    fe_add(r->Z, t0, r->T);
 2000|  1.85M|    fe_sub(r->T, t0, r->T);
 2001|  1.85M|}
curve25519.c:ge_p1p1_to_p3:
 1955|  1.88M|{
 1956|  1.88M|    fe_mul(r->X, p->X, p->T);
 1957|  1.88M|    fe_mul(r->Y, p->Y, p->Z);
 1958|  1.88M|    fe_mul(r->Z, p->Z, p->T);
 1959|  1.88M|    fe_mul(r->T, p->X, p->Y);
 1960|  1.88M|}
curve25519.c:ge_p3_dbl:
 1980|  28.9k|{
 1981|  28.9k|    ge_p2 q;
 1982|  28.9k|    ge_p3_to_p2(&q, p);
 1983|  28.9k|    ge_p2_dbl(r, &q);
 1984|  28.9k|}
curve25519.c:ge_p3_to_p2:
 1925|  28.9k|{
 1926|  28.9k|    fe_copy(r->X, p->X);
 1927|  28.9k|    fe_copy(r->Y, p->Y);
 1928|  28.9k|    fe_copy(r->Z, p->Z);
 1929|  28.9k|}
curve25519.c:ge_p1p1_to_p2:
 1947|  86.9k|{
 1948|  86.9k|    fe_mul(r->X, p->X, p->T);
 1949|  86.9k|    fe_mul(r->Y, p->Y, p->Z);
 1950|  86.9k|    fe_mul(r->Z, p->Z, p->T);
 1951|  86.9k|}
curve25519.c:ge_p2_dbl:
 1964|   115k|{
 1965|   115k|    fe t0;
 1966|       |
 1967|   115k|    fe_sq(r->X, p->X);
 1968|   115k|    fe_sq(r->Z, p->Y);
 1969|   115k|    fe_sq2(r->T, p->Z);
 1970|   115k|    fe_add(r->Y, p->X, p->Y);
 1971|   115k|    fe_sq(t0, r->Y);
 1972|   115k|    fe_add(r->Y, r->Z, r->X);
 1973|   115k|    fe_sub(r->Z, r->Z, r->X);
 1974|   115k|    fe_sub(r->X, t0, r->Y);
 1975|   115k|    fe_sub(r->T, r->T, r->Z);
 1976|   115k|}
curve25519.c:fe_sq:
 1266|  7.71M|{
 1267|  7.71M|    int32_t f0 = f[0];
 1268|  7.71M|    int32_t f1 = f[1];
 1269|  7.71M|    int32_t f2 = f[2];
 1270|  7.71M|    int32_t f3 = f[3];
 1271|  7.71M|    int32_t f4 = f[4];
 1272|  7.71M|    int32_t f5 = f[5];
 1273|  7.71M|    int32_t f6 = f[6];
 1274|  7.71M|    int32_t f7 = f[7];
 1275|  7.71M|    int32_t f8 = f[8];
 1276|  7.71M|    int32_t f9 = f[9];
 1277|  7.71M|    int32_t f0_2 = 2 * f0;
 1278|  7.71M|    int32_t f1_2 = 2 * f1;
 1279|  7.71M|    int32_t f2_2 = 2 * f2;
 1280|  7.71M|    int32_t f3_2 = 2 * f3;
 1281|  7.71M|    int32_t f4_2 = 2 * f4;
 1282|  7.71M|    int32_t f5_2 = 2 * f5;
 1283|  7.71M|    int32_t f6_2 = 2 * f6;
 1284|  7.71M|    int32_t f7_2 = 2 * f7;
 1285|  7.71M|    int32_t f5_38 = 38 * f5; /* 1.959375*2^30 */
 1286|  7.71M|    int32_t f6_19 = 19 * f6; /* 1.959375*2^30 */
 1287|  7.71M|    int32_t f7_38 = 38 * f7; /* 1.959375*2^30 */
 1288|  7.71M|    int32_t f8_19 = 19 * f8; /* 1.959375*2^30 */
 1289|  7.71M|    int32_t f9_38 = 38 * f9; /* 1.959375*2^30 */
 1290|  7.71M|    int64_t f0f0    = f0   * (int64_t) f0;
 1291|  7.71M|    int64_t f0f1_2  = f0_2 * (int64_t) f1;
 1292|  7.71M|    int64_t f0f2_2  = f0_2 * (int64_t) f2;
 1293|  7.71M|    int64_t f0f3_2  = f0_2 * (int64_t) f3;
 1294|  7.71M|    int64_t f0f4_2  = f0_2 * (int64_t) f4;
 1295|  7.71M|    int64_t f0f5_2  = f0_2 * (int64_t) f5;
 1296|  7.71M|    int64_t f0f6_2  = f0_2 * (int64_t) f6;
 1297|  7.71M|    int64_t f0f7_2  = f0_2 * (int64_t) f7;
 1298|  7.71M|    int64_t f0f8_2  = f0_2 * (int64_t) f8;
 1299|  7.71M|    int64_t f0f9_2  = f0_2 * (int64_t) f9;
 1300|  7.71M|    int64_t f1f1_2  = f1_2 * (int64_t) f1;
 1301|  7.71M|    int64_t f1f2_2  = f1_2 * (int64_t) f2;
 1302|  7.71M|    int64_t f1f3_4  = f1_2 * (int64_t) f3_2;
 1303|  7.71M|    int64_t f1f4_2  = f1_2 * (int64_t) f4;
 1304|  7.71M|    int64_t f1f5_4  = f1_2 * (int64_t) f5_2;
 1305|  7.71M|    int64_t f1f6_2  = f1_2 * (int64_t) f6;
 1306|  7.71M|    int64_t f1f7_4  = f1_2 * (int64_t) f7_2;
 1307|  7.71M|    int64_t f1f8_2  = f1_2 * (int64_t) f8;
 1308|  7.71M|    int64_t f1f9_76 = f1_2 * (int64_t) f9_38;
 1309|  7.71M|    int64_t f2f2    = f2   * (int64_t) f2;
 1310|  7.71M|    int64_t f2f3_2  = f2_2 * (int64_t) f3;
 1311|  7.71M|    int64_t f2f4_2  = f2_2 * (int64_t) f4;
 1312|  7.71M|    int64_t f2f5_2  = f2_2 * (int64_t) f5;
 1313|  7.71M|    int64_t f2f6_2  = f2_2 * (int64_t) f6;
 1314|  7.71M|    int64_t f2f7_2  = f2_2 * (int64_t) f7;
 1315|  7.71M|    int64_t f2f8_38 = f2_2 * (int64_t) f8_19;
 1316|  7.71M|    int64_t f2f9_38 = f2   * (int64_t) f9_38;
 1317|  7.71M|    int64_t f3f3_2  = f3_2 * (int64_t) f3;
 1318|  7.71M|    int64_t f3f4_2  = f3_2 * (int64_t) f4;
 1319|  7.71M|    int64_t f3f5_4  = f3_2 * (int64_t) f5_2;
 1320|  7.71M|    int64_t f3f6_2  = f3_2 * (int64_t) f6;
 1321|  7.71M|    int64_t f3f7_76 = f3_2 * (int64_t) f7_38;
 1322|  7.71M|    int64_t f3f8_38 = f3_2 * (int64_t) f8_19;
 1323|  7.71M|    int64_t f3f9_76 = f3_2 * (int64_t) f9_38;
 1324|  7.71M|    int64_t f4f4    = f4   * (int64_t) f4;
 1325|  7.71M|    int64_t f4f5_2  = f4_2 * (int64_t) f5;
 1326|  7.71M|    int64_t f4f6_38 = f4_2 * (int64_t) f6_19;
 1327|  7.71M|    int64_t f4f7_38 = f4   * (int64_t) f7_38;
 1328|  7.71M|    int64_t f4f8_38 = f4_2 * (int64_t) f8_19;
 1329|  7.71M|    int64_t f4f9_38 = f4   * (int64_t) f9_38;
 1330|  7.71M|    int64_t f5f5_38 = f5   * (int64_t) f5_38;
 1331|  7.71M|    int64_t f5f6_38 = f5_2 * (int64_t) f6_19;
 1332|  7.71M|    int64_t f5f7_76 = f5_2 * (int64_t) f7_38;
 1333|  7.71M|    int64_t f5f8_38 = f5_2 * (int64_t) f8_19;
 1334|  7.71M|    int64_t f5f9_76 = f5_2 * (int64_t) f9_38;
 1335|  7.71M|    int64_t f6f6_19 = f6   * (int64_t) f6_19;
 1336|  7.71M|    int64_t f6f7_38 = f6   * (int64_t) f7_38;
 1337|  7.71M|    int64_t f6f8_38 = f6_2 * (int64_t) f8_19;
 1338|  7.71M|    int64_t f6f9_38 = f6   * (int64_t) f9_38;
 1339|  7.71M|    int64_t f7f7_38 = f7   * (int64_t) f7_38;
 1340|  7.71M|    int64_t f7f8_38 = f7_2 * (int64_t) f8_19;
 1341|  7.71M|    int64_t f7f9_76 = f7_2 * (int64_t) f9_38;
 1342|  7.71M|    int64_t f8f8_19 = f8   * (int64_t) f8_19;
 1343|  7.71M|    int64_t f8f9_38 = f8   * (int64_t) f9_38;
 1344|  7.71M|    int64_t f9f9_38 = f9   * (int64_t) f9_38;
 1345|  7.71M|    int64_t h0 = f0f0   + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38;
 1346|  7.71M|    int64_t h1 = f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38;
 1347|  7.71M|    int64_t h2 = f0f2_2 + f1f1_2  + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19;
 1348|  7.71M|    int64_t h3 = f0f3_2 + f1f2_2  + f4f9_38 + f5f8_38 + f6f7_38;
 1349|  7.71M|    int64_t h4 = f0f4_2 + f1f3_4  + f2f2    + f5f9_76 + f6f8_38 + f7f7_38;
 1350|  7.71M|    int64_t h5 = f0f5_2 + f1f4_2  + f2f3_2  + f6f9_38 + f7f8_38;
 1351|  7.71M|    int64_t h6 = f0f6_2 + f1f5_4  + f2f4_2  + f3f3_2  + f7f9_76 + f8f8_19;
 1352|  7.71M|    int64_t h7 = f0f7_2 + f1f6_2  + f2f5_2  + f3f4_2  + f8f9_38;
 1353|  7.71M|    int64_t h8 = f0f8_2 + f1f7_4  + f2f6_2  + f3f5_4  + f4f4    + f9f9_38;
 1354|  7.71M|    int64_t h9 = f0f9_2 + f1f8_2  + f2f7_2  + f3f6_2  + f4f5_2;
 1355|  7.71M|    int64_t carry0;
 1356|  7.71M|    int64_t carry1;
 1357|  7.71M|    int64_t carry2;
 1358|  7.71M|    int64_t carry3;
 1359|  7.71M|    int64_t carry4;
 1360|  7.71M|    int64_t carry5;
 1361|  7.71M|    int64_t carry6;
 1362|  7.71M|    int64_t carry7;
 1363|  7.71M|    int64_t carry8;
 1364|  7.71M|    int64_t carry9;
 1365|       |
 1366|  7.71M|    carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
 1367|  7.71M|    carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
 1368|       |
 1369|  7.71M|    carry1 = h1 + (1 << 24); h2 += carry1 >> 25; h1 -= carry1 & kTop39Bits;
 1370|  7.71M|    carry5 = h5 + (1 << 24); h6 += carry5 >> 25; h5 -= carry5 & kTop39Bits;
 1371|       |
 1372|  7.71M|    carry2 = h2 + (1 << 25); h3 += carry2 >> 26; h2 -= carry2 & kTop38Bits;
 1373|  7.71M|    carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & kTop38Bits;
 1374|       |
 1375|  7.71M|    carry3 = h3 + (1 << 24); h4 += carry3 >> 25; h3 -= carry3 & kTop39Bits;
 1376|  7.71M|    carry7 = h7 + (1 << 24); h8 += carry7 >> 25; h7 -= carry7 & kTop39Bits;
 1377|       |
 1378|  7.71M|    carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
 1379|  7.71M|    carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & kTop38Bits;
 1380|       |
 1381|  7.71M|    carry9 = h9 + (1 << 24); h0 += (carry9 >> 25) * 19; h9 -= carry9 & kTop39Bits;
 1382|       |
 1383|  7.71M|    carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
 1384|       |
 1385|  7.71M|    h[0] = (int32_t)h0;
 1386|  7.71M|    h[1] = (int32_t)h1;
 1387|  7.71M|    h[2] = (int32_t)h2;
 1388|  7.71M|    h[3] = (int32_t)h3;
 1389|  7.71M|    h[4] = (int32_t)h4;
 1390|  7.71M|    h[5] = (int32_t)h5;
 1391|  7.71M|    h[6] = (int32_t)h6;
 1392|  7.71M|    h[7] = (int32_t)h7;
 1393|  7.71M|    h[8] = (int32_t)h8;
 1394|  7.71M|    h[9] = (int32_t)h9;
 1395|  7.71M|}
curve25519.c:fe_sq2:
 1575|   115k|{
 1576|   115k|    int32_t f0 = f[0];
 1577|   115k|    int32_t f1 = f[1];
 1578|   115k|    int32_t f2 = f[2];
 1579|   115k|    int32_t f3 = f[3];
 1580|   115k|    int32_t f4 = f[4];
 1581|   115k|    int32_t f5 = f[5];
 1582|   115k|    int32_t f6 = f[6];
 1583|   115k|    int32_t f7 = f[7];
 1584|   115k|    int32_t f8 = f[8];
 1585|   115k|    int32_t f9 = f[9];
 1586|   115k|    int32_t f0_2 = 2 * f0;
 1587|   115k|    int32_t f1_2 = 2 * f1;
 1588|   115k|    int32_t f2_2 = 2 * f2;
 1589|   115k|    int32_t f3_2 = 2 * f3;
 1590|   115k|    int32_t f4_2 = 2 * f4;
 1591|   115k|    int32_t f5_2 = 2 * f5;
 1592|   115k|    int32_t f6_2 = 2 * f6;
 1593|   115k|    int32_t f7_2 = 2 * f7;
 1594|   115k|    int32_t f5_38 = 38 * f5; /* 1.959375*2^30 */
 1595|   115k|    int32_t f6_19 = 19 * f6; /* 1.959375*2^30 */
 1596|   115k|    int32_t f7_38 = 38 * f7; /* 1.959375*2^30 */
 1597|   115k|    int32_t f8_19 = 19 * f8; /* 1.959375*2^30 */
 1598|   115k|    int32_t f9_38 = 38 * f9; /* 1.959375*2^30 */
 1599|   115k|    int64_t f0f0    = f0   * (int64_t) f0;
 1600|   115k|    int64_t f0f1_2  = f0_2 * (int64_t) f1;
 1601|   115k|    int64_t f0f2_2  = f0_2 * (int64_t) f2;
 1602|   115k|    int64_t f0f3_2  = f0_2 * (int64_t) f3;
 1603|   115k|    int64_t f0f4_2  = f0_2 * (int64_t) f4;
 1604|   115k|    int64_t f0f5_2  = f0_2 * (int64_t) f5;
 1605|   115k|    int64_t f0f6_2  = f0_2 * (int64_t) f6;
 1606|   115k|    int64_t f0f7_2  = f0_2 * (int64_t) f7;
 1607|   115k|    int64_t f0f8_2  = f0_2 * (int64_t) f8;
 1608|   115k|    int64_t f0f9_2  = f0_2 * (int64_t) f9;
 1609|   115k|    int64_t f1f1_2  = f1_2 * (int64_t) f1;
 1610|   115k|    int64_t f1f2_2  = f1_2 * (int64_t) f2;
 1611|   115k|    int64_t f1f3_4  = f1_2 * (int64_t) f3_2;
 1612|   115k|    int64_t f1f4_2  = f1_2 * (int64_t) f4;
 1613|   115k|    int64_t f1f5_4  = f1_2 * (int64_t) f5_2;
 1614|   115k|    int64_t f1f6_2  = f1_2 * (int64_t) f6;
 1615|   115k|    int64_t f1f7_4  = f1_2 * (int64_t) f7_2;
 1616|   115k|    int64_t f1f8_2  = f1_2 * (int64_t) f8;
 1617|   115k|    int64_t f1f9_76 = f1_2 * (int64_t) f9_38;
 1618|   115k|    int64_t f2f2    = f2   * (int64_t) f2;
 1619|   115k|    int64_t f2f3_2  = f2_2 * (int64_t) f3;
 1620|   115k|    int64_t f2f4_2  = f2_2 * (int64_t) f4;
 1621|   115k|    int64_t f2f5_2  = f2_2 * (int64_t) f5;
 1622|   115k|    int64_t f2f6_2  = f2_2 * (int64_t) f6;
 1623|   115k|    int64_t f2f7_2  = f2_2 * (int64_t) f7;
 1624|   115k|    int64_t f2f8_38 = f2_2 * (int64_t) f8_19;
 1625|   115k|    int64_t f2f9_38 = f2   * (int64_t) f9_38;
 1626|   115k|    int64_t f3f3_2  = f3_2 * (int64_t) f3;
 1627|   115k|    int64_t f3f4_2  = f3_2 * (int64_t) f4;
 1628|   115k|    int64_t f3f5_4  = f3_2 * (int64_t) f5_2;
 1629|   115k|    int64_t f3f6_2  = f3_2 * (int64_t) f6;
 1630|   115k|    int64_t f3f7_76 = f3_2 * (int64_t) f7_38;
 1631|   115k|    int64_t f3f8_38 = f3_2 * (int64_t) f8_19;
 1632|   115k|    int64_t f3f9_76 = f3_2 * (int64_t) f9_38;
 1633|   115k|    int64_t f4f4    = f4   * (int64_t) f4;
 1634|   115k|    int64_t f4f5_2  = f4_2 * (int64_t) f5;
 1635|   115k|    int64_t f4f6_38 = f4_2 * (int64_t) f6_19;
 1636|   115k|    int64_t f4f7_38 = f4   * (int64_t) f7_38;
 1637|   115k|    int64_t f4f8_38 = f4_2 * (int64_t) f8_19;
 1638|   115k|    int64_t f4f9_38 = f4   * (int64_t) f9_38;
 1639|   115k|    int64_t f5f5_38 = f5   * (int64_t) f5_38;
 1640|   115k|    int64_t f5f6_38 = f5_2 * (int64_t) f6_19;
 1641|   115k|    int64_t f5f7_76 = f5_2 * (int64_t) f7_38;
 1642|   115k|    int64_t f5f8_38 = f5_2 * (int64_t) f8_19;
 1643|   115k|    int64_t f5f9_76 = f5_2 * (int64_t) f9_38;
 1644|   115k|    int64_t f6f6_19 = f6   * (int64_t) f6_19;
 1645|   115k|    int64_t f6f7_38 = f6   * (int64_t) f7_38;
 1646|   115k|    int64_t f6f8_38 = f6_2 * (int64_t) f8_19;
 1647|   115k|    int64_t f6f9_38 = f6   * (int64_t) f9_38;
 1648|   115k|    int64_t f7f7_38 = f7   * (int64_t) f7_38;
 1649|   115k|    int64_t f7f8_38 = f7_2 * (int64_t) f8_19;
 1650|   115k|    int64_t f7f9_76 = f7_2 * (int64_t) f9_38;
 1651|   115k|    int64_t f8f8_19 = f8   * (int64_t) f8_19;
 1652|   115k|    int64_t f8f9_38 = f8   * (int64_t) f9_38;
 1653|   115k|    int64_t f9f9_38 = f9   * (int64_t) f9_38;
 1654|   115k|    int64_t h0 = f0f0   + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38;
 1655|   115k|    int64_t h1 = f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38;
 1656|   115k|    int64_t h2 = f0f2_2 + f1f1_2  + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19;
 1657|   115k|    int64_t h3 = f0f3_2 + f1f2_2  + f4f9_38 + f5f8_38 + f6f7_38;
 1658|   115k|    int64_t h4 = f0f4_2 + f1f3_4  + f2f2    + f5f9_76 + f6f8_38 + f7f7_38;
 1659|   115k|    int64_t h5 = f0f5_2 + f1f4_2  + f2f3_2  + f6f9_38 + f7f8_38;
 1660|   115k|    int64_t h6 = f0f6_2 + f1f5_4  + f2f4_2  + f3f3_2  + f7f9_76 + f8f8_19;
 1661|   115k|    int64_t h7 = f0f7_2 + f1f6_2  + f2f5_2  + f3f4_2  + f8f9_38;
 1662|   115k|    int64_t h8 = f0f8_2 + f1f7_4  + f2f6_2  + f3f5_4  + f4f4    + f9f9_38;
 1663|   115k|    int64_t h9 = f0f9_2 + f1f8_2  + f2f7_2  + f3f6_2  + f4f5_2;
 1664|   115k|    int64_t carry0;
 1665|   115k|    int64_t carry1;
 1666|   115k|    int64_t carry2;
 1667|   115k|    int64_t carry3;
 1668|   115k|    int64_t carry4;
 1669|   115k|    int64_t carry5;
 1670|   115k|    int64_t carry6;
 1671|   115k|    int64_t carry7;
 1672|   115k|    int64_t carry8;
 1673|   115k|    int64_t carry9;
 1674|       |
 1675|   115k|    h0 += h0;
 1676|   115k|    h1 += h1;
 1677|   115k|    h2 += h2;
 1678|   115k|    h3 += h3;
 1679|   115k|    h4 += h4;
 1680|   115k|    h5 += h5;
 1681|   115k|    h6 += h6;
 1682|   115k|    h7 += h7;
 1683|   115k|    h8 += h8;
 1684|   115k|    h9 += h9;
 1685|       |
 1686|   115k|    carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
 1687|   115k|    carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
 1688|       |
 1689|   115k|    carry1 = h1 + (1 << 24); h2 += carry1 >> 25; h1 -= carry1 & kTop39Bits;
 1690|   115k|    carry5 = h5 + (1 << 24); h6 += carry5 >> 25; h5 -= carry5 & kTop39Bits;
 1691|       |
 1692|   115k|    carry2 = h2 + (1 << 25); h3 += carry2 >> 26; h2 -= carry2 & kTop38Bits;
 1693|   115k|    carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & kTop38Bits;
 1694|       |
 1695|   115k|    carry3 = h3 + (1 << 24); h4 += carry3 >> 25; h3 -= carry3 & kTop39Bits;
 1696|   115k|    carry7 = h7 + (1 << 24); h8 += carry7 >> 25; h7 -= carry7 & kTop39Bits;
 1697|       |
 1698|   115k|    carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
 1699|   115k|    carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & kTop38Bits;
 1700|       |
 1701|   115k|    carry9 = h9 + (1 << 24); h0 += (carry9 >> 25) * 19; h9 -= carry9 & kTop39Bits;
 1702|       |
 1703|   115k|    carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
 1704|       |
 1705|   115k|    h[0] = (int32_t)h0;
 1706|   115k|    h[1] = (int32_t)h1;
 1707|   115k|    h[2] = (int32_t)h2;
 1708|   115k|    h[3] = (int32_t)h3;
 1709|   115k|    h[4] = (int32_t)h4;
 1710|   115k|    h[5] = (int32_t)h5;
 1711|   115k|    h[6] = (int32_t)h6;
 1712|   115k|    h[7] = (int32_t)h7;
 1713|   115k|    h[8] = (int32_t)h8;
 1714|   115k|    h[9] = (int32_t)h9;
 1715|   115k|}
curve25519.c:fe_neg:
 1503|  1.85M|{
 1504|  1.85M|    unsigned i;
 1505|       |
 1506|  20.4M|    for (i = 0; i < 10; i++) {
  ------------------
  |  Branch (1506:17): [True: 18.5M, False: 1.85M]
  ------------------
 1507|  18.5M|        h[i] = -f[i];
 1508|  18.5M|    }
 1509|  1.85M|}
curve25519.c:fe_add:
  976|  7.68M|{
  977|  7.68M|    unsigned i;
  978|       |
  979|  84.5M|    for (i = 0; i < 10; i++) {
  ------------------
  |  Branch (979:17): [True: 76.8M, False: 7.68M]
  ------------------
  980|  76.8M|        h[i] = f[i] + g[i];
  981|  76.8M|    }
  982|  7.68M|}
curve25519.c:fe_sub:
  997|  5.94M|{
  998|  5.94M|    unsigned i;
  999|       |
 1000|  65.3M|    for (i = 0; i < 10; i++) {
  ------------------
  |  Branch (1000:17): [True: 59.4M, False: 5.94M]
  ------------------
 1001|  59.4M|        h[i] = f[i] - g[i];
 1002|  59.4M|    }
 1003|  5.94M|}
curve25519.c:fe_invert:
 1398|  28.9k|{
 1399|  28.9k|    fe t0;
 1400|  28.9k|    fe t1;
 1401|  28.9k|    fe t2;
 1402|  28.9k|    fe t3;
 1403|  28.9k|    int i;
 1404|       |
 1405|       |    /*
 1406|       |     * Compute z ** -1 = z ** (2 ** 255 - 19 - 2) with the exponent as
 1407|       |     * 2 ** 255 - 21 = (2 ** 5) * (2 ** 250 - 1) + 11.
 1408|       |     */
 1409|       |
 1410|       |    /* t0 = z ** 2 */
 1411|  28.9k|    fe_sq(t0, z);
 1412|       |
 1413|       |    /* t1 = t0 ** (2 ** 2) = z ** 8 */
 1414|  28.9k|    fe_sq(t1, t0);
 1415|  28.9k|    fe_sq(t1, t1);
 1416|       |
 1417|       |    /* t1 = z * t1 = z ** 9 */
 1418|  28.9k|    fe_mul(t1, z, t1);
 1419|       |    /* t0 = t0 * t1 = z ** 11 -- stash t0 away for the end. */
 1420|  28.9k|    fe_mul(t0, t0, t1);
 1421|       |
 1422|       |    /* t2 = t0 ** 2 = z ** 22 */
 1423|  28.9k|    fe_sq(t2, t0);
 1424|       |
 1425|       |    /* t1 = t1 * t2 = z ** (2 ** 5 - 1) */
 1426|  28.9k|    fe_mul(t1, t1, t2);
 1427|       |
 1428|       |    /* t2 = t1 ** (2 ** 5) = z ** ((2 ** 5) * (2 ** 5 - 1)) */
 1429|  28.9k|    fe_sq(t2, t1);
 1430|   144k|    for (i = 1; i < 5; ++i) {
  ------------------
  |  Branch (1430:17): [True: 115k, False: 28.9k]
  ------------------
 1431|   115k|        fe_sq(t2, t2);
 1432|   115k|    }
 1433|       |
 1434|       |    /* t1 = t1 * t2 = z ** ((2 ** 5 + 1) * (2 ** 5 - 1)) = z ** (2 ** 10 - 1) */
 1435|  28.9k|    fe_mul(t1, t2, t1);
 1436|       |
 1437|       |    /* Continuing similarly... */
 1438|       |
 1439|       |    /* t2 = z ** (2 ** 20 - 1) */
 1440|  28.9k|    fe_sq(t2, t1);
 1441|   289k|    for (i = 1; i < 10; ++i) {
  ------------------
  |  Branch (1441:17): [True: 260k, False: 28.9k]
  ------------------
 1442|   260k|        fe_sq(t2, t2);
 1443|   260k|    }
 1444|  28.9k|    fe_mul(t2, t2, t1);
 1445|       |
 1446|       |    /* t2 = z ** (2 ** 40 - 1) */
 1447|  28.9k|    fe_sq(t3, t2);
 1448|   579k|    for (i = 1; i < 20; ++i) {
  ------------------
  |  Branch (1448:17): [True: 550k, False: 28.9k]
  ------------------
 1449|   550k|        fe_sq(t3, t3);
 1450|   550k|    }
 1451|  28.9k|    fe_mul(t2, t3, t2);
 1452|       |
 1453|       |    /* t2 = z ** (2 ** 10) * (2 ** 40 - 1) */
 1454|   318k|    for (i = 0; i < 10; ++i) {
  ------------------
  |  Branch (1454:17): [True: 289k, False: 28.9k]
  ------------------
 1455|   289k|        fe_sq(t2, t2);
 1456|   289k|    }
 1457|       |    /* t1 = z ** (2 ** 50 - 1) */
 1458|  28.9k|    fe_mul(t1, t2, t1);
 1459|       |
 1460|       |    /* t2 = z ** (2 ** 100 - 1) */
 1461|  28.9k|    fe_sq(t2, t1);
 1462|  1.44M|    for (i = 1; i < 50; ++i) {
  ------------------
  |  Branch (1462:17): [True: 1.42M, False: 28.9k]
  ------------------
 1463|  1.42M|        fe_sq(t2, t2);
 1464|  1.42M|    }
 1465|  28.9k|    fe_mul(t2, t2, t1);
 1466|       |
 1467|       |    /* t2 = z ** (2 ** 200 - 1) */
 1468|  28.9k|    fe_sq(t3, t2);
 1469|  2.89M|    for (i = 1; i < 100; ++i) {
  ------------------
  |  Branch (1469:17): [True: 2.86M, False: 28.9k]
  ------------------
 1470|  2.86M|        fe_sq(t3, t3);
 1471|  2.86M|    }
 1472|  28.9k|    fe_mul(t2, t3, t2);
 1473|       |
 1474|       |    /* t2 = z ** ((2 ** 50) * (2 ** 200 - 1) */
 1475|  28.9k|    fe_sq(t2, t2);
 1476|  1.44M|    for (i = 1; i < 50; ++i) {
  ------------------
  |  Branch (1476:17): [True: 1.42M, False: 28.9k]
  ------------------
 1477|  1.42M|        fe_sq(t2, t2);
 1478|  1.42M|    }
 1479|       |
 1480|       |    /* t1 = z ** (2 ** 250 - 1) */
 1481|  28.9k|    fe_mul(t1, t2, t1);
 1482|       |
 1483|       |    /* t1 = z ** ((2 ** 5) * (2 ** 250 - 1)) */
 1484|  28.9k|    fe_sq(t1, t1);
 1485|   144k|    for (i = 1; i < 5; ++i) {
  ------------------
  |  Branch (1485:17): [True: 115k, False: 28.9k]
  ------------------
 1486|   115k|        fe_sq(t1, t1);
 1487|   115k|    }
 1488|       |
 1489|       |    /* Recall t0 = z ** 11; out = z ** (2 ** 255 - 21) */
 1490|  28.9k|    fe_mul(out, t1, t0);
 1491|  28.9k|}
curve25519.c:fe_mul:
 1036|  13.7M|{
 1037|  13.7M|    int32_t f0 = f[0];
 1038|  13.7M|    int32_t f1 = f[1];
 1039|  13.7M|    int32_t f2 = f[2];
 1040|  13.7M|    int32_t f3 = f[3];
 1041|  13.7M|    int32_t f4 = f[4];
 1042|  13.7M|    int32_t f5 = f[5];
 1043|  13.7M|    int32_t f6 = f[6];
 1044|  13.7M|    int32_t f7 = f[7];
 1045|  13.7M|    int32_t f8 = f[8];
 1046|  13.7M|    int32_t f9 = f[9];
 1047|  13.7M|    int32_t g0 = g[0];
 1048|  13.7M|    int32_t g1 = g[1];
 1049|  13.7M|    int32_t g2 = g[2];
 1050|  13.7M|    int32_t g3 = g[3];
 1051|  13.7M|    int32_t g4 = g[4];
 1052|  13.7M|    int32_t g5 = g[5];
 1053|  13.7M|    int32_t g6 = g[6];
 1054|  13.7M|    int32_t g7 = g[7];
 1055|  13.7M|    int32_t g8 = g[8];
 1056|  13.7M|    int32_t g9 = g[9];
 1057|  13.7M|    int32_t g1_19 = 19 * g1; /* 1.959375*2^29 */
 1058|  13.7M|    int32_t g2_19 = 19 * g2; /* 1.959375*2^30; still ok */
 1059|  13.7M|    int32_t g3_19 = 19 * g3;
 1060|  13.7M|    int32_t g4_19 = 19 * g4;
 1061|  13.7M|    int32_t g5_19 = 19 * g5;
 1062|  13.7M|    int32_t g6_19 = 19 * g6;
 1063|  13.7M|    int32_t g7_19 = 19 * g7;
 1064|  13.7M|    int32_t g8_19 = 19 * g8;
 1065|  13.7M|    int32_t g9_19 = 19 * g9;
 1066|  13.7M|    int32_t f1_2 = 2 * f1;
 1067|  13.7M|    int32_t f3_2 = 2 * f3;
 1068|  13.7M|    int32_t f5_2 = 2 * f5;
 1069|  13.7M|    int32_t f7_2 = 2 * f7;
 1070|  13.7M|    int32_t f9_2 = 2 * f9;
 1071|  13.7M|    int64_t f0g0    = f0   * (int64_t) g0;
 1072|  13.7M|    int64_t f0g1    = f0   * (int64_t) g1;
 1073|  13.7M|    int64_t f0g2    = f0   * (int64_t) g2;
 1074|  13.7M|    int64_t f0g3    = f0   * (int64_t) g3;
 1075|  13.7M|    int64_t f0g4    = f0   * (int64_t) g4;
 1076|  13.7M|    int64_t f0g5    = f0   * (int64_t) g5;
 1077|  13.7M|    int64_t f0g6    = f0   * (int64_t) g6;
 1078|  13.7M|    int64_t f0g7    = f0   * (int64_t) g7;
 1079|  13.7M|    int64_t f0g8    = f0   * (int64_t) g8;
 1080|  13.7M|    int64_t f0g9    = f0   * (int64_t) g9;
 1081|  13.7M|    int64_t f1g0    = f1   * (int64_t) g0;
 1082|  13.7M|    int64_t f1g1_2  = f1_2 * (int64_t) g1;
 1083|  13.7M|    int64_t f1g2    = f1   * (int64_t) g2;
 1084|  13.7M|    int64_t f1g3_2  = f1_2 * (int64_t) g3;
 1085|  13.7M|    int64_t f1g4    = f1   * (int64_t) g4;
 1086|  13.7M|    int64_t f1g5_2  = f1_2 * (int64_t) g5;
 1087|  13.7M|    int64_t f1g6    = f1   * (int64_t) g6;
 1088|  13.7M|    int64_t f1g7_2  = f1_2 * (int64_t) g7;
 1089|  13.7M|    int64_t f1g8    = f1   * (int64_t) g8;
 1090|  13.7M|    int64_t f1g9_38 = f1_2 * (int64_t) g9_19;
 1091|  13.7M|    int64_t f2g0    = f2   * (int64_t) g0;
 1092|  13.7M|    int64_t f2g1    = f2   * (int64_t) g1;
 1093|  13.7M|    int64_t f2g2    = f2   * (int64_t) g2;
 1094|  13.7M|    int64_t f2g3    = f2   * (int64_t) g3;
 1095|  13.7M|    int64_t f2g4    = f2   * (int64_t) g4;
 1096|  13.7M|    int64_t f2g5    = f2   * (int64_t) g5;
 1097|  13.7M|    int64_t f2g6    = f2   * (int64_t) g6;
 1098|  13.7M|    int64_t f2g7    = f2   * (int64_t) g7;
 1099|  13.7M|    int64_t f2g8_19 = f2   * (int64_t) g8_19;
 1100|  13.7M|    int64_t f2g9_19 = f2   * (int64_t) g9_19;
 1101|  13.7M|    int64_t f3g0    = f3   * (int64_t) g0;
 1102|  13.7M|    int64_t f3g1_2  = f3_2 * (int64_t) g1;
 1103|  13.7M|    int64_t f3g2    = f3   * (int64_t) g2;
 1104|  13.7M|    int64_t f3g3_2  = f3_2 * (int64_t) g3;
 1105|  13.7M|    int64_t f3g4    = f3   * (int64_t) g4;
 1106|  13.7M|    int64_t f3g5_2  = f3_2 * (int64_t) g5;
 1107|  13.7M|    int64_t f3g6    = f3   * (int64_t) g6;
 1108|  13.7M|    int64_t f3g7_38 = f3_2 * (int64_t) g7_19;
 1109|  13.7M|    int64_t f3g8_19 = f3   * (int64_t) g8_19;
 1110|  13.7M|    int64_t f3g9_38 = f3_2 * (int64_t) g9_19;
 1111|  13.7M|    int64_t f4g0    = f4   * (int64_t) g0;
 1112|  13.7M|    int64_t f4g1    = f4   * (int64_t) g1;
 1113|  13.7M|    int64_t f4g2    = f4   * (int64_t) g2;
 1114|  13.7M|    int64_t f4g3    = f4   * (int64_t) g3;
 1115|  13.7M|    int64_t f4g4    = f4   * (int64_t) g4;
 1116|  13.7M|    int64_t f4g5    = f4   * (int64_t) g5;
 1117|  13.7M|    int64_t f4g6_19 = f4   * (int64_t) g6_19;
 1118|  13.7M|    int64_t f4g7_19 = f4   * (int64_t) g7_19;
 1119|  13.7M|    int64_t f4g8_19 = f4   * (int64_t) g8_19;
 1120|  13.7M|    int64_t f4g9_19 = f4   * (int64_t) g9_19;
 1121|  13.7M|    int64_t f5g0    = f5   * (int64_t) g0;
 1122|  13.7M|    int64_t f5g1_2  = f5_2 * (int64_t) g1;
 1123|  13.7M|    int64_t f5g2    = f5   * (int64_t) g2;
 1124|  13.7M|    int64_t f5g3_2  = f5_2 * (int64_t) g3;
 1125|  13.7M|    int64_t f5g4    = f5   * (int64_t) g4;
 1126|  13.7M|    int64_t f5g5_38 = f5_2 * (int64_t) g5_19;
 1127|  13.7M|    int64_t f5g6_19 = f5   * (int64_t) g6_19;
 1128|  13.7M|    int64_t f5g7_38 = f5_2 * (int64_t) g7_19;
 1129|  13.7M|    int64_t f5g8_19 = f5   * (int64_t) g8_19;
 1130|  13.7M|    int64_t f5g9_38 = f5_2 * (int64_t) g9_19;
 1131|  13.7M|    int64_t f6g0    = f6   * (int64_t) g0;
 1132|  13.7M|    int64_t f6g1    = f6   * (int64_t) g1;
 1133|  13.7M|    int64_t f6g2    = f6   * (int64_t) g2;
 1134|  13.7M|    int64_t f6g3    = f6   * (int64_t) g3;
 1135|  13.7M|    int64_t f6g4_19 = f6   * (int64_t) g4_19;
 1136|  13.7M|    int64_t f6g5_19 = f6   * (int64_t) g5_19;
 1137|  13.7M|    int64_t f6g6_19 = f6   * (int64_t) g6_19;
 1138|  13.7M|    int64_t f6g7_19 = f6   * (int64_t) g7_19;
 1139|  13.7M|    int64_t f6g8_19 = f6   * (int64_t) g8_19;
 1140|  13.7M|    int64_t f6g9_19 = f6   * (int64_t) g9_19;
 1141|  13.7M|    int64_t f7g0    = f7   * (int64_t) g0;
 1142|  13.7M|    int64_t f7g1_2  = f7_2 * (int64_t) g1;
 1143|  13.7M|    int64_t f7g2    = f7   * (int64_t) g2;
 1144|  13.7M|    int64_t f7g3_38 = f7_2 * (int64_t) g3_19;
 1145|  13.7M|    int64_t f7g4_19 = f7   * (int64_t) g4_19;
 1146|  13.7M|    int64_t f7g5_38 = f7_2 * (int64_t) g5_19;
 1147|  13.7M|    int64_t f7g6_19 = f7   * (int64_t) g6_19;
 1148|  13.7M|    int64_t f7g7_38 = f7_2 * (int64_t) g7_19;
 1149|  13.7M|    int64_t f7g8_19 = f7   * (int64_t) g8_19;
 1150|  13.7M|    int64_t f7g9_38 = f7_2 * (int64_t) g9_19;
 1151|  13.7M|    int64_t f8g0    = f8   * (int64_t) g0;
 1152|  13.7M|    int64_t f8g1    = f8   * (int64_t) g1;
 1153|  13.7M|    int64_t f8g2_19 = f8   * (int64_t) g2_19;
 1154|  13.7M|    int64_t f8g3_19 = f8   * (int64_t) g3_19;
 1155|  13.7M|    int64_t f8g4_19 = f8   * (int64_t) g4_19;
 1156|  13.7M|    int64_t f8g5_19 = f8   * (int64_t) g5_19;
 1157|  13.7M|    int64_t f8g6_19 = f8   * (int64_t) g6_19;
 1158|  13.7M|    int64_t f8g7_19 = f8   * (int64_t) g7_19;
 1159|  13.7M|    int64_t f8g8_19 = f8   * (int64_t) g8_19;
 1160|  13.7M|    int64_t f8g9_19 = f8   * (int64_t) g9_19;
 1161|  13.7M|    int64_t f9g0    = f9   * (int64_t) g0;
 1162|  13.7M|    int64_t f9g1_38 = f9_2 * (int64_t) g1_19;
 1163|  13.7M|    int64_t f9g2_19 = f9   * (int64_t) g2_19;
 1164|  13.7M|    int64_t f9g3_38 = f9_2 * (int64_t) g3_19;
 1165|  13.7M|    int64_t f9g4_19 = f9   * (int64_t) g4_19;
 1166|  13.7M|    int64_t f9g5_38 = f9_2 * (int64_t) g5_19;
 1167|  13.7M|    int64_t f9g6_19 = f9   * (int64_t) g6_19;
 1168|  13.7M|    int64_t f9g7_38 = f9_2 * (int64_t) g7_19;
 1169|  13.7M|    int64_t f9g8_19 = f9   * (int64_t) g8_19;
 1170|  13.7M|    int64_t f9g9_38 = f9_2 * (int64_t) g9_19;
 1171|  13.7M|    int64_t h0 = f0g0 + f1g9_38 + f2g8_19 + f3g7_38 + f4g6_19 + f5g5_38 + f6g4_19 + f7g3_38 + f8g2_19 + f9g1_38;
 1172|  13.7M|    int64_t h1 = f0g1 + f1g0    + f2g9_19 + f3g8_19 + f4g7_19 + f5g6_19 + f6g5_19 + f7g4_19 + f8g3_19 + f9g2_19;
 1173|  13.7M|    int64_t h2 = f0g2 + f1g1_2  + f2g0    + f3g9_38 + f4g8_19 + f5g7_38 + f6g6_19 + f7g5_38 + f8g4_19 + f9g3_38;
 1174|  13.7M|    int64_t h3 = f0g3 + f1g2    + f2g1    + f3g0    + f4g9_19 + f5g8_19 + f6g7_19 + f7g6_19 + f8g5_19 + f9g4_19;
 1175|  13.7M|    int64_t h4 = f0g4 + f1g3_2  + f2g2    + f3g1_2  + f4g0    + f5g9_38 + f6g8_19 + f7g7_38 + f8g6_19 + f9g5_38;
 1176|  13.7M|    int64_t h5 = f0g5 + f1g4    + f2g3    + f3g2    + f4g1    + f5g0    + f6g9_19 + f7g8_19 + f8g7_19 + f9g6_19;
 1177|  13.7M|    int64_t h6 = f0g6 + f1g5_2  + f2g4    + f3g3_2  + f4g2    + f5g1_2  + f6g0    + f7g9_38 + f8g8_19 + f9g7_38;
 1178|  13.7M|    int64_t h7 = f0g7 + f1g6    + f2g5    + f3g4    + f4g3    + f5g2    + f6g1    + f7g0    + f8g9_19 + f9g8_19;
 1179|  13.7M|    int64_t h8 = f0g8 + f1g7_2  + f2g6    + f3g5_2  + f4g4    + f5g3_2  + f6g2    + f7g1_2  + f8g0    + f9g9_38;
 1180|  13.7M|    int64_t h9 = f0g9 + f1g8    + f2g7    + f3g6    + f4g5    + f5g4    + f6g3    + f7g2    + f8g1    + f9g0   ;
 1181|  13.7M|    int64_t carry0;
 1182|  13.7M|    int64_t carry1;
 1183|  13.7M|    int64_t carry2;
 1184|  13.7M|    int64_t carry3;
 1185|  13.7M|    int64_t carry4;
 1186|  13.7M|    int64_t carry5;
 1187|  13.7M|    int64_t carry6;
 1188|  13.7M|    int64_t carry7;
 1189|  13.7M|    int64_t carry8;
 1190|  13.7M|    int64_t carry9;
 1191|       |
 1192|       |    /* |h0| <= (1.65*1.65*2^52*(1+19+19+19+19)+1.65*1.65*2^50*(38+38+38+38+38))
 1193|       |     *   i.e. |h0| <= 1.4*2^60; narrower ranges for h2, h4, h6, h8
 1194|       |     * |h1| <= (1.65*1.65*2^51*(1+1+19+19+19+19+19+19+19+19))
 1195|       |     *   i.e. |h1| <= 1.7*2^59; narrower ranges for h3, h5, h7, h9 */
 1196|       |
 1197|  13.7M|    carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
 1198|  13.7M|    carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
 1199|       |    /* |h0| <= 2^25 */
 1200|       |    /* |h4| <= 2^25 */
 1201|       |    /* |h1| <= 1.71*2^59 */
 1202|       |    /* |h5| <= 1.71*2^59 */
 1203|       |
 1204|  13.7M|    carry1 = h1 + (1 << 24); h2 += carry1 >> 25; h1 -= carry1 & kTop39Bits;
 1205|  13.7M|    carry5 = h5 + (1 << 24); h6 += carry5 >> 25; h5 -= carry5 & kTop39Bits;
 1206|       |    /* |h1| <= 2^24; from now on fits into int32 */
 1207|       |    /* |h5| <= 2^24; from now on fits into int32 */
 1208|       |    /* |h2| <= 1.41*2^60 */
 1209|       |    /* |h6| <= 1.41*2^60 */
 1210|       |
 1211|  13.7M|    carry2 = h2 + (1 << 25); h3 += carry2 >> 26; h2 -= carry2 & kTop38Bits;
 1212|  13.7M|    carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & kTop38Bits;
 1213|       |    /* |h2| <= 2^25; from now on fits into int32 unchanged */
 1214|       |    /* |h6| <= 2^25; from now on fits into int32 unchanged */
 1215|       |    /* |h3| <= 1.71*2^59 */
 1216|       |    /* |h7| <= 1.71*2^59 */
 1217|       |
 1218|  13.7M|    carry3 = h3 + (1 << 24); h4 += carry3 >> 25; h3 -= carry3 & kTop39Bits;
 1219|  13.7M|    carry7 = h7 + (1 << 24); h8 += carry7 >> 25; h7 -= carry7 & kTop39Bits;
 1220|       |    /* |h3| <= 2^24; from now on fits into int32 unchanged */
 1221|       |    /* |h7| <= 2^24; from now on fits into int32 unchanged */
 1222|       |    /* |h4| <= 1.72*2^34 */
 1223|       |    /* |h8| <= 1.41*2^60 */
 1224|       |
 1225|  13.7M|    carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
 1226|  13.7M|    carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & kTop38Bits;
 1227|       |    /* |h4| <= 2^25; from now on fits into int32 unchanged */
 1228|       |    /* |h8| <= 2^25; from now on fits into int32 unchanged */
 1229|       |    /* |h5| <= 1.01*2^24 */
 1230|       |    /* |h9| <= 1.71*2^59 */
 1231|       |
 1232|  13.7M|    carry9 = h9 + (1 << 24); h0 += (carry9 >> 25) * 19; h9 -= carry9 & kTop39Bits;
 1233|       |    /* |h9| <= 2^24; from now on fits into int32 unchanged */
 1234|       |    /* |h0| <= 1.1*2^39 */
 1235|       |
 1236|  13.7M|    carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
 1237|       |    /* |h0| <= 2^25; from now on fits into int32 unchanged */
 1238|       |    /* |h1| <= 1.01*2^24 */
 1239|       |
 1240|  13.7M|    h[0] = (int32_t)h0;
 1241|  13.7M|    h[1] = (int32_t)h1;
 1242|  13.7M|    h[2] = (int32_t)h2;
 1243|  13.7M|    h[3] = (int32_t)h3;
 1244|  13.7M|    h[4] = (int32_t)h4;
 1245|  13.7M|    h[5] = (int32_t)h5;
 1246|  13.7M|    h[6] = (int32_t)h6;
 1247|  13.7M|    h[7] = (int32_t)h7;
 1248|  13.7M|    h[8] = (int32_t)h8;
 1249|  13.7M|    h[9] = (int32_t)h9;
 1250|  13.7M|}
curve25519.c:fe_tobytes:
  863|  28.9k|{
  864|  28.9k|    int32_t h0 = h[0];
  865|  28.9k|    int32_t h1 = h[1];
  866|  28.9k|    int32_t h2 = h[2];
  867|  28.9k|    int32_t h3 = h[3];
  868|  28.9k|    int32_t h4 = h[4];
  869|  28.9k|    int32_t h5 = h[5];
  870|  28.9k|    int32_t h6 = h[6];
  871|  28.9k|    int32_t h7 = h[7];
  872|  28.9k|    int32_t h8 = h[8];
  873|  28.9k|    int32_t h9 = h[9];
  874|  28.9k|    int32_t q;
  875|       |
  876|  28.9k|    q = (19 * h9 + (((int32_t) 1) << 24)) >> 25;
  877|  28.9k|    q = (h0 + q) >> 26;
  878|  28.9k|    q = (h1 + q) >> 25;
  879|  28.9k|    q = (h2 + q) >> 26;
  880|  28.9k|    q = (h3 + q) >> 25;
  881|  28.9k|    q = (h4 + q) >> 26;
  882|  28.9k|    q = (h5 + q) >> 25;
  883|  28.9k|    q = (h6 + q) >> 26;
  884|  28.9k|    q = (h7 + q) >> 25;
  885|  28.9k|    q = (h8 + q) >> 26;
  886|  28.9k|    q = (h9 + q) >> 25;
  887|       |
  888|       |    /* Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. */
  889|  28.9k|    h0 += 19 * q;
  890|       |    /* Goal: Output h-2^255 q, which is between 0 and 2^255-20. */
  891|       |
  892|  28.9k|    h1 += h0 >> 26; h0 &= kBottom26Bits;
  893|  28.9k|    h2 += h1 >> 25; h1 &= kBottom25Bits;
  894|  28.9k|    h3 += h2 >> 26; h2 &= kBottom26Bits;
  895|  28.9k|    h4 += h3 >> 25; h3 &= kBottom25Bits;
  896|  28.9k|    h5 += h4 >> 26; h4 &= kBottom26Bits;
  897|  28.9k|    h6 += h5 >> 25; h5 &= kBottom25Bits;
  898|  28.9k|    h7 += h6 >> 26; h6 &= kBottom26Bits;
  899|  28.9k|    h8 += h7 >> 25; h7 &= kBottom25Bits;
  900|  28.9k|    h9 += h8 >> 26; h8 &= kBottom26Bits;
  901|  28.9k|                    h9 &= kBottom25Bits;
  902|       |    /* h10 = carry9 */
  903|       |
  904|       |    /*
  905|       |     * Goal: Output h0+...+2^255 h10-2^255 q, which is between 0 and 2^255-20.
  906|       |     * Have h0+...+2^230 h9 between 0 and 2^255-1;
  907|       |     * evidently 2^255 h10-2^255 q = 0.
  908|       |     * Goal: Output h0+...+2^230 h9.
  909|       |     */
  910|  28.9k|    s[ 0] = (uint8_t) (h0 >>  0);
  911|  28.9k|    s[ 1] = (uint8_t) (h0 >>  8);
  912|  28.9k|    s[ 2] = (uint8_t) (h0 >> 16);
  913|  28.9k|    s[ 3] = (uint8_t)((h0 >> 24) | ((uint32_t)(h1) << 2));
  914|  28.9k|    s[ 4] = (uint8_t) (h1 >>  6);
  915|  28.9k|    s[ 5] = (uint8_t) (h1 >> 14);
  916|  28.9k|    s[ 6] = (uint8_t)((h1 >> 22) | ((uint32_t)(h2) << 3));
  917|  28.9k|    s[ 7] = (uint8_t) (h2 >>  5);
  918|  28.9k|    s[ 8] = (uint8_t) (h2 >> 13);
  919|  28.9k|    s[ 9] = (uint8_t)((h2 >> 21) | ((uint32_t)(h3) << 5));
  920|  28.9k|    s[10] = (uint8_t) (h3 >>  3);
  921|  28.9k|    s[11] = (uint8_t) (h3 >> 11);
  922|  28.9k|    s[12] = (uint8_t)((h3 >> 19) | ((uint32_t)(h4) << 6));
  923|  28.9k|    s[13] = (uint8_t) (h4 >>  2);
  924|  28.9k|    s[14] = (uint8_t) (h4 >> 10);
  925|  28.9k|    s[15] = (uint8_t) (h4 >> 18);
  926|  28.9k|    s[16] = (uint8_t) (h5 >>  0);
  927|  28.9k|    s[17] = (uint8_t) (h5 >>  8);
  928|  28.9k|    s[18] = (uint8_t) (h5 >> 16);
  929|  28.9k|    s[19] = (uint8_t)((h5 >> 24) | ((uint32_t)(h6) << 1));
  930|  28.9k|    s[20] = (uint8_t) (h6 >>  7);
  931|  28.9k|    s[21] = (uint8_t) (h6 >> 15);
  932|  28.9k|    s[22] = (uint8_t)((h6 >> 23) | ((uint32_t)(h7) << 3));
  933|  28.9k|    s[23] = (uint8_t) (h7 >>  5);
  934|  28.9k|    s[24] = (uint8_t) (h7 >> 13);
  935|  28.9k|    s[25] = (uint8_t)((h7 >> 21) | ((uint32_t)(h8) << 4));
  936|  28.9k|    s[26] = (uint8_t) (h8 >>  4);
  937|  28.9k|    s[27] = (uint8_t) (h8 >> 12);
  938|  28.9k|    s[28] = (uint8_t)((h8 >> 20) | ((uint32_t)(h9) << 6));
  939|  28.9k|    s[29] = (uint8_t) (h9 >>  2);
  940|  28.9k|    s[30] = (uint8_t) (h9 >> 10);
  941|  28.9k|    s[31] = (uint8_t) (h9 >> 18);
  942|  28.9k|}

ERR_load_EC_strings:
  387|      2|{
  388|      2|#ifndef OPENSSL_NO_ERR
  389|      2|    if (ERR_func_error_string(EC_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (389:9): [True: 2, False: 0]
  ------------------
  390|      2|        ERR_load_strings_const(EC_str_functs);
  391|      2|        ERR_load_strings_const(EC_str_reasons);
  392|      2|    }
  393|      2|#endif
  394|      2|    return 1;
  395|      2|}

ecx_meth.c:ecx_key_op:
   48|  28.9k|{
   49|  28.9k|    ECX_KEY *key = NULL;
   50|  28.9k|    unsigned char *privkey, *pubkey;
   51|       |
   52|  28.9k|    if (op != KEY_OP_KEYGEN) {
  ------------------
  |  Branch (52:9): [True: 0, False: 28.9k]
  ------------------
   53|      0|        if (palg != NULL) {
  ------------------
  |  Branch (53:13): [True: 0, False: 0]
  ------------------
   54|      0|            int ptype;
   55|       |
   56|       |            /* Algorithm parameters must be absent */
   57|      0|            X509_ALGOR_get0(NULL, &ptype, NULL, palg);
   58|      0|            if (ptype != V_ASN1_UNDEF) {
  ------------------
  |  |   48|      0|# define V_ASN1_UNDEF                    -1
  ------------------
  |  Branch (58:17): [True: 0, False: 0]
  ------------------
   59|      0|                ECerr(EC_F_ECX_KEY_OP, EC_R_INVALID_ENCODING);
  ------------------
  |  |  114|      0|# define ECerr(f,r)   ERR_PUT_error(ERR_LIB_EC,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   60|      0|                return 0;
   61|      0|            }
   62|      0|        }
   63|       |
   64|      0|        if (p == NULL || plen != KEYLENID(id)) {
  ------------------
  |  |   33|      0|#define KEYLENID(id)    (IS25519(id) ? X25519_KEYLEN \
  |  |  ------------------
  |  |  |  |   32|      0|#define IS25519(id)     ((id) == EVP_PKEY_X25519 || (id) == EVP_PKEY_ED25519)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      0|# define EVP_PKEY_X25519 NID_X25519
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 4988|      0|#define NID_X25519              1034
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define IS25519(id)     ((id) == EVP_PKEY_X25519 || (id) == EVP_PKEY_ED25519)
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|# define EVP_PKEY_ED25519 NID_ED25519
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 4996|      0|#define NID_ED25519             1087
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (32:26): [True: 0, False: 0]
  |  |  |  |  |  Branch (32:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define KEYLENID(id)    (IS25519(id) ? X25519_KEYLEN \
  |  |  ------------------
  |  |  |  |  378|      0|#define X25519_KEYLEN        32
  |  |  ------------------
  |  |   34|      0|                                     : ((id) == EVP_PKEY_X448 ? X448_KEYLEN \
  |  |  ------------------
  |  |  |  |   63|      0|# define EVP_PKEY_X448 NID_X448
  |  |  |  |  ------------------
  |  |  |  |  |  | 4992|      0|#define NID_X448                1035
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                                                    : ((id) == EVP_PKEY_X448 ? X448_KEYLEN \
  |  |  ------------------
  |  |  |  |  379|      0|#define X448_KEYLEN          56
  |  |  ------------------
  |  |  |  Branch (34:41): [True: 0, False: 0]
  |  |  ------------------
  |  |   35|      0|                                                              : ED448_KEYLEN))
  |  |  ------------------
  |  |  |  |  380|      0|#define ED448_KEYLEN         57
  |  |  ------------------
  ------------------
  |  Branch (64:13): [True: 0, False: 0]
  |  Branch (64:26): [True: 0, False: 0]
  ------------------
   65|      0|            ECerr(EC_F_ECX_KEY_OP, EC_R_INVALID_ENCODING);
  ------------------
  |  |  114|      0|# define ECerr(f,r)   ERR_PUT_error(ERR_LIB_EC,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   66|      0|            return 0;
   67|      0|        }
   68|      0|    }
   69|       |
   70|  28.9k|    key = OPENSSL_zalloc(sizeof(*key));
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   71|  28.9k|    if (key == NULL) {
  ------------------
  |  Branch (71:9): [True: 0, False: 28.9k]
  ------------------
   72|      0|        ECerr(EC_F_ECX_KEY_OP, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  114|      0|# define ECerr(f,r)   ERR_PUT_error(ERR_LIB_EC,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   73|      0|        return 0;
   74|      0|    }
   75|  28.9k|    pubkey = key->pubkey;
   76|       |
   77|  28.9k|    if (op == KEY_OP_PUBLIC) {
  ------------------
  |  Branch (77:9): [True: 0, False: 28.9k]
  ------------------
   78|      0|        memcpy(pubkey, p, plen);
   79|  28.9k|    } else {
   80|  28.9k|        privkey = key->privkey = OPENSSL_secure_malloc(KEYLENID(id));
  ------------------
  |  |  136|  86.9k|        CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |  |  Branch (136:30): [True: 28.9k, False: 0]
  |  |  |  Branch (136:30): [True: 0, False: 0]
  |  |  |  Branch (136:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   81|  28.9k|        if (privkey == NULL) {
  ------------------
  |  Branch (81:13): [True: 0, False: 28.9k]
  ------------------
   82|      0|            ECerr(EC_F_ECX_KEY_OP, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  114|      0|# define ECerr(f,r)   ERR_PUT_error(ERR_LIB_EC,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   83|      0|            goto err;
   84|      0|        }
   85|  28.9k|        if (op == KEY_OP_KEYGEN) {
  ------------------
  |  Branch (85:13): [True: 28.9k, False: 0]
  ------------------
   86|  28.9k|            if (RAND_priv_bytes(privkey, KEYLENID(id)) <= 0) {
  ------------------
  |  |   33|  28.9k|#define KEYLENID(id)    (IS25519(id) ? X25519_KEYLEN \
  |  |  ------------------
  |  |  |  |   32|  28.9k|#define IS25519(id)     ((id) == EVP_PKEY_X25519 || (id) == EVP_PKEY_ED25519)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  28.9k|# define EVP_PKEY_X25519 NID_X25519
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 4988|  57.9k|#define NID_X25519              1034
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define IS25519(id)     ((id) == EVP_PKEY_X25519 || (id) == EVP_PKEY_ED25519)
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|# define EVP_PKEY_ED25519 NID_ED25519
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 4996|      0|#define NID_ED25519             1087
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (32:26): [True: 28.9k, False: 0]
  |  |  |  |  |  Branch (32:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define KEYLENID(id)    (IS25519(id) ? X25519_KEYLEN \
  |  |  ------------------
  |  |  |  |  378|  28.9k|#define X25519_KEYLEN        32
  |  |  ------------------
  |  |   34|  28.9k|                                     : ((id) == EVP_PKEY_X448 ? X448_KEYLEN \
  |  |  ------------------
  |  |  |  |   63|      0|# define EVP_PKEY_X448 NID_X448
  |  |  |  |  ------------------
  |  |  |  |  |  | 4992|      0|#define NID_X448                1035
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                                                    : ((id) == EVP_PKEY_X448 ? X448_KEYLEN \
  |  |  ------------------
  |  |  |  |  379|      0|#define X448_KEYLEN          56
  |  |  ------------------
  |  |  |  Branch (34:41): [True: 0, False: 0]
  |  |  ------------------
  |  |   35|      0|                                                              : ED448_KEYLEN))
  |  |  ------------------
  |  |  |  |  380|      0|#define ED448_KEYLEN         57
  |  |  ------------------
  ------------------
  |  Branch (86:17): [True: 0, False: 28.9k]
  ------------------
   87|      0|                OPENSSL_secure_free(privkey);
  ------------------
  |  |  140|      0|        CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   88|      0|                key->privkey = NULL;
   89|      0|                goto err;
   90|      0|            }
   91|  28.9k|            if (id == EVP_PKEY_X25519) {
  ------------------
  |  |   61|  28.9k|# define EVP_PKEY_X25519 NID_X25519
  |  |  ------------------
  |  |  |  | 4988|  28.9k|#define NID_X25519              1034
  |  |  ------------------
  ------------------
  |  Branch (91:17): [True: 28.9k, False: 0]
  ------------------
   92|  28.9k|                privkey[0] &= 248;
   93|  28.9k|                privkey[X25519_KEYLEN - 1] &= 127;
  ------------------
  |  |  378|  28.9k|#define X25519_KEYLEN        32
  ------------------
   94|  28.9k|                privkey[X25519_KEYLEN - 1] |= 64;
  ------------------
  |  |  378|  28.9k|#define X25519_KEYLEN        32
  ------------------
   95|  28.9k|            } else if (id == EVP_PKEY_X448) {
  ------------------
  |  |   63|      0|# define EVP_PKEY_X448 NID_X448
  |  |  ------------------
  |  |  |  | 4992|      0|#define NID_X448                1035
  |  |  ------------------
  ------------------
  |  Branch (95:24): [True: 0, False: 0]
  ------------------
   96|      0|                privkey[0] &= 252;
   97|      0|                privkey[X448_KEYLEN - 1] |= 128;
  ------------------
  |  |  379|      0|#define X448_KEYLEN          56
  ------------------
   98|      0|            }
   99|  28.9k|        } else {
  100|      0|            memcpy(privkey, p, KEYLENID(id));
  ------------------
  |  |   33|      0|#define KEYLENID(id)    (IS25519(id) ? X25519_KEYLEN \
  |  |  ------------------
  |  |  |  |   32|      0|#define IS25519(id)     ((id) == EVP_PKEY_X25519 || (id) == EVP_PKEY_ED25519)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      0|# define EVP_PKEY_X25519 NID_X25519
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 4988|      0|#define NID_X25519              1034
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define IS25519(id)     ((id) == EVP_PKEY_X25519 || (id) == EVP_PKEY_ED25519)
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|# define EVP_PKEY_ED25519 NID_ED25519
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 4996|      0|#define NID_ED25519             1087
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (32:26): [True: 0, False: 0]
  |  |  |  |  |  Branch (32:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define KEYLENID(id)    (IS25519(id) ? X25519_KEYLEN \
  |  |  ------------------
  |  |  |  |  378|      0|#define X25519_KEYLEN        32
  |  |  ------------------
  |  |   34|      0|                                     : ((id) == EVP_PKEY_X448 ? X448_KEYLEN \
  |  |  ------------------
  |  |  |  |   63|      0|# define EVP_PKEY_X448 NID_X448
  |  |  |  |  ------------------
  |  |  |  |  |  | 4992|      0|#define NID_X448                1035
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                                                    : ((id) == EVP_PKEY_X448 ? X448_KEYLEN \
  |  |  ------------------
  |  |  |  |  379|      0|#define X448_KEYLEN          56
  |  |  ------------------
  |  |  |  Branch (34:41): [True: 0, False: 0]
  |  |  ------------------
  |  |   35|      0|                                                              : ED448_KEYLEN))
  |  |  ------------------
  |  |  |  |  380|      0|#define ED448_KEYLEN         57
  |  |  ------------------
  ------------------
  101|      0|        }
  102|  28.9k|        switch (id) {
  ------------------
  |  Branch (102:17): [True: 28.9k, False: 0]
  ------------------
  103|  28.9k|        case EVP_PKEY_X25519:
  ------------------
  |  |   61|  28.9k|# define EVP_PKEY_X25519 NID_X25519
  |  |  ------------------
  |  |  |  | 4988|  28.9k|#define NID_X25519              1034
  |  |  ------------------
  ------------------
  |  Branch (103:9): [True: 28.9k, False: 0]
  ------------------
  104|  28.9k|            X25519_public_from_private(pubkey, privkey);
  105|  28.9k|            break;
  106|      0|        case EVP_PKEY_ED25519:
  ------------------
  |  |   62|      0|# define EVP_PKEY_ED25519 NID_ED25519
  |  |  ------------------
  |  |  |  | 4996|      0|#define NID_ED25519             1087
  |  |  ------------------
  ------------------
  |  Branch (106:9): [True: 0, False: 28.9k]
  ------------------
  107|      0|            ED25519_public_from_private(pubkey, privkey);
  108|      0|            break;
  109|      0|        case EVP_PKEY_X448:
  ------------------
  |  |   63|      0|# define EVP_PKEY_X448 NID_X448
  |  |  ------------------
  |  |  |  | 4992|      0|#define NID_X448                1035
  |  |  ------------------
  ------------------
  |  Branch (109:9): [True: 0, False: 28.9k]
  ------------------
  110|      0|            X448_public_from_private(pubkey, privkey);
  111|      0|            break;
  112|      0|        case EVP_PKEY_ED448:
  ------------------
  |  |   64|      0|# define EVP_PKEY_ED448 NID_ED448
  |  |  ------------------
  |  |  |  | 5000|      0|#define NID_ED448               1088
  |  |  ------------------
  ------------------
  |  Branch (112:9): [True: 0, False: 28.9k]
  ------------------
  113|      0|            ED448_public_from_private(pubkey, privkey);
  114|      0|            break;
  115|  28.9k|        }
  116|  28.9k|    }
  117|       |
  118|  28.9k|    EVP_PKEY_assign(pkey, id, key);
  119|  28.9k|    return 1;
  120|      0| err:
  121|      0|    OPENSSL_free(key);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  122|      0|    return 0;
  123|  28.9k|}
ecx_meth.c:ecx_free:
  256|  28.9k|{
  257|  28.9k|    if (pkey->pkey.ecx != NULL)
  ------------------
  |  Branch (257:9): [True: 28.9k, False: 0]
  ------------------
  258|  28.9k|        OPENSSL_secure_clear_free(pkey->pkey.ecx->privkey, KEYLEN(pkey));
  ------------------
  |  |  142|  86.9k|        CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |  |  Branch (142:40): [True: 28.9k, False: 0]
  |  |  |  Branch (142:40): [True: 0, False: 0]
  |  |  |  Branch (142:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  259|  28.9k|    OPENSSL_free(pkey->pkey.ecx);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  260|  28.9k|}
ecx_meth.c:ecx_ctrl:
  318|  28.9k|{
  319|  28.9k|    switch (op) {
  320|       |
  321|      0|    case ASN1_PKEY_CTRL_SET1_TLS_ENCPT:
  ------------------
  |  | 1142|      0|# define ASN1_PKEY_CTRL_SET1_TLS_ENCPT   0x9
  ------------------
  |  Branch (321:5): [True: 0, False: 28.9k]
  ------------------
  322|      0|        return ecx_key_op(pkey, pkey->ameth->pkey_id, NULL, arg2, arg1,
  323|      0|                          KEY_OP_PUBLIC);
  324|       |
  325|  28.9k|    case ASN1_PKEY_CTRL_GET1_TLS_ENCPT:
  ------------------
  |  | 1143|  28.9k|# define ASN1_PKEY_CTRL_GET1_TLS_ENCPT   0xa
  ------------------
  |  Branch (325:5): [True: 28.9k, False: 0]
  ------------------
  326|  28.9k|        if (pkey->pkey.ecx != NULL) {
  ------------------
  |  Branch (326:13): [True: 28.9k, False: 0]
  ------------------
  327|  28.9k|            unsigned char **ppt = arg2;
  328|       |
  329|  28.9k|            *ppt = OPENSSL_memdup(pkey->pkey.ecx->pubkey, KEYLEN(pkey));
  ------------------
  |  |  130|  86.9k|        CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |  |  Branch (130:30): [True: 28.9k, False: 0]
  |  |  |  Branch (130:30): [True: 0, False: 0]
  |  |  |  Branch (130:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  330|  28.9k|            if (*ppt != NULL)
  ------------------
  |  Branch (330:17): [True: 28.9k, False: 0]
  ------------------
  331|  28.9k|                return KEYLEN(pkey);
  ------------------
  |  |   36|  28.9k|#define KEYLEN(p)       KEYLENID((p)->ameth->pkey_id)
  |  |  ------------------
  |  |  |  |   33|  28.9k|#define KEYLENID(id)    (IS25519(id) ? X25519_KEYLEN \
  |  |  |  |  ------------------
  |  |  |  |  |  |   32|  28.9k|#define IS25519(id)     ((id) == EVP_PKEY_X25519 || (id) == EVP_PKEY_ED25519)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  28.9k|# define EVP_PKEY_X25519 NID_X25519
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 4988|  57.9k|#define NID_X25519              1034
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define IS25519(id)     ((id) == EVP_PKEY_X25519 || (id) == EVP_PKEY_ED25519)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|      0|# define EVP_PKEY_ED25519 NID_ED25519
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 4996|      0|#define NID_ED25519             1087
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (32:26): [True: 28.9k, False: 0]
  |  |  |  |  |  |  |  Branch (32:53): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define KEYLENID(id)    (IS25519(id) ? X25519_KEYLEN \
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  28.9k|#define X25519_KEYLEN        32
  |  |  |  |  ------------------
  |  |  |  |   34|  28.9k|                                     : ((id) == EVP_PKEY_X448 ? X448_KEYLEN \
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      0|# define EVP_PKEY_X448 NID_X448
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 4992|      0|#define NID_X448                1035
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                                                    : ((id) == EVP_PKEY_X448 ? X448_KEYLEN \
  |  |  |  |  ------------------
  |  |  |  |  |  |  379|      0|#define X448_KEYLEN          56
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (34:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   35|      0|                                                              : ED448_KEYLEN))
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|#define ED448_KEYLEN         57
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|  28.9k|        }
  333|      0|        return 0;
  334|       |
  335|      0|    default:
  ------------------
  |  Branch (335:5): [True: 0, False: 28.9k]
  ------------------
  336|      0|        return -2;
  337|       |
  338|  28.9k|    }
  339|  28.9k|}
ecx_meth.c:pkey_ecx_keygen:
  653|  28.9k|{
  654|  28.9k|    return ecx_key_op(pkey, ctx->pmeth->pkey_id, NULL, NULL, 0, KEY_OP_KEYGEN);
  655|  28.9k|}

ENGINE_load_builtin_engines:
   14|      2|{
   15|       |    /* Some ENGINEs need this */
   16|      2|    OPENSSL_cpuid_setup();
   17|       |
   18|      2|    OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_ALL_BUILTIN, NULL);
  ------------------
  |  |  381|      2|    (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \
  |  |  ------------------
  |  |  |  |  365|      2|# define OPENSSL_INIT_ENGINE_RDRAND          0x00000200L
  |  |  ------------------
  |  |                   (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \
  |  |  ------------------
  |  |  |  |  366|      2|# define OPENSSL_INIT_ENGINE_DYNAMIC         0x00000400L
  |  |  ------------------
  |  |  382|      2|    | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \
  |  |  ------------------
  |  |  |  |  368|      2|# define OPENSSL_INIT_ENGINE_CRYPTODEV       0x00001000L
  |  |  ------------------
  |  |                   | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \
  |  |  ------------------
  |  |  |  |  369|      2|# define OPENSSL_INIT_ENGINE_CAPI            0x00002000L
  |  |  ------------------
  |  |  383|      2|    OPENSSL_INIT_ENGINE_PADLOCK)
  |  |  ------------------
  |  |  |  |  370|      2|# define OPENSSL_INIT_ENGINE_PADLOCK         0x00004000L
  |  |  ------------------
  ------------------
   19|      2|}

ENGINE_add_conf_module:
  189|      2|{
  190|      2|    CONF_module_add("engines",
  191|      2|                    int_engine_module_init, int_engine_module_finish);
  192|      2|}

engine_load_dynamic_int:
  253|      2|{
  254|      2|    ENGINE *toadd = engine_dynamic();
  255|      2|    if (!toadd)
  ------------------
  |  Branch (255:9): [True: 0, False: 2]
  ------------------
  256|      0|        return;
  257|      2|    ENGINE_add(toadd);
  258|       |    /*
  259|       |     * If the "add" worked, it gets a structural reference. So either way, we
  260|       |     * release our just-created reference.
  261|       |     */
  262|      2|    ENGINE_free(toadd);
  263|       |    /*
  264|       |     * If the "add" didn't work, it was probably a conflict because it was
  265|       |     * already added (eg. someone calling ENGINE_load_blah then calling
  266|       |     * ENGINE_load_builtin_engines() perhaps).
  267|       |     */
  268|      2|    ERR_clear_error();
  269|      2|}
eng_dyn.c:engine_dynamic:
  235|      2|{
  236|      2|    ENGINE *ret = ENGINE_new();
  237|      2|    if (ret == NULL)
  ------------------
  |  Branch (237:9): [True: 0, False: 2]
  ------------------
  238|      0|        return NULL;
  239|      2|    if (!ENGINE_set_id(ret, engine_dynamic_id) ||
  ------------------
  |  Branch (239:9): [True: 0, False: 2]
  ------------------
  240|      2|        !ENGINE_set_name(ret, engine_dynamic_name) ||
  ------------------
  |  Branch (240:9): [True: 0, False: 2]
  ------------------
  241|      2|        !ENGINE_set_init_function(ret, dynamic_init) ||
  ------------------
  |  Branch (241:9): [True: 0, False: 2]
  ------------------
  242|      2|        !ENGINE_set_finish_function(ret, dynamic_finish) ||
  ------------------
  |  Branch (242:9): [True: 0, False: 2]
  ------------------
  243|      2|        !ENGINE_set_ctrl_function(ret, dynamic_ctrl) ||
  ------------------
  |  Branch (243:9): [True: 0, False: 2]
  ------------------
  244|      2|        !ENGINE_set_flags(ret, ENGINE_FLAGS_BY_ID_COPY) ||
  ------------------
  |  |   82|      2|# define ENGINE_FLAGS_BY_ID_COPY         (int)0x0004
  ------------------
  |  Branch (244:9): [True: 0, False: 2]
  ------------------
  245|      2|        !ENGINE_set_cmd_defns(ret, dynamic_cmd_defns)) {
  ------------------
  |  Branch (245:9): [True: 0, False: 2]
  ------------------
  246|      0|        ENGINE_free(ret);
  247|      0|        return NULL;
  248|      0|    }
  249|      2|    return ret;
  250|      2|}

ERR_load_ENGINE_strings:
  146|      2|{
  147|      2|#ifndef OPENSSL_NO_ERR
  148|      2|    if (ERR_func_error_string(ENGINE_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (148:9): [True: 2, False: 0]
  ------------------
  149|      2|        ERR_load_strings_const(ENGINE_str_functs);
  150|      2|        ERR_load_strings_const(ENGINE_str_reasons);
  151|      2|    }
  152|      2|#endif
  153|      2|    return 1;
  154|      2|}

ENGINE_register_complete:
   94|      2|{
   95|      2|    ENGINE_register_ciphers(e);
   96|      2|    ENGINE_register_digests(e);
   97|      2|#ifndef OPENSSL_NO_RSA
   98|      2|    ENGINE_register_RSA(e);
   99|      2|#endif
  100|      2|#ifndef OPENSSL_NO_DSA
  101|      2|    ENGINE_register_DSA(e);
  102|      2|#endif
  103|      2|#ifndef OPENSSL_NO_DH
  104|      2|    ENGINE_register_DH(e);
  105|      2|#endif
  106|      2|#ifndef OPENSSL_NO_EC
  107|      2|    ENGINE_register_EC(e);
  108|      2|#endif
  109|      2|    ENGINE_register_RAND(e);
  110|      2|    ENGINE_register_pkey_meths(e);
  111|      2|    ENGINE_register_pkey_asn1_meths(e);
  112|      2|    return 1;
  113|      2|}
ENGINE_register_all_complete:
  116|      2|{
  117|      2|    ENGINE *e;
  118|       |
  119|      4|    for (e = ENGINE_get_first(); e; e = ENGINE_get_next(e))
  ------------------
  |  Branch (119:34): [True: 2, False: 2]
  ------------------
  120|      2|        if (!(e->flags & ENGINE_FLAGS_NO_REGISTER_ALL))
  ------------------
  |  |   90|      2|# define ENGINE_FLAGS_NO_REGISTER_ALL    (int)0x0008
  ------------------
  |  Branch (120:13): [True: 2, False: 0]
  ------------------
  121|      2|            ENGINE_register_complete(e);
  122|      2|    return 1;
  123|      2|}

ENGINE_finish:
   96|   173k|{
   97|   173k|    int to_return = 1;
   98|       |
   99|   173k|    if (e == NULL)
  ------------------
  |  Branch (99:9): [True: 173k, False: 0]
  ------------------
  100|   173k|        return 1;
  101|      0|    CRYPTO_THREAD_write_lock(global_engine_lock);
  102|      0|    to_return = engine_unlocked_finish(e, 1);
  103|      0|    CRYPTO_THREAD_unlock(global_engine_lock);
  104|      0|    if (!to_return) {
  ------------------
  |  Branch (104:9): [True: 0, False: 0]
  ------------------
  105|      0|        ENGINEerr(ENGINE_F_ENGINE_FINISH, ENGINE_R_FINISH_FAILED);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  106|      0|        return 0;
  107|      0|    }
  108|      0|    return to_return;
  109|      0|}

ENGINE_new:
   30|      2|{
   31|      2|    ENGINE *ret;
   32|       |
   33|      2|    if (!RUN_ONCE(&engine_lock_init, do_engine_lock_init)
  ------------------
  |  |  119|      4|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (33:9): [True: 0, False: 2]
  ------------------
   34|      2|        || (ret = OPENSSL_zalloc(sizeof(*ret))) == NULL) {
  ------------------
  |  |  120|      2|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (34:12): [True: 0, False: 2]
  ------------------
   35|      0|        ENGINEerr(ENGINE_F_ENGINE_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   36|      0|        return NULL;
   37|      0|    }
   38|      2|    ret->struct_ref = 1;
   39|      2|    engine_ref_debug(ret, 0, 1);
   40|      2|    if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_ENGINE, ret, &ret->ex_data)) {
  ------------------
  |  |  104|      2|# define CRYPTO_EX_INDEX_ENGINE          10
  ------------------
  |  Branch (40:9): [True: 0, False: 2]
  ------------------
   41|      0|        OPENSSL_free(ret);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   42|      0|        return NULL;
   43|      0|    }
   44|      2|    return ret;
   45|      2|}
engine_free_util:
   73|      6|{
   74|      6|    int i;
   75|       |
   76|      6|    if (e == NULL)
  ------------------
  |  Branch (76:9): [True: 0, False: 6]
  ------------------
   77|      0|        return 1;
   78|      6|    if (not_locked)
  ------------------
  |  Branch (78:9): [True: 4, False: 2]
  ------------------
   79|      4|        CRYPTO_DOWN_REF(&e->struct_ref, &i, global_engine_lock);
   80|      2|    else
   81|      2|        i = --e->struct_ref;
   82|      6|    engine_ref_debug(e, 0, -1);
   83|      6|    if (i > 0)
  ------------------
  |  Branch (83:9): [True: 4, False: 2]
  ------------------
   84|      4|        return 1;
   85|      2|    REF_ASSERT_ISNT(i < 0);
  ------------------
  |  |  138|      2|    (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0)
  |  |  ------------------
  |  |  |  Branch (138:12): [True: 0, False: 2]
  |  |  ------------------
  ------------------
   86|       |    /* Free up any dynamically allocated public key methods */
   87|      2|    engine_pkey_meths_free(e);
   88|      2|    engine_pkey_asn1_meths_free(e);
   89|       |    /*
   90|       |     * Give the ENGINE a chance to do any structural cleanup corresponding to
   91|       |     * allocation it did in its constructor (eg. unload error strings)
   92|       |     */
   93|      2|    if (e->destroy)
  ------------------
  |  Branch (93:9): [True: 0, False: 2]
  ------------------
   94|      0|        e->destroy(e);
   95|      2|    CRYPTO_free_ex_data(CRYPTO_EX_INDEX_ENGINE, e, &e->ex_data);
  ------------------
  |  |  104|      2|# define CRYPTO_EX_INDEX_ENGINE          10
  ------------------
   96|      2|    OPENSSL_free(e);
  ------------------
  |  |  128|      2|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   97|      2|    return 1;
   98|      6|}
ENGINE_free:
  101|      4|{
  102|      4|    return engine_free_util(e, 1);
  103|      4|}
engine_cleanup_add_last:
  148|      2|{
  149|      2|    ENGINE_CLEANUP_ITEM *item;
  150|      2|    if (!int_cleanup_check(1))
  ------------------
  |  Branch (150:9): [True: 0, False: 2]
  ------------------
  151|      0|        return;
  152|      2|    item = int_cleanup_item(cb);
  153|      2|    if (item != NULL) {
  ------------------
  |  Branch (153:9): [True: 2, False: 0]
  ------------------
  154|      2|        if (sk_ENGINE_CLEANUP_ITEM_push(cleanup_stack, item) <= 0)
  ------------------
  |  Branch (154:13): [True: 0, False: 2]
  ------------------
  155|      0|            OPENSSL_free(item);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  156|      2|    }
  157|      2|}
engine_cleanup_int:
  167|      2|{
  168|      2|    if (int_cleanup_check(0)) {
  ------------------
  |  Branch (168:9): [True: 2, False: 0]
  ------------------
  169|      2|        sk_ENGINE_CLEANUP_ITEM_pop_free(cleanup_stack,
  170|      2|                                        engine_cleanup_cb_free);
  171|      2|        cleanup_stack = NULL;
  172|      2|    }
  173|      2|    CRYPTO_THREAD_lock_free(global_engine_lock);
  174|       |    global_engine_lock = NULL;
  175|      2|}
ENGINE_set_id:
  195|      2|{
  196|      2|    if (id == NULL) {
  ------------------
  |  Branch (196:9): [True: 0, False: 2]
  ------------------
  197|      0|        ENGINEerr(ENGINE_F_ENGINE_SET_ID, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  198|      0|        return 0;
  199|      0|    }
  200|      2|    e->id = id;
  201|      2|    return 1;
  202|      2|}
ENGINE_set_name:
  205|      2|{
  206|      2|    if (name == NULL) {
  ------------------
  |  Branch (206:9): [True: 0, False: 2]
  ------------------
  207|      0|        ENGINEerr(ENGINE_F_ENGINE_SET_NAME, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  208|      0|        return 0;
  209|      0|    }
  210|      2|    e->name = name;
  211|      2|    return 1;
  212|      2|}
ENGINE_set_init_function:
  221|      2|{
  222|      2|    e->init = init_f;
  223|      2|    return 1;
  224|      2|}
ENGINE_set_finish_function:
  227|      2|{
  228|      2|    e->finish = finish_f;
  229|      2|    return 1;
  230|      2|}
ENGINE_set_ctrl_function:
  233|      2|{
  234|      2|    e->ctrl = ctrl_f;
  235|      2|    return 1;
  236|      2|}
ENGINE_set_flags:
  239|      2|{
  240|      2|    e->flags = flags;
  241|      2|    return 1;
  242|      2|}
ENGINE_set_cmd_defns:
  245|      2|{
  246|      2|    e->cmd_defns = defns;
  247|      2|    return 1;
  248|      2|}
eng_lib.c:do_engine_lock_init:
   22|      2|{
   23|      2|    if (!OPENSSL_init_crypto(0, NULL))
  ------------------
  |  Branch (23:9): [True: 0, False: 2]
  ------------------
   24|      0|        return 0;
   25|      2|    global_engine_lock = CRYPTO_THREAD_lock_new();
   26|       |    return global_engine_lock != NULL;
   27|      2|}
eng_lib.c:int_cleanup_check:
  115|      4|{
  116|      4|    if (cleanup_stack)
  ------------------
  |  Branch (116:9): [True: 2, False: 2]
  ------------------
  117|      2|        return 1;
  118|      2|    if (!create)
  ------------------
  |  Branch (118:9): [True: 0, False: 2]
  ------------------
  119|      0|        return 0;
  120|      2|    cleanup_stack = sk_ENGINE_CLEANUP_ITEM_new_null();
  121|      2|    return (cleanup_stack ? 1 : 0);
  ------------------
  |  Branch (121:13): [True: 2, False: 0]
  ------------------
  122|      2|}
eng_lib.c:int_cleanup_item:
  125|      2|{
  126|      2|    ENGINE_CLEANUP_ITEM *item;
  127|       |
  128|      2|    if ((item = OPENSSL_malloc(sizeof(*item))) == NULL) {
  ------------------
  |  |  118|      2|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (128:9): [True: 0, False: 2]
  ------------------
  129|      0|        ENGINEerr(ENGINE_F_INT_CLEANUP_ITEM, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  130|      0|        return NULL;
  131|      0|    }
  132|      2|    item->cb = cb;
  133|      2|    return item;
  134|      2|}
eng_lib.c:engine_cleanup_cb_free:
  161|      2|{
  162|      2|    (*(item->cb)) ();
  163|      2|    OPENSSL_free(item);
  ------------------
  |  |  128|      2|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  164|      2|}

ENGINE_get_first:
  131|      2|{
  132|      2|    ENGINE *ret;
  133|       |
  134|      2|    if (!RUN_ONCE(&engine_lock_init, do_engine_lock_init)) {
  ------------------
  |  |  119|      2|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (134:9): [True: 0, False: 2]
  ------------------
  135|      0|        ENGINEerr(ENGINE_F_ENGINE_GET_FIRST, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  136|      0|        return NULL;
  137|      0|    }
  138|       |
  139|      2|    CRYPTO_THREAD_write_lock(global_engine_lock);
  140|      2|    ret = engine_list_head;
  141|      2|    if (ret) {
  ------------------
  |  Branch (141:9): [True: 2, False: 0]
  ------------------
  142|      2|        ret->struct_ref++;
  143|      2|        engine_ref_debug(ret, 0, 1);
  144|      2|    }
  145|      2|    CRYPTO_THREAD_unlock(global_engine_lock);
  146|      2|    return ret;
  147|      2|}
ENGINE_get_next:
  170|      2|{
  171|      2|    ENGINE *ret = NULL;
  172|      2|    if (e == NULL) {
  ------------------
  |  Branch (172:9): [True: 0, False: 2]
  ------------------
  173|      0|        ENGINEerr(ENGINE_F_ENGINE_GET_NEXT, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  174|      0|        return 0;
  175|      0|    }
  176|      2|    CRYPTO_THREAD_write_lock(global_engine_lock);
  177|      2|    ret = e->next;
  178|      2|    if (ret) {
  ------------------
  |  Branch (178:9): [True: 0, False: 2]
  ------------------
  179|       |        /* Return a valid structural reference to the next ENGINE */
  180|      0|        ret->struct_ref++;
  181|      0|        engine_ref_debug(ret, 0, 1);
  182|      0|    }
  183|      2|    CRYPTO_THREAD_unlock(global_engine_lock);
  184|       |    /* Release the structural reference to the previous ENGINE */
  185|      2|    ENGINE_free(e);
  186|      2|    return ret;
  187|      2|}
ENGINE_add:
  211|      2|{
  212|      2|    int to_return = 1;
  213|      2|    if (e == NULL) {
  ------------------
  |  Branch (213:9): [True: 0, False: 2]
  ------------------
  214|      0|        ENGINEerr(ENGINE_F_ENGINE_ADD, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  215|      0|        return 0;
  216|      0|    }
  217|      2|    if ((e->id == NULL) || (e->name == NULL)) {
  ------------------
  |  Branch (217:9): [True: 0, False: 2]
  |  Branch (217:28): [True: 0, False: 2]
  ------------------
  218|      0|        ENGINEerr(ENGINE_F_ENGINE_ADD, ENGINE_R_ID_OR_NAME_MISSING);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  219|      0|        return 0;
  220|      0|    }
  221|      2|    CRYPTO_THREAD_write_lock(global_engine_lock);
  222|      2|    if (!engine_list_add(e)) {
  ------------------
  |  Branch (222:9): [True: 0, False: 2]
  ------------------
  223|      0|        ENGINEerr(ENGINE_F_ENGINE_ADD, ENGINE_R_INTERNAL_LIST_ERROR);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  224|      0|        to_return = 0;
  225|      0|    }
  226|      2|    CRYPTO_THREAD_unlock(global_engine_lock);
  227|      2|    return to_return;
  228|      2|}
ENGINE_remove:
  232|      2|{
  233|      2|    int to_return = 1;
  234|      2|    if (e == NULL) {
  ------------------
  |  Branch (234:9): [True: 0, False: 2]
  ------------------
  235|      0|        ENGINEerr(ENGINE_F_ENGINE_REMOVE, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  236|      0|        return 0;
  237|      0|    }
  238|      2|    CRYPTO_THREAD_write_lock(global_engine_lock);
  239|      2|    if (!engine_list_remove(e)) {
  ------------------
  |  Branch (239:9): [True: 0, False: 2]
  ------------------
  240|      0|        ENGINEerr(ENGINE_F_ENGINE_REMOVE, ENGINE_R_INTERNAL_LIST_ERROR);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  241|      0|        to_return = 0;
  242|      0|    }
  243|      2|    CRYPTO_THREAD_unlock(global_engine_lock);
  244|      2|    return to_return;
  245|      2|}
eng_list.c:engine_list_add:
   49|      2|{
   50|      2|    int conflict = 0;
   51|      2|    ENGINE *iterator = NULL;
   52|       |
   53|      2|    if (e == NULL) {
  ------------------
  |  Branch (53:9): [True: 0, False: 2]
  ------------------
   54|      0|        ENGINEerr(ENGINE_F_ENGINE_LIST_ADD, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   55|      0|        return 0;
   56|      0|    }
   57|      2|    iterator = engine_list_head;
   58|      2|    while (iterator && !conflict) {
  ------------------
  |  Branch (58:12): [True: 0, False: 2]
  |  Branch (58:24): [True: 0, False: 0]
  ------------------
   59|      0|        conflict = (strcmp(iterator->id, e->id) == 0);
   60|      0|        iterator = iterator->next;
   61|      0|    }
   62|      2|    if (conflict) {
  ------------------
  |  Branch (62:9): [True: 0, False: 2]
  ------------------
   63|      0|        ENGINEerr(ENGINE_F_ENGINE_LIST_ADD, ENGINE_R_CONFLICTING_ENGINE_ID);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   64|      0|        return 0;
   65|      0|    }
   66|      2|    if (engine_list_head == NULL) {
  ------------------
  |  Branch (66:9): [True: 2, False: 0]
  ------------------
   67|       |        /* We are adding to an empty list. */
   68|      2|        if (engine_list_tail) {
  ------------------
  |  Branch (68:13): [True: 0, False: 2]
  ------------------
   69|      0|            ENGINEerr(ENGINE_F_ENGINE_LIST_ADD, ENGINE_R_INTERNAL_LIST_ERROR);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   70|      0|            return 0;
   71|      0|        }
   72|      2|        engine_list_head = e;
   73|      2|        e->prev = NULL;
   74|       |        /*
   75|       |         * The first time the list allocates, we should register the cleanup.
   76|       |         */
   77|      2|        engine_cleanup_add_last(engine_list_cleanup);
   78|      2|    } else {
   79|       |        /* We are adding to the tail of an existing list. */
   80|      0|        if ((engine_list_tail == NULL) || (engine_list_tail->next != NULL)) {
  ------------------
  |  Branch (80:13): [True: 0, False: 0]
  |  Branch (80:43): [True: 0, False: 0]
  ------------------
   81|      0|            ENGINEerr(ENGINE_F_ENGINE_LIST_ADD, ENGINE_R_INTERNAL_LIST_ERROR);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   82|      0|            return 0;
   83|      0|        }
   84|      0|        engine_list_tail->next = e;
   85|      0|        e->prev = engine_list_tail;
   86|      0|    }
   87|       |    /*
   88|       |     * Having the engine in the list assumes a structural reference.
   89|       |     */
   90|      2|    e->struct_ref++;
   91|      2|    engine_ref_debug(e, 0, 1);
   92|       |    /* However it came to be, e is the last item in the list. */
   93|      2|    engine_list_tail = e;
   94|       |    e->next = NULL;
   95|      2|    return 1;
   96|      2|}
eng_list.c:engine_list_cleanup:
   34|      2|{
   35|      2|    ENGINE *iterator = engine_list_head;
   36|       |
   37|      4|    while (iterator != NULL) {
  ------------------
  |  Branch (37:12): [True: 2, False: 2]
  ------------------
   38|      2|        ENGINE_remove(iterator);
   39|      2|        iterator = engine_list_head;
   40|      2|    }
   41|      2|    return;
   42|      2|}
eng_list.c:engine_list_remove:
   99|      2|{
  100|      2|    ENGINE *iterator;
  101|       |
  102|      2|    if (e == NULL) {
  ------------------
  |  Branch (102:9): [True: 0, False: 2]
  ------------------
  103|      0|        ENGINEerr(ENGINE_F_ENGINE_LIST_REMOVE, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  104|      0|        return 0;
  105|      0|    }
  106|       |    /* We need to check that e is in our linked list! */
  107|      2|    iterator = engine_list_head;
  108|      2|    while (iterator && (iterator != e))
  ------------------
  |  Branch (108:12): [True: 2, False: 0]
  |  Branch (108:24): [True: 0, False: 2]
  ------------------
  109|      0|        iterator = iterator->next;
  110|      2|    if (iterator == NULL) {
  ------------------
  |  Branch (110:9): [True: 0, False: 2]
  ------------------
  111|      0|        ENGINEerr(ENGINE_F_ENGINE_LIST_REMOVE,
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  112|      0|                  ENGINE_R_ENGINE_IS_NOT_IN_LIST);
  113|      0|        return 0;
  114|      0|    }
  115|       |    /* un-link e from the chain. */
  116|      2|    if (e->next)
  ------------------
  |  Branch (116:9): [True: 0, False: 2]
  ------------------
  117|      0|        e->next->prev = e->prev;
  118|      2|    if (e->prev)
  ------------------
  |  Branch (118:9): [True: 0, False: 2]
  ------------------
  119|      0|        e->prev->next = e->next;
  120|       |    /* Correct our head/tail if necessary. */
  121|      2|    if (engine_list_head == e)
  ------------------
  |  Branch (121:9): [True: 2, False: 0]
  ------------------
  122|      2|        engine_list_head = e->next;
  123|      2|    if (engine_list_tail == e)
  ------------------
  |  Branch (123:9): [True: 2, False: 0]
  ------------------
  124|      2|        engine_list_tail = e->prev;
  125|      2|    engine_free_util(e, 0);
  126|      2|    return 1;
  127|      2|}

engine_load_rdrand_int:
   95|      2|{
   96|      2|}

engine_table_select:
  198|  57.9k|{
  199|  57.9k|    ENGINE *ret = NULL;
  200|  57.9k|    ENGINE_PILE tmplate, *fnd = NULL;
  201|  57.9k|    int initres, loop = 0;
  202|       |
  203|  57.9k|    if (!(*table)) {
  ------------------
  |  Branch (203:9): [True: 57.9k, False: 0]
  ------------------
  204|       |#ifdef ENGINE_TABLE_DEBUG
  205|       |        fprintf(stderr, "engine_table_dbg: %s:%d, nid=%d, nothing "
  206|       |                "registered!\n", f, l, nid);
  207|       |#endif
  208|  57.9k|        return NULL;
  209|  57.9k|    }
  210|      0|    ERR_set_mark();
  211|      0|    CRYPTO_THREAD_write_lock(global_engine_lock);
  212|       |    /*
  213|       |     * Check again inside the lock otherwise we could race against cleanup
  214|       |     * operations. But don't worry about a fprintf(stderr).
  215|       |     */
  216|      0|    if (!int_table_check(table, 0))
  ------------------
  |  Branch (216:9): [True: 0, False: 0]
  ------------------
  217|      0|        goto end;
  218|      0|    tmplate.nid = nid;
  219|      0|    fnd = lh_ENGINE_PILE_retrieve(&(*table)->piles, &tmplate);
  220|      0|    if (!fnd)
  ------------------
  |  Branch (220:9): [True: 0, False: 0]
  ------------------
  221|      0|        goto end;
  222|      0|    if (fnd->funct && engine_unlocked_init(fnd->funct)) {
  ------------------
  |  Branch (222:9): [True: 0, False: 0]
  |  Branch (222:23): [True: 0, False: 0]
  ------------------
  223|       |#ifdef ENGINE_TABLE_DEBUG
  224|       |        fprintf(stderr, "engine_table_dbg: %s:%d, nid=%d, using "
  225|       |                "ENGINE '%s' cached\n", f, l, nid, fnd->funct->id);
  226|       |#endif
  227|      0|        ret = fnd->funct;
  228|      0|        goto end;
  229|      0|    }
  230|      0|    if (fnd->uptodate) {
  ------------------
  |  Branch (230:9): [True: 0, False: 0]
  ------------------
  231|      0|        ret = fnd->funct;
  232|      0|        goto end;
  233|      0|    }
  234|      0| trynext:
  235|      0|    ret = sk_ENGINE_value(fnd->sk, loop++);
  236|      0|    if (!ret) {
  ------------------
  |  Branch (236:9): [True: 0, False: 0]
  ------------------
  237|       |#ifdef ENGINE_TABLE_DEBUG
  238|       |        fprintf(stderr, "engine_table_dbg: %s:%d, nid=%d, no "
  239|       |                "registered implementations would initialise\n", f, l, nid);
  240|       |#endif
  241|      0|        goto end;
  242|      0|    }
  243|       |    /* Try to initialise the ENGINE? */
  244|      0|    if ((ret->funct_ref > 0) || !(table_flags & ENGINE_TABLE_FLAG_NOINIT))
  ------------------
  |  |   58|      0|# define ENGINE_TABLE_FLAG_NOINIT        (unsigned int)0x0001
  ------------------
  |  Branch (244:9): [True: 0, False: 0]
  |  Branch (244:33): [True: 0, False: 0]
  ------------------
  245|      0|        initres = engine_unlocked_init(ret);
  246|      0|    else
  247|      0|        initres = 0;
  248|      0|    if (initres) {
  ------------------
  |  Branch (248:9): [True: 0, False: 0]
  ------------------
  249|       |        /* Update 'funct' */
  250|      0|        if ((fnd->funct != ret) && engine_unlocked_init(ret)) {
  ------------------
  |  Branch (250:13): [True: 0, False: 0]
  |  Branch (250:36): [True: 0, False: 0]
  ------------------
  251|       |            /* If there was a previous default we release it. */
  252|      0|            if (fnd->funct)
  ------------------
  |  Branch (252:17): [True: 0, False: 0]
  ------------------
  253|      0|                engine_unlocked_finish(fnd->funct, 0);
  254|      0|            fnd->funct = ret;
  255|       |#ifdef ENGINE_TABLE_DEBUG
  256|       |            fprintf(stderr, "engine_table_dbg: %s:%d, nid=%d, "
  257|       |                    "setting default to '%s'\n", f, l, nid, ret->id);
  258|       |#endif
  259|      0|        }
  260|       |#ifdef ENGINE_TABLE_DEBUG
  261|       |        fprintf(stderr, "engine_table_dbg: %s:%d, nid=%d, using "
  262|       |                "newly initialised '%s'\n", f, l, nid, ret->id);
  263|       |#endif
  264|      0|        goto end;
  265|      0|    }
  266|      0|    goto trynext;
  267|      0| end:
  268|       |    /*
  269|       |     * If it failed, it is unlikely to succeed again until some future
  270|       |     * registrations have taken place. In all cases, we cache.
  271|       |     */
  272|      0|    if (fnd)
  ------------------
  |  Branch (272:9): [True: 0, False: 0]
  ------------------
  273|      0|        fnd->uptodate = 1;
  274|       |#ifdef ENGINE_TABLE_DEBUG
  275|       |    if (ret)
  276|       |        fprintf(stderr, "engine_table_dbg: %s:%d, nid=%d, caching "
  277|       |                "ENGINE '%s'\n", f, l, nid, ret->id);
  278|       |    else
  279|       |        fprintf(stderr, "engine_table_dbg: %s:%d, nid=%d, caching "
  280|       |                "'no matching ENGINE'\n", f, l, nid);
  281|       |#endif
  282|      0|    CRYPTO_THREAD_unlock(global_engine_lock);
  283|       |    /*
  284|       |     * Whatever happened, any failed init()s are not failures in this
  285|       |     * context, so clear our error state.
  286|       |     */
  287|      0|    ERR_pop_to_mark();
  288|      0|    return ret;
  289|      0|}
engine_table_doall:
  302|     10|{
  303|     10|    ENGINE_PILE_DOALL dall;
  304|     10|    dall.cb = cb;
  305|     10|    dall.arg = arg;
  306|     10|    if (table)
  ------------------
  |  Branch (306:9): [True: 0, False: 10]
  ------------------
  307|      0|        lh_ENGINE_PILE_doall_ENGINE_PILE_DOALL(&table->piles, int_dall, &dall);
  308|     10|}

ENGINE_register_pkey_asn1_meths:
   36|      2|{
   37|      2|    if (e->pkey_asn1_meths) {
  ------------------
  |  Branch (37:9): [True: 0, False: 2]
  ------------------
   38|      0|        const int *nids;
   39|      0|        int num_nids = e->pkey_asn1_meths(e, NULL, &nids, 0);
   40|      0|        if (num_nids > 0)
  ------------------
  |  Branch (40:13): [True: 0, False: 0]
  ------------------
   41|      0|            return engine_table_register(&pkey_asn1_meth_table,
   42|      0|                                         engine_unregister_all_pkey_asn1_meths,
   43|      0|                                         e, nids, num_nids, 0);
   44|      0|    }
   45|      2|    return 1;
   46|      2|}
ENGINE_get_pkey_asn1_meth_engine:
   75|  28.9k|{
   76|  28.9k|    return engine_table_select(&pkey_asn1_meth_table, nid);
   77|  28.9k|}
engine_pkey_asn1_meths_free:
  114|      2|{
  115|      2|    int i;
  116|      2|    EVP_PKEY_ASN1_METHOD *pkm;
  117|      2|    if (e->pkey_asn1_meths) {
  ------------------
  |  Branch (117:9): [True: 0, False: 2]
  ------------------
  118|      0|        const int *pknids;
  119|      0|        int npknids;
  120|      0|        npknids = e->pkey_asn1_meths(e, NULL, &pknids, 0);
  121|      0|        for (i = 0; i < npknids; i++) {
  ------------------
  |  Branch (121:21): [True: 0, False: 0]
  ------------------
  122|      0|            if (e->pkey_asn1_meths(e, &pkm, NULL, pknids[i])) {
  ------------------
  |  Branch (122:17): [True: 0, False: 0]
  ------------------
  123|      0|                EVP_PKEY_asn1_free(pkm);
  124|      0|            }
  125|      0|        }
  126|      0|    }
  127|      2|}
ENGINE_pkey_asn1_find_str:
  188|     10|{
  189|     10|    ENGINE_FIND_STR fstr;
  190|     10|    fstr.e = NULL;
  191|     10|    fstr.ameth = NULL;
  192|     10|    fstr.str = str;
  193|     10|    fstr.len = len;
  194|       |
  195|     10|    if (!RUN_ONCE(&engine_lock_init, do_engine_lock_init)) {
  ------------------
  |  |  119|     10|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 10, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (195:9): [True: 0, False: 10]
  ------------------
  196|      0|        ENGINEerr(ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  122|      0|# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  197|      0|        return NULL;
  198|      0|    }
  199|       |
  200|     10|    CRYPTO_THREAD_write_lock(global_engine_lock);
  201|     10|    engine_table_doall(pkey_asn1_meth_table, look_str_cb, &fstr);
  202|       |    /* If found obtain a structural reference to engine */
  203|     10|    if (fstr.e) {
  ------------------
  |  Branch (203:9): [True: 0, False: 10]
  ------------------
  204|      0|        fstr.e->struct_ref++;
  205|      0|        engine_ref_debug(fstr.e, 0, 1);
  206|      0|    }
  207|     10|    *pe = fstr.e;
  208|     10|    CRYPTO_THREAD_unlock(global_engine_lock);
  209|     10|    return fstr.ameth;
  210|     10|}

ENGINE_register_ciphers:
   25|      2|{
   26|      2|    if (e->ciphers) {
  ------------------
  |  Branch (26:9): [True: 0, False: 2]
  ------------------
   27|      0|        const int *nids;
   28|      0|        int num_nids = e->ciphers(e, NULL, &nids, 0);
   29|      0|        if (num_nids > 0)
  ------------------
  |  Branch (29:13): [True: 0, False: 0]
  ------------------
   30|      0|            return engine_table_register(&cipher_table,
   31|      0|                                         engine_unregister_all_ciphers, e,
   32|      0|                                         nids, num_nids, 0);
   33|      0|    }
   34|      2|    return 1;
   35|      2|}
ENGINE_get_cipher_engine:
   64|      9|{
   65|      9|    return engine_table_select(&cipher_table, nid);
   66|      9|}

ENGINE_register_DH:
   26|      2|{
   27|      2|    if (e->dh_meth)
  ------------------
  |  Branch (27:9): [True: 0, False: 2]
  ------------------
   28|      0|        return engine_table_register(&dh_table,
   29|      0|                                     engine_unregister_all_DH, e, &dummy_nid,
   30|      0|                                     1, 0);
   31|      2|    return 1;
   32|      2|}

ENGINE_register_digests:
   25|      2|{
   26|      2|    if (e->digests) {
  ------------------
  |  Branch (26:9): [True: 0, False: 2]
  ------------------
   27|      0|        const int *nids;
   28|      0|        int num_nids = e->digests(e, NULL, &nids, 0);
   29|      0|        if (num_nids > 0)
  ------------------
  |  Branch (29:13): [True: 0, False: 0]
  ------------------
   30|      0|            return engine_table_register(&digest_table,
   31|      0|                                         engine_unregister_all_digests, e,
   32|      0|                                         nids, num_nids, 0);
   33|      0|    }
   34|      2|    return 1;
   35|      2|}

ENGINE_register_DSA:
   26|      2|{
   27|      2|    if (e->dsa_meth)
  ------------------
  |  Branch (27:9): [True: 0, False: 2]
  ------------------
   28|      0|        return engine_table_register(&dsa_table,
   29|      0|                                     engine_unregister_all_DSA, e, &dummy_nid,
   30|      0|                                     1, 0);
   31|      2|    return 1;
   32|      2|}

ENGINE_register_EC:
   26|      2|{
   27|      2|    if (e->ec_meth != NULL)
  ------------------
  |  Branch (27:9): [True: 0, False: 2]
  ------------------
   28|      0|        return engine_table_register(&dh_table,
   29|      0|                                     engine_unregister_all_EC, e, &dummy_nid,
   30|      0|                                     1, 0);
   31|      2|    return 1;
   32|      2|}

ENGINE_register_pkey_meths:
   26|      2|{
   27|      2|    if (e->pkey_meths) {
  ------------------
  |  Branch (27:9): [True: 0, False: 2]
  ------------------
   28|      0|        const int *nids;
   29|      0|        int num_nids = e->pkey_meths(e, NULL, &nids, 0);
   30|      0|        if (num_nids > 0)
  ------------------
  |  Branch (30:13): [True: 0, False: 0]
  ------------------
   31|      0|            return engine_table_register(&pkey_meth_table,
   32|      0|                                         engine_unregister_all_pkey_meths, e,
   33|      0|                                         nids, num_nids, 0);
   34|      0|    }
   35|      2|    return 1;
   36|      2|}
ENGINE_get_pkey_meth_engine:
   65|  28.9k|{
   66|  28.9k|    return engine_table_select(&pkey_meth_table, nid);
   67|  28.9k|}
engine_pkey_meths_free:
  101|      2|{
  102|      2|    int i;
  103|      2|    EVP_PKEY_METHOD *pkm;
  104|      2|    if (e->pkey_meths) {
  ------------------
  |  Branch (104:9): [True: 0, False: 2]
  ------------------
  105|      0|        const int *pknids;
  106|      0|        int npknids;
  107|      0|        npknids = e->pkey_meths(e, NULL, &pknids, 0);
  108|      0|        for (i = 0; i < npknids; i++) {
  ------------------
  |  Branch (108:21): [True: 0, False: 0]
  ------------------
  109|      0|            if (e->pkey_meths(e, &pkm, NULL, pknids[i])) {
  ------------------
  |  Branch (109:17): [True: 0, False: 0]
  ------------------
  110|      0|                EVP_PKEY_meth_free(pkm);
  111|      0|            }
  112|      0|        }
  113|      0|    }
  114|      2|}

ENGINE_register_RAND:
   26|      2|{
   27|      2|    if (e->rand_meth)
  ------------------
  |  Branch (27:9): [True: 0, False: 2]
  ------------------
   28|      0|        return engine_table_register(&rand_table,
   29|      0|                                     engine_unregister_all_RAND, e,
   30|      0|                                     &dummy_nid, 1, 0);
   31|      2|    return 1;
   32|      2|}
ENGINE_get_default_RAND:
   57|      1|{
   58|      1|    return engine_table_select(&rand_table, dummy_nid);
   59|      1|}

ENGINE_register_RSA:
   26|      2|{
   27|      2|    if (e->rsa_meth)
  ------------------
  |  Branch (27:9): [True: 0, False: 2]
  ------------------
   28|      0|        return engine_table_register(&rsa_table,
   29|      0|                                     engine_unregister_all_RSA, e, &dummy_nid,
   30|      0|                                     1, 0);
   31|      2|    return 1;
   32|      2|}

err_cleanup:
  312|      2|{
  313|      2|    if (set_err_thread_local != 0)
  ------------------
  |  Branch (313:9): [True: 2, False: 0]
  ------------------
  314|      2|        CRYPTO_THREAD_cleanup_local(&err_thread_local);
  315|      2|    CRYPTO_THREAD_lock_free(err_string_lock);
  316|      2|    err_string_lock = NULL;
  317|      2|    lh_ERR_STRING_DATA_free(int_error_hash);
  318|       |    int_error_hash = NULL;
  319|      2|}
ERR_load_ERR_strings:
  346|    118|{
  347|    118|#ifndef OPENSSL_NO_ERR
  348|    118|    if (!RUN_ONCE(&err_string_init, do_err_strings_init))
  ------------------
  |  |  119|    118|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 118, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (348:9): [True: 0, False: 118]
  ------------------
  349|      0|        return 0;
  350|       |
  351|    118|    err_load_strings(ERR_str_libraries);
  352|    118|    err_load_strings(ERR_str_reasons);
  353|    118|    err_patch(ERR_LIB_SYS, ERR_str_functs);
  ------------------
  |  |   55|    118|# define ERR_LIB_SYS             2
  ------------------
  354|    118|    err_load_strings(ERR_str_functs);
  355|    118|    build_SYS_str_reasons();
  356|    118|#endif
  357|    118|    return 1;
  358|    118|}
ERR_load_strings_const:
  371|    116|{
  372|    116|    if (ERR_load_ERR_strings() == 0)
  ------------------
  |  Branch (372:9): [True: 0, False: 116]
  ------------------
  373|      0|        return 0;
  374|    116|    err_load_strings(str);
  375|    116|    return 1;
  376|    116|}
err_free_strings_int:
  396|      4|{
  397|      4|    if (!RUN_ONCE(&err_string_init, do_err_strings_init))
  ------------------
  |  |  119|      4|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 4, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (397:9): [True: 0, False: 4]
  ------------------
  398|      0|        return;
  399|      4|}
ERR_put_error:
  404|     10|{
  405|     10|    ERR_STATE *es;
  406|       |
  407|       |#ifdef _OSD_POSIX
  408|       |    /*
  409|       |     * In the BS2000-OSD POSIX subsystem, the compiler generates path names
  410|       |     * in the form "*POSIX(/etc/passwd)". This dirty hack strips them to
  411|       |     * something sensible. @@@ We shouldn't modify a const string, though.
  412|       |     */
  413|       |    if (strncmp(file, "*POSIX(", sizeof("*POSIX(") - 1) == 0) {
  414|       |        char *end;
  415|       |
  416|       |        /* Skip the "*POSIX(" prefix */
  417|       |        file += sizeof("*POSIX(") - 1;
  418|       |        end = &file[strlen(file) - 1];
  419|       |        if (*end == ')')
  420|       |            *end = '\0';
  421|       |        /* Optional: use the basename of the path only. */
  422|       |        if ((end = strrchr(file, '/')) != NULL)
  423|       |            file = &end[1];
  424|       |    }
  425|       |#endif
  426|     10|    es = ERR_get_state();
  427|     10|    if (es == NULL)
  ------------------
  |  Branch (427:9): [True: 0, False: 10]
  ------------------
  428|      0|        return;
  429|       |
  430|     10|    es->top = (es->top + 1) % ERR_NUM_ERRORS;
  ------------------
  |  |   42|     10|# define ERR_NUM_ERRORS  16
  ------------------
  431|     10|    if (es->top == es->bottom)
  ------------------
  |  Branch (431:9): [True: 0, False: 10]
  ------------------
  432|      0|        es->bottom = (es->bottom + 1) % ERR_NUM_ERRORS;
  ------------------
  |  |   42|      0|# define ERR_NUM_ERRORS  16
  ------------------
  433|     10|    es->err_flags[es->top] = 0;
  434|     10|    es->err_buffer[es->top] = ERR_PACK(lib, func, reason);
  ------------------
  |  |  138|     10|# define ERR_PACK(l,f,r) ( \
  |  |  139|     10|        (((unsigned int)(l) & 0x0FF) << 24L) | \
  |  |  140|     10|        (((unsigned int)(f) & 0xFFF) << 12L) | \
  |  |  141|     10|        (((unsigned int)(r) & 0xFFF)       ) )
  ------------------
  435|     10|    es->err_file[es->top] = file;
  436|     10|    es->err_line[es->top] = line;
  437|       |    err_clear_data(es, es->top);
  ------------------
  |  |  265|     10|        do { \
  |  |  266|     10|            if ((p)->err_data_flags[i] & ERR_TXT_MALLOCED) {\
  |  |  ------------------
  |  |  |  |   36|     10|# define ERR_TXT_MALLOCED        0x01
  |  |  ------------------
  |  |  |  Branch (266:17): [True: 0, False: 10]
  |  |  ------------------
  |  |  267|      0|                OPENSSL_free((p)->err_data[i]); \
  |  |  ------------------
  |  |  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  268|      0|                (p)->err_data[i] = NULL; \
  |  |  269|      0|            } \
  |  |  270|     10|            (p)->err_data_flags[i] = 0; \
  |  |  271|     10|        } while (0)
  |  |  ------------------
  |  |  |  Branch (271:18): [Folded, False: 10]
  |  |  ------------------
  ------------------
  438|     10|}
ERR_clear_error:
  441|  86.9k|{
  442|  86.9k|    int i;
  443|  86.9k|    ERR_STATE *es;
  444|       |
  445|  86.9k|    es = ERR_get_state();
  446|  86.9k|    if (es == NULL)
  ------------------
  |  Branch (446:9): [True: 0, False: 86.9k]
  ------------------
  447|      0|        return;
  448|       |
  449|  1.47M|    for (i = 0; i < ERR_NUM_ERRORS; i++) {
  ------------------
  |  |   42|  1.47M|# define ERR_NUM_ERRORS  16
  ------------------
  |  Branch (449:17): [True: 1.39M, False: 86.9k]
  ------------------
  450|       |        err_clear(es, i);
  ------------------
  |  |  274|  1.39M|        do { \
  |  |  275|  1.39M|            err_clear_data(p, i); \
  |  |  ------------------
  |  |  |  |  265|  1.39M|        do { \
  |  |  |  |  266|  1.39M|            if ((p)->err_data_flags[i] & ERR_TXT_MALLOCED) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|  1.39M|# define ERR_TXT_MALLOCED        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (266:17): [True: 4, False: 1.39M]
  |  |  |  |  ------------------
  |  |  |  |  267|      4|                OPENSSL_free((p)->err_data[i]); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|      4|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  268|      4|                (p)->err_data[i] = NULL; \
  |  |  |  |  269|      4|            } \
  |  |  |  |  270|  1.39M|            (p)->err_data_flags[i] = 0; \
  |  |  |  |  271|  1.39M|        } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (271:18): [Folded, False: 1.39M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  276|  1.39M|            (p)->err_flags[i] = 0; \
  |  |  277|  1.39M|            (p)->err_buffer[i] = 0; \
  |  |  278|  1.39M|            (p)->err_file[i] = NULL; \
  |  |  279|  1.39M|            (p)->err_line[i] = -1; \
  |  |  280|  1.39M|        } while (0)
  |  |  ------------------
  |  |  |  Branch (280:18): [Folded, False: 1.39M]
  |  |  ------------------
  ------------------
  451|  1.39M|    }
  452|  86.9k|    es->top = es->bottom = 0;
  453|  86.9k|}
ERR_get_error:
  456|  28.9k|{
  457|  28.9k|    return get_error_values(1, 0, NULL, NULL, NULL, NULL);
  458|  28.9k|}
ERR_peek_error:
  472|  28.9k|{
  473|  28.9k|    return get_error_values(0, 0, NULL, NULL, NULL, NULL);
  474|  28.9k|}
ERR_func_error_string:
  652|     58|{
  653|     58|    ERR_STRING_DATA d, *p;
  654|     58|    unsigned long l, f;
  655|       |
  656|     58|    if (!RUN_ONCE(&err_string_init, do_err_strings_init)) {
  ------------------
  |  |  119|     58|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 58, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (656:9): [True: 0, False: 58]
  ------------------
  657|      0|        return NULL;
  658|      0|    }
  659|       |
  660|     58|    l = ERR_GET_LIB(e);
  ------------------
  |  |  142|     58|# define ERR_GET_LIB(l)          (int)(((l) >> 24L) & 0x0FFL)
  ------------------
  661|     58|    f = ERR_GET_FUNC(e);
  ------------------
  |  |  143|     58|# define ERR_GET_FUNC(l)         (int)(((l) >> 12L) & 0xFFFL)
  ------------------
  662|     58|    d.error = ERR_PACK(l, f, 0);
  ------------------
  |  |  138|     58|# define ERR_PACK(l,f,r) ( \
  |  |  139|     58|        (((unsigned int)(l) & 0x0FF) << 24L) | \
  |  |  140|     58|        (((unsigned int)(f) & 0xFFF) << 12L) | \
  |  |  141|     58|        (((unsigned int)(r) & 0xFFF)       ) )
  ------------------
  663|     58|    p = int_err_get_item(&d);
  664|     58|    return ((p == NULL) ? NULL : p->string);
  ------------------
  |  Branch (664:13): [True: 58, False: 0]
  ------------------
  665|     58|}
ERR_reason_error_string:
  668|  28.9k|{
  669|  28.9k|    ERR_STRING_DATA d, *p = NULL;
  670|  28.9k|    unsigned long l, r;
  671|       |
  672|  28.9k|    if (!RUN_ONCE(&err_string_init, do_err_strings_init)) {
  ------------------
  |  |  119|  28.9k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 28.9k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (672:9): [True: 0, False: 28.9k]
  ------------------
  673|      0|        return NULL;
  674|      0|    }
  675|       |
  676|  28.9k|    l = ERR_GET_LIB(e);
  ------------------
  |  |  142|  28.9k|# define ERR_GET_LIB(l)          (int)(((l) >> 24L) & 0x0FFL)
  ------------------
  677|  28.9k|    r = ERR_GET_REASON(e);
  ------------------
  |  |  144|  28.9k|# define ERR_GET_REASON(l)       (int)( (l)         & 0xFFFL)
  ------------------
  678|  28.9k|    d.error = ERR_PACK(l, 0, r);
  ------------------
  |  |  138|  28.9k|# define ERR_PACK(l,f,r) ( \
  |  |  139|  28.9k|        (((unsigned int)(l) & 0x0FF) << 24L) | \
  |  |  140|  28.9k|        (((unsigned int)(f) & 0xFFF) << 12L) | \
  |  |  141|  28.9k|        (((unsigned int)(r) & 0xFFF)       ) )
  ------------------
  679|  28.9k|    p = int_err_get_item(&d);
  680|  28.9k|    if (!p) {
  ------------------
  |  Branch (680:9): [True: 28.9k, False: 0]
  ------------------
  681|  28.9k|        d.error = ERR_PACK(0, 0, r);
  ------------------
  |  |  138|  28.9k|# define ERR_PACK(l,f,r) ( \
  |  |  139|  28.9k|        (((unsigned int)(l) & 0x0FF) << 24L) | \
  |  |  140|  28.9k|        (((unsigned int)(f) & 0xFFF) << 12L) | \
  |  |  141|  28.9k|        (((unsigned int)(r) & 0xFFF)       ) )
  ------------------
  682|  28.9k|        p = int_err_get_item(&d);
  683|  28.9k|    }
  684|  28.9k|    return ((p == NULL) ? NULL : p->string);
  ------------------
  |  Branch (684:13): [True: 28.9k, False: 0]
  ------------------
  685|  28.9k|}
err_delete_thread_state:
  688|      2|{
  689|      2|    ERR_STATE *state = CRYPTO_THREAD_get_local(&err_thread_local);
  690|      2|    if (state == NULL)
  ------------------
  |  Branch (690:9): [True: 0, False: 2]
  ------------------
  691|      0|        return;
  692|       |
  693|      2|    CRYPTO_THREAD_set_local(&err_thread_local, NULL);
  694|      2|    ERR_STATE_free(state);
  695|      2|}
ERR_get_state:
  716|   144k|{
  717|   144k|    ERR_STATE *state;
  718|   144k|    int saveerrno = get_last_sys_error();
  ------------------
  |  |   75|   144k|# define get_last_sys_error()    errno
  ------------------
  719|       |
  720|   144k|    if (!OPENSSL_init_crypto(OPENSSL_INIT_BASE_ONLY, NULL))
  ------------------
  |  |   28|   144k|# define OPENSSL_INIT_BASE_ONLY              0x00040000L
  ------------------
  |  Branch (720:9): [True: 0, False: 144k]
  ------------------
  721|      0|        return NULL;
  722|       |
  723|   144k|    if (!RUN_ONCE(&err_init, err_do_init))
  ------------------
  |  |  119|   144k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 144k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (723:9): [True: 0, False: 144k]
  ------------------
  724|      0|        return NULL;
  725|       |
  726|   144k|    state = CRYPTO_THREAD_get_local(&err_thread_local);
  727|   144k|    if (state == (ERR_STATE*)-1)
  ------------------
  |  Branch (727:9): [True: 0, False: 144k]
  ------------------
  728|      0|        return NULL;
  729|       |
  730|   144k|    if (state == NULL) {
  ------------------
  |  Branch (730:9): [True: 2, False: 144k]
  ------------------
  731|      2|        if (!CRYPTO_THREAD_set_local(&err_thread_local, (ERR_STATE*)-1))
  ------------------
  |  Branch (731:13): [True: 0, False: 2]
  ------------------
  732|      0|            return NULL;
  733|       |
  734|      2|        if ((state = OPENSSL_zalloc(sizeof(*state))) == NULL) {
  ------------------
  |  |  120|      2|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (734:13): [True: 0, False: 2]
  ------------------
  735|      0|            CRYPTO_THREAD_set_local(&err_thread_local, NULL);
  736|      0|            return NULL;
  737|      0|        }
  738|       |
  739|      2|        if (!ossl_init_thread_start(OPENSSL_INIT_THREAD_ERR_STATE)
  ------------------
  |  |   32|      2|# define OPENSSL_INIT_THREAD_ERR_STATE       0x02
  ------------------
  |  Branch (739:13): [True: 0, False: 2]
  ------------------
  740|      2|                || !CRYPTO_THREAD_set_local(&err_thread_local, state)) {
  ------------------
  |  Branch (740:20): [True: 0, False: 2]
  ------------------
  741|      0|            ERR_STATE_free(state);
  742|      0|            CRYPTO_THREAD_set_local(&err_thread_local, NULL);
  743|      0|            return NULL;
  744|      0|        }
  745|       |
  746|       |        /* Ignore failures from these */
  747|      2|        OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL);
  ------------------
  |  |  357|      2|# define OPENSSL_INIT_LOAD_CRYPTO_STRINGS    0x00000002L
  ------------------
  748|      2|    }
  749|       |
  750|   144k|    set_sys_error(saveerrno);
  ------------------
  |  |   77|   144k|# define set_sys_error(e)        errno=(e)
  ------------------
  751|   144k|    return state;
  752|   144k|}
ERR_add_error_data:
  839|      4|{
  840|      4|    va_list args;
  841|      4|    va_start(args, num);
  842|      4|    ERR_add_error_vdata(num, args);
  843|       |    va_end(args);
  844|      4|}
ERR_add_error_vdata:
  847|      4|{
  848|      4|    int i, n, s;
  849|      4|    char *str, *p, *a;
  850|       |
  851|      4|    s = 80;
  852|      4|    if ((str = OPENSSL_malloc(s + 1)) == NULL) {
  ------------------
  |  |  118|      4|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (852:9): [True: 0, False: 4]
  ------------------
  853|       |        /* ERRerr(ERR_F_ERR_ADD_ERROR_VDATA, ERR_R_MALLOC_FAILURE); */
  854|      0|        return;
  855|      0|    }
  856|      4|    str[0] = '\0';
  857|       |
  858|      4|    n = 0;
  859|     22|    for (i = 0; i < num; i++) {
  ------------------
  |  Branch (859:17): [True: 18, False: 4]
  ------------------
  860|     18|        a = va_arg(args, char *);
  861|     18|        if (a == NULL)
  ------------------
  |  Branch (861:13): [True: 2, False: 16]
  ------------------
  862|      2|            a = "<NULL>";
  863|     18|        n += strlen(a);
  864|     18|        if (n > s) {
  ------------------
  |  Branch (864:13): [True: 0, False: 18]
  ------------------
  865|      0|            s = n + 20;
  866|      0|            p = OPENSSL_realloc(str, s + 1);
  ------------------
  |  |  122|      0|        CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  867|      0|            if (p == NULL) {
  ------------------
  |  Branch (867:17): [True: 0, False: 0]
  ------------------
  868|      0|                OPENSSL_free(str);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  869|      0|                return;
  870|      0|            }
  871|      0|            str = p;
  872|      0|        }
  873|     18|        OPENSSL_strlcat(str, a, (size_t)s + 1);
  874|     18|    }
  875|      4|    if (!err_set_error_data_int(str, ERR_TXT_MALLOCED | ERR_TXT_STRING))
  ------------------
  |  |   36|      4|# define ERR_TXT_MALLOCED        0x01
  ------------------
                  if (!err_set_error_data_int(str, ERR_TXT_MALLOCED | ERR_TXT_STRING))
  ------------------
  |  |   37|      4|# define ERR_TXT_STRING          0x02
  ------------------
  |  Branch (875:9): [True: 0, False: 4]
  ------------------
  876|      0|        OPENSSL_free(str);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  877|      4|}
err.c:do_err_strings_init:
  295|      2|{
  296|      2|    if (!OPENSSL_init_crypto(0, NULL))
  ------------------
  |  Branch (296:9): [True: 0, False: 2]
  ------------------
  297|      0|        return 0;
  298|      2|    err_string_lock = CRYPTO_THREAD_lock_new();
  299|      2|    if (err_string_lock == NULL)
  ------------------
  |  Branch (299:9): [True: 0, False: 2]
  ------------------
  300|      0|        return 0;
  301|      2|    int_error_hash = lh_ERR_STRING_DATA_new(err_string_data_hash,
  302|      2|                                            err_string_data_cmp);
  303|      2|    if (int_error_hash == NULL) {
  ------------------
  |  Branch (303:9): [True: 0, False: 2]
  ------------------
  304|      0|        CRYPTO_THREAD_lock_free(err_string_lock);
  305|      0|        err_string_lock = NULL;
  306|      0|        return 0;
  307|      0|    }
  308|      2|    return 1;
  309|      2|}
err.c:err_string_data_hash:
  159|  74.5k|{
  160|  74.5k|    unsigned long ret, l;
  161|       |
  162|  74.5k|    l = a->error;
  163|  74.5k|    ret = l ^ ERR_GET_LIB(l) ^ ERR_GET_FUNC(l);
  ------------------
  |  |  142|  74.5k|# define ERR_GET_LIB(l)          (int)(((l) >> 24L) & 0x0FFL)
  ------------------
                  ret = l ^ ERR_GET_LIB(l) ^ ERR_GET_FUNC(l);
  ------------------
  |  |  143|  74.5k|# define ERR_GET_FUNC(l)         (int)(((l) >> 12L) & 0xFFFL)
  ------------------
  164|  74.5k|    return (ret ^ ret % 19 * 13);
  165|  74.5k|}
err.c:err_string_data_cmp:
  169|  10.5k|{
  170|  10.5k|    if (a->error == b->error)
  ------------------
  |  Branch (170:9): [True: 10.2k, False: 320]
  ------------------
  171|  10.2k|        return 0;
  172|    320|    return a->error > b->error ? 1 : -1;
  ------------------
  |  Branch (172:12): [True: 182, False: 138]
  ------------------
  173|  10.5k|}
err.c:err_load_strings:
  336|    472|{
  337|    472|    CRYPTO_THREAD_write_lock(err_string_lock);
  338|  17.0k|    for (; str->error; str++)
  ------------------
  |  Branch (338:12): [True: 16.5k, False: 472]
  ------------------
  339|  16.5k|        (void)lh_ERR_STRING_DATA_insert(int_error_hash,
  340|  16.5k|                                       (ERR_STRING_DATA *)str);
  341|    472|    CRYPTO_THREAD_unlock(err_string_lock);
  342|    472|    return 1;
  343|    472|}
err.c:err_patch:
  325|    118|{
  326|    118|    unsigned long plib = ERR_PACK(lib, 0, 0);
  ------------------
  |  |  138|    118|# define ERR_PACK(l,f,r) ( \
  |  |  139|    118|        (((unsigned int)(l) & 0x0FF) << 24L) | \
  |  |  140|    118|        (((unsigned int)(f) & 0xFFF) << 12L) | \
  |  |  141|    118|        (((unsigned int)(r) & 0xFFF)       ) )
  ------------------
  327|       |
  328|  2.83k|    for (; str->error != 0; str++)
  ------------------
  |  Branch (328:12): [True: 2.71k, False: 118]
  ------------------
  329|  2.71k|        str->error |= plib;
  330|    118|}
err.c:build_SYS_str_reasons:
  203|    118|{
  204|       |    /* OPENSSL_malloc cannot be used here, use static storage instead */
  205|    118|    static char strerror_pool[SPACE_SYS_STR_REASONS];
  206|    118|    char *cur = strerror_pool;
  207|    118|    size_t cnt = 0;
  208|    118|    static int init = 1;
  209|    118|    int i;
  210|    118|    int saveerrno = get_last_sys_error();
  ------------------
  |  |   75|    118|# define get_last_sys_error()    errno
  ------------------
  211|       |
  212|    118|    CRYPTO_THREAD_write_lock(err_string_lock);
  213|    118|    if (!init) {
  ------------------
  |  Branch (213:9): [True: 116, False: 2]
  ------------------
  214|    116|        CRYPTO_THREAD_unlock(err_string_lock);
  215|    116|        return;
  216|    116|    }
  217|       |
  218|    256|    for (i = 1; i <= NUM_SYS_STR_REASONS; i++) {
  ------------------
  |  |  189|    256|# define NUM_SYS_STR_REASONS 127
  ------------------
  |  Branch (218:17): [True: 254, False: 2]
  ------------------
  219|    254|        ERR_STRING_DATA *str = &SYS_str_reasons[i - 1];
  220|       |
  221|    254|        str->error = ERR_PACK(ERR_LIB_SYS, 0, i);
  ------------------
  |  |  138|    254|# define ERR_PACK(l,f,r) ( \
  |  |  139|    254|        (((unsigned int)(l) & 0x0FF) << 24L) | \
  |  |  140|    254|        (((unsigned int)(f) & 0xFFF) << 12L) | \
  |  |  141|    254|        (((unsigned int)(r) & 0xFFF)       ) )
  ------------------
  222|       |        /*
  223|       |         * If we have used up all the space in strerror_pool,
  224|       |         * there's no point in calling openssl_strerror_r()
  225|       |         */
  226|    254|        if (str->string == NULL && cnt < sizeof(strerror_pool)) {
  ------------------
  |  Branch (226:13): [True: 254, False: 0]
  |  Branch (226:36): [True: 254, False: 0]
  ------------------
  227|    254|            if (openssl_strerror_r(i, cur, sizeof(strerror_pool) - cnt)) {
  ------------------
  |  Branch (227:17): [True: 250, False: 4]
  ------------------
  228|    250|                size_t l = strlen(cur);
  229|       |
  230|    250|                str->string = cur;
  231|    250|                cnt += l;
  232|    250|                cur += l;
  233|       |
  234|       |                /*
  235|       |                 * VMS has an unusual quirk of adding spaces at the end of
  236|       |                 * some (most? all?) messages. Lets trim them off.
  237|       |                 */
  238|    250|                while (cur > strerror_pool && ossl_isspace(cur[-1])) {
  ------------------
  |  |   76|    250|# define ossl_isspace(c)        (ossl_ctype_check((c), CTYPE_MASK_space))
  |  |  ------------------
  |  |  |  |   27|    250|# define CTYPE_MASK_space       0x8
  |  |  ------------------
  |  |  |  Branch (76:33): [True: 0, False: 250]
  |  |  ------------------
  ------------------
  |  Branch (238:24): [True: 250, False: 0]
  ------------------
  239|      0|                    cur--;
  240|      0|                    cnt--;
  241|      0|                }
  242|    250|                *cur++ = '\0';
  243|    250|                cnt++;
  244|    250|            }
  245|    254|        }
  246|    254|        if (str->string == NULL)
  ------------------
  |  Branch (246:13): [True: 4, False: 250]
  ------------------
  247|      4|            str->string = "unknown";
  248|    254|    }
  249|       |
  250|       |    /*
  251|       |     * Now we still have SYS_str_reasons[NUM_SYS_STR_REASONS] = {0, NULL}, as
  252|       |     * required by ERR_load_strings.
  253|       |     */
  254|       |
  255|      2|    init = 0;
  256|       |
  257|      2|    CRYPTO_THREAD_unlock(err_string_lock);
  258|       |    /* openssl_strerror_r could change errno, but we want to preserve it */
  259|       |    set_sys_error(saveerrno);
  ------------------
  |  |   77|      2|# define set_sys_error(e)        errno=(e)
  ------------------
  260|      2|    err_load_strings(SYS_str_reasons);
  261|      2|}
err.c:get_error_values:
  506|  57.9k|{
  507|  57.9k|    int i = 0;
  508|  57.9k|    ERR_STATE *es;
  509|  57.9k|    unsigned long ret;
  510|       |
  511|  57.9k|    es = ERR_get_state();
  512|  57.9k|    if (es == NULL)
  ------------------
  |  Branch (512:9): [True: 0, False: 57.9k]
  ------------------
  513|      0|        return 0;
  514|       |
  515|  57.9k|    if (inc && top) {
  ------------------
  |  Branch (515:9): [True: 28.9k, False: 28.9k]
  |  Branch (515:16): [True: 0, False: 28.9k]
  ------------------
  516|      0|        if (file)
  ------------------
  |  Branch (516:13): [True: 0, False: 0]
  ------------------
  517|      0|            *file = "";
  518|      0|        if (line)
  ------------------
  |  Branch (518:13): [True: 0, False: 0]
  ------------------
  519|      0|            *line = 0;
  520|      0|        if (data)
  ------------------
  |  Branch (520:13): [True: 0, False: 0]
  ------------------
  521|      0|            *data = "";
  522|      0|        if (flags)
  ------------------
  |  Branch (522:13): [True: 0, False: 0]
  ------------------
  523|      0|            *flags = 0;
  524|       |
  525|      0|        return ERR_R_INTERNAL_ERROR;
  ------------------
  |  |  202|      0|# define ERR_R_INTERNAL_ERROR                    (4|ERR_R_FATAL)
  |  |  ------------------
  |  |  |  |  198|      0|# define ERR_R_FATAL                             64
  |  |  ------------------
  ------------------
  526|      0|    }
  527|       |
  528|  57.9k|    while (es->bottom != es->top) {
  ------------------
  |  Branch (528:12): [True: 0, False: 57.9k]
  ------------------
  529|      0|        if (es->err_flags[es->top] & ERR_FLAG_CLEAR) {
  ------------------
  |  |   40|      0|# define ERR_FLAG_CLEAR          0x02
  ------------------
  |  Branch (529:13): [True: 0, False: 0]
  ------------------
  530|      0|            err_clear(es, es->top);
  ------------------
  |  |  274|      0|        do { \
  |  |  275|      0|            err_clear_data(p, i); \
  |  |  ------------------
  |  |  |  |  265|      0|        do { \
  |  |  |  |  266|      0|            if ((p)->err_data_flags[i] & ERR_TXT_MALLOCED) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|# define ERR_TXT_MALLOCED        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (266:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  267|      0|                OPENSSL_free((p)->err_data[i]); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  268|      0|                (p)->err_data[i] = NULL; \
  |  |  |  |  269|      0|            } \
  |  |  |  |  270|      0|            (p)->err_data_flags[i] = 0; \
  |  |  |  |  271|      0|        } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (271:18): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  276|      0|            (p)->err_flags[i] = 0; \
  |  |  277|      0|            (p)->err_buffer[i] = 0; \
  |  |  278|      0|            (p)->err_file[i] = NULL; \
  |  |  279|      0|            (p)->err_line[i] = -1; \
  |  |  280|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (280:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
  531|      0|            es->top = es->top > 0 ? es->top - 1 : ERR_NUM_ERRORS - 1;
  ------------------
  |  |   42|      0|# define ERR_NUM_ERRORS  16
  ------------------
  |  Branch (531:23): [True: 0, False: 0]
  ------------------
  532|      0|            continue;
  533|      0|        }
  534|      0|        i = (es->bottom + 1) % ERR_NUM_ERRORS;
  ------------------
  |  |   42|      0|# define ERR_NUM_ERRORS  16
  ------------------
  535|      0|        if (es->err_flags[i] & ERR_FLAG_CLEAR) {
  ------------------
  |  |   40|      0|# define ERR_FLAG_CLEAR          0x02
  ------------------
  |  Branch (535:13): [True: 0, False: 0]
  ------------------
  536|      0|            es->bottom = i;
  537|      0|            err_clear(es, es->bottom);
  ------------------
  |  |  274|      0|        do { \
  |  |  275|      0|            err_clear_data(p, i); \
  |  |  ------------------
  |  |  |  |  265|      0|        do { \
  |  |  |  |  266|      0|            if ((p)->err_data_flags[i] & ERR_TXT_MALLOCED) {\
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|# define ERR_TXT_MALLOCED        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (266:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  267|      0|                OPENSSL_free((p)->err_data[i]); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  268|      0|                (p)->err_data[i] = NULL; \
  |  |  |  |  269|      0|            } \
  |  |  |  |  270|      0|            (p)->err_data_flags[i] = 0; \
  |  |  |  |  271|      0|        } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (271:18): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  276|      0|            (p)->err_flags[i] = 0; \
  |  |  277|      0|            (p)->err_buffer[i] = 0; \
  |  |  278|      0|            (p)->err_file[i] = NULL; \
  |  |  279|      0|            (p)->err_line[i] = -1; \
  |  |  280|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (280:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
  538|      0|            continue;
  539|      0|        }
  540|      0|        break;
  541|      0|    }
  542|       |
  543|  57.9k|    if (es->bottom == es->top)
  ------------------
  |  Branch (543:9): [True: 57.9k, False: 0]
  ------------------
  544|  57.9k|        return 0;
  545|       |
  546|      0|    if (top)
  ------------------
  |  Branch (546:9): [True: 0, False: 0]
  ------------------
  547|      0|        i = es->top;            /* last error */
  548|      0|    else
  549|      0|        i = (es->bottom + 1) % ERR_NUM_ERRORS; /* first error */
  ------------------
  |  |   42|      0|# define ERR_NUM_ERRORS  16
  ------------------
  550|       |
  551|      0|    ret = es->err_buffer[i];
  552|      0|    if (inc) {
  ------------------
  |  Branch (552:9): [True: 0, False: 0]
  ------------------
  553|      0|        es->bottom = i;
  554|      0|        es->err_buffer[i] = 0;
  555|      0|    }
  556|       |
  557|      0|    if (file != NULL && line != NULL) {
  ------------------
  |  Branch (557:9): [True: 0, False: 0]
  |  Branch (557:25): [True: 0, False: 0]
  ------------------
  558|      0|        if (es->err_file[i] == NULL) {
  ------------------
  |  Branch (558:13): [True: 0, False: 0]
  ------------------
  559|      0|            *file = "NA";
  560|      0|            *line = 0;
  561|      0|        } else {
  562|      0|            *file = es->err_file[i];
  563|      0|            *line = es->err_line[i];
  564|      0|        }
  565|      0|    }
  566|       |
  567|      0|    if (data == NULL) {
  ------------------
  |  Branch (567:9): [True: 0, False: 0]
  ------------------
  568|      0|        if (inc) {
  ------------------
  |  Branch (568:13): [True: 0, False: 0]
  ------------------
  569|      0|            err_clear_data(es, i);
  ------------------
  |  |  265|      0|        do { \
  |  |  266|      0|            if ((p)->err_data_flags[i] & ERR_TXT_MALLOCED) {\
  |  |  ------------------
  |  |  |  |   36|      0|# define ERR_TXT_MALLOCED        0x01
  |  |  ------------------
  |  |  |  Branch (266:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  267|      0|                OPENSSL_free((p)->err_data[i]); \
  |  |  ------------------
  |  |  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  268|      0|                (p)->err_data[i] = NULL; \
  |  |  269|      0|            } \
  |  |  270|      0|            (p)->err_data_flags[i] = 0; \
  |  |  271|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (271:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
  570|      0|        }
  571|      0|    } else {
  572|      0|        if (es->err_data[i] == NULL) {
  ------------------
  |  Branch (572:13): [True: 0, False: 0]
  ------------------
  573|      0|            *data = "";
  574|      0|            if (flags != NULL)
  ------------------
  |  Branch (574:17): [True: 0, False: 0]
  ------------------
  575|      0|                *flags = 0;
  576|      0|        } else {
  577|      0|            *data = es->err_data[i];
  578|      0|            if (flags != NULL)
  ------------------
  |  Branch (578:17): [True: 0, False: 0]
  ------------------
  579|      0|                *flags = es->err_data_flags[i];
  580|      0|        }
  581|      0|    }
  582|      0|    return ret;
  583|  57.9k|}
err.c:int_err_get_item:
  176|  58.0k|{
  177|  58.0k|    ERR_STRING_DATA *p = NULL;
  178|       |
  179|  58.0k|    CRYPTO_THREAD_read_lock(err_string_lock);
  180|  58.0k|    p = lh_ERR_STRING_DATA_retrieve(int_error_hash, d);
  181|  58.0k|    CRYPTO_THREAD_unlock(err_string_lock);
  182|       |
  183|  58.0k|    return p;
  184|  58.0k|}
err.c:ERR_STATE_free:
  283|      2|{
  284|      2|    int i;
  285|       |
  286|      2|    if (s == NULL)
  ------------------
  |  Branch (286:9): [True: 0, False: 2]
  ------------------
  287|      0|        return;
  288|     34|    for (i = 0; i < ERR_NUM_ERRORS; i++) {
  ------------------
  |  |   42|     34|# define ERR_NUM_ERRORS  16
  ------------------
  |  Branch (288:17): [True: 32, False: 2]
  ------------------
  289|     32|        err_clear_data(s, i);
  ------------------
  |  |  265|     32|        do { \
  |  |  266|     32|            if ((p)->err_data_flags[i] & ERR_TXT_MALLOCED) {\
  |  |  ------------------
  |  |  |  |   36|     32|# define ERR_TXT_MALLOCED        0x01
  |  |  ------------------
  |  |  |  Branch (266:17): [True: 0, False: 32]
  |  |  ------------------
  |  |  267|      0|                OPENSSL_free((p)->err_data[i]); \
  |  |  ------------------
  |  |  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  268|      0|                (p)->err_data[i] = NULL; \
  |  |  269|      0|            } \
  |  |  270|     32|            (p)->err_data_flags[i] = 0; \
  |  |  271|     32|        } while (0)
  |  |  ------------------
  |  |  |  Branch (271:18): [Folded, False: 32]
  |  |  ------------------
  ------------------
  290|     32|    }
  291|      2|    OPENSSL_free(s);
  ------------------
  |  |  128|      2|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  292|      2|}
err.c:err_do_init:
  710|      2|{
  711|      2|    set_err_thread_local = 1;
  712|       |    return CRYPTO_THREAD_init_local(&err_thread_local, NULL);
  713|      2|}
err.c:err_set_error_data_int:
  812|      4|{
  813|      4|    ERR_STATE *es;
  814|      4|    int i;
  815|       |
  816|      4|    es = ERR_get_state();
  817|      4|    if (es == NULL)
  ------------------
  |  Branch (817:9): [True: 0, False: 4]
  ------------------
  818|      0|        return 0;
  819|       |
  820|      4|    i = es->top;
  821|       |
  822|      4|    err_clear_data(es, i);
  ------------------
  |  |  265|      4|        do { \
  |  |  266|      4|            if ((p)->err_data_flags[i] & ERR_TXT_MALLOCED) {\
  |  |  ------------------
  |  |  |  |   36|      4|# define ERR_TXT_MALLOCED        0x01
  |  |  ------------------
  |  |  |  Branch (266:17): [True: 0, False: 4]
  |  |  ------------------
  |  |  267|      0|                OPENSSL_free((p)->err_data[i]); \
  |  |  ------------------
  |  |  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  268|      0|                (p)->err_data[i] = NULL; \
  |  |  269|      0|            } \
  |  |  270|      4|            (p)->err_data_flags[i] = 0; \
  |  |  271|      4|        } while (0)
  |  |  ------------------
  |  |  |  Branch (271:18): [Folded, False: 4]
  |  |  ------------------
  ------------------
  823|      4|    es->err_data[i] = data;
  824|      4|    es->err_data_flags[i] = flags;
  825|       |
  826|      4|    return 1;
  827|      4|}

err_load_crypto_strings_int:
   43|      2|{
   44|      2|    if (
   45|      2|#ifndef OPENSSL_NO_ERR
   46|      2|        ERR_load_ERR_strings() == 0 ||    /* include error strings for SYSerr */
  ------------------
  |  Branch (46:9): [True: 0, False: 2]
  ------------------
   47|      2|        ERR_load_BN_strings() == 0 ||
  ------------------
  |  Branch (47:9): [True: 0, False: 2]
  ------------------
   48|      2|# ifndef OPENSSL_NO_RSA
   49|      2|        ERR_load_RSA_strings() == 0 ||
  ------------------
  |  Branch (49:9): [True: 0, False: 2]
  ------------------
   50|      2|# endif
   51|      2|# ifndef OPENSSL_NO_DH
   52|      2|        ERR_load_DH_strings() == 0 ||
  ------------------
  |  Branch (52:9): [True: 0, False: 2]
  ------------------
   53|      2|# endif
   54|      2|        ERR_load_EVP_strings() == 0 ||
  ------------------
  |  Branch (54:9): [True: 0, False: 2]
  ------------------
   55|      2|        ERR_load_BUF_strings() == 0 ||
  ------------------
  |  Branch (55:9): [True: 0, False: 2]
  ------------------
   56|      2|        ERR_load_OBJ_strings() == 0 ||
  ------------------
  |  Branch (56:9): [True: 0, False: 2]
  ------------------
   57|      2|        ERR_load_PEM_strings() == 0 ||
  ------------------
  |  Branch (57:9): [True: 0, False: 2]
  ------------------
   58|      2|# ifndef OPENSSL_NO_DSA
   59|      2|        ERR_load_DSA_strings() == 0 ||
  ------------------
  |  Branch (59:9): [True: 0, False: 2]
  ------------------
   60|      2|# endif
   61|      2|        ERR_load_X509_strings() == 0 ||
  ------------------
  |  Branch (61:9): [True: 0, False: 2]
  ------------------
   62|      2|        ERR_load_ASN1_strings() == 0 ||
  ------------------
  |  Branch (62:9): [True: 0, False: 2]
  ------------------
   63|      2|        ERR_load_CONF_strings() == 0 ||
  ------------------
  |  Branch (63:9): [True: 0, False: 2]
  ------------------
   64|      2|        ERR_load_CRYPTO_strings() == 0 ||
  ------------------
  |  Branch (64:9): [True: 0, False: 2]
  ------------------
   65|       |# ifndef OPENSSL_NO_COMP
   66|       |        ERR_load_COMP_strings() == 0 ||
   67|       |# endif
   68|      2|# ifndef OPENSSL_NO_EC
   69|      2|        ERR_load_EC_strings() == 0 ||
  ------------------
  |  Branch (69:9): [True: 0, False: 2]
  ------------------
   70|      2|# endif
   71|       |        /* skip ERR_load_SSL_strings() because it is not in this library */
   72|      2|        ERR_load_BIO_strings() == 0 ||
  ------------------
  |  Branch (72:9): [True: 0, False: 2]
  ------------------
   73|      2|        ERR_load_PKCS7_strings() == 0 ||
  ------------------
  |  Branch (73:9): [True: 0, False: 2]
  ------------------
   74|      2|        ERR_load_X509V3_strings() == 0 ||
  ------------------
  |  Branch (74:9): [True: 0, False: 2]
  ------------------
   75|      2|        ERR_load_PKCS12_strings() == 0 ||
  ------------------
  |  Branch (75:9): [True: 0, False: 2]
  ------------------
   76|      2|        ERR_load_RAND_strings() == 0 ||
  ------------------
  |  Branch (76:9): [True: 0, False: 2]
  ------------------
   77|      2|        ERR_load_DSO_strings() == 0 ||
  ------------------
  |  Branch (77:9): [True: 0, False: 2]
  ------------------
   78|      2|# ifndef OPENSSL_NO_TS
   79|      2|        ERR_load_TS_strings() == 0 ||
  ------------------
  |  Branch (79:9): [True: 0, False: 2]
  ------------------
   80|      2|# endif
   81|      2|# ifndef OPENSSL_NO_ENGINE
   82|      2|        ERR_load_ENGINE_strings() == 0 ||
  ------------------
  |  Branch (82:9): [True: 0, False: 2]
  ------------------
   83|      2|# endif
   84|      2|# ifndef OPENSSL_NO_OCSP
   85|      2|        ERR_load_OCSP_strings() == 0 ||
  ------------------
  |  Branch (85:9): [True: 0, False: 2]
  ------------------
   86|      2|# endif
   87|      2|        ERR_load_UI_strings() == 0 ||
  ------------------
  |  Branch (87:9): [True: 0, False: 2]
  ------------------
   88|      2|# ifndef OPENSSL_NO_CMS
   89|      2|        ERR_load_CMS_strings() == 0 ||
  ------------------
  |  Branch (89:9): [True: 0, False: 2]
  ------------------
   90|      2|# endif
   91|      2|# ifndef OPENSSL_NO_CT
   92|      2|        ERR_load_CT_strings() == 0 ||
  ------------------
  |  Branch (92:9): [True: 0, False: 2]
  ------------------
   93|      2|# endif
   94|      2|        ERR_load_ASYNC_strings() == 0 ||
  ------------------
  |  Branch (94:9): [True: 0, False: 2]
  ------------------
   95|      2|#endif
   96|      2|        ERR_load_KDF_strings() == 0 ||
  ------------------
  |  Branch (96:9): [True: 0, False: 2]
  ------------------
   97|      2|        ERR_load_OSSL_STORE_strings() == 0)
  ------------------
  |  Branch (97:9): [True: 0, False: 2]
  ------------------
   98|      0|        return 0;
   99|       |
  100|      2|    return 1;
  101|      2|}

openssl_add_all_ciphers_int:
   18|      2|{
   19|       |
   20|      2|#ifndef OPENSSL_NO_DES
   21|      2|    EVP_add_cipher(EVP_des_cfb());
  ------------------
  |  |  742|      2|#  define EVP_des_cfb EVP_des_cfb64
  ------------------
   22|      2|    EVP_add_cipher(EVP_des_cfb1());
   23|      2|    EVP_add_cipher(EVP_des_cfb8());
   24|      2|    EVP_add_cipher(EVP_des_ede_cfb());
  ------------------
  |  |  746|      2|#  define EVP_des_ede_cfb EVP_des_ede_cfb64
  ------------------
   25|      2|    EVP_add_cipher(EVP_des_ede3_cfb());
  ------------------
  |  |  748|      2|#  define EVP_des_ede3_cfb EVP_des_ede3_cfb64
  ------------------
   26|      2|    EVP_add_cipher(EVP_des_ede3_cfb1());
   27|      2|    EVP_add_cipher(EVP_des_ede3_cfb8());
   28|       |
   29|      2|    EVP_add_cipher(EVP_des_ofb());
   30|      2|    EVP_add_cipher(EVP_des_ede_ofb());
   31|      2|    EVP_add_cipher(EVP_des_ede3_ofb());
   32|       |
   33|      2|    EVP_add_cipher(EVP_desx_cbc());
   34|      2|    EVP_add_cipher_alias(SN_desx_cbc, "DESX");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   35|      2|    EVP_add_cipher_alias(SN_desx_cbc, "desx");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   36|       |
   37|      2|    EVP_add_cipher(EVP_des_cbc());
   38|      2|    EVP_add_cipher_alias(SN_des_cbc, "DES");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   39|      2|    EVP_add_cipher_alias(SN_des_cbc, "des");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   40|      2|    EVP_add_cipher(EVP_des_ede_cbc());
   41|      2|    EVP_add_cipher(EVP_des_ede3_cbc());
   42|      2|    EVP_add_cipher_alias(SN_des_ede3_cbc, "DES3");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   43|      2|    EVP_add_cipher_alias(SN_des_ede3_cbc, "des3");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   44|       |
   45|      2|    EVP_add_cipher(EVP_des_ecb());
   46|      2|    EVP_add_cipher(EVP_des_ede());
   47|      2|    EVP_add_cipher_alias(SN_des_ede_ecb, "DES-EDE-ECB");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   48|      2|    EVP_add_cipher_alias(SN_des_ede_ecb, "des-ede-ecb");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   49|      2|    EVP_add_cipher(EVP_des_ede3());
   50|      2|    EVP_add_cipher_alias(SN_des_ede3_ecb, "DES-EDE3-ECB");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   51|      2|    EVP_add_cipher_alias(SN_des_ede3_ecb, "des-ede3-ecb");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   52|      2|    EVP_add_cipher(EVP_des_ede3_wrap());
   53|      2|    EVP_add_cipher_alias(SN_id_smime_alg_CMS3DESwrap, "des3-wrap");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   54|      2|#endif
   55|       |
   56|      2|#ifndef OPENSSL_NO_RC4
   57|      2|    EVP_add_cipher(EVP_rc4());
   58|      2|    EVP_add_cipher(EVP_rc4_40());
   59|      2|# ifndef OPENSSL_NO_MD5
   60|      2|    EVP_add_cipher(EVP_rc4_hmac_md5());
   61|      2|# endif
   62|      2|#endif
   63|       |
   64|      2|#ifndef OPENSSL_NO_IDEA
   65|      2|    EVP_add_cipher(EVP_idea_ecb());
   66|      2|    EVP_add_cipher(EVP_idea_cfb());
  ------------------
  |  |  775|      2|#  define EVP_idea_cfb EVP_idea_cfb64
  ------------------
   67|      2|    EVP_add_cipher(EVP_idea_ofb());
   68|      2|    EVP_add_cipher(EVP_idea_cbc());
   69|      2|    EVP_add_cipher_alias(SN_idea_cbc, "IDEA");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   70|      2|    EVP_add_cipher_alias(SN_idea_cbc, "idea");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   71|      2|#endif
   72|       |
   73|      2|#ifndef OPENSSL_NO_SEED
   74|      2|    EVP_add_cipher(EVP_seed_ecb());
   75|      2|    EVP_add_cipher(EVP_seed_cfb());
  ------------------
  |  |  929|      2|#  define EVP_seed_cfb EVP_seed_cfb128
  ------------------
   76|      2|    EVP_add_cipher(EVP_seed_ofb());
   77|      2|    EVP_add_cipher(EVP_seed_cbc());
   78|      2|    EVP_add_cipher_alias(SN_seed_cbc, "SEED");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   79|      2|    EVP_add_cipher_alias(SN_seed_cbc, "seed");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   80|      2|#endif
   81|       |
   82|      2|#ifndef OPENSSL_NO_SM4
   83|      2|    EVP_add_cipher(EVP_sm4_ecb());
   84|      2|    EVP_add_cipher(EVP_sm4_cbc());
   85|      2|    EVP_add_cipher(EVP_sm4_cfb());
  ------------------
  |  |  937|      2|#  define EVP_sm4_cfb EVP_sm4_cfb128
  ------------------
   86|      2|    EVP_add_cipher(EVP_sm4_ofb());
   87|      2|    EVP_add_cipher(EVP_sm4_ctr());
   88|      2|    EVP_add_cipher_alias(SN_sm4_cbc, "SM4");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   89|      2|    EVP_add_cipher_alias(SN_sm4_cbc, "sm4");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   90|      2|#endif
   91|       |
   92|      2|#ifndef OPENSSL_NO_RC2
   93|      2|    EVP_add_cipher(EVP_rc2_ecb());
   94|      2|    EVP_add_cipher(EVP_rc2_cfb());
  ------------------
  |  |  785|      2|#  define EVP_rc2_cfb EVP_rc2_cfb64
  ------------------
   95|      2|    EVP_add_cipher(EVP_rc2_ofb());
   96|      2|    EVP_add_cipher(EVP_rc2_cbc());
   97|      2|    EVP_add_cipher(EVP_rc2_40_cbc());
   98|      2|    EVP_add_cipher(EVP_rc2_64_cbc());
   99|      2|    EVP_add_cipher_alias(SN_rc2_cbc, "RC2");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  100|      2|    EVP_add_cipher_alias(SN_rc2_cbc, "rc2");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  101|      2|    EVP_add_cipher_alias(SN_rc2_cbc, "rc2-128");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  102|      2|    EVP_add_cipher_alias(SN_rc2_64_cbc, "rc2-64");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  103|      2|    EVP_add_cipher_alias(SN_rc2_40_cbc, "rc2-40");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  104|      2|#endif
  105|       |
  106|      2|#ifndef OPENSSL_NO_BF
  107|      2|    EVP_add_cipher(EVP_bf_ecb());
  108|      2|    EVP_add_cipher(EVP_bf_cfb());
  ------------------
  |  |  792|      2|#  define EVP_bf_cfb EVP_bf_cfb64
  ------------------
  109|      2|    EVP_add_cipher(EVP_bf_ofb());
  110|      2|    EVP_add_cipher(EVP_bf_cbc());
  111|      2|    EVP_add_cipher_alias(SN_bf_cbc, "BF");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  112|      2|    EVP_add_cipher_alias(SN_bf_cbc, "bf");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  113|      2|    EVP_add_cipher_alias(SN_bf_cbc, "blowfish");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  114|      2|#endif
  115|       |
  116|      2|#ifndef OPENSSL_NO_CAST
  117|      2|    EVP_add_cipher(EVP_cast5_ecb());
  118|      2|    EVP_add_cipher(EVP_cast5_cfb());
  ------------------
  |  |  799|      2|#  define EVP_cast5_cfb EVP_cast5_cfb64
  ------------------
  119|      2|    EVP_add_cipher(EVP_cast5_ofb());
  120|      2|    EVP_add_cipher(EVP_cast5_cbc());
  121|      2|    EVP_add_cipher_alias(SN_cast5_cbc, "CAST");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  122|      2|    EVP_add_cipher_alias(SN_cast5_cbc, "cast");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  123|      2|    EVP_add_cipher_alias(SN_cast5_cbc, "CAST-cbc");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  124|      2|    EVP_add_cipher_alias(SN_cast5_cbc, "cast-cbc");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  125|      2|#endif
  126|       |
  127|       |#ifndef OPENSSL_NO_RC5
  128|       |    EVP_add_cipher(EVP_rc5_32_12_16_ecb());
  129|       |    EVP_add_cipher(EVP_rc5_32_12_16_cfb());
  130|       |    EVP_add_cipher(EVP_rc5_32_12_16_ofb());
  131|       |    EVP_add_cipher(EVP_rc5_32_12_16_cbc());
  132|       |    EVP_add_cipher_alias(SN_rc5_cbc, "rc5");
  133|       |    EVP_add_cipher_alias(SN_rc5_cbc, "RC5");
  134|       |#endif
  135|       |
  136|      2|    EVP_add_cipher(EVP_aes_128_ecb());
  137|      2|    EVP_add_cipher(EVP_aes_128_cbc());
  138|      2|    EVP_add_cipher(EVP_aes_128_cfb());
  ------------------
  |  |  814|      2|# define EVP_aes_128_cfb EVP_aes_128_cfb128
  ------------------
  139|      2|    EVP_add_cipher(EVP_aes_128_cfb1());
  140|      2|    EVP_add_cipher(EVP_aes_128_cfb8());
  141|      2|    EVP_add_cipher(EVP_aes_128_ofb());
  142|      2|    EVP_add_cipher(EVP_aes_128_ctr());
  143|      2|    EVP_add_cipher(EVP_aes_128_gcm());
  144|      2|#ifndef OPENSSL_NO_OCB
  145|      2|    EVP_add_cipher(EVP_aes_128_ocb());
  146|      2|#endif
  147|      2|    EVP_add_cipher(EVP_aes_128_xts());
  148|      2|    EVP_add_cipher(EVP_aes_128_ccm());
  149|      2|    EVP_add_cipher(EVP_aes_128_wrap());
  150|      2|    EVP_add_cipher_alias(SN_id_aes128_wrap, "aes128-wrap");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  151|      2|    EVP_add_cipher(EVP_aes_128_wrap_pad());
  152|      2|    EVP_add_cipher_alias(SN_aes_128_cbc, "AES128");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  153|      2|    EVP_add_cipher_alias(SN_aes_128_cbc, "aes128");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  154|      2|    EVP_add_cipher(EVP_aes_192_ecb());
  155|      2|    EVP_add_cipher(EVP_aes_192_cbc());
  156|      2|    EVP_add_cipher(EVP_aes_192_cfb());
  ------------------
  |  |  830|      2|# define EVP_aes_192_cfb EVP_aes_192_cfb128
  ------------------
  157|      2|    EVP_add_cipher(EVP_aes_192_cfb1());
  158|      2|    EVP_add_cipher(EVP_aes_192_cfb8());
  159|      2|    EVP_add_cipher(EVP_aes_192_ofb());
  160|      2|    EVP_add_cipher(EVP_aes_192_ctr());
  161|      2|    EVP_add_cipher(EVP_aes_192_gcm());
  162|      2|#ifndef OPENSSL_NO_OCB
  163|      2|    EVP_add_cipher(EVP_aes_192_ocb());
  164|      2|#endif
  165|      2|    EVP_add_cipher(EVP_aes_192_ccm());
  166|      2|    EVP_add_cipher(EVP_aes_192_wrap());
  167|      2|    EVP_add_cipher_alias(SN_id_aes192_wrap, "aes192-wrap");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  168|      2|    EVP_add_cipher(EVP_aes_192_wrap_pad());
  169|      2|    EVP_add_cipher_alias(SN_aes_192_cbc, "AES192");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  170|      2|    EVP_add_cipher_alias(SN_aes_192_cbc, "aes192");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  171|      2|    EVP_add_cipher(EVP_aes_256_ecb());
  172|      2|    EVP_add_cipher(EVP_aes_256_cbc());
  173|      2|    EVP_add_cipher(EVP_aes_256_cfb());
  ------------------
  |  |  845|      2|# define EVP_aes_256_cfb EVP_aes_256_cfb128
  ------------------
  174|      2|    EVP_add_cipher(EVP_aes_256_cfb1());
  175|      2|    EVP_add_cipher(EVP_aes_256_cfb8());
  176|      2|    EVP_add_cipher(EVP_aes_256_ofb());
  177|      2|    EVP_add_cipher(EVP_aes_256_ctr());
  178|      2|    EVP_add_cipher(EVP_aes_256_gcm());
  179|      2|#ifndef OPENSSL_NO_OCB
  180|      2|    EVP_add_cipher(EVP_aes_256_ocb());
  181|      2|#endif
  182|      2|    EVP_add_cipher(EVP_aes_256_xts());
  183|      2|    EVP_add_cipher(EVP_aes_256_ccm());
  184|      2|    EVP_add_cipher(EVP_aes_256_wrap());
  185|      2|    EVP_add_cipher_alias(SN_id_aes256_wrap, "aes256-wrap");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  186|      2|    EVP_add_cipher(EVP_aes_256_wrap_pad());
  187|      2|    EVP_add_cipher_alias(SN_aes_256_cbc, "AES256");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  188|      2|    EVP_add_cipher_alias(SN_aes_256_cbc, "aes256");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  189|      2|    EVP_add_cipher(EVP_aes_128_cbc_hmac_sha1());
  190|      2|    EVP_add_cipher(EVP_aes_256_cbc_hmac_sha1());
  191|      2|    EVP_add_cipher(EVP_aes_128_cbc_hmac_sha256());
  192|      2|    EVP_add_cipher(EVP_aes_256_cbc_hmac_sha256());
  193|       |
  194|      2|#ifndef OPENSSL_NO_ARIA
  195|      2|    EVP_add_cipher(EVP_aria_128_ecb());
  196|      2|    EVP_add_cipher(EVP_aria_128_cbc());
  197|      2|    EVP_add_cipher(EVP_aria_128_cfb());
  ------------------
  |  |  866|      2|#  define EVP_aria_128_cfb EVP_aria_128_cfb128
  ------------------
  198|      2|    EVP_add_cipher(EVP_aria_128_cfb1());
  199|      2|    EVP_add_cipher(EVP_aria_128_cfb8());
  200|      2|    EVP_add_cipher(EVP_aria_128_ctr());
  201|      2|    EVP_add_cipher(EVP_aria_128_ofb());
  202|      2|    EVP_add_cipher(EVP_aria_128_gcm());
  203|      2|    EVP_add_cipher(EVP_aria_128_ccm());
  204|      2|    EVP_add_cipher_alias(SN_aria_128_cbc, "ARIA128");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  205|      2|    EVP_add_cipher_alias(SN_aria_128_cbc, "aria128");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  206|      2|    EVP_add_cipher(EVP_aria_192_ecb());
  207|      2|    EVP_add_cipher(EVP_aria_192_cbc());
  208|      2|    EVP_add_cipher(EVP_aria_192_cfb());
  ------------------
  |  |  876|      2|#  define EVP_aria_192_cfb EVP_aria_192_cfb128
  ------------------
  209|      2|    EVP_add_cipher(EVP_aria_192_cfb1());
  210|      2|    EVP_add_cipher(EVP_aria_192_cfb8());
  211|      2|    EVP_add_cipher(EVP_aria_192_ctr());
  212|      2|    EVP_add_cipher(EVP_aria_192_ofb());
  213|      2|    EVP_add_cipher(EVP_aria_192_gcm());
  214|      2|    EVP_add_cipher(EVP_aria_192_ccm());
  215|      2|    EVP_add_cipher_alias(SN_aria_192_cbc, "ARIA192");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  216|      2|    EVP_add_cipher_alias(SN_aria_192_cbc, "aria192");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  217|      2|    EVP_add_cipher(EVP_aria_256_ecb());
  218|      2|    EVP_add_cipher(EVP_aria_256_cbc());
  219|      2|    EVP_add_cipher(EVP_aria_256_cfb());
  ------------------
  |  |  886|      2|#  define EVP_aria_256_cfb EVP_aria_256_cfb128
  ------------------
  220|      2|    EVP_add_cipher(EVP_aria_256_cfb1());
  221|      2|    EVP_add_cipher(EVP_aria_256_cfb8());
  222|      2|    EVP_add_cipher(EVP_aria_256_ctr());
  223|      2|    EVP_add_cipher(EVP_aria_256_ofb());
  224|      2|    EVP_add_cipher(EVP_aria_256_gcm());
  225|      2|    EVP_add_cipher(EVP_aria_256_ccm());
  226|      2|    EVP_add_cipher_alias(SN_aria_256_cbc, "ARIA256");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  227|      2|    EVP_add_cipher_alias(SN_aria_256_cbc, "aria256");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  228|      2|#endif
  229|       |
  230|      2|#ifndef OPENSSL_NO_CAMELLIA
  231|      2|    EVP_add_cipher(EVP_camellia_128_ecb());
  232|      2|    EVP_add_cipher(EVP_camellia_128_cbc());
  233|      2|    EVP_add_cipher(EVP_camellia_128_cfb());
  ------------------
  |  |  898|      2|#  define EVP_camellia_128_cfb EVP_camellia_128_cfb128
  ------------------
  234|      2|    EVP_add_cipher(EVP_camellia_128_cfb1());
  235|      2|    EVP_add_cipher(EVP_camellia_128_cfb8());
  236|      2|    EVP_add_cipher(EVP_camellia_128_ofb());
  237|      2|    EVP_add_cipher_alias(SN_camellia_128_cbc, "CAMELLIA128");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  238|      2|    EVP_add_cipher_alias(SN_camellia_128_cbc, "camellia128");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  239|      2|    EVP_add_cipher(EVP_camellia_192_ecb());
  240|      2|    EVP_add_cipher(EVP_camellia_192_cbc());
  241|      2|    EVP_add_cipher(EVP_camellia_192_cfb());
  ------------------
  |  |  906|      2|#  define EVP_camellia_192_cfb EVP_camellia_192_cfb128
  ------------------
  242|      2|    EVP_add_cipher(EVP_camellia_192_cfb1());
  243|      2|    EVP_add_cipher(EVP_camellia_192_cfb8());
  244|      2|    EVP_add_cipher(EVP_camellia_192_ofb());
  245|      2|    EVP_add_cipher_alias(SN_camellia_192_cbc, "CAMELLIA192");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  246|      2|    EVP_add_cipher_alias(SN_camellia_192_cbc, "camellia192");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  247|      2|    EVP_add_cipher(EVP_camellia_256_ecb());
  248|      2|    EVP_add_cipher(EVP_camellia_256_cbc());
  249|      2|    EVP_add_cipher(EVP_camellia_256_cfb());
  ------------------
  |  |  914|      2|#  define EVP_camellia_256_cfb EVP_camellia_256_cfb128
  ------------------
  250|      2|    EVP_add_cipher(EVP_camellia_256_cfb1());
  251|      2|    EVP_add_cipher(EVP_camellia_256_cfb8());
  252|      2|    EVP_add_cipher(EVP_camellia_256_ofb());
  253|      2|    EVP_add_cipher_alias(SN_camellia_256_cbc, "CAMELLIA256");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  254|      2|    EVP_add_cipher_alias(SN_camellia_256_cbc, "camellia256");
  ------------------
  |  |  529|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
  255|      2|    EVP_add_cipher(EVP_camellia_128_ctr());
  256|      2|    EVP_add_cipher(EVP_camellia_192_ctr());
  257|      2|    EVP_add_cipher(EVP_camellia_256_ctr());
  258|      2|#endif
  259|       |
  260|      2|#ifndef OPENSSL_NO_CHACHA
  261|      2|    EVP_add_cipher(EVP_chacha20());
  262|      2|# ifndef OPENSSL_NO_POLY1305
  263|      2|    EVP_add_cipher(EVP_chacha20_poly1305());
  264|      2|# endif
  265|      2|#endif
  266|      2|}

openssl_add_all_digests_int:
   18|      2|{
   19|      2|#ifndef OPENSSL_NO_MD4
   20|      2|    EVP_add_digest(EVP_md4());
   21|      2|#endif
   22|      2|#ifndef OPENSSL_NO_MD5
   23|      2|    EVP_add_digest(EVP_md5());
   24|      2|    EVP_add_digest_alias(SN_md5, "ssl3-md5");
  ------------------
  |  |  531|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   19|      2|# define OBJ_NAME_TYPE_MD_METH           0x01
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   25|      2|    EVP_add_digest(EVP_md5_sha1());
   26|      2|#endif
   27|      2|    EVP_add_digest(EVP_sha1());
   28|      2|    EVP_add_digest_alias(SN_sha1, "ssl3-sha1");
  ------------------
  |  |  531|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   19|      2|# define OBJ_NAME_TYPE_MD_METH           0x01
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   29|      2|    EVP_add_digest_alias(SN_sha1WithRSAEncryption, SN_sha1WithRSA);
  ------------------
  |  |  531|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   19|      2|# define OBJ_NAME_TYPE_MD_METH           0x01
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   30|      2|#if !defined(OPENSSL_NO_MDC2) && !defined(OPENSSL_NO_DES)
   31|      2|    EVP_add_digest(EVP_mdc2());
   32|      2|#endif
   33|      2|#ifndef OPENSSL_NO_RMD160
   34|      2|    EVP_add_digest(EVP_ripemd160());
   35|      2|    EVP_add_digest_alias(SN_ripemd160, "ripemd");
  ------------------
  |  |  531|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   19|      2|# define OBJ_NAME_TYPE_MD_METH           0x01
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   36|      2|    EVP_add_digest_alias(SN_ripemd160, "rmd160");
  ------------------
  |  |  531|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   19|      2|# define OBJ_NAME_TYPE_MD_METH           0x01
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   37|      2|#endif
   38|      2|    EVP_add_digest(EVP_sha224());
   39|      2|    EVP_add_digest(EVP_sha256());
   40|      2|    EVP_add_digest(EVP_sha384());
   41|      2|    EVP_add_digest(EVP_sha512());
   42|      2|    EVP_add_digest(EVP_sha512_224());
   43|      2|    EVP_add_digest(EVP_sha512_256());
   44|      2|#ifndef OPENSSL_NO_WHIRLPOOL
   45|      2|    EVP_add_digest(EVP_whirlpool());
   46|      2|#endif
   47|      2|#ifndef OPENSSL_NO_SM3
   48|      2|    EVP_add_digest(EVP_sm3());
   49|      2|#endif
   50|      2|#ifndef OPENSSL_NO_BLAKE2
   51|      2|    EVP_add_digest(EVP_blake2b512());
   52|      2|    EVP_add_digest(EVP_blake2s256());
   53|      2|#endif
   54|      2|    EVP_add_digest(EVP_sha3_224());
   55|      2|    EVP_add_digest(EVP_sha3_256());
   56|      2|    EVP_add_digest(EVP_sha3_384());
   57|      2|    EVP_add_digest(EVP_sha3_512());
   58|      2|    EVP_add_digest(EVP_shake128());
   59|      2|    EVP_add_digest(EVP_shake256());
   60|      2|}

EVP_MD_CTX_reset:
   20|   492k|{
   21|   492k|    if (ctx == NULL)
  ------------------
  |  Branch (21:9): [True: 492k, False: 0]
  ------------------
   22|   492k|        return 1;
   23|       |
   24|       |    /*
   25|       |     * Don't assume ctx->md_data was cleaned in EVP_Digest_Final, because
   26|       |     * sometimes only copies of the context are ever finalised.
   27|       |     */
   28|      0|    if (ctx->digest && ctx->digest->cleanup
  ------------------
  |  Branch (28:9): [True: 0, False: 0]
  |  Branch (28:24): [True: 0, False: 0]
  ------------------
   29|      0|        && !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_CLEANED))
  ------------------
  |  |  153|      0|# define EVP_MD_CTX_FLAG_CLEANED         0x0002/* context has already been
  ------------------
  |  Branch (29:12): [True: 0, False: 0]
  ------------------
   30|      0|        ctx->digest->cleanup(ctx);
   31|      0|    if (ctx->digest && ctx->digest->ctx_size && ctx->md_data
  ------------------
  |  Branch (31:9): [True: 0, False: 0]
  |  Branch (31:24): [True: 0, False: 0]
  |  Branch (31:49): [True: 0, False: 0]
  ------------------
   32|      0|        && !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE)) {
  ------------------
  |  |  155|      0|# define EVP_MD_CTX_FLAG_REUSE           0x0004/* Don't free up ctx->md_data
  ------------------
  |  Branch (32:12): [True: 0, False: 0]
  ------------------
   33|      0|        OPENSSL_clear_free(ctx->md_data, ctx->digest->ctx_size);
  ------------------
  |  |  126|      0|        CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   34|      0|    }
   35|       |    /*
   36|       |     * pctx should be freed by the user of EVP_MD_CTX
   37|       |     * if EVP_MD_CTX_FLAG_KEEP_PKEY_CTX is set
   38|       |     */
   39|      0|    if (!EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_KEEP_PKEY_CTX))
  ------------------
  |  |   17|      0|#define EVP_MD_CTX_FLAG_KEEP_PKEY_CTX   0x0400
  ------------------
  |  Branch (39:9): [True: 0, False: 0]
  ------------------
   40|      0|        EVP_PKEY_CTX_free(ctx->pctx);
   41|      0|#ifndef OPENSSL_NO_ENGINE
   42|      0|    ENGINE_finish(ctx->engine);
   43|      0|#endif
   44|      0|    OPENSSL_cleanse(ctx, sizeof(*ctx));
   45|       |
   46|      0|    return 1;
   47|   492k|}
EVP_MD_CTX_free:
   55|   492k|{
   56|   492k|    EVP_MD_CTX_reset(ctx);
   57|   492k|    OPENSSL_free(ctx);
  ------------------
  |  |  128|   492k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   58|   492k|}

EVP_aes_128_cbc:
 2528|      4|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      4|{ return &aes_##keylen##_##mode; }
EVP_aes_128_ecb:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_128_ofb:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_128_cfb128:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_128_cfb1:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_128_cfb8:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_128_ctr:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_192_cbc:
 2528|      4|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      4|{ return &aes_##keylen##_##mode; }
EVP_aes_192_ecb:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_192_ofb:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_192_cfb128:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_192_cfb1:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_192_cfb8:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_192_ctr:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_256_cbc:
 2528|      4|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      4|{ return &aes_##keylen##_##mode; }
EVP_aes_256_ecb:
 2528|      5|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      5|{ return &aes_##keylen##_##mode; }
EVP_aes_256_ofb:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_256_cfb128:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_256_cfb1:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_256_cfb8:
 2528|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_256_ctr:
 2528|      5|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2529|      5|{ return &aes_##keylen##_##mode; }
EVP_aes_128_gcm:
 2541|      4|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2542|      4|{ return &aes_##keylen##_##mode; }
EVP_aes_192_gcm:
 2541|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2542|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_256_gcm:
 2541|      4|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2542|      4|{ return &aes_##keylen##_##mode; }
EVP_aes_128_xts:
 2541|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2542|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_256_xts:
 2541|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2542|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_128_ccm:
 2541|      4|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2542|      4|{ return &aes_##keylen##_##mode; }
EVP_aes_192_ccm:
 2541|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2542|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_256_ccm:
 2541|      4|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2542|      4|{ return &aes_##keylen##_##mode; }
EVP_aes_128_wrap:
 3880|      2|{
 3881|      2|    return &aes_128_wrap;
 3882|      2|}
EVP_aes_192_wrap:
 3894|      2|{
 3895|      2|    return &aes_192_wrap;
 3896|      2|}
EVP_aes_256_wrap:
 3908|      2|{
 3909|      2|    return &aes_256_wrap;
 3910|      2|}
EVP_aes_128_wrap_pad:
 3922|      2|{
 3923|      2|    return &aes_128_wrap_pad;
 3924|      2|}
EVP_aes_192_wrap_pad:
 3936|      2|{
 3937|      2|    return &aes_192_wrap_pad;
 3938|      2|}
EVP_aes_256_wrap_pad:
 3950|      2|{
 3951|      2|    return &aes_256_wrap_pad;
 3952|      2|}
EVP_aes_128_ocb:
 2541|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2542|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_192_ocb:
 2541|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2542|      2|{ return &aes_##keylen##_##mode; }
EVP_aes_256_ocb:
 2541|      2|const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
 2542|      2|{ return &aes_##keylen##_##mode; }
e_aes.c:aes_init_key:
 2599|  1.01M|{
 2600|  1.01M|    int ret, mode;
 2601|  1.01M|    EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
  ------------------
  |  |  164|  1.01M|        ((kstruct *)EVP_CIPHER_CTX_get_cipher_data(ctx))
  ------------------
 2602|       |
 2603|  1.01M|    mode = EVP_CIPHER_CTX_mode(ctx);
  ------------------
  |  |  494|  1.01M|# define EVP_CIPHER_CTX_mode(c)         EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c))
  |  |  ------------------
  |  |  |  |  471|  1.01M|# define EVP_CIPHER_mode(e)              (EVP_CIPHER_flags(e) & EVP_CIPH_MODE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|  1.01M|# define         EVP_CIPH_MODE                   0xF0007
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2604|  1.01M|    if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
  ------------------
  |  |  236|  2.02M|# define         EVP_CIPH_ECB_MODE               0x1
  ------------------
                  if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
  ------------------
  |  |  237|   405k|# define         EVP_CIPH_CBC_MODE               0x2
  ------------------
  |  Branch (2604:10): [True: 608k, False: 405k]
  |  Branch (2604:39): [True: 0, False: 405k]
  ------------------
 2605|   608k|        && !enc) {
  ------------------
  |  Branch (2605:12): [True: 0, False: 608k]
  ------------------
 2606|       |#ifdef HWAES_CAPABLE
 2607|       |        if (HWAES_CAPABLE) {
 2608|       |            ret = HWAES_set_decrypt_key(key,
 2609|       |                                        EVP_CIPHER_CTX_key_length(ctx) * 8,
 2610|       |                                        &dat->ks.ks);
 2611|       |            dat->block = (block128_f) HWAES_decrypt;
 2612|       |            dat->stream.cbc = NULL;
 2613|       |# ifdef HWAES_cbc_encrypt
 2614|       |            if (mode == EVP_CIPH_CBC_MODE)
 2615|       |                dat->stream.cbc = (cbc128_f) HWAES_cbc_encrypt;
 2616|       |# endif
 2617|       |        } else
 2618|       |#endif
 2619|       |#ifdef BSAES_CAPABLE
 2620|       |        if (BSAES_CAPABLE && mode == EVP_CIPH_CBC_MODE) {
 2621|       |            ret = AES_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
 2622|       |                                      &dat->ks.ks);
 2623|       |            dat->block = (block128_f) AES_decrypt;
 2624|       |            dat->stream.cbc = (cbc128_f) bsaes_cbc_encrypt;
 2625|       |        } else
 2626|       |#endif
 2627|       |#ifdef VPAES_CAPABLE
 2628|       |        if (VPAES_CAPABLE) {
 2629|       |            ret = vpaes_set_decrypt_key(key,
 2630|       |                                        EVP_CIPHER_CTX_key_length(ctx) * 8,
 2631|       |                                        &dat->ks.ks);
 2632|       |            dat->block = (block128_f) vpaes_decrypt;
 2633|       |            dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
 2634|       |                (cbc128_f) vpaes_cbc_encrypt : NULL;
 2635|       |        } else
 2636|       |#endif
 2637|      0|        {
 2638|      0|            ret = AES_set_decrypt_key(key,
 2639|      0|                                      EVP_CIPHER_CTX_key_length(ctx) * 8,
 2640|      0|                                      &dat->ks.ks);
 2641|      0|            dat->block = (block128_f) AES_decrypt;
 2642|      0|            dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
  ------------------
  |  |  237|      0|# define         EVP_CIPH_CBC_MODE               0x2
  ------------------
  |  Branch (2642:31): [True: 0, False: 0]
  ------------------
 2643|      0|                (cbc128_f) AES_cbc_encrypt : NULL;
 2644|      0|        }
 2645|      0|    } else
 2646|       |#ifdef HWAES_CAPABLE
 2647|       |    if (HWAES_CAPABLE) {
 2648|       |        ret = HWAES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
 2649|       |                                    &dat->ks.ks);
 2650|       |        dat->block = (block128_f) HWAES_encrypt;
 2651|       |        dat->stream.cbc = NULL;
 2652|       |# ifdef HWAES_cbc_encrypt
 2653|       |        if (mode == EVP_CIPH_CBC_MODE)
 2654|       |            dat->stream.cbc = (cbc128_f) HWAES_cbc_encrypt;
 2655|       |        else
 2656|       |# endif
 2657|       |# ifdef HWAES_ctr32_encrypt_blocks
 2658|       |        if (mode == EVP_CIPH_CTR_MODE)
 2659|       |            dat->stream.ctr = (ctr128_f) HWAES_ctr32_encrypt_blocks;
 2660|       |        else
 2661|       |# endif
 2662|       |            (void)0;            /* terminate potentially open 'else' */
 2663|       |    } else
 2664|       |#endif
 2665|       |#ifdef BSAES_CAPABLE
 2666|       |    if (BSAES_CAPABLE && mode == EVP_CIPH_CTR_MODE) {
 2667|       |        ret = AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
 2668|       |                                  &dat->ks.ks);
 2669|       |        dat->block = (block128_f) AES_encrypt;
 2670|       |        dat->stream.ctr = (ctr128_f) bsaes_ctr32_encrypt_blocks;
 2671|       |    } else
 2672|       |#endif
 2673|       |#ifdef VPAES_CAPABLE
 2674|       |    if (VPAES_CAPABLE) {
 2675|       |        ret = vpaes_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
 2676|       |                                    &dat->ks.ks);
 2677|       |        dat->block = (block128_f) vpaes_encrypt;
 2678|       |        dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
 2679|       |            (cbc128_f) vpaes_cbc_encrypt : NULL;
 2680|       |    } else
 2681|       |#endif
 2682|  1.01M|    {
 2683|  1.01M|        ret = AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
 2684|  1.01M|                                  &dat->ks.ks);
 2685|  1.01M|        dat->block = (block128_f) AES_encrypt;
 2686|  1.01M|        dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
  ------------------
  |  |  237|  1.01M|# define         EVP_CIPH_CBC_MODE               0x2
  ------------------
  |  Branch (2686:27): [True: 0, False: 1.01M]
  ------------------
 2687|  1.01M|            (cbc128_f) AES_cbc_encrypt : NULL;
 2688|       |#ifdef AES_CTR_ASM
 2689|       |        if (mode == EVP_CIPH_CTR_MODE)
 2690|       |            dat->stream.ctr = (ctr128_f) AES_ctr32_encrypt;
 2691|       |#endif
 2692|  1.01M|    }
 2693|       |
 2694|  1.01M|    if (ret < 0) {
  ------------------
  |  Branch (2694:9): [True: 0, False: 1.01M]
  ------------------
 2695|      0|        EVPerr(EVP_F_AES_INIT_KEY, EVP_R_AES_KEY_SETUP_FAILED);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 2696|      0|        return 0;
 2697|      0|    }
 2698|       |
 2699|  1.01M|    return 1;
 2700|  1.01M|}
e_aes.c:aes_ecb_cipher:
 2723|  1.82M|{
 2724|  1.82M|    size_t bl = EVP_CIPHER_CTX_block_size(ctx);
 2725|  1.82M|    size_t i;
 2726|  1.82M|    EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
  ------------------
  |  |  164|  1.82M|        ((kstruct *)EVP_CIPHER_CTX_get_cipher_data(ctx))
  ------------------
 2727|       |
 2728|  1.82M|    if (len < bl)
  ------------------
  |  Branch (2728:9): [True: 0, False: 1.82M]
  ------------------
 2729|      0|        return 1;
 2730|       |
 2731|  6.08M|    for (i = 0, len -= bl; i <= len; i += bl)
  ------------------
  |  Branch (2731:28): [True: 4.26M, False: 1.82M]
  ------------------
 2732|  4.26M|        (*dat->block) (in + i, out + i, &dat->ks);
 2733|       |
 2734|  1.82M|    return 1;
 2735|  1.82M|}
e_aes.c:aes_ctr_cipher:
 2812|   202k|{
 2813|   202k|    unsigned int num = EVP_CIPHER_CTX_num(ctx);
 2814|   202k|    EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
  ------------------
  |  |  164|   202k|        ((kstruct *)EVP_CIPHER_CTX_get_cipher_data(ctx))
  ------------------
 2815|       |
 2816|   202k|    if (dat->stream.ctr)
  ------------------
  |  Branch (2816:9): [True: 0, False: 202k]
  ------------------
 2817|      0|        CRYPTO_ctr128_encrypt_ctr32(in, out, len, &dat->ks,
 2818|      0|                                    EVP_CIPHER_CTX_iv_noconst(ctx),
 2819|      0|                                    EVP_CIPHER_CTX_buf_noconst(ctx),
 2820|      0|                                    &num, dat->stream.ctr);
 2821|   202k|    else
 2822|   202k|        CRYPTO_ctr128_encrypt(in, out, len, &dat->ks,
 2823|   202k|                              EVP_CIPHER_CTX_iv_noconst(ctx),
 2824|   202k|                              EVP_CIPHER_CTX_buf_noconst(ctx), &num,
 2825|   202k|                              dat->block);
 2826|   202k|    EVP_CIPHER_CTX_set_num(ctx, num);
 2827|   202k|    return 1;
 2828|   202k|}

EVP_aes_128_cbc_hmac_sha1:
  956|      4|{
  957|       |    return NULL;
  958|      4|}
EVP_aes_256_cbc_hmac_sha1:
  961|      4|{
  962|       |    return NULL;
  963|      4|}

EVP_aes_128_cbc_hmac_sha256:
  942|      4|{
  943|       |    return NULL;
  944|      4|}
EVP_aes_256_cbc_hmac_sha256:
  947|      4|{
  948|       |    return NULL;
  949|      4|}

EVP_aria_128_ctr:
  168|      2|const EVP_CIPHER *EVP_aria_##keylen##_##mode(void) \
  169|      2|{ return &aria_##keylen##_##mode; }
EVP_aria_192_ctr:
  168|      2|const EVP_CIPHER *EVP_aria_##keylen##_##mode(void) \
  169|      2|{ return &aria_##keylen##_##mode; }
EVP_aria_256_ctr:
  168|      2|const EVP_CIPHER *EVP_aria_##keylen##_##mode(void) \
  169|      2|{ return &aria_##keylen##_##mode; }
EVP_aria_128_gcm:
  769|      4|const EVP_CIPHER *EVP_aria_##keylen##_##mode(void) \
  770|      4|{ return (EVP_CIPHER*)&aria_##keylen##_##mode; }
EVP_aria_192_gcm:
  769|      2|const EVP_CIPHER *EVP_aria_##keylen##_##mode(void) \
  770|      2|{ return (EVP_CIPHER*)&aria_##keylen##_##mode; }
EVP_aria_256_gcm:
  769|      4|const EVP_CIPHER *EVP_aria_##keylen##_##mode(void) \
  770|      4|{ return (EVP_CIPHER*)&aria_##keylen##_##mode; }
EVP_aria_128_ccm:
  769|      2|const EVP_CIPHER *EVP_aria_##keylen##_##mode(void) \
  770|      2|{ return (EVP_CIPHER*)&aria_##keylen##_##mode; }
EVP_aria_192_ccm:
  769|      2|const EVP_CIPHER *EVP_aria_##keylen##_##mode(void) \
  770|      2|{ return (EVP_CIPHER*)&aria_##keylen##_##mode; }
EVP_aria_256_ccm:
  769|      2|const EVP_CIPHER *EVP_aria_##keylen##_##mode(void) \
  770|      2|{ return (EVP_CIPHER*)&aria_##keylen##_##mode; }

EVP_camellia_128_cbc:
  198|      4|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      4|{ return &camellia_##keylen##_##mode; }
EVP_camellia_128_ecb:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_128_ofb:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_128_cfb128:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_128_cfb1:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_128_cfb8:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_128_ctr:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_192_cbc:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_192_ecb:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_192_ofb:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_192_cfb128:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_192_cfb1:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_192_cfb8:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_192_ctr:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_256_cbc:
  198|      4|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      4|{ return &camellia_##keylen##_##mode; }
EVP_camellia_256_ecb:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_256_ofb:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_256_cfb128:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_256_cfb1:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_256_cfb8:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }
EVP_camellia_256_ctr:
  198|      2|const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
  199|      2|{ return &camellia_##keylen##_##mode; }

EVP_chacha20:
  144|      2|{
  145|      2|    return &chacha20;
  146|      2|}
EVP_chacha20_poly1305:
  633|      4|{
  634|      4|    return(&chacha20_poly1305);
  635|      4|}

EVP_des_ede:
  301|      2|{
  302|      2|    return &des_ede_ecb;
  303|      2|}
EVP_des_ede3:
  306|      2|{
  307|      2|    return &des_ede3_ecb;
  308|      2|}
EVP_des_ede3_wrap:
  420|      2|{
  421|      2|    return &des3_wrap;
  422|      2|}

EVP_rc2_64_cbc:
   74|      2|{
   75|      2|    return &r2_64_cbc_cipher;
   76|      2|}
EVP_rc2_40_cbc:
   79|      4|{
   80|      4|    return &r2_40_cbc_cipher;
   81|      4|}

EVP_rc4:
   60|      4|{
   61|      4|    return &r4_cipher;
   62|      4|}
EVP_rc4_40:
   65|      2|{
   66|      2|    return &r4_40_cipher;
   67|      2|}

EVP_rc4_hmac_md5:
  259|      4|{
  260|      4|    return &r4_hmac_md5_cipher;
  261|      4|}

EVP_sm4_ctr:
   96|      2|{
   97|      2|    return &sm4_ctr_mode;
   98|      2|}

EVP_desx_cbc:
   48|      2|{
   49|      2|    return &d_xcbc_cipher;
   50|      2|}

EVP_add_alg_module:
   54|      2|{
   55|      2|    CONF_module_add("alg_section", alg_module_init, 0);
   56|      2|}

EVP_CIPHER_CTX_reset:
   23|      9|{
   24|      9|    if (c == NULL)
  ------------------
  |  Branch (24:9): [True: 0, False: 9]
  ------------------
   25|      0|        return 1;
   26|      9|    if (c->cipher != NULL) {
  ------------------
  |  Branch (26:9): [True: 9, False: 0]
  ------------------
   27|      9|        if (c->cipher->cleanup && !c->cipher->cleanup(c))
  ------------------
  |  Branch (27:13): [True: 0, False: 9]
  |  Branch (27:35): [True: 0, False: 0]
  ------------------
   28|      0|            return 0;
   29|       |        /* Cleanse cipher context data */
   30|      9|        if (c->cipher_data && c->cipher->ctx_size)
  ------------------
  |  Branch (30:13): [True: 9, False: 0]
  |  Branch (30:31): [True: 9, False: 0]
  ------------------
   31|      9|            OPENSSL_cleanse(c->cipher_data, c->cipher->ctx_size);
   32|      9|    }
   33|      9|    OPENSSL_free(c->cipher_data);
  ------------------
  |  |  128|      9|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   34|      9|#ifndef OPENSSL_NO_ENGINE
   35|      9|    ENGINE_finish(c->engine);
   36|      9|#endif
   37|      9|    memset(c, 0, sizeof(*c));
   38|      9|    return 1;
   39|      9|}
EVP_CIPHER_CTX_new:
   42|      9|{
   43|      9|    return OPENSSL_zalloc(sizeof(EVP_CIPHER_CTX));
  ------------------
  |  |  120|      9|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   44|      9|}
EVP_CIPHER_CTX_free:
   47|      9|{
   48|      9|    EVP_CIPHER_CTX_reset(ctx);
   49|      9|    OPENSSL_free(ctx);
  ------------------
  |  |  128|      9|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   50|      9|}
EVP_CipherInit_ex:
   63|  1.21M|{
   64|  1.21M|    if (enc == -1)
  ------------------
  |  Branch (64:9): [True: 1.21M, False: 9]
  ------------------
   65|  1.21M|        enc = ctx->encrypt;
   66|      9|    else {
   67|      9|        if (enc)
  ------------------
  |  Branch (67:13): [True: 9, False: 0]
  ------------------
   68|      9|            enc = 1;
   69|      9|        ctx->encrypt = enc;
   70|      9|    }
   71|  1.21M|#ifndef OPENSSL_NO_ENGINE
   72|       |    /*
   73|       |     * Whether it's nice or not, "Inits" can be used on "Final"'d contexts so
   74|       |     * this context may already have an ENGINE! Try to avoid releasing the
   75|       |     * previous handle, re-querying for an ENGINE, and having a
   76|       |     * reinitialisation, when it may all be unnecessary.
   77|       |     */
   78|  1.21M|    if (ctx->engine && ctx->cipher
  ------------------
  |  Branch (78:9): [True: 0, False: 1.21M]
  |  Branch (78:24): [True: 0, False: 0]
  ------------------
   79|      0|        && (cipher == NULL || cipher->nid == ctx->cipher->nid))
  ------------------
  |  Branch (79:13): [True: 0, False: 0]
  |  Branch (79:31): [True: 0, False: 0]
  ------------------
   80|      0|        goto skip_to_init;
   81|  1.21M|#endif
   82|  1.21M|    if (cipher) {
  ------------------
  |  Branch (82:9): [True: 9, False: 1.21M]
  ------------------
   83|       |        /*
   84|       |         * Ensure a context left lying around from last time is cleared (the
   85|       |         * previous check attempted to avoid this if the same ENGINE and
   86|       |         * EVP_CIPHER could be used).
   87|       |         */
   88|      9|        if (ctx->cipher) {
  ------------------
  |  Branch (88:13): [True: 0, False: 9]
  ------------------
   89|      0|            unsigned long flags = ctx->flags;
   90|      0|            EVP_CIPHER_CTX_reset(ctx);
   91|       |            /* Restore encrypt and flags */
   92|      0|            ctx->encrypt = enc;
   93|      0|            ctx->flags = flags;
   94|      0|        }
   95|      9|#ifndef OPENSSL_NO_ENGINE
   96|      9|        if (impl) {
  ------------------
  |  Branch (96:13): [True: 0, False: 9]
  ------------------
   97|      0|            if (!ENGINE_init(impl)) {
  ------------------
  |  Branch (97:17): [True: 0, False: 0]
  ------------------
   98|      0|                EVPerr(EVP_F_EVP_CIPHERINIT_EX, EVP_R_INITIALIZATION_ERROR);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   99|      0|                return 0;
  100|      0|            }
  101|      0|        } else
  102|       |            /* Ask if an ENGINE is reserved for this job */
  103|      9|            impl = ENGINE_get_cipher_engine(cipher->nid);
  104|      9|        if (impl) {
  ------------------
  |  Branch (104:13): [True: 0, False: 9]
  ------------------
  105|       |            /* There's an ENGINE for this job ... (apparently) */
  106|      0|            const EVP_CIPHER *c = ENGINE_get_cipher(impl, cipher->nid);
  107|      0|            if (!c) {
  ------------------
  |  Branch (107:17): [True: 0, False: 0]
  ------------------
  108|       |                /*
  109|       |                 * One positive side-effect of US's export control history,
  110|       |                 * is that we should at least be able to avoid using US
  111|       |                 * misspellings of "initialisation"?
  112|       |                 */
  113|      0|                EVPerr(EVP_F_EVP_CIPHERINIT_EX, EVP_R_INITIALIZATION_ERROR);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  114|      0|                return 0;
  115|      0|            }
  116|       |            /* We'll use the ENGINE's private cipher definition */
  117|      0|            cipher = c;
  118|       |            /*
  119|       |             * Store the ENGINE functional reference so we know 'cipher' came
  120|       |             * from an ENGINE and we need to release it when done.
  121|       |             */
  122|      0|            ctx->engine = impl;
  123|      0|        } else
  124|      9|            ctx->engine = NULL;
  125|      9|#endif
  126|       |
  127|      9|        ctx->cipher = cipher;
  128|      9|        if (ctx->cipher->ctx_size) {
  ------------------
  |  Branch (128:13): [True: 9, False: 0]
  ------------------
  129|      9|            ctx->cipher_data = OPENSSL_zalloc(ctx->cipher->ctx_size);
  ------------------
  |  |  120|      9|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  130|      9|            if (ctx->cipher_data == NULL) {
  ------------------
  |  Branch (130:17): [True: 0, False: 9]
  ------------------
  131|      0|                ctx->cipher = NULL;
  132|      0|                EVPerr(EVP_F_EVP_CIPHERINIT_EX, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  133|      0|                return 0;
  134|      0|            }
  135|      9|        } else {
  136|      0|            ctx->cipher_data = NULL;
  137|      0|        }
  138|      9|        ctx->key_len = cipher->key_len;
  139|       |        /* Preserve wrap enable flag, zero everything else */
  140|      9|        ctx->flags &= EVP_CIPHER_CTX_FLAG_WRAP_ALLOW;
  ------------------
  |  |  287|      9|# define         EVP_CIPHER_CTX_FLAG_WRAP_ALLOW  0x1
  ------------------
  141|      9|        if (ctx->cipher->flags & EVP_CIPH_CTRL_INIT) {
  ------------------
  |  |  254|      9|# define         EVP_CIPH_CTRL_INIT              0x40
  ------------------
  |  Branch (141:13): [True: 0, False: 9]
  ------------------
  142|      0|            if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_INIT, 0, NULL)) {
  ------------------
  |  |  291|      0|# define         EVP_CTRL_INIT                   0x0
  ------------------
  |  Branch (142:17): [True: 0, False: 0]
  ------------------
  143|      0|                ctx->cipher = NULL;
  144|      0|                EVPerr(EVP_F_EVP_CIPHERINIT_EX, EVP_R_INITIALIZATION_ERROR);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  145|      0|                return 0;
  146|      0|            }
  147|      0|        }
  148|  1.21M|    } else if (!ctx->cipher) {
  ------------------
  |  Branch (148:16): [True: 0, False: 1.21M]
  ------------------
  149|      0|        EVPerr(EVP_F_EVP_CIPHERINIT_EX, EVP_R_NO_CIPHER_SET);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  150|      0|        return 0;
  151|      0|    }
  152|  1.21M|#ifndef OPENSSL_NO_ENGINE
  153|  1.21M| skip_to_init:
  154|  1.21M|#endif
  155|       |    /* we assume block size is a power of 2 in *cryptUpdate */
  156|  1.21M|    OPENSSL_assert(ctx->cipher->block_size == 1
  ------------------
  |  |  327|  3.65M|    (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1))
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1))
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |  |  Branch (327:13): [True: 608k, False: 608k]
  |  |  |  Branch (327:13): [True: 0, False: 608k]
  |  |  |  Branch (327:13): [True: 608k, False: 0]
  |  |  ------------------
  ------------------
  157|  1.21M|                   || ctx->cipher->block_size == 8
  158|  1.21M|                   || ctx->cipher->block_size == 16);
  159|       |
  160|  1.21M|    if (!(ctx->flags & EVP_CIPHER_CTX_FLAG_WRAP_ALLOW)
  ------------------
  |  |  287|  1.21M|# define         EVP_CIPHER_CTX_FLAG_WRAP_ALLOW  0x1
  ------------------
  |  Branch (160:9): [True: 1.21M, False: 0]
  ------------------
  161|  1.21M|        && EVP_CIPHER_CTX_mode(ctx) == EVP_CIPH_WRAP_MODE) {
  ------------------
  |  |  494|  1.21M|# define EVP_CIPHER_CTX_mode(c)         EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c))
  |  |  ------------------
  |  |  |  |  471|  1.21M|# define EVP_CIPHER_mode(e)              (EVP_CIPHER_flags(e) & EVP_CIPH_MODE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|  1.21M|# define         EVP_CIPH_MODE                   0xF0007
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      && EVP_CIPHER_CTX_mode(ctx) == EVP_CIPH_WRAP_MODE) {
  ------------------
  |  |  244|  1.21M|# define         EVP_CIPH_WRAP_MODE              0x10002
  ------------------
  |  Branch (161:12): [True: 0, False: 1.21M]
  ------------------
  162|      0|        EVPerr(EVP_F_EVP_CIPHERINIT_EX, EVP_R_WRAP_MODE_NOT_ALLOWED);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  163|      0|        return 0;
  164|      0|    }
  165|       |
  166|  1.21M|    if (!(EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(ctx)) & EVP_CIPH_CUSTOM_IV)) {
  ------------------
  |  |  250|  1.21M|# define         EVP_CIPH_CUSTOM_IV              0x10
  ------------------
  |  Branch (166:9): [True: 1.21M, False: 0]
  ------------------
  167|  1.21M|        switch (EVP_CIPHER_CTX_mode(ctx)) {
  ------------------
  |  |  494|  1.21M|# define EVP_CIPHER_CTX_mode(c)         EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c))
  |  |  ------------------
  |  |  |  |  471|  1.21M|# define EVP_CIPHER_mode(e)              (EVP_CIPHER_flags(e) & EVP_CIPH_MODE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|  1.21M|# define         EVP_CIPH_MODE                   0xF0007
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|       |
  169|      0|        case EVP_CIPH_STREAM_CIPHER:
  ------------------
  |  |  235|      0|# define         EVP_CIPH_STREAM_CIPHER          0x0
  ------------------
  |  Branch (169:9): [True: 0, False: 1.21M]
  ------------------
  170|   608k|        case EVP_CIPH_ECB_MODE:
  ------------------
  |  |  236|   608k|# define         EVP_CIPH_ECB_MODE               0x1
  ------------------
  |  Branch (170:9): [True: 608k, False: 608k]
  ------------------
  171|   608k|            break;
  172|       |
  173|      0|        case EVP_CIPH_CFB_MODE:
  ------------------
  |  |  238|      0|# define         EVP_CIPH_CFB_MODE               0x3
  ------------------
  |  Branch (173:9): [True: 0, False: 1.21M]
  ------------------
  174|      0|        case EVP_CIPH_OFB_MODE:
  ------------------
  |  |  239|      0|# define         EVP_CIPH_OFB_MODE               0x4
  ------------------
  |  Branch (174:9): [True: 0, False: 1.21M]
  ------------------
  175|       |
  176|      0|            ctx->num = 0;
  177|       |            /* fall-through */
  178|       |
  179|      0|        case EVP_CIPH_CBC_MODE:
  ------------------
  |  |  237|      0|# define         EVP_CIPH_CBC_MODE               0x2
  ------------------
  |  Branch (179:9): [True: 0, False: 1.21M]
  ------------------
  180|       |
  181|      0|            OPENSSL_assert(EVP_CIPHER_CTX_iv_length(ctx) <=
  ------------------
  |  |  327|      0|    (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1))
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1))
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  182|      0|                           (int)sizeof(ctx->iv));
  183|      0|            if (iv)
  ------------------
  |  Branch (183:17): [True: 0, False: 0]
  ------------------
  184|      0|                memcpy(ctx->oiv, iv, EVP_CIPHER_CTX_iv_length(ctx));
  185|      0|            memcpy(ctx->iv, ctx->oiv, EVP_CIPHER_CTX_iv_length(ctx));
  186|      0|            break;
  187|       |
  188|   608k|        case EVP_CIPH_CTR_MODE:
  ------------------
  |  |  240|   608k|# define         EVP_CIPH_CTR_MODE               0x5
  ------------------
  |  Branch (188:9): [True: 608k, False: 608k]
  ------------------
  189|   608k|            ctx->num = 0;
  190|       |            /* Don't reuse IV for CTR mode */
  191|   608k|            if (iv)
  ------------------
  |  Branch (191:17): [True: 202k, False: 405k]
  ------------------
  192|   202k|                memcpy(ctx->iv, iv, EVP_CIPHER_CTX_iv_length(ctx));
  193|   608k|            break;
  194|       |
  195|      0|        default:
  ------------------
  |  Branch (195:9): [True: 0, False: 1.21M]
  ------------------
  196|      0|            return 0;
  197|  1.21M|        }
  198|  1.21M|    }
  199|       |
  200|  1.21M|    if (key || (ctx->cipher->flags & EVP_CIPH_ALWAYS_CALL_INIT)) {
  ------------------
  |  |  252|   202k|# define         EVP_CIPH_ALWAYS_CALL_INIT       0x20
  ------------------
  |  Branch (200:9): [True: 1.01M, False: 202k]
  |  Branch (200:16): [True: 0, False: 202k]
  ------------------
  201|  1.01M|        if (!ctx->cipher->init(ctx, key, iv, enc))
  ------------------
  |  Branch (201:13): [True: 0, False: 1.01M]
  ------------------
  202|      0|            return 0;
  203|  1.01M|    }
  204|  1.21M|    ctx->buf_len = 0;
  205|  1.21M|    ctx->final_used = 0;
  206|  1.21M|    ctx->block_mask = ctx->cipher->block_size - 1;
  207|  1.21M|    return 1;
  208|  1.21M|}
EVP_CipherUpdate:
  212|  2.02M|{
  213|  2.02M|    if (ctx->encrypt)
  ------------------
  |  Branch (213:9): [True: 2.02M, False: 0]
  ------------------
  214|  2.02M|        return EVP_EncryptUpdate(ctx, out, outl, in, inl);
  215|      0|    else
  216|      0|        return EVP_DecryptUpdate(ctx, out, outl, in, inl);
  217|  2.02M|}
is_partially_overlapping:
  285|  2.02M|{
  286|  2.02M|    PTRDIFF_T diff = (PTRDIFF_T)ptr1-(PTRDIFF_T)ptr2;
  ------------------
  |  |  281|  2.02M|# define PTRDIFF_T size_t
  ------------------
  287|       |    /*
  288|       |     * Check for partially overlapping buffers. [Binary logical
  289|       |     * operations are used instead of boolean to minimize number
  290|       |     * of conditional branches.]
  291|       |     */
  292|  2.02M|    int overlapped = (len > 0) & (diff != 0) & ((diff < (PTRDIFF_T)len) |
  293|  2.02M|                                                (diff > (0 - (PTRDIFF_T)len)));
  294|       |
  295|  2.02M|    return overlapped;
  296|  2.02M|}
EVP_EncryptUpdate:
  399|  2.02M|{
  400|       |    /* Prevent accidental use of decryption context when encrypting */
  401|  2.02M|    if (!ctx->encrypt) {
  ------------------
  |  Branch (401:9): [True: 0, False: 2.02M]
  ------------------
  402|      0|        EVPerr(EVP_F_EVP_ENCRYPTUPDATE, EVP_R_INVALID_OPERATION);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  403|      0|        return 0;
  404|      0|    }
  405|       |
  406|  2.02M|    return evp_EncryptDecryptUpdate(ctx, out, outl, in, inl);
  407|  2.02M|}
evp_enc.c:evp_EncryptDecryptUpdate:
  301|  2.02M|{
  302|  2.02M|    int i, j, bl, cmpl = inl;
  303|       |
  304|  2.02M|    if (EVP_CIPHER_CTX_test_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS))
  ------------------
  |  |  268|  2.02M|# define         EVP_CIPH_FLAG_LENGTH_BITS       0x2000
  ------------------
  |  Branch (304:9): [True: 0, False: 2.02M]
  ------------------
  305|      0|        cmpl = (cmpl + 7) / 8;
  306|       |
  307|  2.02M|    bl = ctx->cipher->block_size;
  308|       |
  309|       |    /*
  310|       |     * CCM mode needs to know about the case where inl == 0 && in == NULL - it
  311|       |     * means the plaintext/ciphertext length is 0
  312|       |     */
  313|  2.02M|    if (inl < 0
  ------------------
  |  Branch (313:9): [True: 0, False: 2.02M]
  ------------------
  314|  2.02M|            || (inl == 0
  ------------------
  |  Branch (314:17): [True: 0, False: 2.02M]
  ------------------
  315|      0|                && EVP_CIPHER_mode(ctx->cipher) != EVP_CIPH_CCM_MODE)) {
  ------------------
  |  |  471|      0|# define EVP_CIPHER_mode(e)              (EVP_CIPHER_flags(e) & EVP_CIPH_MODE)
  |  |  ------------------
  |  |  |  |  246|      0|# define         EVP_CIPH_MODE                   0xF0007
  |  |  ------------------
  ------------------
                              && EVP_CIPHER_mode(ctx->cipher) != EVP_CIPH_CCM_MODE)) {
  ------------------
  |  |  242|      0|# define         EVP_CIPH_CCM_MODE               0x7
  ------------------
  |  Branch (315:20): [True: 0, False: 0]
  ------------------
  316|      0|        *outl = 0;
  317|      0|        return inl == 0;
  318|      0|    }
  319|       |
  320|  2.02M|    if (ctx->cipher->flags & EVP_CIPH_FLAG_CUSTOM_CIPHER) {
  ------------------
  |  |  276|  2.02M|# define         EVP_CIPH_FLAG_CUSTOM_CIPHER     0x100000
  ------------------
  |  Branch (320:9): [True: 0, False: 2.02M]
  ------------------
  321|       |        /* If block size > 1 then the cipher will have to do this check */
  322|      0|        if (bl == 1 && is_partially_overlapping(out, in, cmpl)) {
  ------------------
  |  Branch (322:13): [True: 0, False: 0]
  |  Branch (322:24): [True: 0, False: 0]
  ------------------
  323|      0|            EVPerr(EVP_F_EVP_ENCRYPTDECRYPTUPDATE, EVP_R_PARTIALLY_OVERLAPPING);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  324|      0|            return 0;
  325|      0|        }
  326|       |
  327|      0|        i = ctx->cipher->do_cipher(ctx, out, in, inl);
  328|      0|        if (i < 0)
  ------------------
  |  Branch (328:13): [True: 0, False: 0]
  ------------------
  329|      0|            return 0;
  330|      0|        else
  331|      0|            *outl = i;
  332|      0|        return 1;
  333|      0|    }
  334|       |
  335|  2.02M|    if (is_partially_overlapping(out + ctx->buf_len, in, cmpl)) {
  ------------------
  |  Branch (335:9): [True: 0, False: 2.02M]
  ------------------
  336|      0|        EVPerr(EVP_F_EVP_ENCRYPTDECRYPTUPDATE, EVP_R_PARTIALLY_OVERLAPPING);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  337|      0|        return 0;
  338|      0|    }
  339|       |
  340|  2.02M|    if (ctx->buf_len == 0 && (inl & (ctx->block_mask)) == 0) {
  ------------------
  |  Branch (340:9): [True: 2.02M, False: 0]
  |  Branch (340:30): [True: 2.02M, False: 0]
  ------------------
  341|  2.02M|        if (ctx->cipher->do_cipher(ctx, out, in, inl)) {
  ------------------
  |  Branch (341:13): [True: 2.02M, False: 0]
  ------------------
  342|  2.02M|            *outl = inl;
  343|  2.02M|            return 1;
  344|  2.02M|        } else {
  345|      0|            *outl = 0;
  346|      0|            return 0;
  347|      0|        }
  348|  2.02M|    }
  349|      0|    i = ctx->buf_len;
  350|      0|    OPENSSL_assert(bl <= (int)sizeof(ctx->buf));
  ------------------
  |  |  327|      0|    (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1))
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1))
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |  |  Branch (327:12): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  351|      0|    if (i != 0) {
  ------------------
  |  Branch (351:9): [True: 0, False: 0]
  ------------------
  352|      0|        if (bl - i > inl) {
  ------------------
  |  Branch (352:13): [True: 0, False: 0]
  ------------------
  353|      0|            memcpy(&(ctx->buf[i]), in, inl);
  354|      0|            ctx->buf_len += inl;
  355|      0|            *outl = 0;
  356|      0|            return 1;
  357|      0|        } else {
  358|      0|            j = bl - i;
  359|       |
  360|       |            /*
  361|       |             * Once we've processed the first j bytes from in, the amount of
  362|       |             * data left that is a multiple of the block length is:
  363|       |             * (inl - j) & ~(bl - 1)
  364|       |             * We must ensure that this amount of data, plus the one block that
  365|       |             * we process from ctx->buf does not exceed INT_MAX
  366|       |             */
  367|      0|            if (((inl - j) & ~(bl - 1)) > INT_MAX - bl) {
  ------------------
  |  Branch (367:17): [True: 0, False: 0]
  ------------------
  368|      0|                EVPerr(EVP_F_EVP_ENCRYPTDECRYPTUPDATE,
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  369|      0|                       EVP_R_OUTPUT_WOULD_OVERFLOW);
  370|      0|                return 0;
  371|      0|            }
  372|      0|            memcpy(&(ctx->buf[i]), in, j);
  373|      0|            inl -= j;
  374|      0|            in += j;
  375|      0|            if (!ctx->cipher->do_cipher(ctx, out, ctx->buf, bl))
  ------------------
  |  Branch (375:17): [True: 0, False: 0]
  ------------------
  376|      0|                return 0;
  377|      0|            out += bl;
  378|      0|            *outl = bl;
  379|      0|        }
  380|      0|    } else
  381|      0|        *outl = 0;
  382|      0|    i = inl & (bl - 1);
  383|      0|    inl -= i;
  384|      0|    if (inl > 0) {
  ------------------
  |  Branch (384:9): [True: 0, False: 0]
  ------------------
  385|      0|        if (!ctx->cipher->do_cipher(ctx, out, in, inl))
  ------------------
  |  Branch (385:13): [True: 0, False: 0]
  ------------------
  386|      0|            return 0;
  387|      0|        *outl += inl;
  388|      0|    }
  389|       |
  390|      0|    if (i != 0)
  ------------------
  |  Branch (390:9): [True: 0, False: 0]
  ------------------
  391|      0|        memcpy(ctx->buf, &(in[inl]), i);
  392|      0|    ctx->buf_len = i;
  393|      0|    return 1;
  394|      0|}

ERR_load_EVP_strings:
  287|      2|{
  288|      2|#ifndef OPENSSL_NO_ERR
  289|      2|    if (ERR_func_error_string(EVP_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (289:9): [True: 2, False: 0]
  ------------------
  290|      2|        ERR_load_strings_const(EVP_str_functs);
  291|      2|        ERR_load_strings_const(EVP_str_reasons);
  292|      2|    }
  293|      2|#endif
  294|      2|    return 1;
  295|      2|}

EVP_CIPHER_CTX_block_size:
  183|  1.82M|{
  184|  1.82M|    return ctx->cipher->block_size;
  185|  1.82M|}
EVP_CIPHER_CTX_cipher:
  199|  4.66M|{
  200|  4.66M|    return ctx->cipher;
  201|  4.66M|}
EVP_CIPHER_flags:
  209|  4.87M|{
  210|  4.87M|    return cipher->flags;
  211|  4.87M|}
EVP_CIPHER_CTX_get_cipher_data:
  224|  3.04M|{
  225|  3.04M|    return ctx->cipher_data;
  226|  3.04M|}
EVP_CIPHER_CTX_iv_length:
  244|   202k|{
  245|   202k|    int i, rv;
  246|       |
  247|   202k|    if ((EVP_CIPHER_flags(ctx->cipher) & EVP_CIPH_CUSTOM_IV_LENGTH) != 0) {
  ------------------
  |  |  264|   202k|# define         EVP_CIPH_CUSTOM_IV_LENGTH       0x800
  ------------------
  |  Branch (247:9): [True: 0, False: 202k]
  ------------------
  248|      0|        rv = EVP_CIPHER_CTX_ctrl((EVP_CIPHER_CTX *)ctx, EVP_CTRL_GET_IVLEN,
  ------------------
  |  |  354|      0|# define         EVP_CTRL_GET_IVLEN                      0x25
  ------------------
  249|      0|                                 0, &i);
  250|      0|        return (rv == 1) ? i : -1;
  ------------------
  |  Branch (250:16): [True: 0, False: 0]
  ------------------
  251|      0|    }
  252|   202k|    return ctx->cipher->iv_len;
  253|   202k|}
EVP_CIPHER_CTX_iv_noconst:
  266|   202k|{
  267|   202k|    return ctx->iv;
  268|   202k|}
EVP_CIPHER_CTX_buf_noconst:
  271|   202k|{
  272|   202k|    return ctx->buf;
  273|   202k|}
EVP_CIPHER_CTX_num:
  276|   202k|{
  277|   202k|    return ctx->num;
  278|   202k|}
EVP_CIPHER_CTX_set_num:
  281|   202k|{
  282|   202k|    ctx->num = num;
  283|   202k|}
EVP_CIPHER_CTX_key_length:
  291|  1.01M|{
  292|  1.01M|    return ctx->key_len;
  293|  1.01M|}
EVP_MD_size:
  321|   869k|{
  322|   869k|    if (!md) {
  ------------------
  |  Branch (322:9): [True: 0, False: 869k]
  ------------------
  323|      0|        EVPerr(EVP_F_EVP_MD_SIZE, EVP_R_MESSAGE_DIGEST_IS_NULL);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  324|      0|        return -1;
  325|      0|    }
  326|   869k|    return md->md_size;
  327|   869k|}
EVP_MD_CTX_md:
  459|  28.9k|{
  460|  28.9k|    if (!ctx)
  ------------------
  |  Branch (460:9): [True: 28.9k, False: 0]
  ------------------
  461|  28.9k|        return NULL;
  462|      0|    return ctx->digest;
  463|  28.9k|}
EVP_CIPHER_CTX_test_flags:
  533|  2.02M|{
  534|  2.02M|    return (ctx->flags & flags);
  535|  2.02M|}

EVP_PBE_cleanup:
  244|      2|{
  245|      2|    sk_EVP_PBE_CTL_pop_free(pbe_algs, free_evp_pbe_ctl);
  246|       |    pbe_algs = NULL;
  247|      2|}

EVP_md4:
   52|      2|{
   53|      2|    return &md4_md;
   54|      2|}

EVP_md5:
   52|      4|{
   53|      4|    return &md5_md;
   54|      4|}

EVP_md5_sha1:
  139|      4|{
  140|      4|    return &md5_sha1_md;
  141|      4|}

EVP_mdc2:
   52|      2|{
   53|      2|    return &mdc2_md;
   54|      2|}

EVP_ripemd160:
   52|      2|{
   53|      2|    return &ripemd160_md;
   54|      2|}

EVP_sha1:
  110|      4|{
  111|      4|    return &sha1_md;
  112|      4|}
EVP_sha224:
  159|      4|{
  160|      4|    return &sha224_md;
  161|      4|}
EVP_sha256:
  178|      4|{
  179|      4|    return &sha256_md;
  180|      4|}
EVP_sha512_224:
  238|      2|{
  239|      2|    return &sha512_224_md;
  240|      2|}
EVP_sha512_256:
  257|      2|{
  258|      2|    return &sha512_256_md;
  259|      2|}
EVP_sha384:
  276|      4|{
  277|      4|    return &sha384_md;
  278|      4|}
EVP_sha512:
  295|      4|{
  296|      4|    return &sha512_md;
  297|      4|}

EVP_whirlpool:
   51|      2|{
   52|      2|    return &whirlpool_md;
   53|      2|}

EVP_add_cipher:
   18|    328|{
   19|    328|    int r;
   20|       |
   21|    328|    if (c == NULL)
  ------------------
  |  Branch (21:9): [True: 16, False: 312]
  ------------------
   22|     16|        return 0;
   23|       |
   24|    312|    r = OBJ_NAME_add(OBJ_nid2sn(c->nid), OBJ_NAME_TYPE_CIPHER_METH,
  ------------------
  |  |   20|    312|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  ------------------
   25|    312|                     (const char *)c);
   26|    312|    if (r == 0)
  ------------------
  |  Branch (26:9): [True: 0, False: 312]
  ------------------
   27|      0|        return 0;
   28|    312|    r = OBJ_NAME_add(OBJ_nid2ln(c->nid), OBJ_NAME_TYPE_CIPHER_METH,
  ------------------
  |  |   20|    312|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  ------------------
   29|    312|                     (const char *)c);
   30|    312|    return r;
   31|    312|}
EVP_add_digest:
   34|     58|{
   35|     58|    int r;
   36|     58|    const char *name;
   37|       |
   38|     58|    name = OBJ_nid2sn(md->type);
   39|     58|    r = OBJ_NAME_add(name, OBJ_NAME_TYPE_MD_METH, (const char *)md);
  ------------------
  |  |   19|     58|# define OBJ_NAME_TYPE_MD_METH           0x01
  ------------------
   40|     58|    if (r == 0)
  ------------------
  |  Branch (40:9): [True: 0, False: 58]
  ------------------
   41|      0|        return 0;
   42|     58|    r = OBJ_NAME_add(OBJ_nid2ln(md->type), OBJ_NAME_TYPE_MD_METH,
  ------------------
  |  |   19|     58|# define OBJ_NAME_TYPE_MD_METH           0x01
  ------------------
   43|     58|                     (const char *)md);
   44|     58|    if (r == 0)
  ------------------
  |  Branch (44:9): [True: 0, False: 58]
  ------------------
   45|      0|        return 0;
   46|       |
   47|     58|    if (md->pkey_type && md->type != md->pkey_type) {
  ------------------
  |  Branch (47:9): [True: 48, False: 10]
  |  Branch (47:26): [True: 44, False: 4]
  ------------------
   48|     44|        r = OBJ_NAME_add(OBJ_nid2sn(md->pkey_type),
   49|     44|                         OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
  ------------------
  |  |   19|     44|# define OBJ_NAME_TYPE_MD_METH           0x01
  ------------------
                                       OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
  ------------------
  |  |   25|     44|# define OBJ_NAME_ALIAS                  0x8000
  ------------------
   50|     44|        if (r == 0)
  ------------------
  |  Branch (50:13): [True: 0, False: 44]
  ------------------
   51|      0|            return 0;
   52|     44|        r = OBJ_NAME_add(OBJ_nid2ln(md->pkey_type),
   53|     44|                         OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
  ------------------
  |  |   19|     44|# define OBJ_NAME_TYPE_MD_METH           0x01
  ------------------
                                       OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
  ------------------
  |  |   25|     44|# define OBJ_NAME_ALIAS                  0x8000
  ------------------
   54|     44|    }
   55|     58|    return r;
   56|     58|}
EVP_get_cipherbyname:
   59|     42|{
   60|     42|    const EVP_CIPHER *cp;
   61|       |
   62|     42|    if (!OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL))
  ------------------
  |  |  358|     42|# define OPENSSL_INIT_ADD_ALL_CIPHERS        0x00000004L
  ------------------
  |  Branch (62:9): [True: 0, False: 42]
  ------------------
   63|      0|        return NULL;
   64|       |
   65|     42|    cp = (const EVP_CIPHER *)OBJ_NAME_get(name, OBJ_NAME_TYPE_CIPHER_METH);
  ------------------
  |  |   20|     42|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  ------------------
   66|     42|    return cp;
   67|     42|}
EVP_get_digestbyname:
   70|  58.0k|{
   71|  58.0k|    const EVP_MD *cp;
   72|       |
   73|  58.0k|    if (!OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_DIGESTS, NULL))
  ------------------
  |  |  359|  58.0k|# define OPENSSL_INIT_ADD_ALL_DIGESTS        0x00000008L
  ------------------
  |  Branch (73:9): [True: 0, False: 58.0k]
  ------------------
   74|      0|        return NULL;
   75|       |
   76|  58.0k|    cp = (const EVP_MD *)OBJ_NAME_get(name, OBJ_NAME_TYPE_MD_METH);
  ------------------
  |  |   19|  58.0k|# define OBJ_NAME_TYPE_MD_METH           0x01
  ------------------
   77|  58.0k|    return cp;
   78|  58.0k|}
evp_cleanup_int:
   81|      2|{
   82|      2|    OBJ_NAME_cleanup(OBJ_NAME_TYPE_CIPHER_METH);
  ------------------
  |  |   20|      2|# define OBJ_NAME_TYPE_CIPHER_METH       0x02
  ------------------
   83|      2|    OBJ_NAME_cleanup(OBJ_NAME_TYPE_MD_METH);
  ------------------
  |  |   19|      2|# define OBJ_NAME_TYPE_MD_METH           0x01
  ------------------
   84|       |    /*
   85|       |     * The above calls will only clean out the contents of the name hash
   86|       |     * table, but not the hash table itself.  The following line does that
   87|       |     * part.  -- Richard Levitte
   88|       |     */
   89|      2|    OBJ_NAME_cleanup(-1);
   90|       |
   91|      2|    EVP_PBE_cleanup();
   92|      2|    OBJ_sigid_free();
   93|       |
   94|      2|    evp_app_cleanup_int();
   95|      2|}

EVP_PKEY_new:
  141|  28.9k|{
  142|  28.9k|    EVP_PKEY *ret = OPENSSL_zalloc(sizeof(*ret));
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  143|       |
  144|  28.9k|    if (ret == NULL) {
  ------------------
  |  Branch (144:9): [True: 0, False: 28.9k]
  ------------------
  145|      0|        EVPerr(EVP_F_EVP_PKEY_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  146|      0|        return NULL;
  147|      0|    }
  148|  28.9k|    ret->type = EVP_PKEY_NONE;
  ------------------
  |  |   41|  28.9k|# define EVP_PKEY_NONE   NID_undef
  |  |  ------------------
  |  |  |  |   14|  28.9k|#define NID_undef                       0
  |  |  ------------------
  ------------------
  149|  28.9k|    ret->save_type = EVP_PKEY_NONE;
  ------------------
  |  |   41|  28.9k|# define EVP_PKEY_NONE   NID_undef
  |  |  ------------------
  |  |  |  |   14|  28.9k|#define NID_undef                       0
  |  |  ------------------
  ------------------
  150|  28.9k|    ret->references = 1;
  151|  28.9k|    ret->save_parameters = 1;
  152|  28.9k|    ret->lock = CRYPTO_THREAD_lock_new();
  153|  28.9k|    if (ret->lock == NULL) {
  ------------------
  |  Branch (153:9): [True: 0, False: 28.9k]
  ------------------
  154|      0|        EVPerr(EVP_F_EVP_PKEY_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  155|      0|        OPENSSL_free(ret);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  156|      0|        return NULL;
  157|      0|    }
  158|  28.9k|    return ret;
  159|  28.9k|}
EVP_PKEY_set_type:
  351|  28.9k|{
  352|  28.9k|    return pkey_set_type(pkey, NULL, type, NULL, -1);
  353|  28.9k|}
EVP_PKEY_assign:
  404|  28.9k|{
  405|  28.9k|    if (pkey == NULL || !EVP_PKEY_set_type(pkey, type))
  ------------------
  |  Branch (405:9): [True: 0, False: 28.9k]
  |  Branch (405:25): [True: 0, False: 28.9k]
  ------------------
  406|      0|        return 0;
  407|  28.9k|    pkey->pkey.ptr = key;
  408|       |    return (key != NULL);
  409|  28.9k|}
EVP_PKEY_free:
  596|   927k|{
  597|   927k|    int i;
  598|       |
  599|   927k|    if (x == NULL)
  ------------------
  |  Branch (599:9): [True: 898k, False: 28.9k]
  ------------------
  600|   898k|        return;
  601|       |
  602|  28.9k|    CRYPTO_DOWN_REF(&x->references, &i, x->lock);
  603|  28.9k|    REF_PRINT_COUNT("EVP_PKEY", x);
  604|  28.9k|    if (i > 0)
  ------------------
  |  Branch (604:9): [True: 0, False: 28.9k]
  ------------------
  605|      0|        return;
  606|  28.9k|    REF_ASSERT_ISNT(i < 0);
  ------------------
  |  |  138|  28.9k|    (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0)
  |  |  ------------------
  |  |  |  Branch (138:12): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  607|  28.9k|    EVP_PKEY_free_it(x);
  608|  28.9k|    CRYPTO_THREAD_lock_free(x->lock);
  609|  28.9k|    sk_X509_ATTRIBUTE_pop_free(x->attributes, X509_ATTRIBUTE_free);
  610|  28.9k|    OPENSSL_free(x);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  611|  28.9k|}
EVP_PKEY_get1_tls_encodedpoint:
  687|  28.9k|{
  688|  28.9k|    int rv;
  689|  28.9k|    rv = evp_pkey_asn1_ctrl(pkey, ASN1_PKEY_CTRL_GET1_TLS_ENCPT, 0, ppt);
  ------------------
  |  | 1143|  28.9k|# define ASN1_PKEY_CTRL_GET1_TLS_ENCPT   0xa
  ------------------
  690|  28.9k|    if (rv <= 0)
  ------------------
  |  Branch (690:9): [True: 0, False: 28.9k]
  ------------------
  691|      0|        return 0;
  692|  28.9k|    return rv;
  693|  28.9k|}
p_lib.c:pkey_set_type:
  180|  28.9k|{
  181|  28.9k|    const EVP_PKEY_ASN1_METHOD *ameth;
  182|  28.9k|    ENGINE **eptr = (e == NULL) ? &e :  NULL;
  ------------------
  |  Branch (182:21): [True: 28.9k, False: 0]
  ------------------
  183|       |
  184|  28.9k|    if (pkey) {
  ------------------
  |  Branch (184:9): [True: 28.9k, False: 0]
  ------------------
  185|  28.9k|        if (pkey->pkey.ptr)
  ------------------
  |  Branch (185:13): [True: 0, False: 28.9k]
  ------------------
  186|      0|            EVP_PKEY_free_it(pkey);
  187|       |        /*
  188|       |         * If key type matches and a method exists then this lookup has
  189|       |         * succeeded once so just indicate success.
  190|       |         */
  191|  28.9k|        if ((type == pkey->save_type) && pkey->ameth)
  ------------------
  |  Branch (191:13): [True: 0, False: 28.9k]
  |  Branch (191:42): [True: 0, False: 0]
  ------------------
  192|      0|            return 1;
  193|  28.9k|#ifndef OPENSSL_NO_ENGINE
  194|       |        /* If we have ENGINEs release them */
  195|  28.9k|        ENGINE_finish(pkey->engine);
  196|  28.9k|        pkey->engine = NULL;
  197|  28.9k|        ENGINE_finish(pkey->pmeth_engine);
  198|  28.9k|        pkey->pmeth_engine = NULL;
  199|  28.9k|#endif
  200|  28.9k|    }
  201|  28.9k|    if (str)
  ------------------
  |  Branch (201:9): [True: 0, False: 28.9k]
  ------------------
  202|      0|        ameth = EVP_PKEY_asn1_find_str(eptr, str, len);
  203|  28.9k|    else
  204|  28.9k|        ameth = EVP_PKEY_asn1_find(eptr, type);
  205|  28.9k|#ifndef OPENSSL_NO_ENGINE
  206|  28.9k|    if (pkey == NULL && eptr != NULL)
  ------------------
  |  Branch (206:9): [True: 0, False: 28.9k]
  |  Branch (206:25): [True: 0, False: 0]
  ------------------
  207|      0|        ENGINE_finish(e);
  208|  28.9k|#endif
  209|  28.9k|    if (ameth == NULL) {
  ------------------
  |  Branch (209:9): [True: 0, False: 28.9k]
  ------------------
  210|      0|        EVPerr(EVP_F_PKEY_SET_TYPE, EVP_R_UNSUPPORTED_ALGORITHM);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  211|      0|        return 0;
  212|      0|    }
  213|  28.9k|    if (pkey) {
  ------------------
  |  Branch (213:9): [True: 28.9k, False: 0]
  ------------------
  214|  28.9k|        pkey->ameth = ameth;
  215|  28.9k|        pkey->engine = e;
  216|       |
  217|  28.9k|        pkey->type = pkey->ameth->pkey_id;
  218|  28.9k|        pkey->save_type = type;
  219|  28.9k|    }
  220|  28.9k|    return 1;
  221|  28.9k|}
p_lib.c:EVP_PKEY_free_it:
  614|  28.9k|{
  615|       |    /* internal function; x is never NULL */
  616|  28.9k|    if (x->ameth && x->ameth->pkey_free) {
  ------------------
  |  Branch (616:9): [True: 28.9k, False: 0]
  |  Branch (616:21): [True: 28.9k, False: 0]
  ------------------
  617|  28.9k|        x->ameth->pkey_free(x);
  618|  28.9k|        x->pkey.ptr = NULL;
  619|  28.9k|    }
  620|  28.9k|#ifndef OPENSSL_NO_ENGINE
  621|  28.9k|    ENGINE_finish(x->engine);
  622|  28.9k|    x->engine = NULL;
  623|  28.9k|    ENGINE_finish(x->pmeth_engine);
  624|       |    x->pmeth_engine = NULL;
  625|  28.9k|#endif
  626|  28.9k|}
p_lib.c:evp_pkey_asn1_ctrl:
  664|  28.9k|{
  665|  28.9k|    if (pkey->ameth == NULL || pkey->ameth->pkey_ctrl == NULL)
  ------------------
  |  Branch (665:9): [True: 0, False: 28.9k]
  |  Branch (665:32): [True: 0, False: 28.9k]
  ------------------
  666|      0|        return -2;
  667|  28.9k|    return pkey->ameth->pkey_ctrl(pkey, op, arg1, arg2);
  668|  28.9k|}

EVP_PKEY_keygen_init:
   70|  28.9k|{
   71|  28.9k|    int ret;
   72|  28.9k|    if (!ctx || !ctx->pmeth || !ctx->pmeth->keygen) {
  ------------------
  |  Branch (72:9): [True: 0, False: 28.9k]
  |  Branch (72:17): [True: 0, False: 28.9k]
  |  Branch (72:32): [True: 0, False: 28.9k]
  ------------------
   73|      0|        EVPerr(EVP_F_EVP_PKEY_KEYGEN_INIT,
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   74|      0|               EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
   75|      0|        return -2;
   76|      0|    }
   77|  28.9k|    ctx->operation = EVP_PKEY_OP_KEYGEN;
  ------------------
  |  | 1259|  28.9k|# define EVP_PKEY_OP_KEYGEN              (1<<2)
  ------------------
   78|  28.9k|    if (!ctx->pmeth->keygen_init)
  ------------------
  |  Branch (78:9): [True: 28.9k, False: 0]
  ------------------
   79|  28.9k|        return 1;
   80|      0|    ret = ctx->pmeth->keygen_init(ctx);
   81|      0|    if (ret <= 0)
  ------------------
  |  Branch (81:9): [True: 0, False: 0]
  ------------------
   82|      0|        ctx->operation = EVP_PKEY_OP_UNDEFINED;
  ------------------
  |  | 1257|      0|# define EVP_PKEY_OP_UNDEFINED           0
  ------------------
   83|      0|    return ret;
   84|  28.9k|}
EVP_PKEY_keygen:
   87|  28.9k|{
   88|  28.9k|    int ret;
   89|       |
   90|  28.9k|    if (!ctx || !ctx->pmeth || !ctx->pmeth->keygen) {
  ------------------
  |  Branch (90:9): [True: 0, False: 28.9k]
  |  Branch (90:17): [True: 0, False: 28.9k]
  |  Branch (90:32): [True: 0, False: 28.9k]
  ------------------
   91|      0|        EVPerr(EVP_F_EVP_PKEY_KEYGEN,
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   92|      0|               EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
   93|      0|        return -2;
   94|      0|    }
   95|  28.9k|    if (ctx->operation != EVP_PKEY_OP_KEYGEN) {
  ------------------
  |  | 1259|  28.9k|# define EVP_PKEY_OP_KEYGEN              (1<<2)
  ------------------
  |  Branch (95:9): [True: 0, False: 28.9k]
  ------------------
   96|      0|        EVPerr(EVP_F_EVP_PKEY_KEYGEN, EVP_R_OPERATON_NOT_INITIALIZED);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   97|      0|        return -1;
   98|      0|    }
   99|       |
  100|  28.9k|    if (ppkey == NULL)
  ------------------
  |  Branch (100:9): [True: 0, False: 28.9k]
  ------------------
  101|      0|        return -1;
  102|       |
  103|  28.9k|    if (*ppkey == NULL)
  ------------------
  |  Branch (103:9): [True: 28.9k, False: 0]
  ------------------
  104|  28.9k|        *ppkey = EVP_PKEY_new();
  105|  28.9k|    if (*ppkey == NULL)
  ------------------
  |  Branch (105:9): [True: 0, False: 28.9k]
  ------------------
  106|      0|        return -1;
  107|       |
  108|  28.9k|    ret = ctx->pmeth->keygen(ctx, *ppkey);
  109|  28.9k|    if (ret <= 0) {
  ------------------
  |  Branch (109:9): [True: 0, False: 28.9k]
  ------------------
  110|      0|        EVP_PKEY_free(*ppkey);
  111|       |        *ppkey = NULL;
  112|      0|    }
  113|  28.9k|    return ret;
  114|  28.9k|}

EVP_PKEY_meth_find:
   85|  28.9k|{
   86|  28.9k|    EVP_PKEY_METHOD tmp;
   87|  28.9k|    const EVP_PKEY_METHOD *t = &tmp, **ret;
   88|  28.9k|    tmp.pkey_id = type;
   89|  28.9k|    if (app_pkey_methods) {
  ------------------
  |  Branch (89:9): [True: 0, False: 28.9k]
  ------------------
   90|      0|        int idx;
   91|      0|        idx = sk_EVP_PKEY_METHOD_find(app_pkey_methods, &tmp);
   92|      0|        if (idx >= 0)
  ------------------
  |  Branch (92:13): [True: 0, False: 0]
  ------------------
   93|      0|            return sk_EVP_PKEY_METHOD_value(app_pkey_methods, idx);
   94|      0|    }
   95|  28.9k|    ret = OBJ_bsearch_pmeth(&t, standard_methods,
   96|  28.9k|                            sizeof(standard_methods) /
   97|  28.9k|                            sizeof(EVP_PKEY_METHOD *));
   98|  28.9k|    if (!ret || !*ret)
  ------------------
  |  Branch (98:9): [True: 0, False: 28.9k]
  |  Branch (98:17): [True: 0, False: 28.9k]
  ------------------
   99|      0|        return NULL;
  100|  28.9k|    return *ret;
  101|  28.9k|}
EVP_PKEY_CTX_new_id:
  249|  28.9k|{
  250|       |    return int_ctx_new(NULL, e, id);
  251|  28.9k|}
evp_app_cleanup_int:
  317|      2|{
  318|      2|    if (app_pkey_methods != NULL)
  ------------------
  |  Branch (318:9): [True: 0, False: 2]
  ------------------
  319|      0|        sk_EVP_PKEY_METHOD_pop_free(app_pkey_methods, EVP_PKEY_meth_free);
  320|      2|}
EVP_PKEY_CTX_free:
  353|  28.9k|{
  354|  28.9k|    if (ctx == NULL)
  ------------------
  |  Branch (354:9): [True: 0, False: 28.9k]
  ------------------
  355|      0|        return;
  356|  28.9k|    if (ctx->pmeth && ctx->pmeth->cleanup)
  ------------------
  |  Branch (356:9): [True: 28.9k, False: 0]
  |  Branch (356:23): [True: 0, False: 28.9k]
  ------------------
  357|      0|        ctx->pmeth->cleanup(ctx);
  358|  28.9k|    EVP_PKEY_free(ctx->pkey);
  359|  28.9k|    EVP_PKEY_free(ctx->peerkey);
  360|  28.9k|#ifndef OPENSSL_NO_ENGINE
  361|  28.9k|    ENGINE_finish(ctx->engine);
  362|  28.9k|#endif
  363|  28.9k|    OPENSSL_free(ctx);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  364|  28.9k|}
pmeth_lib.c:int_ctx_new:
  104|  28.9k|{
  105|  28.9k|    EVP_PKEY_CTX *ret;
  106|  28.9k|    const EVP_PKEY_METHOD *pmeth;
  107|       |
  108|  28.9k|    if (id == -1) {
  ------------------
  |  Branch (108:9): [True: 0, False: 28.9k]
  ------------------
  109|      0|        if (pkey == NULL)
  ------------------
  |  Branch (109:13): [True: 0, False: 0]
  ------------------
  110|      0|            return 0;
  111|      0|        id = pkey->type;
  112|      0|    }
  113|  28.9k|#ifndef OPENSSL_NO_ENGINE
  114|  28.9k|    if (e == NULL && pkey != NULL)
  ------------------
  |  Branch (114:9): [True: 28.9k, False: 0]
  |  Branch (114:22): [True: 0, False: 28.9k]
  ------------------
  115|      0|        e = pkey->pmeth_engine != NULL ? pkey->pmeth_engine : pkey->engine;
  ------------------
  |  Branch (115:13): [True: 0, False: 0]
  ------------------
  116|       |    /* Try to find an ENGINE which implements this method */
  117|  28.9k|    if (e) {
  ------------------
  |  Branch (117:9): [True: 0, False: 28.9k]
  ------------------
  118|      0|        if (!ENGINE_init(e)) {
  ------------------
  |  Branch (118:13): [True: 0, False: 0]
  ------------------
  119|      0|            EVPerr(EVP_F_INT_CTX_NEW, ERR_R_ENGINE_LIB);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  120|      0|            return NULL;
  121|      0|        }
  122|  28.9k|    } else {
  123|  28.9k|        e = ENGINE_get_pkey_meth_engine(id);
  124|  28.9k|    }
  125|       |
  126|       |    /*
  127|       |     * If an ENGINE handled this method look it up. Otherwise use internal
  128|       |     * tables.
  129|       |     */
  130|  28.9k|    if (e)
  ------------------
  |  Branch (130:9): [True: 0, False: 28.9k]
  ------------------
  131|      0|        pmeth = ENGINE_get_pkey_meth(e, id);
  132|  28.9k|    else
  133|  28.9k|#endif
  134|  28.9k|        pmeth = EVP_PKEY_meth_find(id);
  135|       |
  136|  28.9k|    if (pmeth == NULL) {
  ------------------
  |  Branch (136:9): [True: 0, False: 28.9k]
  ------------------
  137|      0|#ifndef OPENSSL_NO_ENGINE
  138|      0|        ENGINE_finish(e);
  139|      0|#endif
  140|      0|        EVPerr(EVP_F_INT_CTX_NEW, EVP_R_UNSUPPORTED_ALGORITHM);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  141|      0|        return NULL;
  142|      0|    }
  143|       |
  144|  28.9k|    ret = OPENSSL_zalloc(sizeof(*ret));
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  145|  28.9k|    if (ret == NULL) {
  ------------------
  |  Branch (145:9): [True: 0, False: 28.9k]
  ------------------
  146|      0|#ifndef OPENSSL_NO_ENGINE
  147|      0|        ENGINE_finish(e);
  148|      0|#endif
  149|      0|        EVPerr(EVP_F_INT_CTX_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  105|      0|# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  150|      0|        return NULL;
  151|      0|    }
  152|  28.9k|    ret->engine = e;
  153|  28.9k|    ret->pmeth = pmeth;
  154|  28.9k|    ret->operation = EVP_PKEY_OP_UNDEFINED;
  ------------------
  |  | 1257|  28.9k|# define EVP_PKEY_OP_UNDEFINED           0
  ------------------
  155|  28.9k|    ret->pkey = pkey;
  156|  28.9k|    if (pkey != NULL)
  ------------------
  |  Branch (156:9): [True: 0, False: 28.9k]
  ------------------
  157|      0|        EVP_PKEY_up_ref(pkey);
  158|       |
  159|  28.9k|    if (pmeth->init) {
  ------------------
  |  Branch (159:9): [True: 0, False: 28.9k]
  ------------------
  160|      0|        if (pmeth->init(ret) <= 0) {
  ------------------
  |  Branch (160:13): [True: 0, False: 0]
  ------------------
  161|      0|            ret->pmeth = NULL;
  162|      0|            EVP_PKEY_CTX_free(ret);
  163|      0|            return NULL;
  164|      0|        }
  165|      0|    }
  166|       |
  167|  28.9k|    return ret;
  168|  28.9k|}
pmeth_lib.c:pmeth_cmp:
   77|   144k|{
   78|   144k|    return ((*a)->pkey_id - (*b)->pkey_id);
   79|   144k|}

crypto_cleanup_all_ex_data_int:
   94|      2|{
   95|      2|    int i;
   96|       |
   97|     34|    for (i = 0; i < CRYPTO_EX_INDEX__COUNT; ++i) {
  ------------------
  |  |  110|     34|# define CRYPTO_EX_INDEX__COUNT          16
  ------------------
  |  Branch (97:17): [True: 32, False: 2]
  ------------------
   98|     32|        EX_CALLBACKS *ip = &ex_data[i];
   99|       |
  100|     32|        sk_EX_CALLBACK_pop_free(ip->meth, cleanup_cb);
  101|     32|        ip->meth = NULL;
  102|     32|    }
  103|       |
  104|      2|    CRYPTO_THREAD_lock_free(ex_data_lock);
  105|       |    ex_data_lock = NULL;
  106|      2|}
CRYPTO_get_ex_new_index:
  158|      1|{
  159|      1|    int toret = -1;
  160|      1|    EX_CALLBACK *a;
  161|      1|    EX_CALLBACKS *ip = get_and_lock(class_index);
  162|       |
  163|      1|    if (ip == NULL)
  ------------------
  |  Branch (163:9): [True: 0, False: 1]
  ------------------
  164|      0|        return -1;
  165|       |
  166|      1|    if (ip->meth == NULL) {
  ------------------
  |  Branch (166:9): [True: 1, False: 0]
  ------------------
  167|      1|        ip->meth = sk_EX_CALLBACK_new_null();
  168|       |        /* We push an initial value on the stack because the SSL
  169|       |         * "app_data" routines use ex_data index zero.  See RT 3710. */
  170|      1|        if (ip->meth == NULL
  ------------------
  |  Branch (170:13): [True: 0, False: 1]
  ------------------
  171|      1|            || !sk_EX_CALLBACK_push(ip->meth, NULL)) {
  ------------------
  |  Branch (171:16): [True: 0, False: 1]
  ------------------
  172|      0|            CRYPTOerr(CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  113|      0|# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  173|      0|            goto err;
  174|      0|        }
  175|      1|    }
  176|       |
  177|      1|    a = (EX_CALLBACK *)OPENSSL_malloc(sizeof(*a));
  ------------------
  |  |  118|      1|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  178|      1|    if (a == NULL) {
  ------------------
  |  Branch (178:9): [True: 0, False: 1]
  ------------------
  179|      0|        CRYPTOerr(CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  113|      0|# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  180|      0|        goto err;
  181|      0|    }
  182|      1|    a->argl = argl;
  183|      1|    a->argp = argp;
  184|      1|    a->new_func = new_func;
  185|      1|    a->dup_func = dup_func;
  186|      1|    a->free_func = free_func;
  187|       |
  188|      1|    if (!sk_EX_CALLBACK_push(ip->meth, NULL)) {
  ------------------
  |  Branch (188:9): [True: 0, False: 1]
  ------------------
  189|      0|        CRYPTOerr(CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  113|      0|# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  190|      0|        OPENSSL_free(a);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  191|      0|        goto err;
  192|      0|    }
  193|      1|    toret = sk_EX_CALLBACK_num(ip->meth) - 1;
  194|      1|    (void)sk_EX_CALLBACK_set(ip->meth, toret, a);
  195|       |
  196|      1| err:
  197|      1|    CRYPTO_THREAD_unlock(ex_data_lock);
  198|      1|    return toret;
  199|      1|}
CRYPTO_new_ex_data:
  209|   202k|{
  210|   202k|    int mx, i;
  211|   202k|    void *ptr;
  212|   202k|    EX_CALLBACK **storage = NULL;
  213|   202k|    EX_CALLBACK *stack[10];
  214|   202k|    EX_CALLBACKS *ip = get_and_lock(class_index);
  215|       |
  216|   202k|    if (ip == NULL)
  ------------------
  |  Branch (216:9): [True: 0, False: 202k]
  ------------------
  217|      0|        return 0;
  218|       |
  219|   202k|    ad->sk = NULL;
  220|       |
  221|   202k|    mx = sk_EX_CALLBACK_num(ip->meth);
  222|   202k|    if (mx > 0) {
  ------------------
  |  Branch (222:9): [True: 0, False: 202k]
  ------------------
  223|      0|        if (mx < (int)OSSL_NELEM(stack))
  ------------------
  |  |   13|      0|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
  |  Branch (223:13): [True: 0, False: 0]
  ------------------
  224|      0|            storage = stack;
  225|      0|        else
  226|      0|            storage = OPENSSL_malloc(sizeof(*storage) * mx);
  ------------------
  |  |  118|      0|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  227|      0|        if (storage != NULL)
  ------------------
  |  Branch (227:13): [True: 0, False: 0]
  ------------------
  228|      0|            for (i = 0; i < mx; i++)
  ------------------
  |  Branch (228:25): [True: 0, False: 0]
  ------------------
  229|      0|                storage[i] = sk_EX_CALLBACK_value(ip->meth, i);
  230|      0|    }
  231|   202k|    CRYPTO_THREAD_unlock(ex_data_lock);
  232|       |
  233|   202k|    if (mx > 0 && storage == NULL) {
  ------------------
  |  Branch (233:9): [True: 0, False: 202k]
  |  Branch (233:19): [True: 0, False: 0]
  ------------------
  234|      0|        CRYPTOerr(CRYPTO_F_CRYPTO_NEW_EX_DATA, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  113|      0|# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  235|      0|        return 0;
  236|      0|    }
  237|   202k|    for (i = 0; i < mx; i++) {
  ------------------
  |  Branch (237:17): [True: 0, False: 202k]
  ------------------
  238|      0|        if (storage[i] != NULL && storage[i]->new_func != NULL) {
  ------------------
  |  Branch (238:13): [True: 0, False: 0]
  |  Branch (238:35): [True: 0, False: 0]
  ------------------
  239|      0|            ptr = CRYPTO_get_ex_data(ad, i);
  240|      0|            storage[i]->new_func(obj, ptr, ad, i,
  241|      0|                                 storage[i]->argl, storage[i]->argp);
  242|      0|        }
  243|      0|    }
  244|   202k|    if (storage != stack)
  ------------------
  |  Branch (244:9): [True: 202k, False: 0]
  ------------------
  245|   202k|        OPENSSL_free(storage);
  ------------------
  |  |  128|   202k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  246|   202k|    return 1;
  247|   202k|}
CRYPTO_free_ex_data:
  321|   202k|{
  322|   202k|    int mx, i;
  323|   202k|    EX_CALLBACKS *ip;
  324|   202k|    void *ptr;
  325|   202k|    EX_CALLBACK *f;
  326|   202k|    EX_CALLBACK *stack[10];
  327|   202k|    EX_CALLBACK **storage = NULL;
  328|       |
  329|   202k|    if ((ip = get_and_lock(class_index)) == NULL)
  ------------------
  |  Branch (329:9): [True: 0, False: 202k]
  ------------------
  330|      0|        goto err;
  331|       |
  332|   202k|    mx = sk_EX_CALLBACK_num(ip->meth);
  333|   202k|    if (mx > 0) {
  ------------------
  |  Branch (333:9): [True: 0, False: 202k]
  ------------------
  334|      0|        if (mx < (int)OSSL_NELEM(stack))
  ------------------
  |  |   13|      0|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
  |  Branch (334:13): [True: 0, False: 0]
  ------------------
  335|      0|            storage = stack;
  336|      0|        else
  337|      0|            storage = OPENSSL_malloc(sizeof(*storage) * mx);
  ------------------
  |  |  118|      0|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  338|      0|        if (storage != NULL)
  ------------------
  |  Branch (338:13): [True: 0, False: 0]
  ------------------
  339|      0|            for (i = 0; i < mx; i++)
  ------------------
  |  Branch (339:25): [True: 0, False: 0]
  ------------------
  340|      0|                storage[i] = sk_EX_CALLBACK_value(ip->meth, i);
  341|      0|    }
  342|   202k|    CRYPTO_THREAD_unlock(ex_data_lock);
  343|       |
  344|   202k|    for (i = 0; i < mx; i++) {
  ------------------
  |  Branch (344:17): [True: 0, False: 202k]
  ------------------
  345|      0|        if (storage != NULL)
  ------------------
  |  Branch (345:13): [True: 0, False: 0]
  ------------------
  346|      0|            f = storage[i];
  347|      0|        else {
  348|      0|            CRYPTO_THREAD_write_lock(ex_data_lock);
  349|      0|            f = sk_EX_CALLBACK_value(ip->meth, i);
  350|      0|            CRYPTO_THREAD_unlock(ex_data_lock);
  351|      0|        }
  352|      0|        if (f != NULL && f->free_func != NULL) {
  ------------------
  |  Branch (352:13): [True: 0, False: 0]
  |  Branch (352:26): [True: 0, False: 0]
  ------------------
  353|      0|            ptr = CRYPTO_get_ex_data(ad, i);
  354|      0|            f->free_func(obj, ptr, ad, i, f->argl, f->argp);
  355|      0|        }
  356|      0|    }
  357|       |
  358|   202k|    if (storage != stack)
  ------------------
  |  Branch (358:9): [True: 202k, False: 0]
  ------------------
  359|   202k|        OPENSSL_free(storage);
  ------------------
  |  |  128|   202k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  360|   202k| err:
  361|   202k|    sk_void_free(ad->sk);
  362|       |    ad->sk = NULL;
  363|   202k|}
ex_data.c:cleanup_cb:
   83|      1|{
   84|      1|    OPENSSL_free(funcs);
  ------------------
  |  |  128|      1|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   85|      1|}
ex_data.c:get_and_lock:
   51|   405k|{
   52|   405k|    EX_CALLBACKS *ip;
   53|       |
   54|   405k|    if (class_index < 0 || class_index >= CRYPTO_EX_INDEX__COUNT) {
  ------------------
  |  |  110|   405k|# define CRYPTO_EX_INDEX__COUNT          16
  ------------------
  |  Branch (54:9): [True: 0, False: 405k]
  |  Branch (54:28): [True: 0, False: 405k]
  ------------------
   55|      0|        CRYPTOerr(CRYPTO_F_GET_AND_LOCK, ERR_R_PASSED_INVALID_ARGUMENT);
  ------------------
  |  |  113|      0|# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   56|      0|        return NULL;
   57|      0|    }
   58|       |
   59|   405k|    if (!RUN_ONCE(&ex_data_init, do_ex_data_init)) {
  ------------------
  |  |  119|   405k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 405k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (59:9): [True: 0, False: 405k]
  ------------------
   60|      0|        CRYPTOerr(CRYPTO_F_GET_AND_LOCK, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  113|      0|# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   61|      0|        return NULL;
   62|      0|    }
   63|       |
   64|   405k|    if (ex_data_lock == NULL) {
  ------------------
  |  Branch (64:9): [True: 0, False: 405k]
  ------------------
   65|       |        /*
   66|       |         * This can happen in normal operation when using CRYPTO_mem_leaks().
   67|       |         * The CRYPTO_mem_leaks() function calls OPENSSL_cleanup() which cleans
   68|       |         * up the locks. Subsequently the BIO that CRYPTO_mem_leaks() uses gets
   69|       |         * freed, which also attempts to free the ex_data. However
   70|       |         * CRYPTO_mem_leaks() ensures that the ex_data is freed early (i.e.
   71|       |         * before OPENSSL_cleanup() is called), so if we get here we can safely
   72|       |         * ignore this operation. We just treat it as an error.
   73|       |         */
   74|      0|         return NULL;
   75|      0|    }
   76|       |
   77|   405k|    ip = &ex_data[class_index];
   78|   405k|    CRYPTO_THREAD_write_lock(ex_data_lock);
   79|   405k|    return ip;
   80|   405k|}
ex_data.c:do_ex_data_init:
   39|      2|{
   40|      2|    if (!OPENSSL_init_crypto(0, NULL))
  ------------------
  |  Branch (40:9): [True: 0, False: 2]
  ------------------
   41|      0|        return 0;
   42|      2|    ex_data_lock = CRYPTO_THREAD_lock_new();
   43|       |    return ex_data_lock != NULL;
   44|      2|}

ossl_safe_getenv:
   18|      6|{
   19|      6|#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
   20|      6|# if __GLIBC_PREREQ(2, 17)
   21|      6|#  define SECURE_GETENV
   22|      6|    return secure_getenv(name);
   23|      6|# endif
   24|      6|#endif
   25|       |
   26|       |#ifndef SECURE_GETENV
   27|       |    if (OPENSSL_issetugid())
   28|       |        return NULL;
   29|       |    return getenv(name);
   30|       |#endif
   31|      6|}

ossl_init_thread_start:
  459|      4|{
  460|      4|    struct thread_local_inits_st *locals;
  461|       |
  462|      4|    if (!OPENSSL_init_crypto(0, NULL))
  ------------------
  |  Branch (462:9): [True: 0, False: 4]
  ------------------
  463|      0|        return 0;
  464|       |
  465|      4|    locals = ossl_init_get_thread_local(1);
  466|       |
  467|      4|    if (locals == NULL)
  ------------------
  |  Branch (467:9): [True: 0, False: 4]
  ------------------
  468|      0|        return 0;
  469|       |
  470|      4|    if (opts & OPENSSL_INIT_THREAD_ASYNC) {
  ------------------
  |  |   31|      4|# define OPENSSL_INIT_THREAD_ASYNC           0x01
  ------------------
  |  Branch (470:9): [True: 0, False: 4]
  ------------------
  471|       |#ifdef OPENSSL_INIT_DEBUG
  472|       |        fprintf(stderr, "OPENSSL_INIT: ossl_init_thread_start: "
  473|       |                        "marking thread for async\n");
  474|       |#endif
  475|      0|        locals->async = 1;
  476|      0|    }
  477|       |
  478|      4|    if (opts & OPENSSL_INIT_THREAD_ERR_STATE) {
  ------------------
  |  |   32|      4|# define OPENSSL_INIT_THREAD_ERR_STATE       0x02
  ------------------
  |  Branch (478:9): [True: 2, False: 2]
  ------------------
  479|       |#ifdef OPENSSL_INIT_DEBUG
  480|       |        fprintf(stderr, "OPENSSL_INIT: ossl_init_thread_start: "
  481|       |                        "marking thread for err_state\n");
  482|       |#endif
  483|      2|        locals->err_state = 1;
  484|      2|    }
  485|       |
  486|      4|    if (opts & OPENSSL_INIT_THREAD_RAND) {
  ------------------
  |  |   33|      4|# define OPENSSL_INIT_THREAD_RAND            0x04
  ------------------
  |  Branch (486:9): [True: 2, False: 2]
  ------------------
  487|       |#ifdef OPENSSL_INIT_DEBUG
  488|       |        fprintf(stderr, "OPENSSL_INIT: ossl_init_thread_start: "
  489|       |                        "marking thread for rand\n");
  490|       |#endif
  491|      2|        locals->rand = 1;
  492|      2|    }
  493|       |
  494|      4|    return 1;
  495|      4|}
OPENSSL_cleanup:
  498|      2|{
  499|      2|    OPENSSL_INIT_STOP *currhandler, *lasthandler;
  500|      2|    CRYPTO_THREAD_LOCAL key;
  501|       |
  502|       |    /* If we've not been inited then no need to deinit */
  503|      2|    if (!base_inited)
  ------------------
  |  Branch (503:9): [True: 0, False: 2]
  ------------------
  504|      0|        return;
  505|       |
  506|       |    /* Might be explicitly called and also by atexit */
  507|      2|    if (stopped)
  ------------------
  |  Branch (507:9): [True: 0, False: 2]
  ------------------
  508|      0|        return;
  509|      2|    stopped = 1;
  510|       |
  511|       |    /*
  512|       |     * Thread stop may not get automatically called by the thread library for
  513|       |     * the very last thread in some situations, so call it directly.
  514|       |     */
  515|      2|    ossl_init_thread_stop(ossl_init_get_thread_local(0));
  516|       |
  517|      2|    currhandler = stop_handlers;
  518|      4|    while (currhandler != NULL) {
  ------------------
  |  Branch (518:12): [True: 2, False: 2]
  ------------------
  519|      2|        currhandler->handler();
  520|      2|        lasthandler = currhandler;
  521|      2|        currhandler = currhandler->next;
  522|      2|        OPENSSL_free(lasthandler);
  ------------------
  |  |  128|      2|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  523|      2|    }
  524|      2|    stop_handlers = NULL;
  525|       |
  526|      2|    CRYPTO_THREAD_lock_free(init_lock);
  527|      2|    init_lock = NULL;
  528|       |
  529|       |    /*
  530|       |     * We assume we are single-threaded for this function, i.e. no race
  531|       |     * conditions for the various "*_inited" vars below.
  532|       |     */
  533|       |
  534|       |#ifndef OPENSSL_NO_COMP
  535|       |    if (zlib_inited) {
  536|       |#ifdef OPENSSL_INIT_DEBUG
  537|       |        fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
  538|       |                        "comp_zlib_cleanup_int()\n");
  539|       |#endif
  540|       |        comp_zlib_cleanup_int();
  541|       |    }
  542|       |#endif
  543|       |
  544|      2|    if (async_inited) {
  ------------------
  |  Branch (544:9): [True: 0, False: 2]
  ------------------
  545|       |# ifdef OPENSSL_INIT_DEBUG
  546|       |        fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
  547|       |                        "async_deinit()\n");
  548|       |# endif
  549|      0|        async_deinit();
  550|      0|    }
  551|       |
  552|      2|    if (load_crypto_strings_inited) {
  ------------------
  |  Branch (552:9): [True: 2, False: 0]
  ------------------
  553|       |#ifdef OPENSSL_INIT_DEBUG
  554|       |        fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
  555|       |                        "err_free_strings_int()\n");
  556|       |#endif
  557|      2|        err_free_strings_int();
  558|      2|    }
  559|       |
  560|      2|    key = destructor_key.value;
  561|      2|    destructor_key.sane = -1;
  562|      2|    CRYPTO_THREAD_cleanup_local(&key);
  563|       |
  564|       |#ifdef OPENSSL_INIT_DEBUG
  565|       |    fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
  566|       |                    "rand_cleanup_int()\n");
  567|       |    fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
  568|       |                    "conf_modules_free_int()\n");
  569|       |#ifndef OPENSSL_NO_ENGINE
  570|       |    fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
  571|       |                    "engine_cleanup_int()\n");
  572|       |#endif
  573|       |    fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
  574|       |                    "crypto_cleanup_all_ex_data_int()\n");
  575|       |    fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
  576|       |                    "bio_sock_cleanup_int()\n");
  577|       |    fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
  578|       |                    "bio_cleanup()\n");
  579|       |    fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
  580|       |                    "evp_cleanup_int()\n");
  581|       |    fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
  582|       |                    "obj_cleanup_int()\n");
  583|       |    fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
  584|       |                    "err_cleanup()\n");
  585|       |#endif
  586|       |    /*
  587|       |     * Note that cleanup order is important:
  588|       |     * - rand_cleanup_int could call an ENGINE's RAND cleanup function so
  589|       |     * must be called before engine_cleanup_int()
  590|       |     * - ENGINEs use CRYPTO_EX_DATA and therefore, must be cleaned up
  591|       |     * before the ex data handlers are wiped in CRYPTO_cleanup_all_ex_data().
  592|       |     * - conf_modules_free_int() can end up in ENGINE code so must be called
  593|       |     * before engine_cleanup_int()
  594|       |     * - ENGINEs and additional EVP algorithms might use added OIDs names so
  595|       |     * obj_cleanup_int() must be called last
  596|       |     */
  597|      2|    rand_cleanup_int();
  598|      2|    rand_drbg_cleanup_int();
  599|      2|    conf_modules_free_int();
  600|      2|#ifndef OPENSSL_NO_ENGINE
  601|      2|    engine_cleanup_int();
  602|      2|#endif
  603|      2|    ossl_store_cleanup_int();
  604|      2|    crypto_cleanup_all_ex_data_int();
  605|      2|    bio_cleanup();
  606|      2|    evp_cleanup_int();
  607|      2|    obj_cleanup_int();
  608|      2|    err_cleanup();
  609|       |
  610|      2|    CRYPTO_secure_malloc_done();
  611|       |
  612|      2|    base_inited = 0;
  613|      2|}
OPENSSL_init_crypto:
  621|   260k|{
  622|   260k|    if (stopped) {
  ------------------
  |  Branch (622:9): [True: 0, False: 260k]
  ------------------
  623|      0|        if (!(opts & OPENSSL_INIT_BASE_ONLY))
  ------------------
  |  |   28|      0|# define OPENSSL_INIT_BASE_ONLY              0x00040000L
  ------------------
  |  Branch (623:13): [True: 0, False: 0]
  ------------------
  624|      0|            CRYPTOerr(CRYPTO_F_OPENSSL_INIT_CRYPTO, ERR_R_INIT_FAIL);
  ------------------
  |  |  113|      0|# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  625|      0|        return 0;
  626|      0|    }
  627|       |
  628|       |    /*
  629|       |     * When the caller specifies OPENSSL_INIT_BASE_ONLY, that should be the
  630|       |     * *only* option specified.  With that option we return immediately after
  631|       |     * doing the requested limited initialization.  Note that
  632|       |     * err_shelve_state() called by us via ossl_init_load_crypto_nodelete()
  633|       |     * re-enters OPENSSL_init_crypto() with OPENSSL_INIT_BASE_ONLY, but with
  634|       |     * base already initialized this is a harmless NOOP.
  635|       |     *
  636|       |     * If we remain the only caller of err_shelve_state() the recursion should
  637|       |     * perhaps be removed, but if in doubt, it can be left in place.
  638|       |     */
  639|   260k|    if (!RUN_ONCE(&base, ossl_init_base))
  ------------------
  |  |  119|   260k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 260k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (639:9): [True: 0, False: 260k]
  ------------------
  640|      0|        return 0;
  641|   260k|    if (opts & OPENSSL_INIT_BASE_ONLY)
  ------------------
  |  |   28|   260k|# define OPENSSL_INIT_BASE_ONLY              0x00040000L
  ------------------
  |  Branch (641:9): [True: 144k, False: 116k]
  ------------------
  642|   144k|        return 1;
  643|       |
  644|       |    /*
  645|       |     * Now we don't always set up exit handlers, the INIT_BASE_ONLY calls
  646|       |     * should not have the side-effect of setting up exit handlers, and
  647|       |     * therefore, this code block is below the INIT_BASE_ONLY-conditioned early
  648|       |     * return above.
  649|       |     */
  650|   116k|    if ((opts & OPENSSL_INIT_NO_ATEXIT) != 0) {
  ------------------
  |  |  375|   116k|# define OPENSSL_INIT_NO_ATEXIT              0x00080000L
  ------------------
  |  Branch (650:9): [True: 0, False: 116k]
  ------------------
  651|      0|        if (!RUN_ONCE_ALT(&register_atexit, ossl_init_no_register_atexit,
  ------------------
  |  |  137|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (137:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (651:13): [True: 0, False: 0]
  ------------------
  652|      0|                          ossl_init_register_atexit))
  653|      0|            return 0;
  654|   116k|    } else if (!RUN_ONCE(&register_atexit, ossl_init_register_atexit)) {
  ------------------
  |  |  119|   116k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 116k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (654:16): [True: 0, False: 116k]
  ------------------
  655|      0|        return 0;
  656|      0|    }
  657|       |
  658|   116k|    if (!RUN_ONCE(&load_crypto_nodelete, ossl_init_load_crypto_nodelete))
  ------------------
  |  |  119|   116k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 116k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (658:9): [True: 0, False: 116k]
  ------------------
  659|      0|        return 0;
  660|       |
  661|   116k|    if ((opts & OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS)
  ------------------
  |  |  356|   116k|# define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L
  ------------------
  |  Branch (661:9): [True: 0, False: 116k]
  ------------------
  662|      0|            && !RUN_ONCE_ALT(&load_crypto_strings,
  ------------------
  |  |  137|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (137:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (662:16): [True: 0, False: 0]
  ------------------
  663|   116k|                             ossl_init_no_load_crypto_strings,
  664|   116k|                             ossl_init_load_crypto_strings))
  665|      0|        return 0;
  666|       |
  667|   116k|    if ((opts & OPENSSL_INIT_LOAD_CRYPTO_STRINGS)
  ------------------
  |  |  357|   116k|# define OPENSSL_INIT_LOAD_CRYPTO_STRINGS    0x00000002L
  ------------------
  |  Branch (667:9): [True: 4, False: 116k]
  ------------------
  668|      4|            && !RUN_ONCE(&load_crypto_strings, ossl_init_load_crypto_strings))
  ------------------
  |  |  119|      4|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 4, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (668:16): [True: 0, False: 4]
  ------------------
  669|      0|        return 0;
  670|       |
  671|   116k|    if ((opts & OPENSSL_INIT_NO_ADD_ALL_CIPHERS)
  ------------------
  |  |  360|   116k|# define OPENSSL_INIT_NO_ADD_ALL_CIPHERS     0x00000010L
  ------------------
  |  Branch (671:9): [True: 0, False: 116k]
  ------------------
  672|      0|            && !RUN_ONCE_ALT(&add_all_ciphers, ossl_init_no_add_all_ciphers,
  ------------------
  |  |  137|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (137:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (672:16): [True: 0, False: 0]
  ------------------
  673|   116k|                             ossl_init_add_all_ciphers))
  674|      0|        return 0;
  675|       |
  676|   116k|    if ((opts & OPENSSL_INIT_ADD_ALL_CIPHERS)
  ------------------
  |  |  358|   116k|# define OPENSSL_INIT_ADD_ALL_CIPHERS        0x00000004L
  ------------------
  |  Branch (676:9): [True: 58.0k, False: 58.0k]
  ------------------
  677|  58.0k|            && !RUN_ONCE(&add_all_ciphers, ossl_init_add_all_ciphers))
  ------------------
  |  |  119|  58.0k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 58.0k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (677:16): [True: 0, False: 58.0k]
  ------------------
  678|      0|        return 0;
  679|       |
  680|   116k|    if ((opts & OPENSSL_INIT_NO_ADD_ALL_DIGESTS)
  ------------------
  |  |  361|   116k|# define OPENSSL_INIT_NO_ADD_ALL_DIGESTS     0x00000020L
  ------------------
  |  Branch (680:9): [True: 0, False: 116k]
  ------------------
  681|      0|            && !RUN_ONCE_ALT(&add_all_digests, ossl_init_no_add_all_digests,
  ------------------
  |  |  137|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (137:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (681:16): [True: 0, False: 0]
  ------------------
  682|   116k|                             ossl_init_add_all_digests))
  683|      0|        return 0;
  684|       |
  685|   116k|    if ((opts & OPENSSL_INIT_ADD_ALL_DIGESTS)
  ------------------
  |  |  359|   116k|# define OPENSSL_INIT_ADD_ALL_DIGESTS        0x00000008L
  ------------------
  |  Branch (685:9): [True: 115k, False: 57]
  ------------------
  686|   115k|            && !RUN_ONCE(&add_all_digests, ossl_init_add_all_digests))
  ------------------
  |  |  119|   115k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 115k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (686:16): [True: 0, False: 115k]
  ------------------
  687|      0|        return 0;
  688|       |
  689|   116k|    if ((opts & OPENSSL_INIT_ATFORK)
  ------------------
  |  |  373|   116k|# define OPENSSL_INIT_ATFORK                 0x00020000L
  ------------------
  |  Branch (689:9): [True: 0, False: 116k]
  ------------------
  690|      0|            && !openssl_init_fork_handlers())
  ------------------
  |  Branch (690:16): [True: 0, False: 0]
  ------------------
  691|      0|        return 0;
  692|       |
  693|   116k|    if ((opts & OPENSSL_INIT_NO_LOAD_CONFIG)
  ------------------
  |  |  363|   116k|# define OPENSSL_INIT_NO_LOAD_CONFIG         0x00000080L
  ------------------
  |  Branch (693:9): [True: 0, False: 116k]
  ------------------
  694|      0|            && !RUN_ONCE_ALT(&config, ossl_init_no_config, ossl_init_config))
  ------------------
  |  |  137|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (137:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (694:16): [True: 0, False: 0]
  ------------------
  695|      0|        return 0;
  696|       |
  697|   116k|    if (opts & OPENSSL_INIT_LOAD_CONFIG) {
  ------------------
  |  |  362|   116k|# define OPENSSL_INIT_LOAD_CONFIG            0x00000040L
  ------------------
  |  Branch (697:9): [True: 57.9k, False: 58.0k]
  ------------------
  698|  57.9k|        int ret;
  699|  57.9k|        CRYPTO_THREAD_write_lock(init_lock);
  700|  57.9k|        conf_settings = settings;
  701|  57.9k|        ret = RUN_ONCE(&config, ossl_init_config);
  ------------------
  |  |  119|  57.9k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 57.9k, False: 0]
  |  |  ------------------
  ------------------
  702|  57.9k|        conf_settings = NULL;
  703|  57.9k|        CRYPTO_THREAD_unlock(init_lock);
  704|  57.9k|        if (ret <= 0)
  ------------------
  |  Branch (704:13): [True: 0, False: 57.9k]
  ------------------
  705|      0|            return 0;
  706|  57.9k|    }
  707|       |
  708|   116k|    if ((opts & OPENSSL_INIT_ASYNC)
  ------------------
  |  |  364|   116k|# define OPENSSL_INIT_ASYNC                  0x00000100L
  ------------------
  |  Branch (708:9): [True: 0, False: 116k]
  ------------------
  709|      0|            && !RUN_ONCE(&async, ossl_init_async))
  ------------------
  |  |  119|      0|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (709:16): [True: 0, False: 0]
  ------------------
  710|      0|        return 0;
  711|       |
  712|   116k|#ifndef OPENSSL_NO_ENGINE
  713|   116k|    if ((opts & OPENSSL_INIT_ENGINE_OPENSSL)
  ------------------
  |  |  367|   116k|# define OPENSSL_INIT_ENGINE_OPENSSL         0x00000800L
  ------------------
  |  Branch (713:9): [True: 0, False: 116k]
  ------------------
  714|      0|            && !RUN_ONCE(&engine_openssl, ossl_init_engine_openssl))
  ------------------
  |  |  119|      0|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (714:16): [True: 0, False: 0]
  ------------------
  715|      0|        return 0;
  716|       |# if !defined(OPENSSL_NO_HW) && !defined(OPENSSL_NO_DEVCRYPTOENG)
  717|       |    if ((opts & OPENSSL_INIT_ENGINE_CRYPTODEV)
  718|       |            && !RUN_ONCE(&engine_devcrypto, ossl_init_engine_devcrypto))
  719|       |        return 0;
  720|       |# endif
  721|   116k|# ifndef OPENSSL_NO_RDRAND
  722|   116k|    if ((opts & OPENSSL_INIT_ENGINE_RDRAND)
  ------------------
  |  |  365|   116k|# define OPENSSL_INIT_ENGINE_RDRAND          0x00000200L
  ------------------
  |  Branch (722:9): [True: 2, False: 116k]
  ------------------
  723|      2|            && !RUN_ONCE(&engine_rdrand, ossl_init_engine_rdrand))
  ------------------
  |  |  119|      2|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (723:16): [True: 0, False: 2]
  ------------------
  724|      0|        return 0;
  725|   116k|# endif
  726|   116k|    if ((opts & OPENSSL_INIT_ENGINE_DYNAMIC)
  ------------------
  |  |  366|   116k|# define OPENSSL_INIT_ENGINE_DYNAMIC         0x00000400L
  ------------------
  |  Branch (726:9): [True: 2, False: 116k]
  ------------------
  727|      2|            && !RUN_ONCE(&engine_dynamic, ossl_init_engine_dynamic))
  ------------------
  |  |  119|      2|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (727:16): [True: 0, False: 2]
  ------------------
  728|      0|        return 0;
  729|   116k|# ifndef OPENSSL_NO_STATIC_ENGINE
  730|       |#  if !defined(OPENSSL_NO_HW) && !defined(OPENSSL_NO_HW_PADLOCK)
  731|       |    if ((opts & OPENSSL_INIT_ENGINE_PADLOCK)
  732|       |            && !RUN_ONCE(&engine_padlock, ossl_init_engine_padlock))
  733|       |        return 0;
  734|       |#  endif
  735|       |#  if defined(OPENSSL_SYS_WIN32) && !defined(OPENSSL_NO_CAPIENG)
  736|       |    if ((opts & OPENSSL_INIT_ENGINE_CAPI)
  737|       |            && !RUN_ONCE(&engine_capi, ossl_init_engine_capi))
  738|       |        return 0;
  739|       |#  endif
  740|       |#  if !defined(OPENSSL_NO_AFALGENG)
  741|       |    if ((opts & OPENSSL_INIT_ENGINE_AFALG)
  742|       |            && !RUN_ONCE(&engine_afalg, ossl_init_engine_afalg))
  743|       |        return 0;
  744|       |#  endif
  745|   116k|# endif
  746|   116k|    if (opts & (OPENSSL_INIT_ENGINE_ALL_BUILTIN
  ------------------
  |  |  381|   116k|    (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \
  |  |  ------------------
  |  |  |  |  365|   116k|# define OPENSSL_INIT_ENGINE_RDRAND          0x00000200L
  |  |  ------------------
  |  |                   (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \
  |  |  ------------------
  |  |  |  |  366|   116k|# define OPENSSL_INIT_ENGINE_DYNAMIC         0x00000400L
  |  |  ------------------
  |  |  382|   116k|    | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \
  |  |  ------------------
  |  |  |  |  368|   116k|# define OPENSSL_INIT_ENGINE_CRYPTODEV       0x00001000L
  |  |  ------------------
  |  |                   | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \
  |  |  ------------------
  |  |  |  |  369|   116k|# define OPENSSL_INIT_ENGINE_CAPI            0x00002000L
  |  |  ------------------
  |  |  383|   116k|    OPENSSL_INIT_ENGINE_PADLOCK)
  |  |  ------------------
  |  |  |  |  370|   116k|# define OPENSSL_INIT_ENGINE_PADLOCK         0x00004000L
  |  |  ------------------
  ------------------
  |  Branch (746:9): [True: 2, False: 116k]
  ------------------
  747|   116k|                | OPENSSL_INIT_ENGINE_OPENSSL
  ------------------
  |  |  367|   116k|# define OPENSSL_INIT_ENGINE_OPENSSL         0x00000800L
  ------------------
  748|   116k|                | OPENSSL_INIT_ENGINE_AFALG)) {
  ------------------
  |  |  371|   116k|# define OPENSSL_INIT_ENGINE_AFALG           0x00008000L
  ------------------
  749|      2|        ENGINE_register_all_complete();
  750|      2|    }
  751|   116k|#endif
  752|       |
  753|       |#ifndef OPENSSL_NO_COMP
  754|       |    if ((opts & OPENSSL_INIT_ZLIB)
  755|       |            && !RUN_ONCE(&zlib, ossl_init_zlib))
  756|       |        return 0;
  757|       |#endif
  758|       |
  759|   116k|    return 1;
  760|   116k|}
OPENSSL_atexit:
  763|      2|{
  764|      2|    OPENSSL_INIT_STOP *newhand;
  765|       |
  766|       |#if !defined(OPENSSL_USE_NODELETE)\
  767|       |    && !defined(OPENSSL_NO_PINSHARED)
  768|       |    {
  769|       |        union {
  770|       |            void *sym;
  771|       |            void (*func)(void);
  772|       |        } handlersym;
  773|       |
  774|       |        handlersym.func = handler;
  775|       |# if defined(DSO_WIN32) && !defined(_WIN32_WCE)
  776|       |        {
  777|       |            HMODULE handle = NULL;
  778|       |            BOOL ret;
  779|       |
  780|       |            /*
  781|       |             * We don't use the DSO route for WIN32 because there is a better
  782|       |             * way
  783|       |             */
  784|       |            ret = GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
  785|       |                                    | GET_MODULE_HANDLE_EX_FLAG_PIN,
  786|       |                                    handlersym.sym, &handle);
  787|       |
  788|       |            if (!ret)
  789|       |                return 0;
  790|       |        }
  791|       |# elif !defined(DSO_NONE)
  792|       |        /*
  793|       |         * Deliberately leak a reference to the handler. This will force the
  794|       |         * library/code containing the handler to remain loaded until we run the
  795|       |         * atexit handler. If -znodelete has been used then this is
  796|       |         * unnecessary.
  797|       |         */
  798|       |        {
  799|       |            DSO *dso = NULL;
  800|       |
  801|       |            ERR_set_mark();
  802|       |            dso = DSO_dsobyaddr(handlersym.sym, DSO_FLAG_NO_UNLOAD_ON_FREE);
  803|       |#  ifdef OPENSSL_INIT_DEBUG
  804|       |            fprintf(stderr,
  805|       |                    "OPENSSL_INIT: OPENSSL_atexit: obtained DSO reference? %s\n",
  806|       |                    (dso == NULL ? "No!" : "Yes."));
  807|       |            /* See same code above in ossl_init_base() for an explanation. */
  808|       |#  endif
  809|       |            DSO_free(dso);
  810|       |            ERR_pop_to_mark();
  811|       |        }
  812|       |# endif
  813|       |    }
  814|       |#endif
  815|       |
  816|      2|    if ((newhand = OPENSSL_malloc(sizeof(*newhand))) == NULL) {
  ------------------
  |  |  118|      2|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (816:9): [True: 0, False: 2]
  ------------------
  817|      0|        CRYPTOerr(CRYPTO_F_OPENSSL_ATEXIT, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  113|      0|# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  818|      0|        return 0;
  819|      0|    }
  820|       |
  821|      2|    newhand->handler = handler;
  822|      2|    newhand->next = stop_handlers;
  823|      2|    stop_handlers = newhand;
  824|       |
  825|      2|    return 1;
  826|      2|}
init.c:ossl_init_thread_stop:
  420|      2|{
  421|       |    /* Can't do much about this */
  422|      2|    if (locals == NULL)
  ------------------
  |  Branch (422:9): [True: 0, False: 2]
  ------------------
  423|      0|        return;
  424|       |
  425|      2|    if (locals->async) {
  ------------------
  |  Branch (425:9): [True: 0, False: 2]
  ------------------
  426|       |#ifdef OPENSSL_INIT_DEBUG
  427|       |        fprintf(stderr, "OPENSSL_INIT: ossl_init_thread_stop: "
  428|       |                        "async_delete_thread_state()\n");
  429|       |#endif
  430|      0|        async_delete_thread_state();
  431|      0|    }
  432|       |
  433|      2|    if (locals->err_state) {
  ------------------
  |  Branch (433:9): [True: 2, False: 0]
  ------------------
  434|       |#ifdef OPENSSL_INIT_DEBUG
  435|       |        fprintf(stderr, "OPENSSL_INIT: ossl_init_thread_stop: "
  436|       |                        "err_delete_thread_state()\n");
  437|       |#endif
  438|      2|        err_delete_thread_state();
  439|      2|    }
  440|       |
  441|      2|    if (locals->rand) {
  ------------------
  |  Branch (441:9): [True: 1, False: 1]
  ------------------
  442|       |#ifdef OPENSSL_INIT_DEBUG
  443|       |        fprintf(stderr, "OPENSSL_INIT: ossl_init_thread_stop: "
  444|       |                        "drbg_delete_thread_state()\n");
  445|       |#endif
  446|      1|        drbg_delete_thread_state();
  447|      1|    }
  448|       |
  449|      2|    OPENSSL_free(locals);
  ------------------
  |  |  128|      2|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  450|      2|}
init.c:ossl_init_get_thread_local:
   60|      6|{
   61|      6|    struct thread_local_inits_st *local =
   62|      6|        CRYPTO_THREAD_get_local(&destructor_key.value);
   63|       |
   64|      6|    if (alloc) {
  ------------------
  |  Branch (64:9): [True: 4, False: 2]
  ------------------
   65|      4|        if (local == NULL
  ------------------
  |  Branch (65:13): [True: 2, False: 2]
  ------------------
   66|      2|            && (local = OPENSSL_zalloc(sizeof(*local))) != NULL
  ------------------
  |  |  120|      2|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (66:16): [True: 2, False: 0]
  ------------------
   67|      2|            && !CRYPTO_THREAD_set_local(&destructor_key.value, local)) {
  ------------------
  |  Branch (67:16): [True: 0, False: 2]
  ------------------
   68|      0|            OPENSSL_free(local);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   69|      0|            return NULL;
   70|      0|        }
   71|      4|    } else {
   72|      2|        CRYPTO_THREAD_set_local(&destructor_key.value, NULL);
   73|      2|    }
   74|       |
   75|      6|    return local;
   76|      6|}
init.c:ossl_init_base:
   90|      2|{
   91|      2|    CRYPTO_THREAD_LOCAL key;
   92|       |
   93|       |#ifdef OPENSSL_INIT_DEBUG
   94|       |    fprintf(stderr, "OPENSSL_INIT: ossl_init_base: Setting up stop handlers\n");
   95|       |#endif
   96|       |#ifndef OPENSSL_NO_CRYPTO_MDEBUG
   97|       |    ossl_malloc_setup_failures();
   98|       |#endif
   99|      2|    if (!CRYPTO_THREAD_init_local(&key, ossl_init_thread_destructor))
  ------------------
  |  Branch (99:9): [True: 0, False: 2]
  ------------------
  100|      0|        return 0;
  101|      2|    if ((init_lock = CRYPTO_THREAD_lock_new()) == NULL)
  ------------------
  |  Branch (101:9): [True: 0, False: 2]
  ------------------
  102|      0|        goto err;
  103|      2|    OPENSSL_cpuid_setup();
  104|       |
  105|      2|    destructor_key.value = key;
  106|      2|    base_inited = 1;
  107|      2|    return 1;
  108|       |
  109|      0|err:
  110|       |#ifdef OPENSSL_INIT_DEBUG
  111|       |    fprintf(stderr, "OPENSSL_INIT: ossl_init_base not ok!\n");
  112|       |#endif
  113|      0|    CRYPTO_THREAD_lock_free(init_lock);
  114|      0|    init_lock = NULL;
  115|       |
  116|      0|    CRYPTO_THREAD_cleanup_local(&key);
  117|      0|    return 0;
  118|      2|}
init.c:ossl_init_register_atexit:
  130|      2|{
  131|       |#ifdef OPENSSL_INIT_DEBUG
  132|       |    fprintf(stderr, "OPENSSL_INIT: ossl_init_register_atexit()\n");
  133|       |#endif
  134|      2|#ifndef OPENSSL_SYS_UEFI
  135|       |# ifdef _WIN32
  136|       |    /* We use _onexit() in preference because it gets called on DLL unload */
  137|       |    if (_onexit(win32atexit) == NULL)
  138|       |        return 0;
  139|       |# else
  140|      2|    if (atexit(OPENSSL_cleanup) != 0)
  ------------------
  |  Branch (140:9): [True: 0, False: 2]
  ------------------
  141|      0|        return 0;
  142|      2|# endif
  143|      2|#endif
  144|       |
  145|      2|    return 1;
  146|      2|}
init.c:ossl_init_load_crypto_nodelete:
  160|      2|{
  161|       |#ifdef OPENSSL_INIT_DEBUG
  162|       |    fprintf(stderr, "OPENSSL_INIT: ossl_init_load_crypto_nodelete()\n");
  163|       |#endif
  164|       |#if !defined(OPENSSL_USE_NODELETE) \
  165|       |    && !defined(OPENSSL_NO_PINSHARED)
  166|       |# if defined(DSO_WIN32) && !defined(_WIN32_WCE)
  167|       |    {
  168|       |        HMODULE handle = NULL;
  169|       |        BOOL ret;
  170|       |
  171|       |        /* We don't use the DSO route for WIN32 because there is a better way */
  172|       |        ret = GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
  173|       |                                | GET_MODULE_HANDLE_EX_FLAG_PIN,
  174|       |                                (void *)&base_inited, &handle);
  175|       |
  176|       |#  ifdef OPENSSL_INIT_DEBUG
  177|       |        fprintf(stderr, "OPENSSL_INIT: obtained DSO reference? %s\n",
  178|       |                (ret == TRUE ? "No!" : "Yes."));
  179|       |#  endif
  180|       |        return (ret == TRUE) ? 1 : 0;
  181|       |    }
  182|       |# elif !defined(DSO_NONE)
  183|       |    /*
  184|       |     * Deliberately leak a reference to ourselves. This will force the library
  185|       |     * to remain loaded until the atexit() handler is run at process exit.
  186|       |     */
  187|       |    {
  188|       |        DSO *dso;
  189|       |        void *err;
  190|       |
  191|       |        if (!err_shelve_state(&err))
  192|       |            return 0;
  193|       |
  194|       |        dso = DSO_dsobyaddr(&base_inited, DSO_FLAG_NO_UNLOAD_ON_FREE);
  195|       |#  ifdef OPENSSL_INIT_DEBUG
  196|       |        fprintf(stderr, "OPENSSL_INIT: obtained DSO reference? %s\n",
  197|       |                (dso == NULL ? "No!" : "Yes."));
  198|       |        /*
  199|       |         * In case of No!, it is uncertain our exit()-handlers can still be
  200|       |         * called. After dlclose() the whole library might have been unloaded
  201|       |         * already.
  202|       |         */
  203|       |#  endif
  204|       |        DSO_free(dso);
  205|       |        err_unshelve_state(err);
  206|       |    }
  207|       |# endif
  208|       |#endif
  209|       |
  210|      2|    return 1;
  211|      2|}
init.c:ossl_init_load_crypto_strings:
  216|      2|{
  217|      2|    int ret = 1;
  218|       |    /*
  219|       |     * OPENSSL_NO_AUTOERRINIT is provided here to prevent at compile time
  220|       |     * pulling in all the error strings during static linking
  221|       |     */
  222|      2|#if !defined(OPENSSL_NO_ERR) && !defined(OPENSSL_NO_AUTOERRINIT)
  223|       |# ifdef OPENSSL_INIT_DEBUG
  224|       |    fprintf(stderr, "OPENSSL_INIT: ossl_init_load_crypto_strings: "
  225|       |                    "err_load_crypto_strings_int()\n");
  226|       |# endif
  227|      2|    ret = err_load_crypto_strings_int();
  228|      2|    load_crypto_strings_inited = 1;
  229|      2|#endif
  230|      2|    return ret;
  231|      2|}
init.c:ossl_init_add_all_ciphers:
  242|      2|{
  243|       |    /*
  244|       |     * OPENSSL_NO_AUTOALGINIT is provided here to prevent at compile time
  245|       |     * pulling in all the ciphers during static linking
  246|       |     */
  247|      2|#ifndef OPENSSL_NO_AUTOALGINIT
  248|       |# ifdef OPENSSL_INIT_DEBUG
  249|       |    fprintf(stderr, "OPENSSL_INIT: ossl_init_add_all_ciphers: "
  250|       |                    "openssl_add_all_ciphers_int()\n");
  251|       |# endif
  252|      2|    openssl_add_all_ciphers_int();
  253|      2|#endif
  254|      2|    return 1;
  255|      2|}
init.c:ossl_init_add_all_digests:
  266|      2|{
  267|       |    /*
  268|       |     * OPENSSL_NO_AUTOALGINIT is provided here to prevent at compile time
  269|       |     * pulling in all the ciphers during static linking
  270|       |     */
  271|      2|#ifndef OPENSSL_NO_AUTOALGINIT
  272|       |# ifdef OPENSSL_INIT_DEBUG
  273|       |    fprintf(stderr, "OPENSSL_INIT: ossl_init_add_all_digests: "
  274|       |                    "openssl_add_all_digests()\n");
  275|       |# endif
  276|      2|    openssl_add_all_digests_int();
  277|      2|#endif
  278|      2|    return 1;
  279|      2|}
init.c:ossl_init_config:
  292|      2|{
  293|      2|    int ret = openssl_config_int(conf_settings);
  294|      2|    config_inited = 1;
  295|      2|    return ret;
  296|      2|}
init.c:ossl_init_engine_rdrand:
  348|      2|{
  349|       |#  ifdef OPENSSL_INIT_DEBUG
  350|       |    fprintf(stderr, "OPENSSL_INIT: ossl_init_engine_rdrand: "
  351|       |                    "engine_load_rdrand_int()\n");
  352|       |#  endif
  353|      2|    engine_load_rdrand_int();
  354|      2|    return 1;
  355|      2|}
init.c:ossl_init_engine_dynamic:
  359|      2|{
  360|       |# ifdef OPENSSL_INIT_DEBUG
  361|       |    fprintf(stderr, "OPENSSL_INIT: ossl_init_engine_dynamic: "
  362|       |                    "engine_load_dynamic_int()\n");
  363|       |# endif
  364|      2|    engine_load_dynamic_int();
  365|      2|    return 1;
  366|      2|}

ERR_load_KDF_strings:
   59|      2|{
   60|      2|#ifndef OPENSSL_NO_ERR
   61|      2|    if (ERR_func_error_string(KDF_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (61:9): [True: 2, False: 0]
  ------------------
   62|      2|        ERR_load_strings_const(KDF_str_functs);
   63|      2|        ERR_load_strings_const(KDF_str_reasons);
   64|      2|    }
   65|      2|#endif
   66|      2|    return 1;
   67|      2|}

OPENSSL_LH_new:
   48|  28.9k|{
   49|  28.9k|    OPENSSL_LHASH *ret;
   50|       |
   51|  28.9k|    if ((ret = OPENSSL_zalloc(sizeof(*ret))) == NULL) {
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (51:9): [True: 0, False: 28.9k]
  ------------------
   52|       |        /*
   53|       |         * Do not set the error code, because the ERR code uses LHASH
   54|       |         * and we want to avoid possible endless error loop.
   55|       |         * CRYPTOerr(CRYPTO_F_OPENSSL_LH_NEW, ERR_R_MALLOC_FAILURE);
   56|       |         */
   57|      0|        return NULL;
   58|      0|    }
   59|  28.9k|    if ((ret->b = OPENSSL_zalloc(sizeof(*ret->b) * MIN_NODES)) == NULL)
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (59:9): [True: 0, False: 28.9k]
  ------------------
   60|      0|        goto err;
   61|  28.9k|    ret->comp = ((c == NULL) ? (OPENSSL_LH_COMPFUNC)strcmp : c);
  ------------------
  |  Branch (61:18): [True: 0, False: 28.9k]
  ------------------
   62|  28.9k|    ret->hash = ((h == NULL) ? (OPENSSL_LH_HASHFUNC)OPENSSL_LH_strhash : h);
  ------------------
  |  Branch (62:18): [True: 0, False: 28.9k]
  ------------------
   63|  28.9k|    ret->num_nodes = MIN_NODES / 2;
  ------------------
  |  |   39|  28.9k|#define MIN_NODES       16
  ------------------
   64|  28.9k|    ret->num_alloc_nodes = MIN_NODES;
  ------------------
  |  |   39|  28.9k|#define MIN_NODES       16
  ------------------
   65|  28.9k|    ret->pmax = MIN_NODES / 2;
  ------------------
  |  |   39|  28.9k|#define MIN_NODES       16
  ------------------
   66|  28.9k|    ret->up_load = UP_LOAD;
  ------------------
  |  |   40|  28.9k|#define UP_LOAD         (2*LH_LOAD_MULT) /* load times 256 (default 2) */
  |  |  ------------------
  |  |  |  |   70|  28.9k|# define LH_LOAD_MULT    256
  |  |  ------------------
  ------------------
   67|  28.9k|    ret->down_load = DOWN_LOAD;
  ------------------
  |  |   41|  28.9k|#define DOWN_LOAD       (LH_LOAD_MULT) /* load times 256 (default 1) */
  |  |  ------------------
  |  |  |  |   70|  28.9k|# define LH_LOAD_MULT    256
  |  |  ------------------
  ------------------
   68|  28.9k|    return ret;
   69|       |
   70|      0|err:
   71|      0|    OPENSSL_free(ret->b);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   72|      0|    OPENSSL_free(ret);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   73|       |    return NULL;
   74|  28.9k|}
OPENSSL_LH_free:
   77|  28.9k|{
   78|  28.9k|    unsigned int i;
   79|  28.9k|    OPENSSL_LH_NODE *n, *nn;
   80|       |
   81|  28.9k|    if (lh == NULL)
  ------------------
  |  Branch (81:9): [True: 2, False: 28.9k]
  ------------------
   82|      2|        return;
   83|       |
   84|   264k|    for (i = 0; i < lh->num_nodes; i++) {
  ------------------
  |  Branch (84:17): [True: 235k, False: 28.9k]
  ------------------
   85|   235k|        n = lh->b[i];
   86|   241k|        while (n != NULL) {
  ------------------
  |  Branch (86:16): [True: 6.37k, False: 235k]
  ------------------
   87|  6.37k|            nn = n->next;
   88|  6.37k|            OPENSSL_free(n);
  ------------------
  |  |  128|  6.37k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   89|  6.37k|            n = nn;
   90|  6.37k|        }
   91|   235k|    }
   92|  28.9k|    OPENSSL_free(lh->b);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   93|  28.9k|    OPENSSL_free(lh);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   94|  28.9k|}
OPENSSL_LH_insert:
   97|  17.7k|{
   98|  17.7k|    unsigned long hash;
   99|  17.7k|    OPENSSL_LH_NODE *nn, **rn;
  100|  17.7k|    void *ret;
  101|       |
  102|  17.7k|    lh->error = 0;
  103|  17.7k|    if ((lh->up_load <= (lh->num_items * LH_LOAD_MULT / lh->num_nodes)) && !expand(lh))
  ------------------
  |  |   70|  17.7k|# define LH_LOAD_MULT    256
  ------------------
  |  Branch (103:9): [True: 3.46k, False: 14.2k]
  |  Branch (103:76): [True: 0, False: 3.46k]
  ------------------
  104|      0|        return NULL;        /* 'lh->error++' already done in 'expand' */
  105|       |
  106|  17.7k|    rn = getrn(lh, data, &hash);
  107|       |
  108|  17.7k|    if (*rn == NULL) {
  ------------------
  |  Branch (108:9): [True: 7.01k, False: 10.6k]
  ------------------
  109|  7.01k|        if ((nn = OPENSSL_malloc(sizeof(*nn))) == NULL) {
  ------------------
  |  |  118|  7.01k|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (109:13): [True: 0, False: 7.01k]
  ------------------
  110|      0|            lh->error++;
  111|      0|            return NULL;
  112|      0|        }
  113|  7.01k|        nn->data = data;
  114|  7.01k|        nn->next = NULL;
  115|  7.01k|        nn->hash = hash;
  116|  7.01k|        *rn = nn;
  117|  7.01k|        ret = NULL;
  118|  7.01k|        lh->num_insert++;
  119|  7.01k|        lh->num_items++;
  120|  10.6k|    } else {                    /* replace same key */
  121|  10.6k|        ret = (*rn)->data;
  122|  10.6k|        (*rn)->data = data;
  123|  10.6k|        lh->num_replace++;
  124|  10.6k|    }
  125|  17.7k|    return ret;
  126|  17.7k|}
OPENSSL_LH_delete:
  129|    646|{
  130|    646|    unsigned long hash;
  131|    646|    OPENSSL_LH_NODE *nn, **rn;
  132|    646|    void *ret;
  133|       |
  134|    646|    lh->error = 0;
  135|    646|    rn = getrn(lh, data, &hash);
  136|       |
  137|    646|    if (*rn == NULL) {
  ------------------
  |  Branch (137:9): [True: 0, False: 646]
  ------------------
  138|      0|        lh->num_no_delete++;
  139|      0|        return NULL;
  140|    646|    } else {
  141|    646|        nn = *rn;
  142|    646|        *rn = nn->next;
  143|    646|        ret = nn->data;
  144|    646|        OPENSSL_free(nn);
  ------------------
  |  |  128|    646|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  145|    646|        lh->num_delete++;
  146|    646|    }
  147|       |
  148|    646|    lh->num_items--;
  149|    646|    if ((lh->num_nodes > MIN_NODES) &&
  ------------------
  |  |   39|    646|#define MIN_NODES       16
  ------------------
  |  Branch (149:9): [True: 646, False: 0]
  ------------------
  150|    646|        (lh->down_load >= (lh->num_items * LH_LOAD_MULT / lh->num_nodes)))
  ------------------
  |  |   70|    646|# define LH_LOAD_MULT    256
  ------------------
  |  Branch (150:9): [True: 2, False: 644]
  ------------------
  151|      2|        contract(lh);
  152|       |
  153|    646|    return ret;
  154|    646|}
OPENSSL_LH_retrieve:
  157|   174k|{
  158|   174k|    unsigned long hash;
  159|   174k|    OPENSSL_LH_NODE **rn;
  160|   174k|    void *ret;
  161|       |
  162|   174k|    tsan_store((TSAN_QUALIFIER int *)&lh->error, 0);
  ------------------
  |  |   58|   174k|#  define tsan_store(ptr, val) atomic_store_explicit((ptr), (val), memory_order_relaxed)
  ------------------
  163|       |
  164|   174k|    rn = getrn(lh, data, &hash);
  165|       |
  166|   174k|    if (*rn == NULL) {
  ------------------
  |  Branch (166:9): [True: 58.0k, False: 116k]
  ------------------
  167|  58.0k|        tsan_counter(&lh->num_retrieve_miss);
  ------------------
  |  |   59|  58.0k|#  define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed)
  ------------------
  168|  58.0k|        return NULL;
  169|   116k|    } else {
  170|   116k|        ret = (*rn)->data;
  171|   116k|        tsan_counter(&lh->num_retrieve);
  ------------------
  |  |   59|   116k|#  define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed)
  ------------------
  172|   116k|    }
  173|       |
  174|   116k|    return ret;
  175|   174k|}
OPENSSL_LH_doall:
  205|      8|{
  206|       |    doall_util_fn(lh, 0, func, (OPENSSL_LH_DOALL_FUNCARG)0, NULL);
  207|      8|}
OPENSSL_LH_doall_arg:
  210|  28.9k|{
  211|  28.9k|    doall_util_fn(lh, 1, (OPENSSL_LH_DOALL_FUNC)0, func, arg);
  212|  28.9k|}
OPENSSL_LH_strhash:
  332|    924|{
  333|    924|    unsigned long ret = 0;
  334|    924|    long n;
  335|    924|    unsigned long v;
  336|    924|    int r;
  337|       |
  338|    924|    if ((c == NULL) || (*c == '\0'))
  ------------------
  |  Branch (338:9): [True: 62, False: 862]
  |  Branch (338:24): [True: 0, False: 862]
  ------------------
  339|     62|        return ret;
  340|       |
  341|    862|    n = 0x100;
  342|  11.1k|    while (*c) {
  ------------------
  |  Branch (342:12): [True: 10.2k, False: 862]
  ------------------
  343|  10.2k|        v = n | (*c);
  344|  10.2k|        n += 0x100;
  345|  10.2k|        r = (int)((v >> 2) ^ v) & 0x0f;
  346|  10.2k|        ret = (ret << r) | (ret >> (32 - r));
  347|  10.2k|        ret &= 0xFFFFFFFFL;
  348|  10.2k|        ret ^= v * v;
  349|  10.2k|        c++;
  350|  10.2k|    }
  351|    862|    return (ret >> 16) ^ ret;
  352|    924|}
openssl_lh_strcasehash:
  355|   117k|{
  356|   117k|    unsigned long ret = 0;
  357|   117k|    long n;
  358|   117k|    unsigned long v;
  359|   117k|    int r;
  360|       |
  361|   117k|    if (c == NULL || *c == '\0')
  ------------------
  |  Branch (361:9): [True: 0, False: 117k]
  |  Branch (361:22): [True: 0, False: 117k]
  ------------------
  362|      0|        return ret;
  363|       |
  364|   829k|    for (n = 0x100; *c != '\0'; n += 0x100) {
  ------------------
  |  Branch (364:21): [True: 711k, False: 117k]
  ------------------
  365|   711k|        v = n | ossl_tolower(*c);
  366|   711k|        r = (int)((v >> 2) ^ v) & 0x0f;
  367|   711k|        ret = (ret << r) | (ret >> (32 - r));
  368|   711k|        ret &= 0xFFFFFFFFL;
  369|   711k|        ret ^= v * v;
  370|   711k|        c++;
  371|   711k|    }
  372|   117k|    return (ret >> 16) ^ ret;
  373|   117k|}
OPENSSL_LH_num_items:
  376|      2|{
  377|      2|    return lh ? lh->num_items : 0;
  ------------------
  |  Branch (377:12): [True: 0, False: 2]
  ------------------
  378|      2|}
OPENSSL_LH_get_down_load:
  381|  28.9k|{
  382|  28.9k|    return lh->down_load;
  383|  28.9k|}
OPENSSL_LH_set_down_load:
  386|  57.9k|{
  387|  57.9k|    lh->down_load = down_load;
  388|  57.9k|}
OPENSSL_LH_error:
  391|    492|{
  392|    492|    return lh->error;
  393|    492|}
lhash.c:doall_util_fn:
  180|  28.9k|{
  181|  28.9k|    int i;
  182|  28.9k|    OPENSSL_LH_NODE *a, *n;
  183|       |
  184|  28.9k|    if (lh == NULL)
  ------------------
  |  Branch (184:9): [True: 0, False: 28.9k]
  ------------------
  185|      0|        return;
  186|       |
  187|       |    /*
  188|       |     * reverse the order so we search from 'top to bottom' We were having
  189|       |     * memory leaks otherwise
  190|       |     */
  191|   261k|    for (i = lh->num_nodes - 1; i >= 0; i--) {
  ------------------
  |  Branch (191:33): [True: 232k, False: 28.9k]
  ------------------
  192|   232k|        a = lh->b[i];
  193|   233k|        while (a != NULL) {
  ------------------
  |  Branch (193:16): [True: 828, False: 232k]
  ------------------
  194|    828|            n = a->next;
  195|    828|            if (use_arg)
  ------------------
  |  Branch (195:17): [True: 218, False: 610]
  ------------------
  196|    218|                func_arg(a->data, arg);
  197|    610|            else
  198|    610|                func(a->data);
  199|    828|            a = n;
  200|    828|        }
  201|   232k|    }
  202|  28.9k|}
lhash.c:expand:
  215|  3.46k|{
  216|  3.46k|    OPENSSL_LH_NODE **n, **n1, **n2, *np;
  217|  3.46k|    unsigned int p, pmax, nni, j;
  218|  3.46k|    unsigned long hash;
  219|       |
  220|  3.46k|    nni = lh->num_alloc_nodes;
  221|  3.46k|    p = lh->p;
  222|  3.46k|    pmax = lh->pmax;
  223|  3.46k|    if (p + 1 >= pmax) {
  ------------------
  |  Branch (223:9): [True: 24, False: 3.44k]
  ------------------
  224|     24|        j = nni * 2;
  225|     24|        n = OPENSSL_realloc(lh->b, sizeof(OPENSSL_LH_NODE *) * j);
  ------------------
  |  |  122|     24|        CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  226|     24|        if (n == NULL) {
  ------------------
  |  Branch (226:13): [True: 0, False: 24]
  ------------------
  227|      0|            lh->error++;
  228|      0|            return 0;
  229|      0|        }
  230|     24|        lh->b = n;
  231|     24|        memset(n + nni, 0, sizeof(*n) * (j - nni));
  232|     24|        lh->pmax = nni;
  233|     24|        lh->num_alloc_nodes = j;
  234|     24|        lh->num_expand_reallocs++;
  235|     24|        lh->p = 0;
  236|  3.44k|    } else {
  237|  3.44k|        lh->p++;
  238|  3.44k|    }
  239|       |
  240|  3.46k|    lh->num_nodes++;
  241|  3.46k|    lh->num_expands++;
  242|  3.46k|    n1 = &(lh->b[p]);
  243|  3.46k|    n2 = &(lh->b[p + pmax]);
  244|  3.46k|    *n2 = NULL;
  245|       |
  246|  15.0k|    for (np = *n1; np != NULL;) {
  ------------------
  |  Branch (246:20): [True: 11.5k, False: 3.46k]
  ------------------
  247|  11.5k|        hash = np->hash;
  248|  11.5k|        if ((hash % nni) != p) { /* move it */
  ------------------
  |  Branch (248:13): [True: 1.14k, False: 10.3k]
  ------------------
  249|  1.14k|            *n1 = (*n1)->next;
  250|  1.14k|            np->next = *n2;
  251|  1.14k|            *n2 = np;
  252|  1.14k|        } else
  253|  10.3k|            n1 = &((*n1)->next);
  254|  11.5k|        np = *n1;
  255|  11.5k|    }
  256|       |
  257|  3.46k|    return 1;
  258|  3.46k|}
lhash.c:contract:
  261|      2|{
  262|      2|    OPENSSL_LH_NODE **n, *n1, *np;
  263|       |
  264|      2|    np = lh->b[lh->p + lh->pmax - 1];
  265|      2|    lh->b[lh->p + lh->pmax - 1] = NULL; /* 24/07-92 - eay - weird but :-( */
  266|      2|    if (lh->p == 0) {
  ------------------
  |  Branch (266:9): [True: 0, False: 2]
  ------------------
  267|      0|        n = OPENSSL_realloc(lh->b,
  ------------------
  |  |  122|      0|        CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  268|      0|                            (unsigned int)(sizeof(OPENSSL_LH_NODE *) * lh->pmax));
  269|      0|        if (n == NULL) {
  ------------------
  |  Branch (269:13): [True: 0, False: 0]
  ------------------
  270|       |            /* fputs("realloc error in lhash",stderr); */
  271|      0|            lh->error++;
  272|      0|            return;
  273|      0|        }
  274|      0|        lh->num_contract_reallocs++;
  275|      0|        lh->num_alloc_nodes /= 2;
  276|      0|        lh->pmax /= 2;
  277|      0|        lh->p = lh->pmax - 1;
  278|      0|        lh->b = n;
  279|      0|    } else
  280|      2|        lh->p--;
  281|       |
  282|      2|    lh->num_nodes--;
  283|      2|    lh->num_contracts++;
  284|       |
  285|      2|    n1 = lh->b[(int)lh->p];
  286|      2|    if (n1 == NULL)
  ------------------
  |  Branch (286:9): [True: 2, False: 0]
  ------------------
  287|      2|        lh->b[(int)lh->p] = np;
  288|      0|    else {
  289|      0|        while (n1->next != NULL)
  ------------------
  |  Branch (289:16): [True: 0, False: 0]
  ------------------
  290|      0|            n1 = n1->next;
  291|      0|        n1->next = np;
  292|      0|    }
  293|      2|}
lhash.c:getrn:
  297|   192k|{
  298|   192k|    OPENSSL_LH_NODE **ret, *n1;
  299|   192k|    unsigned long hash, nn;
  300|   192k|    OPENSSL_LH_COMPFUNC cf;
  301|       |
  302|   192k|    hash = (*(lh->hash)) (data);
  303|   192k|    tsan_counter(&lh->num_hash_calls);
  ------------------
  |  |   59|   192k|#  define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed)
  ------------------
  304|   192k|    *rhash = hash;
  305|       |
  306|   192k|    nn = hash % lh->pmax;
  307|   192k|    if (nn < lh->p)
  ------------------
  |  Branch (307:9): [True: 155k, False: 36.4k]
  ------------------
  308|   155k|        nn = hash % lh->num_alloc_nodes;
  309|       |
  310|   192k|    cf = lh->comp;
  311|   192k|    ret = &(lh->b[(int)nn]);
  312|  1.12M|    for (n1 = *ret; n1 != NULL; n1 = n1->next) {
  ------------------
  |  Branch (312:21): [True: 1.06M, False: 65.0k]
  ------------------
  313|  1.06M|        tsan_counter(&lh->num_hash_comps);
  ------------------
  |  |   59|  1.06M|#  define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed)
  ------------------
  314|  1.06M|        if (n1->hash != hash) {
  ------------------
  |  Branch (314:13): [True: 934k, False: 127k]
  ------------------
  315|   934k|            ret = &(n1->next);
  316|   934k|            continue;
  317|   934k|        }
  318|  1.06M|        tsan_counter(&lh->num_comp_calls);
  ------------------
  |  |   59|  1.06M|#  define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed)
  ------------------
  319|   127k|        if (cf(n1->data, data) == 0)
  ------------------
  |  Branch (319:13): [True: 127k, False: 320]
  ------------------
  320|   127k|            break;
  321|    320|        ret = &(n1->next);
  322|    320|    }
  323|   192k|    return ret;
  324|   192k|}

CRYPTO_malloc:
  193|  2.58M|{
  194|  2.58M|    void *ret = NULL;
  195|       |
  196|  2.58M|    INCREMENT(malloc_count);
  197|  2.58M|    if (malloc_impl != NULL && malloc_impl != CRYPTO_malloc)
  ------------------
  |  Branch (197:9): [True: 2.58M, False: 0]
  |  Branch (197:32): [True: 0, False: 2.58M]
  ------------------
  198|      0|        return malloc_impl(num, file, line);
  199|       |
  200|  2.58M|    if (num == 0)
  ------------------
  |  Branch (200:9): [True: 0, False: 2.58M]
  ------------------
  201|      0|        return NULL;
  202|       |
  203|  2.58M|    FAILTEST();
  204|  2.58M|    if (allow_customize) {
  ------------------
  |  Branch (204:9): [True: 2, False: 2.58M]
  ------------------
  205|       |        /*
  206|       |         * Disallow customization after the first allocation. We only set this
  207|       |         * if necessary to avoid a store to the same cache line on every
  208|       |         * allocation.
  209|       |         */
  210|      2|        allow_customize = 0;
  211|      2|    }
  212|       |#ifndef OPENSSL_NO_CRYPTO_MDEBUG
  213|       |    if (call_malloc_debug) {
  214|       |        CRYPTO_mem_debug_malloc(NULL, num, 0, file, line);
  215|       |        ret = malloc(num);
  216|       |        CRYPTO_mem_debug_malloc(ret, num, 1, file, line);
  217|       |    } else {
  218|       |        ret = malloc(num);
  219|       |    }
  220|       |#else
  221|  2.58M|    (void)(file); (void)(line);
  222|  2.58M|    ret = malloc(num);
  223|  2.58M|#endif
  224|       |
  225|  2.58M|    return ret;
  226|  2.58M|}
CRYPTO_zalloc:
  229|  2.14M|{
  230|  2.14M|    void *ret = CRYPTO_malloc(num, file, line);
  231|       |
  232|  2.14M|    FAILTEST();
  233|  2.14M|    if (ret != NULL)
  ------------------
  |  Branch (233:9): [True: 2.14M, False: 0]
  ------------------
  234|  2.14M|        memset(ret, 0, num);
  235|  2.14M|    return ret;
  236|  2.14M|}
CRYPTO_realloc:
  239|   580k|{
  240|   580k|    INCREMENT(realloc_count);
  241|   580k|    if (realloc_impl != NULL && realloc_impl != &CRYPTO_realloc)
  ------------------
  |  Branch (241:9): [True: 580k, False: 0]
  |  Branch (241:33): [True: 0, False: 580k]
  ------------------
  242|      0|        return realloc_impl(str, num, file, line);
  243|       |
  244|   580k|    FAILTEST();
  245|   580k|    if (str == NULL)
  ------------------
  |  Branch (245:9): [True: 29.2k, False: 550k]
  ------------------
  246|  29.2k|        return CRYPTO_malloc(num, file, line);
  247|       |
  248|   550k|    if (num == 0) {
  ------------------
  |  Branch (248:9): [True: 0, False: 550k]
  ------------------
  249|      0|        CRYPTO_free(str, file, line);
  250|      0|        return NULL;
  251|      0|    }
  252|       |
  253|       |#ifndef OPENSSL_NO_CRYPTO_MDEBUG
  254|       |    if (call_malloc_debug) {
  255|       |        void *ret;
  256|       |        CRYPTO_mem_debug_realloc(str, NULL, num, 0, file, line);
  257|       |        ret = realloc(str, num);
  258|       |        CRYPTO_mem_debug_realloc(str, ret, num, 1, file, line);
  259|       |        return ret;
  260|       |    }
  261|       |#else
  262|   550k|    (void)(file); (void)(line);
  263|   550k|#endif
  264|   550k|    return realloc(str, num);
  265|       |
  266|   550k|}
CRYPTO_clear_realloc:
  270|  28.9k|{
  271|  28.9k|    void *ret = NULL;
  272|       |
  273|  28.9k|    if (str == NULL)
  ------------------
  |  Branch (273:9): [True: 28.9k, False: 0]
  ------------------
  274|  28.9k|        return CRYPTO_malloc(num, file, line);
  275|       |
  276|      0|    if (num == 0) {
  ------------------
  |  Branch (276:9): [True: 0, False: 0]
  ------------------
  277|      0|        CRYPTO_clear_free(str, old_len, file, line);
  278|      0|        return NULL;
  279|      0|    }
  280|       |
  281|       |    /* Can't shrink the buffer since memcpy below copies |old_len| bytes. */
  282|      0|    if (num < old_len) {
  ------------------
  |  Branch (282:9): [True: 0, False: 0]
  ------------------
  283|      0|        OPENSSL_cleanse((char*)str + num, old_len - num);
  284|      0|        return str;
  285|      0|    }
  286|       |
  287|      0|    ret = CRYPTO_malloc(num, file, line);
  288|      0|    if (ret != NULL) {
  ------------------
  |  Branch (288:9): [True: 0, False: 0]
  ------------------
  289|      0|        memcpy(ret, str, old_len);
  290|      0|        CRYPTO_clear_free(str, old_len, file, line);
  291|      0|    }
  292|      0|    return ret;
  293|      0|}
CRYPTO_free:
  296|  7.69M|{
  297|  7.69M|    INCREMENT(free_count);
  298|  7.69M|    if (free_impl != NULL && free_impl != &CRYPTO_free) {
  ------------------
  |  Branch (298:9): [True: 7.69M, False: 0]
  |  Branch (298:30): [True: 0, False: 7.69M]
  ------------------
  299|      0|        free_impl(str, file, line);
  300|      0|        return;
  301|      0|    }
  302|       |
  303|       |#ifndef OPENSSL_NO_CRYPTO_MDEBUG
  304|       |    if (call_malloc_debug) {
  305|       |        CRYPTO_mem_debug_free(str, 0, file, line);
  306|       |        free(str);
  307|       |        CRYPTO_mem_debug_free(str, 1, file, line);
  308|       |    } else {
  309|       |        free(str);
  310|       |    }
  311|       |#else
  312|  7.69M|    free(str);
  313|  7.69M|#endif
  314|  7.69M|}
CRYPTO_clear_free:
  317|   405k|{
  318|   405k|    if (str == NULL)
  ------------------
  |  Branch (318:9): [True: 289k, False: 115k]
  ------------------
  319|   289k|        return;
  320|   115k|    if (num)
  ------------------
  |  Branch (320:9): [True: 115k, False: 0]
  ------------------
  321|   115k|        OPENSSL_cleanse(str, num);
  322|   115k|    CRYPTO_free(str, file, line);
  323|   115k|}

OPENSSL_cleanse:
   23|   463k|{
   24|   463k|    memset_func(ptr, 0, len);
   25|   463k|}

CRYPTO_mem_ctrl:
  121|      4|{
  122|      4|#ifdef OPENSSL_NO_CRYPTO_MDEBUG
  123|      4|    return mode - mode;
  124|       |#else
  125|       |    int ret = mh_mode;
  126|       |
  127|       |    if (!RUN_ONCE(&memdbg_init, do_memdbg_init))
  128|       |        return -1;
  129|       |
  130|       |    CRYPTO_THREAD_write_lock(memdbg_lock);
  131|       |    switch (mode) {
  132|       |    default:
  133|       |        break;
  134|       |
  135|       |    case CRYPTO_MEM_CHECK_ON:
  136|       |        mh_mode = CRYPTO_MEM_CHECK_ON | CRYPTO_MEM_CHECK_ENABLE;
  137|       |        num_disable = 0;
  138|       |        break;
  139|       |
  140|       |    case CRYPTO_MEM_CHECK_OFF:
  141|       |        mh_mode = 0;
  142|       |        num_disable = 0;
  143|       |        break;
  144|       |
  145|       |    /* switch off temporarily (for library-internal use): */
  146|       |    case CRYPTO_MEM_CHECK_DISABLE:
  147|       |        if (mh_mode & CRYPTO_MEM_CHECK_ON) {
  148|       |            CRYPTO_THREAD_ID cur = CRYPTO_THREAD_get_current_id();
  149|       |            /* see if we don't have long_memdbg_lock already */
  150|       |            if (!num_disable
  151|       |                || !CRYPTO_THREAD_compare_id(disabling_threadid, cur)) {
  152|       |                /*
  153|       |                 * Long-time lock long_memdbg_lock must not be claimed
  154|       |                 * while we're holding memdbg_lock, or we'll deadlock
  155|       |                 * if somebody else holds long_memdbg_lock (and cannot
  156|       |                 * release it because we block entry to this function). Give
  157|       |                 * them a chance, first, and then claim the locks in
  158|       |                 * appropriate order (long-time lock first).
  159|       |                 */
  160|       |                CRYPTO_THREAD_unlock(memdbg_lock);
  161|       |                /*
  162|       |                 * Note that after we have waited for long_memdbg_lock and
  163|       |                 * memdbg_lock, we'll still be in the right "case" and
  164|       |                 * "if" branch because MemCheck_start and MemCheck_stop may
  165|       |                 * never be used while there are multiple OpenSSL threads.
  166|       |                 */
  167|       |                CRYPTO_THREAD_write_lock(long_memdbg_lock);
  168|       |                CRYPTO_THREAD_write_lock(memdbg_lock);
  169|       |                mh_mode &= ~CRYPTO_MEM_CHECK_ENABLE;
  170|       |                disabling_threadid = cur;
  171|       |            }
  172|       |            num_disable++;
  173|       |        }
  174|       |        break;
  175|       |
  176|       |    case CRYPTO_MEM_CHECK_ENABLE:
  177|       |        if (mh_mode & CRYPTO_MEM_CHECK_ON) {
  178|       |            if (num_disable) {  /* always true, or something is going wrong */
  179|       |                num_disable--;
  180|       |                if (num_disable == 0) {
  181|       |                    mh_mode |= CRYPTO_MEM_CHECK_ENABLE;
  182|       |                    CRYPTO_THREAD_unlock(long_memdbg_lock);
  183|       |                }
  184|       |            }
  185|       |        }
  186|       |        break;
  187|       |    }
  188|       |    CRYPTO_THREAD_unlock(memdbg_lock);
  189|       |    return ret;
  190|       |#endif
  191|      4|}

CRYPTO_secure_malloc_done:
   98|      2|{
   99|      2|#ifdef OPENSSL_SECURE_MEMORY
  100|      2|    if (secure_mem_used == 0) {
  ------------------
  |  Branch (100:9): [True: 2, False: 0]
  ------------------
  101|      2|        sh_done();
  102|      2|        secure_mem_initialized = 0;
  103|      2|        CRYPTO_THREAD_lock_free(sec_malloc_lock);
  104|      2|        sec_malloc_lock = NULL;
  105|      2|        return 1;
  106|      2|    }
  107|      0|#endif /* OPENSSL_SECURE_MEMORY */
  108|      0|    return 0;
  109|      2|}
CRYPTO_secure_malloc:
  121|  28.9k|{
  122|  28.9k|#ifdef OPENSSL_SECURE_MEMORY
  123|  28.9k|    void *ret;
  124|  28.9k|    size_t actual_size;
  125|       |
  126|  28.9k|    if (!secure_mem_initialized) {
  ------------------
  |  Branch (126:9): [True: 28.9k, False: 0]
  ------------------
  127|  28.9k|        return CRYPTO_malloc(num, file, line);
  128|  28.9k|    }
  129|      0|    CRYPTO_THREAD_write_lock(sec_malloc_lock);
  130|      0|    ret = sh_malloc(num);
  131|      0|    actual_size = ret ? sh_actual_size(ret) : 0;
  ------------------
  |  Branch (131:19): [True: 0, False: 0]
  ------------------
  132|      0|    secure_mem_used += actual_size;
  133|      0|    CRYPTO_THREAD_unlock(sec_malloc_lock);
  134|      0|    return ret;
  135|       |#else
  136|       |    return CRYPTO_malloc(num, file, line);
  137|       |#endif /* OPENSSL_SECURE_MEMORY */
  138|  28.9k|}
CRYPTO_secure_zalloc:
  141|  28.9k|{
  142|  28.9k|#ifdef OPENSSL_SECURE_MEMORY
  143|  28.9k|    if (secure_mem_initialized)
  ------------------
  |  Branch (143:9): [True: 0, False: 28.9k]
  ------------------
  144|       |        /* CRYPTO_secure_malloc() zeroes allocations when it is implemented */
  145|      0|        return CRYPTO_secure_malloc(num, file, line);
  146|  28.9k|#endif
  147|  28.9k|    return CRYPTO_zalloc(num, file, line);
  148|  28.9k|}
CRYPTO_secure_free:
  151|  28.9k|{
  152|  28.9k|#ifdef OPENSSL_SECURE_MEMORY
  153|  28.9k|    size_t actual_size;
  154|       |
  155|  28.9k|    if (ptr == NULL)
  ------------------
  |  Branch (155:9): [True: 0, False: 28.9k]
  ------------------
  156|      0|        return;
  157|  28.9k|    if (!CRYPTO_secure_allocated(ptr)) {
  ------------------
  |  Branch (157:9): [True: 28.9k, False: 0]
  ------------------
  158|  28.9k|        CRYPTO_free(ptr, file, line);
  159|  28.9k|        return;
  160|  28.9k|    }
  161|      0|    CRYPTO_THREAD_write_lock(sec_malloc_lock);
  162|      0|    actual_size = sh_actual_size(ptr);
  163|      0|    CLEAR(ptr, actual_size);
  ------------------
  |  |   48|      0|#define CLEAR(p, s) OPENSSL_cleanse(p, s)
  ------------------
  164|      0|    secure_mem_used -= actual_size;
  165|      0|    sh_free(ptr);
  166|      0|    CRYPTO_THREAD_unlock(sec_malloc_lock);
  167|       |#else
  168|       |    CRYPTO_free(ptr, file, line);
  169|       |#endif /* OPENSSL_SECURE_MEMORY */
  170|      0|}
CRYPTO_secure_clear_free:
  174|  28.9k|{
  175|  28.9k|#ifdef OPENSSL_SECURE_MEMORY
  176|  28.9k|    size_t actual_size;
  177|       |
  178|  28.9k|    if (ptr == NULL)
  ------------------
  |  Branch (178:9): [True: 0, False: 28.9k]
  ------------------
  179|      0|        return;
  180|  28.9k|    if (!CRYPTO_secure_allocated(ptr)) {
  ------------------
  |  Branch (180:9): [True: 28.9k, False: 0]
  ------------------
  181|  28.9k|        OPENSSL_cleanse(ptr, num);
  182|  28.9k|        CRYPTO_free(ptr, file, line);
  183|  28.9k|        return;
  184|  28.9k|    }
  185|      0|    CRYPTO_THREAD_write_lock(sec_malloc_lock);
  186|      0|    actual_size = sh_actual_size(ptr);
  187|      0|    CLEAR(ptr, actual_size);
  ------------------
  |  |   48|      0|#define CLEAR(p, s) OPENSSL_cleanse(p, s)
  ------------------
  188|      0|    secure_mem_used -= actual_size;
  189|      0|    sh_free(ptr);
  190|      0|    CRYPTO_THREAD_unlock(sec_malloc_lock);
  191|       |#else
  192|       |    if (ptr == NULL)
  193|       |        return;
  194|       |    OPENSSL_cleanse(ptr, num);
  195|       |    CRYPTO_free(ptr, file, line);
  196|       |#endif /* OPENSSL_SECURE_MEMORY */
  197|      0|}
CRYPTO_secure_allocated:
  200|  57.9k|{
  201|  57.9k|#ifdef OPENSSL_SECURE_MEMORY
  202|  57.9k|    int ret;
  203|       |
  204|  57.9k|    if (!secure_mem_initialized)
  ------------------
  |  Branch (204:9): [True: 57.9k, False: 0]
  ------------------
  205|  57.9k|        return 0;
  206|      0|    CRYPTO_THREAD_write_lock(sec_malloc_lock);
  207|      0|    ret = sh_allocated(ptr);
  208|      0|    CRYPTO_THREAD_unlock(sec_malloc_lock);
  209|      0|    return ret;
  210|       |#else
  211|       |    return 0;
  212|       |#endif /* OPENSSL_SECURE_MEMORY */
  213|  57.9k|}
mem_sec.c:sh_done:
  507|      2|{
  508|      2|    OPENSSL_free(sh.freelist);
  ------------------
  |  |  128|      2|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  509|      2|    OPENSSL_free(sh.bittable);
  ------------------
  |  |  128|      2|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  510|      2|    OPENSSL_free(sh.bitmalloc);
  ------------------
  |  |  128|      2|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  511|      2|    if (sh.map_result != MAP_FAILED && sh.map_size)
  ------------------
  |  Branch (511:9): [True: 2, False: 0]
  |  Branch (511:40): [True: 0, False: 2]
  ------------------
  512|      0|        munmap(sh.map_result, sh.map_size);
  513|      2|    memset(&sh, 0, sizeof(sh));
  514|      2|}

CRYPTO_ctr128_encrypt:
   82|   202k|{
   83|   202k|    unsigned int n;
   84|   202k|    size_t l = 0;
   85|       |
   86|   202k|    n = *num;
   87|       |
   88|   202k|#if !defined(OPENSSL_SMALL_FOOTPRINT)
   89|   202k|    if (16 % sizeof(size_t) == 0) { /* always true actually */
  ------------------
  |  Branch (89:9): [True: 202k, Folded]
  ------------------
   90|   202k|        do {
   91|   202k|            while (n && len) {
  ------------------
  |  Branch (91:20): [True: 0, False: 202k]
  |  Branch (91:25): [True: 0, False: 0]
  ------------------
   92|      0|                *(out++) = *(in++) ^ ecount_buf[n];
   93|      0|                --len;
   94|      0|                n = (n + 1) % 16;
   95|      0|            }
   96|       |
   97|       |# if defined(STRICT_ALIGNMENT)
   98|       |            if (((size_t)in | (size_t)out | (size_t)ecount_buf)
   99|       |                % sizeof(size_t) != 0)
  100|       |                break;
  101|       |# endif
  102|   579k|            while (len >= 16) {
  ------------------
  |  Branch (102:20): [True: 376k, False: 202k]
  ------------------
  103|   376k|                (*block) (ivec, ecount_buf, key);
  104|   376k|                ctr128_inc_aligned(ivec);
  105|  1.13M|                for (n = 0; n < 16; n += sizeof(size_t))
  ------------------
  |  Branch (105:29): [True: 753k, False: 376k]
  ------------------
  106|   753k|                    *(size_t_aX *)(out + n) =
  107|   753k|                        *(size_t_aX *)(in + n)
  108|   753k|                        ^ *(size_t_aX *)(ecount_buf + n);
  109|   376k|                len -= 16;
  110|   376k|                out += 16;
  111|   376k|                in += 16;
  112|   376k|                n = 0;
  113|   376k|            }
  114|   202k|            if (len) {
  ------------------
  |  Branch (114:17): [True: 0, False: 202k]
  ------------------
  115|      0|                (*block) (ivec, ecount_buf, key);
  116|      0|                ctr128_inc_aligned(ivec);
  117|      0|                while (len--) {
  ------------------
  |  Branch (117:24): [True: 0, False: 0]
  ------------------
  118|      0|                    out[n] = in[n] ^ ecount_buf[n];
  119|      0|                    ++n;
  120|      0|                }
  121|      0|            }
  122|   202k|            *num = n;
  123|   202k|            return;
  124|   202k|        } while (0);
  ------------------
  |  Branch (124:18): [Folded, False: 0]
  ------------------
  125|   202k|    }
  126|       |    /* the rest would be commonly eliminated by x86* compiler */
  127|      0|#endif
  128|      0|    while (l < len) {
  ------------------
  |  Branch (128:12): [True: 0, False: 0]
  ------------------
  129|      0|        if (n == 0) {
  ------------------
  |  Branch (129:13): [True: 0, False: 0]
  ------------------
  130|      0|            (*block) (ivec, ecount_buf, key);
  131|      0|            ctr128_inc(ivec);
  132|      0|        }
  133|      0|        out[l] = in[l] ^ ecount_buf[n];
  134|      0|        ++l;
  135|      0|        n = (n + 1) % 16;
  136|      0|    }
  137|       |
  138|      0|    *num = n;
  139|      0|}
ctr128.c:ctr128_inc_aligned:
   40|   376k|{
   41|   376k|    size_t *data, c, d, n;
   42|   376k|    const union {
   43|   376k|        long one;
   44|   376k|        char little;
   45|   376k|    } is_endian = {
   46|   376k|        1
   47|   376k|    };
   48|       |
   49|   376k|    if (is_endian.little || ((size_t)counter % sizeof(size_t)) != 0) {
  ------------------
  |  Branch (49:9): [True: 376k, False: 0]
  |  Branch (49:29): [True: 0, False: 0]
  ------------------
   50|   376k|        ctr128_inc(counter);
   51|   376k|        return;
   52|   376k|    }
   53|       |
   54|      0|    data = (size_t *)counter;
   55|      0|    c = 1;
   56|      0|    n = 16 / sizeof(size_t);
   57|      0|    do {
   58|      0|        --n;
   59|      0|        d = data[n] += c;
   60|       |        /* did addition carry? */
   61|      0|        c = ((d - c) & ~d) >> (sizeof(size_t) * 8 - 1);
   62|      0|    } while (n);
  ------------------
  |  Branch (62:14): [True: 0, False: 0]
  ------------------
   63|      0|}
ctr128.c:ctr128_inc:
   27|   376k|{
   28|   376k|    u32 n = 16, c = 1;
   29|       |
   30|  6.02M|    do {
   31|  6.02M|        --n;
   32|  6.02M|        c += counter[n];
   33|  6.02M|        counter[n] = (u8)c;
   34|  6.02M|        c >>= 8;
   35|  6.02M|    } while (n);
  ------------------
  |  Branch (35:14): [True: 5.65M, False: 376k]
  ------------------
   36|   376k|}

openssl_fopen:
   39|      4|{
   40|      4|    FILE *file = NULL;
   41|       |# if defined(_WIN32) && defined(CP_UTF8)
   42|       |    int sz, len_0 = (int)strlen(filename) + 1;
   43|       |    DWORD flags;
   44|       |
   45|       |    /*
   46|       |     * Basically there are three cases to cover: a) filename is
   47|       |     * pure ASCII string; b) actual UTF-8 encoded string and
   48|       |     * c) locale-ized string, i.e. one containing 8-bit
   49|       |     * characters that are meaningful in current system locale.
   50|       |     * If filename is pure ASCII or real UTF-8 encoded string,
   51|       |     * MultiByteToWideChar succeeds and _wfopen works. If
   52|       |     * filename is locale-ized string, chances are that
   53|       |     * MultiByteToWideChar fails reporting
   54|       |     * ERROR_NO_UNICODE_TRANSLATION, in which case we fall
   55|       |     * back to fopen...
   56|       |     */
   57|       |    if ((sz = MultiByteToWideChar(CP_UTF8, (flags = MB_ERR_INVALID_CHARS),
   58|       |                                  filename, len_0, NULL, 0)) > 0 ||
   59|       |        (GetLastError() == ERROR_INVALID_FLAGS &&
   60|       |         (sz = MultiByteToWideChar(CP_UTF8, (flags = 0),
   61|       |                                   filename, len_0, NULL, 0)) > 0)
   62|       |        ) {
   63|       |        WCHAR wmode[8];
   64|       |        WCHAR *wfilename = _alloca(sz * sizeof(WCHAR));
   65|       |
   66|       |        if (MultiByteToWideChar(CP_UTF8, flags,
   67|       |                                filename, len_0, wfilename, sz) &&
   68|       |            MultiByteToWideChar(CP_UTF8, 0, mode, strlen(mode) + 1,
   69|       |                                wmode, OSSL_NELEM(wmode)) &&
   70|       |            (file = _wfopen(wfilename, wmode)) == NULL &&
   71|       |            (errno == ENOENT || errno == EBADF)
   72|       |            ) {
   73|       |            /*
   74|       |             * UTF-8 decode succeeded, but no file, filename
   75|       |             * could still have been locale-ized...
   76|       |             */
   77|       |            file = fopen(filename, mode);
   78|       |        }
   79|       |    } else if (GetLastError() == ERROR_NO_UNICODE_TRANSLATION) {
   80|       |        file = fopen(filename, mode);
   81|       |    }
   82|       |# elif defined(__DJGPP__)
   83|       |    {
   84|       |        char *newname = NULL;
   85|       |
   86|       |        if (pathconf(filename, _PC_NAME_MAX) <= 12) {  /* 8.3 file system? */
   87|       |            char *iterator;
   88|       |            char lastchar;
   89|       |
   90|       |            if ((newname = OPENSSL_malloc(strlen(filename) + 1)) == NULL) {
   91|       |                CRYPTOerr(CRYPTO_F_OPENSSL_FOPEN, ERR_R_MALLOC_FAILURE);
   92|       |                return NULL;
   93|       |            }
   94|       |
   95|       |            for (iterator = newname, lastchar = '\0';
   96|       |                *filename; filename++, iterator++) {
   97|       |                if (lastchar == '/' && filename[0] == '.'
   98|       |                    && filename[1] != '.' && filename[1] != '/') {
   99|       |                    /* Leading dots are not permitted in plain DOS. */
  100|       |                    *iterator = '_';
  101|       |                } else {
  102|       |                    *iterator = *filename;
  103|       |                }
  104|       |                lastchar = *filename;
  105|       |            }
  106|       |            *iterator = '\0';
  107|       |            filename = newname;
  108|       |        }
  109|       |        file = fopen(filename, mode);
  110|       |
  111|       |        OPENSSL_free(newname);
  112|       |    }
  113|       |# else
  114|      4|    file = fopen(filename, mode);
  115|      4|# endif
  116|      4|    return file;
  117|      4|}

CRYPTO_strdup:
   28|  29.1k|{
   29|  29.1k|    char *ret;
   30|       |
   31|  29.1k|    if (str == NULL)
  ------------------
  |  Branch (31:9): [True: 0, False: 29.1k]
  ------------------
   32|      0|        return NULL;
   33|  29.1k|    ret = CRYPTO_malloc(strlen(str) + 1, file, line);
   34|  29.1k|    if (ret != NULL)
  ------------------
  |  Branch (34:9): [True: 29.1k, False: 0]
  ------------------
   35|  29.1k|        strcpy(ret, str);
   36|  29.1k|    return ret;
   37|  29.1k|}
CRYPTO_strndup:
   40|      2|{
   41|      2|    size_t maxlen;
   42|      2|    char *ret;
   43|       |
   44|      2|    if (str == NULL)
  ------------------
  |  Branch (44:9): [True: 0, False: 2]
  ------------------
   45|      0|        return NULL;
   46|       |
   47|      2|    maxlen = OPENSSL_strnlen(str, s);
   48|       |
   49|      2|    ret = CRYPTO_malloc(maxlen + 1, file, line);
   50|      2|    if (ret) {
  ------------------
  |  Branch (50:9): [True: 2, False: 0]
  ------------------
   51|      2|        memcpy(ret, str, maxlen);
   52|      2|        ret[maxlen] = '\0';
   53|      2|    }
   54|      2|    return ret;
   55|      2|}
CRYPTO_memdup:
   58|  28.9k|{
   59|  28.9k|    void *ret;
   60|       |
   61|  28.9k|    if (data == NULL || siz >= INT_MAX)
  ------------------
  |  Branch (61:9): [True: 0, False: 28.9k]
  |  Branch (61:25): [True: 0, False: 28.9k]
  ------------------
   62|      0|        return NULL;
   63|       |
   64|  28.9k|    ret = CRYPTO_malloc(siz, file, line);
   65|  28.9k|    if (ret == NULL) {
  ------------------
  |  Branch (65:9): [True: 0, False: 28.9k]
  ------------------
   66|      0|        CRYPTOerr(CRYPTO_F_CRYPTO_MEMDUP, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  113|      0|# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   67|      0|        return NULL;
   68|      0|    }
   69|  28.9k|    return memcpy(ret, data, siz);
   70|  28.9k|}
OPENSSL_strnlen:
   73|      8|{
   74|      8|    const char *p;
   75|       |
   76|     76|    for (p = str; maxlen-- != 0 && *p != '\0'; ++p) ;
  ------------------
  |  Branch (76:19): [True: 74, False: 2]
  |  Branch (76:36): [True: 68, False: 6]
  ------------------
   77|       |
   78|      8|    return p - str;
   79|      8|}
OPENSSL_strlcpy:
   82|     18|{
   83|     18|    size_t l = 0;
   84|    138|    for (; size > 1 && *src; size--) {
  ------------------
  |  Branch (84:12): [True: 138, False: 0]
  |  Branch (84:24): [True: 120, False: 18]
  ------------------
   85|    120|        *dst++ = *src++;
   86|    120|        l++;
   87|    120|    }
   88|     18|    if (size)
  ------------------
  |  Branch (88:9): [True: 18, False: 0]
  ------------------
   89|     18|        *dst = '\0';
   90|     18|    return l + strlen(src);
   91|     18|}
OPENSSL_strlcat:
   94|     18|{
   95|     18|    size_t l = 0;
   96|    262|    for (; size > 0 && *dst; size--, dst++)
  ------------------
  |  Branch (96:12): [True: 262, False: 0]
  |  Branch (96:24): [True: 244, False: 18]
  ------------------
   97|    244|        l++;
   98|     18|    return l + OPENSSL_strlcpy(dst, src, size);
   99|     18|}
openssl_strerror_r:
  222|    254|{
  223|       |#if defined(_MSC_VER) && _MSC_VER>=1400 && !defined(_WIN32_WCE)
  224|       |    return !strerror_s(buf, buflen, errnum);
  225|       |#elif defined(_GNU_SOURCE)
  226|       |    char *err;
  227|       |
  228|       |    /*
  229|       |     * GNU strerror_r may not actually set buf.
  230|       |     * It can return a pointer to some (immutable) static string in which case
  231|       |     * buf is left unused.
  232|       |     */
  233|       |    err = strerror_r(errnum, buf, buflen);
  234|       |    if (err == NULL || buflen == 0)
  235|       |        return 0;
  236|       |    /*
  237|       |     * If err is statically allocated, err != buf and we need to copy the data.
  238|       |     * If err points somewhere inside buf, OPENSSL_strlcpy can handle this,
  239|       |     * since src and dest are not annotated with __restrict and the function
  240|       |     * reads src byte for byte and writes to dest.
  241|       |     * If err == buf we do not have to copy anything.
  242|       |     */
  243|       |    if (err != buf)
  244|       |        OPENSSL_strlcpy(buf, err, buflen);
  245|       |    return 1;
  246|       |#elif (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L) || \
  247|       |      (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 600)
  248|       |    /*
  249|       |     * We can use "real" strerror_r. The OpenSSL version differs in that it
  250|       |     * gives 1 on success and 0 on failure for consistency with other OpenSSL
  251|       |     * functions. Real strerror_r does it the other way around
  252|       |     */
  253|    254|    return !strerror_r(errnum, buf, buflen);
  254|       |#else
  255|       |    char *err;
  256|       |
  257|       |    /* Fall back to non-thread safe strerror()...its all we can do */
  258|       |    if (buflen < 2)
  259|       |        return 0;
  260|       |    err = strerror(errnum);
  261|       |    /* Can this ever happen? */
  262|       |    if (err == NULL)
  263|       |        return 0;
  264|       |    OPENSSL_strlcpy(buf, err, buflen);
  265|       |    return 1;
  266|       |#endif
  267|    254|}

OBJ_NAME_init:
   77|  59.4k|{
   78|  59.4k|    return RUN_ONCE(&init, o_names_init);
  ------------------
  |  |  119|  59.4k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 59.4k, False: 0]
  |  |  ------------------
  ------------------
   79|  59.4k|}
OBJ_NAME_get:
  173|  58.0k|{
  174|  58.0k|    OBJ_NAME on, *ret;
  175|  58.0k|    int num = 0, alias;
  176|  58.0k|    const char *value = NULL;
  177|       |
  178|  58.0k|    if (name == NULL)
  ------------------
  |  Branch (178:9): [True: 0, False: 58.0k]
  ------------------
  179|      0|        return NULL;
  180|  58.0k|    if (!OBJ_NAME_init())
  ------------------
  |  Branch (180:9): [True: 0, False: 58.0k]
  ------------------
  181|      0|        return NULL;
  182|  58.0k|    CRYPTO_THREAD_read_lock(obj_lock);
  183|       |
  184|  58.0k|    alias = type & OBJ_NAME_ALIAS;
  ------------------
  |  |   25|  58.0k|# define OBJ_NAME_ALIAS                  0x8000
  ------------------
  185|  58.0k|    type &= ~OBJ_NAME_ALIAS;
  ------------------
  |  |   25|  58.0k|# define OBJ_NAME_ALIAS                  0x8000
  ------------------
  186|       |
  187|  58.0k|    on.name = name;
  188|  58.0k|    on.type = type;
  189|       |
  190|   116k|    for (;;) {
  191|   116k|        ret = lh_OBJ_NAME_retrieve(names_lh, &on);
  192|   116k|        if (ret == NULL)
  ------------------
  |  Branch (192:13): [True: 14, False: 116k]
  ------------------
  193|     14|            break;
  194|   116k|        if ((ret->alias) && !alias) {
  ------------------
  |  Branch (194:13): [True: 57.9k, False: 58.0k]
  |  Branch (194:29): [True: 57.9k, False: 0]
  ------------------
  195|  57.9k|            if (++num > 10)
  ------------------
  |  Branch (195:17): [True: 0, False: 57.9k]
  ------------------
  196|      0|                break;
  197|  57.9k|            on.name = ret->data;
  198|  58.0k|        } else {
  199|  58.0k|            value = ret->data;
  200|  58.0k|            break;
  201|  58.0k|        }
  202|   116k|    }
  203|       |
  204|  58.0k|    CRYPTO_THREAD_unlock(obj_lock);
  205|  58.0k|    return value;
  206|  58.0k|}
OBJ_NAME_add:
  209|    944|{
  210|    944|    OBJ_NAME *onp, *ret;
  211|    944|    int alias, ok = 0;
  212|       |
  213|    944|    if (!OBJ_NAME_init())
  ------------------
  |  Branch (213:9): [True: 0, False: 944]
  ------------------
  214|      0|        return 0;
  215|       |
  216|    944|    alias = type & OBJ_NAME_ALIAS;
  ------------------
  |  |   25|    944|# define OBJ_NAME_ALIAS                  0x8000
  ------------------
  217|    944|    type &= ~OBJ_NAME_ALIAS;
  ------------------
  |  |   25|    944|# define OBJ_NAME_ALIAS                  0x8000
  ------------------
  218|       |
  219|    944|    onp = OPENSSL_malloc(sizeof(*onp));
  ------------------
  |  |  118|    944|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  220|    944|    if (onp == NULL) {
  ------------------
  |  Branch (220:9): [True: 0, False: 944]
  ------------------
  221|       |        /* ERROR */
  222|      0|        goto unlock;
  223|      0|    }
  224|       |
  225|    944|    onp->name = name;
  226|    944|    onp->alias = alias;
  227|    944|    onp->type = type;
  228|    944|    onp->data = data;
  229|       |
  230|    944|    CRYPTO_THREAD_write_lock(obj_lock);
  231|       |
  232|    944|    ret = lh_OBJ_NAME_insert(names_lh, onp);
  233|    944|    if (ret != NULL) {
  ------------------
  |  Branch (233:9): [True: 484, False: 460]
  ------------------
  234|       |        /* free things */
  235|    484|        if ((name_funcs_stack != NULL)
  ------------------
  |  Branch (235:13): [True: 0, False: 484]
  ------------------
  236|      0|            && (sk_NAME_FUNCS_num(name_funcs_stack) > ret->type)) {
  ------------------
  |  Branch (236:16): [True: 0, False: 0]
  ------------------
  237|       |            /*
  238|       |             * XXX: I'm not sure I understand why the free function should
  239|       |             * get three arguments... -- Richard Levitte
  240|       |             */
  241|      0|            sk_NAME_FUNCS_value(name_funcs_stack,
  242|      0|                                ret->type)->free_func(ret->name, ret->type,
  243|      0|                                                      ret->data);
  244|      0|        }
  245|    484|        OPENSSL_free(ret);
  ------------------
  |  |  128|    484|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  246|    484|    } else {
  247|    460|        if (lh_OBJ_NAME_error(names_lh)) {
  ------------------
  |  Branch (247:13): [True: 0, False: 460]
  ------------------
  248|       |            /* ERROR */
  249|      0|            OPENSSL_free(onp);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  250|      0|            goto unlock;
  251|      0|        }
  252|    460|    }
  253|       |
  254|    944|    ok = 1;
  255|       |
  256|    944|unlock:
  257|    944|    CRYPTO_THREAD_unlock(obj_lock);
  258|    944|    return ok;
  259|    944|}
OBJ_NAME_remove:
  262|    460|{
  263|    460|    OBJ_NAME on, *ret;
  264|    460|    int ok = 0;
  265|       |
  266|    460|    if (!OBJ_NAME_init())
  ------------------
  |  Branch (266:9): [True: 0, False: 460]
  ------------------
  267|      0|        return 0;
  268|       |
  269|    460|    CRYPTO_THREAD_write_lock(obj_lock);
  270|       |
  271|    460|    type &= ~OBJ_NAME_ALIAS;
  ------------------
  |  |   25|    460|# define OBJ_NAME_ALIAS                  0x8000
  ------------------
  272|    460|    on.name = name;
  273|    460|    on.type = type;
  274|    460|    ret = lh_OBJ_NAME_delete(names_lh, &on);
  275|    460|    if (ret != NULL) {
  ------------------
  |  Branch (275:9): [True: 460, False: 0]
  ------------------
  276|       |        /* free things */
  277|    460|        if ((name_funcs_stack != NULL)
  ------------------
  |  Branch (277:13): [True: 0, False: 460]
  ------------------
  278|      0|            && (sk_NAME_FUNCS_num(name_funcs_stack) > ret->type)) {
  ------------------
  |  Branch (278:16): [True: 0, False: 0]
  ------------------
  279|       |            /*
  280|       |             * XXX: I'm not sure I understand why the free function should
  281|       |             * get three arguments... -- Richard Levitte
  282|       |             */
  283|      0|            sk_NAME_FUNCS_value(name_funcs_stack,
  284|      0|                                ret->type)->free_func(ret->name, ret->type,
  285|      0|                                                      ret->data);
  286|      0|        }
  287|    460|        OPENSSL_free(ret);
  ------------------
  |  |  128|    460|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  288|    460|        ok = 1;
  289|    460|    }
  290|       |
  291|    460|    CRYPTO_THREAD_unlock(obj_lock);
  292|    460|    return ok;
  293|    460|}
OBJ_NAME_cleanup:
  386|      6|{
  387|      6|    unsigned long down_load;
  388|       |
  389|      6|    if (names_lh == NULL)
  ------------------
  |  Branch (389:9): [True: 0, False: 6]
  ------------------
  390|      0|        return;
  391|       |
  392|      6|    free_type = type;
  393|      6|    down_load = lh_OBJ_NAME_get_down_load(names_lh);
  394|      6|    lh_OBJ_NAME_set_down_load(names_lh, 0);
  395|       |
  396|      6|    lh_OBJ_NAME_doall(names_lh, names_lh_free_doall);
  397|      6|    if (type < 0) {
  ------------------
  |  Branch (397:9): [True: 2, False: 4]
  ------------------
  398|      2|        lh_OBJ_NAME_free(names_lh);
  399|      2|        sk_NAME_FUNCS_pop_free(name_funcs_stack, name_funcs_free);
  400|      2|        CRYPTO_THREAD_lock_free(obj_lock);
  401|      2|        names_lh = NULL;
  402|      2|        name_funcs_stack = NULL;
  403|      2|        obj_lock = NULL;
  404|      2|    } else
  405|      4|        lh_OBJ_NAME_set_down_load(names_lh, down_load);
  406|      6|}
o_names.c:o_names_init:
   68|      2|{
   69|      2|    CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE);
  ------------------
  |  |   84|      2|# define CRYPTO_MEM_CHECK_DISABLE 0x3   /* Control only */
  ------------------
   70|      2|    names_lh = lh_OBJ_NAME_new(obj_name_hash, obj_name_cmp);
   71|      2|    obj_lock = CRYPTO_THREAD_lock_new();
   72|      2|    CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE);
  ------------------
  |  |   83|      2|# define CRYPTO_MEM_CHECK_ENABLE  0x2   /* Control and mode bit */
  ------------------
   73|      2|    return names_lh != NULL && obj_lock != NULL;
  ------------------
  |  Branch (73:12): [True: 2, False: 0]
  |  Branch (73:32): [True: 2, False: 0]
  ------------------
   74|      2|}
o_names.c:obj_name_hash:
  157|   117k|{
  158|   117k|    unsigned long ret;
  159|       |
  160|   117k|    if ((name_funcs_stack != NULL)
  ------------------
  |  Branch (160:9): [True: 0, False: 117k]
  ------------------
  161|      0|        && (sk_NAME_FUNCS_num(name_funcs_stack) > a->type)) {
  ------------------
  |  Branch (161:12): [True: 0, False: 0]
  ------------------
  162|      0|        ret =
  163|      0|            sk_NAME_FUNCS_value(name_funcs_stack,
  164|      0|                                a->type)->hash_func(a->name);
  165|   117k|    } else {
  166|   117k|        ret = openssl_lh_strcasehash(a->name);
  167|   117k|    }
  168|   117k|    ret ^= a->type;
  169|   117k|    return ret;
  170|   117k|}
o_names.c:obj_name_cmp:
  141|   116k|{
  142|   116k|    int ret;
  143|       |
  144|   116k|    ret = a->type - b->type;
  145|   116k|    if (ret == 0) {
  ------------------
  |  Branch (145:9): [True: 116k, False: 0]
  ------------------
  146|   116k|        if ((name_funcs_stack != NULL)
  ------------------
  |  Branch (146:13): [True: 0, False: 116k]
  ------------------
  147|      0|            && (sk_NAME_FUNCS_num(name_funcs_stack) > a->type)) {
  ------------------
  |  Branch (147:16): [True: 0, False: 0]
  ------------------
  148|      0|            ret = sk_NAME_FUNCS_value(name_funcs_stack,
  149|      0|                                      a->type)->cmp_func(a->name, b->name);
  150|      0|        } else
  151|   116k|            ret = strcasecmp(a->name, b->name);
  152|   116k|    }
  153|   116k|    return ret;
  154|   116k|}
o_names.c:names_lh_free_doall:
  372|    578|{
  373|    578|    if (onp == NULL)
  ------------------
  |  Branch (373:9): [True: 0, False: 578]
  ------------------
  374|      0|        return;
  375|       |
  376|    578|    if (free_type < 0 || free_type == onp->type)
  ------------------
  |  Branch (376:9): [True: 0, False: 578]
  |  Branch (376:26): [True: 460, False: 118]
  ------------------
  377|    460|        OBJ_NAME_remove(onp->name, onp->type);
  378|    578|}

obj_cleanup_int:
  154|      2|{
  155|      2|    if (added == NULL)
  ------------------
  |  Branch (155:9): [True: 2, False: 0]
  ------------------
  156|      2|        return;
  157|      0|    lh_ADDED_OBJ_set_down_load(added, 0);
  158|      0|    lh_ADDED_OBJ_doall(added, cleanup1_doall); /* zero counters */
  159|      0|    lh_ADDED_OBJ_doall(added, cleanup2_doall); /* set counters */
  160|      0|    lh_ADDED_OBJ_doall(added, cleanup3_doall); /* free objects */
  161|      0|    lh_ADDED_OBJ_free(added);
  162|       |    added = NULL;
  163|      0|}
OBJ_nid2sn:
  248|    480|{
  249|    480|    ADDED_OBJ ad, *adp;
  250|    480|    ASN1_OBJECT ob;
  251|       |
  252|    480|    if ((n >= 0) && (n < NUM_NID)) {
  ------------------
  |  | 1081|    480|#define NUM_NID 1195
  ------------------
  |  Branch (252:9): [True: 480, False: 0]
  |  Branch (252:21): [True: 480, False: 0]
  ------------------
  253|    480|        if ((n != NID_undef) && (nid_objs[n].nid == NID_undef)) {
  ------------------
  |  |   14|    480|#define NID_undef                       0
  ------------------
                      if ((n != NID_undef) && (nid_objs[n].nid == NID_undef)) {
  ------------------
  |  |   14|    480|#define NID_undef                       0
  ------------------
  |  Branch (253:13): [True: 480, False: 0]
  |  Branch (253:33): [True: 0, False: 480]
  ------------------
  254|      0|            OBJerr(OBJ_F_OBJ_NID2SN, OBJ_R_UNKNOWN_NID);
  ------------------
  |  |  107|      0|# define OBJerr(f,r)  ERR_PUT_error(ERR_LIB_OBJ,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  255|      0|            return NULL;
  256|      0|        }
  257|    480|        return nid_objs[n].sn;
  258|    480|    } else if (added == NULL)
  ------------------
  |  Branch (258:16): [True: 0, False: 0]
  ------------------
  259|      0|        return NULL;
  260|      0|    else {
  261|      0|        ad.type = ADDED_NID;
  ------------------
  |  |   31|      0|#define ADDED_NID       3
  ------------------
  262|      0|        ad.obj = &ob;
  263|      0|        ob.nid = n;
  264|      0|        adp = lh_ADDED_OBJ_retrieve(added, &ad);
  265|      0|        if (adp != NULL)
  ------------------
  |  Branch (265:13): [True: 0, False: 0]
  ------------------
  266|      0|            return adp->obj->sn;
  267|      0|        else {
  268|      0|            OBJerr(OBJ_F_OBJ_NID2SN, OBJ_R_UNKNOWN_NID);
  ------------------
  |  |  107|      0|# define OBJerr(f,r)  ERR_PUT_error(ERR_LIB_OBJ,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  269|       |            return NULL;
  270|      0|        }
  271|      0|    }
  272|    480|}
OBJ_nid2ln:
  275|    414|{
  276|    414|    ADDED_OBJ ad, *adp;
  277|    414|    ASN1_OBJECT ob;
  278|       |
  279|    414|    if ((n >= 0) && (n < NUM_NID)) {
  ------------------
  |  | 1081|    414|#define NUM_NID 1195
  ------------------
  |  Branch (279:9): [True: 414, False: 0]
  |  Branch (279:21): [True: 414, False: 0]
  ------------------
  280|    414|        if ((n != NID_undef) && (nid_objs[n].nid == NID_undef)) {
  ------------------
  |  |   14|    414|#define NID_undef                       0
  ------------------
                      if ((n != NID_undef) && (nid_objs[n].nid == NID_undef)) {
  ------------------
  |  |   14|    414|#define NID_undef                       0
  ------------------
  |  Branch (280:13): [True: 414, False: 0]
  |  Branch (280:33): [True: 0, False: 414]
  ------------------
  281|      0|            OBJerr(OBJ_F_OBJ_NID2LN, OBJ_R_UNKNOWN_NID);
  ------------------
  |  |  107|      0|# define OBJerr(f,r)  ERR_PUT_error(ERR_LIB_OBJ,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  282|      0|            return NULL;
  283|      0|        }
  284|    414|        return nid_objs[n].ln;
  285|    414|    } else if (added == NULL)
  ------------------
  |  Branch (285:16): [True: 0, False: 0]
  ------------------
  286|      0|        return NULL;
  287|      0|    else {
  288|      0|        ad.type = ADDED_NID;
  ------------------
  |  |   31|      0|#define ADDED_NID       3
  ------------------
  289|      0|        ad.obj = &ob;
  290|      0|        ob.nid = n;
  291|      0|        adp = lh_ADDED_OBJ_retrieve(added, &ad);
  292|      0|        if (adp != NULL)
  ------------------
  |  Branch (292:13): [True: 0, False: 0]
  ------------------
  293|      0|            return adp->obj->ln;
  294|      0|        else {
  295|      0|            OBJerr(OBJ_F_OBJ_NID2LN, OBJ_R_UNKNOWN_NID);
  ------------------
  |  |  107|      0|# define OBJerr(f,r)  ERR_PUT_error(ERR_LIB_OBJ,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  296|       |            return NULL;
  297|      0|        }
  298|      0|    }
  299|    414|}
OBJ_bsearch_:
  584|  57.9k|{
  585|  57.9k|    return OBJ_bsearch_ex_(key, base, num, size, cmp, 0);
  586|  57.9k|}
OBJ_bsearch_ex_:
  592|  57.9k|{
  593|  57.9k|    const char *base = base_;
  594|  57.9k|    int l, h, i = 0, c = 0;
  595|  57.9k|    const char *p = NULL;
  596|       |
  597|  57.9k|    if (num == 0)
  ------------------
  |  Branch (597:9): [True: 0, False: 57.9k]
  ------------------
  598|      0|        return NULL;
  599|  57.9k|    l = 0;
  600|  57.9k|    h = num;
  601|   231k|    while (l < h) {
  ------------------
  |  Branch (601:12): [True: 231k, False: 0]
  ------------------
  602|   231k|        i = (l + h) / 2;
  603|   231k|        p = &(base[i * size]);
  604|   231k|        c = (*cmp) (key, p);
  605|   231k|        if (c < 0)
  ------------------
  |  Branch (605:13): [True: 115k, False: 115k]
  ------------------
  606|   115k|            h = i;
  607|   115k|        else if (c > 0)
  ------------------
  |  Branch (607:18): [True: 57.9k, False: 57.9k]
  ------------------
  608|  57.9k|            l = i + 1;
  609|  57.9k|        else
  610|  57.9k|            break;
  611|   231k|    }
  612|       |#ifdef CHARSET_EBCDIC
  613|       |    /*
  614|       |     * THIS IS A KLUDGE - Because the *_obj is sorted in ASCII order, and I
  615|       |     * don't have perl (yet), we revert to a *LINEAR* search when the object
  616|       |     * wasn't found in the binary search.
  617|       |     */
  618|       |    if (c != 0) {
  619|       |        for (i = 0; i < num; ++i) {
  620|       |            p = &(base[i * size]);
  621|       |            c = (*cmp) (key, p);
  622|       |            if (c == 0 || (c < 0 && (flags & OBJ_BSEARCH_VALUE_ON_NOMATCH)))
  623|       |                return p;
  624|       |        }
  625|       |    }
  626|       |#endif
  627|  57.9k|    if (c != 0 && !(flags & OBJ_BSEARCH_VALUE_ON_NOMATCH))
  ------------------
  |  |   27|      0|# define OBJ_BSEARCH_VALUE_ON_NOMATCH            0x01
  ------------------
  |  Branch (627:9): [True: 0, False: 57.9k]
  |  Branch (627:19): [True: 0, False: 0]
  ------------------
  628|      0|        p = NULL;
  629|  57.9k|    else if (c == 0 && (flags & OBJ_BSEARCH_FIRST_VALUE_ON_MATCH)) {
  ------------------
  |  |   28|  57.9k|# define OBJ_BSEARCH_FIRST_VALUE_ON_MATCH        0x02
  ------------------
  |  Branch (629:14): [True: 57.9k, False: 0]
  |  Branch (629:24): [True: 0, False: 57.9k]
  ------------------
  630|      0|        while (i > 0 && (*cmp) (key, &(base[(i - 1) * size])) == 0)
  ------------------
  |  Branch (630:16): [True: 0, False: 0]
  |  Branch (630:25): [True: 0, False: 0]
  ------------------
  631|      0|            i--;
  632|      0|        p = &(base[i * size]);
  633|      0|    }
  634|  57.9k|    return p;
  635|  57.9k|}

ERR_load_OBJ_strings:
   38|      2|{
   39|      2|#ifndef OPENSSL_NO_ERR
   40|      2|    if (ERR_func_error_string(OBJ_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (40:9): [True: 2, False: 0]
  ------------------
   41|      2|        ERR_load_strings_const(OBJ_str_functs);
   42|      2|        ERR_load_strings_const(OBJ_str_reasons);
   43|      2|    }
   44|      2|#endif
   45|      2|    return 1;
   46|      2|}

OBJ_sigid_free:
  134|      2|{
  135|      2|    sk_nid_triple_pop_free(sig_app, sid_free);
  136|      2|    sig_app = NULL;
  137|      2|    sk_nid_triple_free(sigx_app);
  138|       |    sigx_app = NULL;
  139|      2|}

ERR_load_OCSP_strings:
   93|      2|{
   94|      2|#ifndef OPENSSL_NO_ERR
   95|      2|    if (ERR_func_error_string(OCSP_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (95:9): [True: 2, False: 0]
  ------------------
   96|      2|        ERR_load_strings_const(OCSP_str_functs);
   97|      2|        ERR_load_strings_const(OCSP_str_reasons);
   98|      2|    }
   99|      2|#endif
  100|      2|    return 1;
  101|      2|}

ERR_load_PEM_strings:
  122|      2|{
  123|      2|#ifndef OPENSSL_NO_ERR
  124|      2|    if (ERR_func_error_string(PEM_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (124:9): [True: 2, False: 0]
  ------------------
  125|      2|        ERR_load_strings_const(PEM_str_functs);
  126|      2|        ERR_load_strings_const(PEM_str_reasons);
  127|      2|    }
  128|      2|#endif
  129|      2|    return 1;
  130|      2|}

ERR_load_PKCS12_strings:
  109|      2|{
  110|      2|#ifndef OPENSSL_NO_ERR
  111|      2|    if (ERR_func_error_string(PKCS12_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (111:9): [True: 2, False: 0]
  ------------------
  112|      2|        ERR_load_strings_const(PKCS12_str_functs);
  113|      2|        ERR_load_strings_const(PKCS12_str_reasons);
  114|      2|    }
  115|      2|#endif
  116|      2|    return 1;
  117|      2|}

ERR_load_PKCS7_strings:
  148|      2|{
  149|      2|#ifndef OPENSSL_NO_ERR
  150|      2|    if (ERR_func_error_string(PKCS7_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (150:9): [True: 2, False: 0]
  ------------------
  151|      2|        ERR_load_strings_const(PKCS7_str_functs);
  152|      2|        ERR_load_strings_const(PKCS7_str_reasons);
  153|      2|    }
  154|      2|#endif
  155|      2|    return 1;
  156|      2|}

drbg_ctr_init:
  409|      3|{
  410|      3|    RAND_DRBG_CTR *ctr = &drbg->data.ctr;
  411|      3|    size_t keylen;
  412|       |
  413|      3|    switch (drbg->type) {
  414|      0|    default:
  ------------------
  |  Branch (414:5): [True: 0, False: 3]
  ------------------
  415|       |        /* This can't happen, but silence the compiler warning. */
  416|      0|        return 0;
  417|      0|    case NID_aes_128_ctr:
  ------------------
  |  | 2854|      0|#define NID_aes_128_ctr         904
  ------------------
  |  Branch (417:5): [True: 0, False: 3]
  ------------------
  418|      0|        keylen = 16;
  419|      0|        ctr->cipher_ecb = EVP_aes_128_ecb();
  420|      0|        ctr->cipher_ctr = EVP_aes_128_ctr();
  421|      0|        break;
  422|      0|    case NID_aes_192_ctr:
  ------------------
  |  | 2858|      0|#define NID_aes_192_ctr         905
  ------------------
  |  Branch (422:5): [True: 0, False: 3]
  ------------------
  423|      0|        keylen = 24;
  424|      0|        ctr->cipher_ecb = EVP_aes_192_ecb();
  425|      0|        ctr->cipher_ctr = EVP_aes_192_ctr();
  426|      0|        break;
  427|      3|    case NID_aes_256_ctr:
  ------------------
  |  | 2862|      3|#define NID_aes_256_ctr         906
  ------------------
  |  Branch (427:5): [True: 3, False: 0]
  ------------------
  428|      3|        keylen = 32;
  429|      3|        ctr->cipher_ecb = EVP_aes_256_ecb();
  430|      3|        ctr->cipher_ctr = EVP_aes_256_ctr();
  431|      3|        break;
  432|      3|    }
  433|       |
  434|      3|    drbg->meth = &drbg_ctr_meth;
  435|       |
  436|      3|    ctr->keylen = keylen;
  437|      3|    if (ctr->ctx_ecb == NULL)
  ------------------
  |  Branch (437:9): [True: 3, False: 0]
  ------------------
  438|      3|        ctr->ctx_ecb = EVP_CIPHER_CTX_new();
  439|      3|    if (ctr->ctx_ctr == NULL)
  ------------------
  |  Branch (439:9): [True: 3, False: 0]
  ------------------
  440|      3|        ctr->ctx_ctr = EVP_CIPHER_CTX_new();
  441|      3|    if (ctr->ctx_ecb == NULL || ctr->ctx_ctr == NULL
  ------------------
  |  Branch (441:9): [True: 0, False: 3]
  |  Branch (441:33): [True: 0, False: 3]
  ------------------
  442|      3|        || !EVP_CipherInit_ex(ctr->ctx_ecb,
  ------------------
  |  Branch (442:12): [True: 0, False: 3]
  ------------------
  443|      3|                              ctr->cipher_ecb, NULL, NULL, NULL, 1)
  444|      3|        || !EVP_CipherInit_ex(ctr->ctx_ctr,
  ------------------
  |  Branch (444:12): [True: 0, False: 3]
  ------------------
  445|      3|                              ctr->cipher_ctr, NULL, NULL, NULL, 1))
  446|      0|        return 0;
  447|       |
  448|      3|    drbg->meth = &drbg_ctr_meth;
  449|      3|    drbg->strength = keylen * 8;
  450|      3|    drbg->seedlen = keylen + 16;
  451|       |
  452|      3|    if ((drbg->flags & RAND_DRBG_FLAG_CTR_NO_DF) == 0) {
  ------------------
  |  |   25|      3|# define RAND_DRBG_FLAG_CTR_NO_DF            0x1
  ------------------
  |  Branch (452:9): [True: 3, False: 0]
  ------------------
  453|       |        /* df initialisation */
  454|      3|        static const unsigned char df_key[32] = {
  455|      3|            0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
  456|      3|            0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
  457|      3|            0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
  458|      3|            0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
  459|      3|        };
  460|       |
  461|      3|        if (ctr->ctx_df == NULL)
  ------------------
  |  Branch (461:13): [True: 3, False: 0]
  ------------------
  462|      3|            ctr->ctx_df = EVP_CIPHER_CTX_new();
  463|      3|        if (ctr->ctx_df == NULL)
  ------------------
  |  Branch (463:13): [True: 0, False: 3]
  ------------------
  464|      0|            return 0;
  465|       |        /* Set key schedule for df_key */
  466|      3|        if (!EVP_CipherInit_ex(ctr->ctx_df,
  ------------------
  |  Branch (466:13): [True: 0, False: 3]
  ------------------
  467|      3|                               ctr->cipher_ecb, NULL, df_key, NULL, 1))
  468|      0|            return 0;
  469|       |
  470|      3|        drbg->min_entropylen = ctr->keylen;
  471|      3|        drbg->max_entropylen = DRBG_MAX_LENGTH;
  ------------------
  |  |   45|      3|# define DRBG_MAX_LENGTH                         INT32_MAX
  ------------------
  472|      3|        drbg->min_noncelen = drbg->min_entropylen / 2;
  473|      3|        drbg->max_noncelen = DRBG_MAX_LENGTH;
  ------------------
  |  |   45|      3|# define DRBG_MAX_LENGTH                         INT32_MAX
  ------------------
  474|      3|        drbg->max_perslen = DRBG_MAX_LENGTH;
  ------------------
  |  |   45|      3|# define DRBG_MAX_LENGTH                         INT32_MAX
  ------------------
  475|      3|        drbg->max_adinlen = DRBG_MAX_LENGTH;
  ------------------
  |  |   45|      3|# define DRBG_MAX_LENGTH                         INT32_MAX
  ------------------
  476|      3|    } else {
  477|      0|        drbg->min_entropylen = drbg->seedlen;
  478|      0|        drbg->max_entropylen = drbg->seedlen;
  479|       |        /* Nonce not used */
  480|      0|        drbg->min_noncelen = 0;
  481|      0|        drbg->max_noncelen = 0;
  482|      0|        drbg->max_perslen = drbg->seedlen;
  483|      0|        drbg->max_adinlen = drbg->seedlen;
  484|      0|    }
  485|       |
  486|      3|    drbg->max_request = 1 << 16;
  487|       |
  488|      3|    return 1;
  489|      3|}
drbg_ctr.c:drbg_ctr_instantiate:
  274|      3|{
  275|      3|    RAND_DRBG_CTR *ctr = &drbg->data.ctr;
  276|       |
  277|      3|    if (entropy == NULL)
  ------------------
  |  Branch (277:9): [True: 0, False: 3]
  ------------------
  278|      0|        return 0;
  279|       |
  280|      3|    memset(ctr->K, 0, sizeof(ctr->K));
  281|      3|    memset(ctr->V, 0, sizeof(ctr->V));
  282|      3|    if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->K, NULL, -1))
  ------------------
  |  Branch (282:9): [True: 0, False: 3]
  ------------------
  283|      0|        return 0;
  284|       |
  285|      3|    inc_128(ctr);
  286|      3|    if (!ctr_update(drbg, entropy, entropylen, pers, perslen, nonce, noncelen))
  ------------------
  |  Branch (286:9): [True: 0, False: 3]
  ------------------
  287|      0|        return 0;
  288|      3|    return 1;
  289|      3|}
drbg_ctr.c:inc_128:
   24|  1.21M|{
   25|  1.21M|    unsigned char *p = &ctr->V[0];
   26|  1.21M|    u32 n = 16, c = 1;
   27|       |
   28|  19.4M|    do {
   29|  19.4M|        --n;
   30|  19.4M|        c += p[n];
   31|  19.4M|        p[n] = (u8)c;
   32|  19.4M|        c >>= 8;
   33|  19.4M|    } while (n);
  ------------------
  |  Branch (33:14): [True: 18.2M, False: 1.21M]
  ------------------
   34|  1.21M|}
drbg_ctr.c:ctr_update:
  228|   405k|{
  229|   405k|    RAND_DRBG_CTR *ctr = &drbg->data.ctr;
  230|   405k|    int outlen = AES_BLOCK_SIZE;
  ------------------
  |  |   28|   405k|# define AES_BLOCK_SIZE 16
  ------------------
  231|   405k|    unsigned char V_tmp[48], out[48];
  232|   405k|    unsigned char len;
  233|       |
  234|       |    /* correct key is already set up. */
  235|   405k|    memcpy(V_tmp, ctr->V, 16);
  236|   405k|    inc_128(ctr);
  237|   405k|    memcpy(V_tmp + 16, ctr->V, 16);
  238|   405k|    if (ctr->keylen == 16) {
  ------------------
  |  Branch (238:9): [True: 0, False: 405k]
  ------------------
  239|      0|        len = 32;
  240|   405k|    } else {
  241|   405k|        inc_128(ctr);
  242|   405k|        memcpy(V_tmp + 32, ctr->V, 16);
  243|   405k|        len = 48;
  244|   405k|    }
  245|   405k|    if (!EVP_CipherUpdate(ctr->ctx_ecb, out, &outlen, V_tmp, len)
  ------------------
  |  Branch (245:9): [True: 0, False: 405k]
  ------------------
  246|   405k|            || outlen != len)
  ------------------
  |  Branch (246:16): [True: 0, False: 405k]
  ------------------
  247|      0|        return 0;
  248|   405k|    memcpy(ctr->K, out, ctr->keylen);
  249|   405k|    memcpy(ctr->V, out + ctr->keylen, 16);
  250|       |
  251|   405k|    if ((drbg->flags & RAND_DRBG_FLAG_CTR_NO_DF) == 0) {
  ------------------
  |  |   25|   405k|# define RAND_DRBG_FLAG_CTR_NO_DF            0x1
  ------------------
  |  Branch (251:9): [True: 405k, False: 0]
  ------------------
  252|       |        /* If no input reuse existing derived value */
  253|   405k|        if (in1 != NULL || nonce != NULL || in2 != NULL)
  ------------------
  |  Branch (253:13): [True: 202k, False: 202k]
  |  Branch (253:28): [True: 0, False: 202k]
  |  Branch (253:45): [True: 0, False: 202k]
  ------------------
  254|   202k|            if (!ctr_df(ctr, in1, in1len, nonce, noncelen, in2, in2len))
  ------------------
  |  Branch (254:17): [True: 0, False: 202k]
  ------------------
  255|      0|                return 0;
  256|       |        /* If this a reuse input in1len != 0 */
  257|   405k|        if (in1len)
  ------------------
  |  Branch (257:13): [True: 405k, False: 2]
  ------------------
  258|   405k|            ctr_XOR(ctr, ctr->KX, drbg->seedlen);
  259|   405k|    } else {
  260|      0|        ctr_XOR(ctr, in1, in1len);
  261|      0|        ctr_XOR(ctr, in2, in2len);
  262|      0|    }
  263|       |
  264|   405k|    if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->K, NULL, -1)
  ------------------
  |  Branch (264:9): [True: 0, False: 405k]
  ------------------
  265|   405k|        || !EVP_CipherInit_ex(ctr->ctx_ctr, NULL, NULL, ctr->K, NULL, -1))
  ------------------
  |  Branch (265:12): [True: 0, False: 405k]
  ------------------
  266|      0|        return 0;
  267|   405k|    return 1;
  268|   405k|}
drbg_ctr.c:ctr_df:
  165|   202k|{
  166|   202k|    static unsigned char c80 = 0x80;
  167|   202k|    size_t inlen;
  168|   202k|    unsigned char *p = ctr->bltmp;
  169|   202k|    int outlen = AES_BLOCK_SIZE;
  ------------------
  |  |   28|   202k|# define AES_BLOCK_SIZE 16
  ------------------
  170|       |
  171|   202k|    if (!ctr_BCC_init(ctr))
  ------------------
  |  Branch (171:9): [True: 0, False: 202k]
  ------------------
  172|      0|        return 0;
  173|   202k|    if (in1 == NULL)
  ------------------
  |  Branch (173:9): [True: 0, False: 202k]
  ------------------
  174|      0|        in1len = 0;
  175|   202k|    if (in2 == NULL)
  ------------------
  |  Branch (175:9): [True: 202k, False: 1]
  ------------------
  176|   202k|        in2len = 0;
  177|   202k|    if (in3 == NULL)
  ------------------
  |  Branch (177:9): [True: 202k, False: 5]
  ------------------
  178|   202k|        in3len = 0;
  179|   202k|    inlen = in1len + in2len + in3len;
  180|       |    /* Initialise L||N in temporary block */
  181|   202k|    *p++ = (inlen >> 24) & 0xff;
  182|   202k|    *p++ = (inlen >> 16) & 0xff;
  183|   202k|    *p++ = (inlen >> 8) & 0xff;
  184|   202k|    *p++ = inlen & 0xff;
  185|       |
  186|       |    /* NB keylen is at most 32 bytes */
  187|   202k|    *p++ = 0;
  188|   202k|    *p++ = 0;
  189|   202k|    *p++ = 0;
  190|   202k|    *p = (unsigned char)((ctr->keylen + 16) & 0xff);
  191|   202k|    ctr->bltmp_pos = 8;
  192|   202k|    if (!ctr_BCC_update(ctr, in1, in1len)
  ------------------
  |  Branch (192:9): [True: 0, False: 202k]
  ------------------
  193|   202k|        || !ctr_BCC_update(ctr, in2, in2len)
  ------------------
  |  Branch (193:12): [True: 0, False: 202k]
  ------------------
  194|   202k|        || !ctr_BCC_update(ctr, in3, in3len)
  ------------------
  |  Branch (194:12): [True: 0, False: 202k]
  ------------------
  195|   202k|        || !ctr_BCC_update(ctr, &c80, 1)
  ------------------
  |  Branch (195:12): [True: 0, False: 202k]
  ------------------
  196|   202k|        || !ctr_BCC_final(ctr))
  ------------------
  |  Branch (196:12): [True: 0, False: 202k]
  ------------------
  197|      0|        return 0;
  198|       |    /* Set up key K */
  199|   202k|    if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->KX, NULL, -1))
  ------------------
  |  Branch (199:9): [True: 0, False: 202k]
  ------------------
  200|      0|        return 0;
  201|       |    /* X follows key K */
  202|   202k|    if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX, &outlen, ctr->KX + ctr->keylen,
  ------------------
  |  Branch (202:9): [True: 0, False: 202k]
  ------------------
  203|   202k|                          AES_BLOCK_SIZE)
  ------------------
  |  |   28|   202k|# define AES_BLOCK_SIZE 16
  ------------------
  204|   202k|        || outlen != AES_BLOCK_SIZE)
  ------------------
  |  |   28|   202k|# define AES_BLOCK_SIZE 16
  ------------------
  |  Branch (204:12): [True: 0, False: 202k]
  ------------------
  205|      0|        return 0;
  206|   202k|    if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX + 16, &outlen, ctr->KX,
  ------------------
  |  Branch (206:9): [True: 0, False: 202k]
  ------------------
  207|   202k|                          AES_BLOCK_SIZE)
  ------------------
  |  |   28|   202k|# define AES_BLOCK_SIZE 16
  ------------------
  208|   202k|        || outlen != AES_BLOCK_SIZE)
  ------------------
  |  |   28|   202k|# define AES_BLOCK_SIZE 16
  ------------------
  |  Branch (208:12): [True: 0, False: 202k]
  ------------------
  209|      0|        return 0;
  210|   202k|    if (ctr->keylen != 16)
  ------------------
  |  Branch (210:9): [True: 202k, False: 0]
  ------------------
  211|   202k|        if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX + 32, &outlen,
  ------------------
  |  Branch (211:13): [True: 0, False: 202k]
  ------------------
  212|   202k|                              ctr->KX + 16, AES_BLOCK_SIZE)
  ------------------
  |  |   28|   202k|# define AES_BLOCK_SIZE 16
  ------------------
  213|   202k|            || outlen != AES_BLOCK_SIZE)
  ------------------
  |  |   28|   202k|# define AES_BLOCK_SIZE 16
  ------------------
  |  Branch (213:16): [True: 0, False: 202k]
  ------------------
  214|      0|            return 0;
  215|   202k|    return 1;
  216|   202k|}
drbg_ctr.c:ctr_BCC_init:
  102|   202k|{
  103|   202k|    unsigned char bltmp[48] = {0};
  104|   202k|    unsigned char num_of_blk;
  105|       |
  106|   202k|    memset(ctr->KX, 0, 48);
  107|   202k|    num_of_blk = ctr->keylen == 16 ? 2 : 3;
  ------------------
  |  Branch (107:18): [True: 0, False: 202k]
  ------------------
  108|   202k|    bltmp[(AES_BLOCK_SIZE * 1) + 3] = 1;
  ------------------
  |  |   28|   202k|# define AES_BLOCK_SIZE 16
  ------------------
  109|   202k|    bltmp[(AES_BLOCK_SIZE * 2) + 3] = 2;
  ------------------
  |  |   28|   202k|# define AES_BLOCK_SIZE 16
  ------------------
  110|   202k|    return ctr_BCC_block(ctr, ctr->KX, bltmp, num_of_blk * AES_BLOCK_SIZE);
  ------------------
  |  |   28|   202k|# define AES_BLOCK_SIZE 16
  ------------------
  111|   202k|}
drbg_ctr.c:ctr_BCC_block:
   67|   811k|{
   68|   811k|    int i, outlen = AES_BLOCK_SIZE;
  ------------------
  |  |   28|   811k|# define AES_BLOCK_SIZE 16
  ------------------
   69|       |
   70|  39.7M|    for (i = 0; i < len; i++)
  ------------------
  |  Branch (70:17): [True: 38.9M, False: 811k]
  ------------------
   71|  38.9M|        out[i] ^= in[i];
   72|       |
   73|   811k|    if (!EVP_CipherUpdate(ctr->ctx_df, out, &outlen, out, len)
  ------------------
  |  Branch (73:9): [True: 0, False: 811k]
  ------------------
   74|   811k|        || outlen != len)
  ------------------
  |  Branch (74:12): [True: 0, False: 811k]
  ------------------
   75|      0|        return 0;
   76|   811k|    return 1;
   77|   811k|}
drbg_ctr.c:ctr_BCC_update:
  118|   811k|{
  119|   811k|    if (in == NULL || inlen == 0)
  ------------------
  |  Branch (119:9): [True: 405k, False: 405k]
  |  Branch (119:23): [True: 0, False: 405k]
  ------------------
  120|   405k|        return 1;
  121|       |
  122|       |    /* If we have partial block handle it first */
  123|   405k|    if (ctr->bltmp_pos) {
  ------------------
  |  Branch (123:9): [True: 202k, False: 202k]
  ------------------
  124|   202k|        size_t left = 16 - ctr->bltmp_pos;
  125|       |
  126|       |        /* If we now have a complete block process it */
  127|   202k|        if (inlen >= left) {
  ------------------
  |  Branch (127:13): [True: 202k, False: 3]
  ------------------
  128|   202k|            memcpy(ctr->bltmp + ctr->bltmp_pos, in, left);
  129|   202k|            if (!ctr_BCC_blocks(ctr, ctr->bltmp))
  ------------------
  |  Branch (129:17): [True: 0, False: 202k]
  ------------------
  130|      0|                return 0;
  131|   202k|            ctr->bltmp_pos = 0;
  132|   202k|            inlen -= left;
  133|   202k|            in += left;
  134|   202k|        }
  135|   202k|    }
  136|       |
  137|       |    /* Process zero or more complete blocks */
  138|   608k|    for (; inlen >= 16; in += 16, inlen -= 16) {
  ------------------
  |  Branch (138:12): [True: 202k, False: 405k]
  ------------------
  139|   202k|        if (!ctr_BCC_blocks(ctr, in))
  ------------------
  |  Branch (139:13): [True: 0, False: 202k]
  ------------------
  140|      0|            return 0;
  141|   202k|    }
  142|       |
  143|       |    /* Copy any remaining partial block to the temporary buffer */
  144|   405k|    if (inlen > 0) {
  ------------------
  |  Branch (144:9): [True: 202k, False: 202k]
  ------------------
  145|   202k|        memcpy(ctr->bltmp + ctr->bltmp_pos, in, inlen);
  146|   202k|        ctr->bltmp_pos += inlen;
  147|   202k|    }
  148|   405k|    return 1;
  149|   405k|}
drbg_ctr.c:ctr_BCC_blocks:
   84|   608k|{
   85|   608k|    unsigned char in_tmp[48];
   86|   608k|    unsigned char num_of_blk = 2;
   87|       |
   88|   608k|    memcpy(in_tmp, in, 16);
   89|   608k|    memcpy(in_tmp + 16, in, 16);
   90|   608k|    if (ctr->keylen != 16) {
  ------------------
  |  Branch (90:9): [True: 608k, False: 0]
  ------------------
   91|   608k|        memcpy(in_tmp + 32, in, 16);
   92|   608k|        num_of_blk = 3;
   93|   608k|    }
   94|   608k|    return ctr_BCC_block(ctr, ctr->KX, in_tmp, AES_BLOCK_SIZE * num_of_blk);
  ------------------
  |  |   28|   608k|# define AES_BLOCK_SIZE 16
  ------------------
   95|   608k|}
drbg_ctr.c:ctr_BCC_final:
  152|   202k|{
  153|   202k|    if (ctr->bltmp_pos) {
  ------------------
  |  Branch (153:9): [True: 202k, False: 0]
  ------------------
  154|   202k|        memset(ctr->bltmp + ctr->bltmp_pos, 0, 16 - ctr->bltmp_pos);
  155|   202k|        if (!ctr_BCC_blocks(ctr, ctr->bltmp))
  ------------------
  |  Branch (155:13): [True: 0, False: 202k]
  ------------------
  156|      0|            return 0;
  157|   202k|    }
  158|   202k|    return 1;
  159|   202k|}
drbg_ctr.c:ctr_XOR:
   37|   405k|{
   38|   405k|    size_t i, n;
   39|       |
   40|   405k|    if (in == NULL || inlen == 0)
  ------------------
  |  Branch (40:9): [True: 0, False: 405k]
  |  Branch (40:23): [True: 0, False: 405k]
  ------------------
   41|      0|        return;
   42|       |
   43|       |    /*
   44|       |     * Any zero padding will have no effect on the result as we
   45|       |     * are XORing. So just process however much input we have.
   46|       |     */
   47|   405k|    n = inlen < ctr->keylen ? inlen : ctr->keylen;
  ------------------
  |  Branch (47:9): [True: 0, False: 405k]
  ------------------
   48|  13.3M|    for (i = 0; i < n; i++)
  ------------------
  |  Branch (48:17): [True: 12.9M, False: 405k]
  ------------------
   49|  12.9M|        ctr->K[i] ^= in[i];
   50|   405k|    if (inlen <= ctr->keylen)
  ------------------
  |  Branch (50:9): [True: 0, False: 405k]
  ------------------
   51|      0|        return;
   52|       |
   53|   405k|    n = inlen - ctr->keylen;
   54|   405k|    if (n > 16) {
  ------------------
  |  Branch (54:9): [True: 0, False: 405k]
  ------------------
   55|       |        /* Should never happen */
   56|      0|        n = 16;
   57|      0|    }
   58|  6.89M|    for (i = 0; i < n; i++)
  ------------------
  |  Branch (58:17): [True: 6.49M, False: 405k]
  ------------------
   59|  6.49M|        ctr->V[i] ^= in[i + ctr->keylen];
   60|   405k|}
drbg_ctr.c:drbg_ctr_reseed:
  294|      2|{
  295|      2|    RAND_DRBG_CTR *ctr = &drbg->data.ctr;
  296|       |
  297|      2|    if (entropy == NULL)
  ------------------
  |  Branch (297:9): [True: 0, False: 2]
  ------------------
  298|      0|        return 0;
  299|       |
  300|      2|    inc_128(ctr);
  301|      2|    if (!ctr_update(drbg, entropy, entropylen, adin, adinlen, NULL, 0))
  ------------------
  |  Branch (301:9): [True: 0, False: 2]
  ------------------
  302|      0|        return 0;
  303|      2|    return 1;
  304|      2|}
drbg_ctr.c:drbg_ctr_generate:
  321|   202k|{
  322|   202k|    RAND_DRBG_CTR *ctr = &drbg->data.ctr;
  323|   202k|    unsigned int ctr32, blocks;
  324|   202k|    int outl, buflen;
  325|       |
  326|   202k|    if (adin != NULL && adinlen != 0) {
  ------------------
  |  Branch (326:9): [True: 202k, False: 2]
  |  Branch (326:25): [True: 202k, False: 0]
  ------------------
  327|   202k|        inc_128(ctr);
  328|       |
  329|   202k|        if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0))
  ------------------
  |  Branch (329:13): [True: 0, False: 202k]
  ------------------
  330|      0|            return 0;
  331|       |        /* This means we reuse derived value */
  332|   202k|        if ((drbg->flags & RAND_DRBG_FLAG_CTR_NO_DF) == 0) {
  ------------------
  |  |   25|   202k|# define RAND_DRBG_FLAG_CTR_NO_DF            0x1
  ------------------
  |  Branch (332:13): [True: 202k, False: 0]
  ------------------
  333|   202k|            adin = NULL;
  334|   202k|            adinlen = 1;
  335|   202k|        }
  336|   202k|    } else {
  337|      2|        adinlen = 0;
  338|      2|    }
  339|       |
  340|   202k|    inc_128(ctr);
  341|       |
  342|   202k|    if (outlen == 0) {
  ------------------
  |  Branch (342:9): [True: 0, False: 202k]
  ------------------
  343|      0|        inc_128(ctr);
  344|       |
  345|      0|        if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0))
  ------------------
  |  Branch (345:13): [True: 0, False: 0]
  ------------------
  346|      0|            return 0;
  347|      0|        return 1;
  348|      0|    }
  349|       |
  350|   202k|    memset(out, 0, outlen);
  351|       |
  352|   202k|    do {
  353|   202k|        if (!EVP_CipherInit_ex(ctr->ctx_ctr,
  ------------------
  |  Branch (353:13): [True: 0, False: 202k]
  ------------------
  354|   202k|                               NULL, NULL, NULL, ctr->V, -1))
  355|      0|            return 0;
  356|       |
  357|       |        /*-
  358|       |         * outlen has type size_t while EVP_CipherUpdate takes an
  359|       |         * int argument and thus cannot be guaranteed to process more
  360|       |         * than 2^31-1 bytes at a time. We process such huge generate
  361|       |         * requests in 2^30 byte chunks, which is the greatest multiple
  362|       |         * of AES block size lower than or equal to 2^31-1.
  363|       |         */
  364|   202k|        buflen = outlen > (1U << 30) ? (1U << 30) : outlen;
  ------------------
  |  Branch (364:18): [True: 0, False: 202k]
  ------------------
  365|   202k|        blocks = (buflen + 15) / 16;
  366|       |
  367|   202k|        ctr32 = GETU32(ctr->V + 12) + blocks;
  ------------------
  |  |  103|   202k|# define GETU32(p)       ((u32)(p)[0]<<24|(u32)(p)[1]<<16|(u32)(p)[2]<<8|(u32)(p)[3])
  ------------------
  368|   202k|        if (ctr32 < blocks) {
  ------------------
  |  Branch (368:13): [True: 0, False: 202k]
  ------------------
  369|       |            /* 32-bit counter overflow into V. */
  370|      0|            if (ctr32 != 0) {
  ------------------
  |  Branch (370:17): [True: 0, False: 0]
  ------------------
  371|      0|                blocks -= ctr32;
  372|      0|                buflen = blocks * 16;
  373|      0|                ctr32 = 0;
  374|      0|            }
  375|      0|            ctr96_inc(ctr->V);
  376|      0|        }
  377|   202k|        PUTU32(ctr->V + 12, ctr32);
  ------------------
  |  |  104|   202k|# define PUTU32(p,v)     ((p)[0]=(u8)((v)>>24),(p)[1]=(u8)((v)>>16),(p)[2]=(u8)((v)>>8),(p)[3]=(u8)(v))
  ------------------
  378|       |
  379|   202k|        if (!EVP_CipherUpdate(ctr->ctx_ctr, out, &outl, out, buflen)
  ------------------
  |  Branch (379:13): [True: 0, False: 202k]
  ------------------
  380|   202k|            || outl != buflen)
  ------------------
  |  Branch (380:16): [True: 0, False: 202k]
  ------------------
  381|      0|            return 0;
  382|       |
  383|   202k|        out += buflen;
  384|   202k|        outlen -= buflen;
  385|   202k|    } while (outlen);
  ------------------
  |  Branch (385:14): [True: 0, False: 202k]
  ------------------
  386|       |
  387|   202k|    if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0))
  ------------------
  |  Branch (387:9): [True: 0, False: 202k]
  ------------------
  388|      0|        return 0;
  389|   202k|    return 1;
  390|   202k|}
drbg_ctr.c:drbg_ctr_uninstantiate:
  393|      3|{
  394|      3|    EVP_CIPHER_CTX_free(drbg->data.ctr.ctx_ecb);
  395|      3|    EVP_CIPHER_CTX_free(drbg->data.ctr.ctx_ctr);
  396|      3|    EVP_CIPHER_CTX_free(drbg->data.ctr.ctx_df);
  397|      3|    OPENSSL_cleanse(&drbg->data.ctr, sizeof(drbg->data.ctr));
  398|      3|    return 1;
  399|      3|}

RAND_DRBG_set:
  104|      3|{
  105|      3|    int ret = 1;
  106|       |
  107|      3|    if (type == 0 && flags == 0) {
  ------------------
  |  Branch (107:9): [True: 0, False: 3]
  |  Branch (107:22): [True: 0, False: 0]
  ------------------
  108|      0|        type = rand_drbg_type;
  109|      0|        flags = rand_drbg_flags;
  110|      0|    }
  111|       |
  112|       |    /* If set is called multiple times - clear the old one */
  113|      3|    if (drbg->type != 0 && (type != drbg->type || flags != drbg->flags)) {
  ------------------
  |  Branch (113:9): [True: 0, False: 3]
  |  Branch (113:29): [True: 0, False: 0]
  |  Branch (113:51): [True: 0, False: 0]
  ------------------
  114|      0|        drbg->meth->uninstantiate(drbg);
  115|      0|        rand_pool_free(drbg->adin_pool);
  116|      0|        drbg->adin_pool = NULL;
  117|      0|    }
  118|       |
  119|      3|    drbg->state = DRBG_UNINITIALISED;
  120|      3|    drbg->flags = flags;
  121|      3|    drbg->type = type;
  122|       |
  123|      3|    switch (type) {
  124|      0|    default:
  ------------------
  |  Branch (124:5): [True: 0, False: 3]
  ------------------
  125|      0|        drbg->type = 0;
  126|      0|        drbg->flags = 0;
  127|      0|        drbg->meth = NULL;
  128|      0|        RANDerr(RAND_F_RAND_DRBG_SET, RAND_R_UNSUPPORTED_DRBG_TYPE);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  129|      0|        return 0;
  130|      0|    case 0:
  ------------------
  |  Branch (130:5): [True: 0, False: 3]
  ------------------
  131|       |        /* Uninitialized; that's okay. */
  132|      0|        drbg->meth = NULL;
  133|      0|        return 1;
  134|      0|    case NID_aes_128_ctr:
  ------------------
  |  | 2854|      0|#define NID_aes_128_ctr         904
  ------------------
  |  Branch (134:5): [True: 0, False: 3]
  ------------------
  135|      0|    case NID_aes_192_ctr:
  ------------------
  |  | 2858|      0|#define NID_aes_192_ctr         905
  ------------------
  |  Branch (135:5): [True: 0, False: 3]
  ------------------
  136|      3|    case NID_aes_256_ctr:
  ------------------
  |  | 2862|      3|#define NID_aes_256_ctr         906
  ------------------
  |  Branch (136:5): [True: 3, False: 0]
  ------------------
  137|      3|        ret = drbg_ctr_init(drbg);
  138|      3|        break;
  139|      3|    }
  140|       |
  141|      3|    if (ret == 0) {
  ------------------
  |  Branch (141:9): [True: 0, False: 3]
  ------------------
  142|      0|        drbg->state = DRBG_ERROR;
  143|      0|        RANDerr(RAND_F_RAND_DRBG_SET, RAND_R_ERROR_INITIALISING_DRBG);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  144|      0|    }
  145|      3|    return ret;
  146|      3|}
RAND_DRBG_secure_new:
  256|      3|{
  257|      3|    return rand_drbg_new(1, type, flags, parent);
  258|      3|}
RAND_DRBG_free:
  264|      3|{
  265|      3|    if (drbg == NULL)
  ------------------
  |  Branch (265:9): [True: 0, False: 3]
  ------------------
  266|      0|        return;
  267|       |
  268|      3|    if (drbg->meth != NULL)
  ------------------
  |  Branch (268:9): [True: 3, False: 0]
  ------------------
  269|      3|        drbg->meth->uninstantiate(drbg);
  270|      3|    rand_pool_free(drbg->adin_pool);
  271|      3|    CRYPTO_THREAD_lock_free(drbg->lock);
  272|      3|    CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DRBG, drbg, &drbg->ex_data);
  ------------------
  |  |  109|      3|# define CRYPTO_EX_INDEX_DRBG            15
  ------------------
  273|       |
  274|      3|    if (drbg->secure)
  ------------------
  |  Branch (274:9): [True: 0, False: 3]
  ------------------
  275|      0|        OPENSSL_secure_clear_free(drbg, sizeof(*drbg));
  ------------------
  |  |  142|      0|        CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  276|      3|    else
  277|      3|        OPENSSL_clear_free(drbg, sizeof(*drbg));
  ------------------
  |  |  126|      3|        CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  278|      3|}
RAND_DRBG_instantiate:
  290|      3|{
  291|      3|    unsigned char *nonce = NULL, *entropy = NULL;
  292|      3|    size_t noncelen = 0, entropylen = 0;
  293|      3|    size_t min_entropy = drbg->strength;
  294|      3|    size_t min_entropylen = drbg->min_entropylen;
  295|      3|    size_t max_entropylen = drbg->max_entropylen;
  296|       |
  297|      3|    if (perslen > drbg->max_perslen) {
  ------------------
  |  Branch (297:9): [True: 0, False: 3]
  ------------------
  298|      0|        RANDerr(RAND_F_RAND_DRBG_INSTANTIATE,
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  299|      0|                RAND_R_PERSONALISATION_STRING_TOO_LONG);
  300|      0|        goto end;
  301|      0|    }
  302|       |
  303|      3|    if (drbg->meth == NULL) {
  ------------------
  |  Branch (303:9): [True: 0, False: 3]
  ------------------
  304|      0|        RANDerr(RAND_F_RAND_DRBG_INSTANTIATE,
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  305|      0|                RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED);
  306|      0|        goto end;
  307|      0|    }
  308|       |
  309|      3|    if (drbg->state != DRBG_UNINITIALISED) {
  ------------------
  |  Branch (309:9): [True: 0, False: 3]
  ------------------
  310|      0|        RANDerr(RAND_F_RAND_DRBG_INSTANTIATE,
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (29:61): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  311|      0|                drbg->state == DRBG_ERROR ? RAND_R_IN_ERROR_STATE
  312|      0|                                          : RAND_R_ALREADY_INSTANTIATED);
  313|      0|        goto end;
  314|      0|    }
  315|       |
  316|      3|    drbg->state = DRBG_ERROR;
  317|       |
  318|       |    /*
  319|       |     * NIST SP800-90Ar1 section 9.1 says you can combine getting the entropy
  320|       |     * and nonce in 1 call by increasing the entropy with 50% and increasing
  321|       |     * the minimum length to accommodate the length of the nonce.
  322|       |     * We do this in case a nonce is require and get_nonce is NULL.
  323|       |     */
  324|      3|    if (drbg->min_noncelen > 0 && drbg->get_nonce == NULL) {
  ------------------
  |  Branch (324:9): [True: 3, False: 0]
  |  Branch (324:35): [True: 2, False: 1]
  ------------------
  325|      2|        min_entropy += drbg->strength / 2;
  326|      2|        min_entropylen += drbg->min_noncelen;
  327|      2|        max_entropylen += drbg->max_noncelen;
  328|      2|    }
  329|       |
  330|      3|    if (drbg->get_entropy != NULL)
  ------------------
  |  Branch (330:9): [True: 3, False: 0]
  ------------------
  331|      3|        entropylen = drbg->get_entropy(drbg, &entropy, min_entropy,
  332|      3|                                       min_entropylen, max_entropylen, 0);
  333|      3|    if (entropylen < min_entropylen
  ------------------
  |  Branch (333:9): [True: 0, False: 3]
  ------------------
  334|      3|            || entropylen > max_entropylen) {
  ------------------
  |  Branch (334:16): [True: 0, False: 3]
  ------------------
  335|      0|        RANDerr(RAND_F_RAND_DRBG_INSTANTIATE, RAND_R_ERROR_RETRIEVING_ENTROPY);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  336|      0|        goto end;
  337|      0|    }
  338|       |
  339|      3|    if (drbg->min_noncelen > 0 && drbg->get_nonce != NULL) {
  ------------------
  |  Branch (339:9): [True: 3, False: 0]
  |  Branch (339:35): [True: 1, False: 2]
  ------------------
  340|      1|        noncelen = drbg->get_nonce(drbg, &nonce, drbg->strength / 2,
  341|      1|                                   drbg->min_noncelen, drbg->max_noncelen);
  342|      1|        if (noncelen < drbg->min_noncelen || noncelen > drbg->max_noncelen) {
  ------------------
  |  Branch (342:13): [True: 0, False: 1]
  |  Branch (342:46): [True: 0, False: 1]
  ------------------
  343|      0|            RANDerr(RAND_F_RAND_DRBG_INSTANTIATE, RAND_R_ERROR_RETRIEVING_NONCE);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  344|      0|            goto end;
  345|      0|        }
  346|      1|    }
  347|       |
  348|      3|    if (!drbg->meth->instantiate(drbg, entropy, entropylen,
  ------------------
  |  Branch (348:9): [True: 0, False: 3]
  ------------------
  349|      3|                         nonce, noncelen, pers, perslen)) {
  350|      0|        RANDerr(RAND_F_RAND_DRBG_INSTANTIATE, RAND_R_ERROR_INSTANTIATING_DRBG);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  351|      0|        goto end;
  352|      0|    }
  353|       |
  354|      3|    drbg->state = DRBG_READY;
  355|      3|    drbg->generate_counter = 1;
  356|      3|    drbg->reseed_time = time(NULL);
  357|      3|    if (drbg->enable_reseed_propagation) {
  ------------------
  |  Branch (357:9): [True: 3, False: 0]
  ------------------
  358|      3|        if (drbg->parent == NULL)
  ------------------
  |  Branch (358:13): [True: 1, False: 2]
  ------------------
  359|      3|            tsan_counter(&drbg->reseed_counter);
  ------------------
  |  |   59|      3|#  define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed)
  ------------------
  360|      2|        else
  361|      3|            tsan_store(&drbg->reseed_counter,
  ------------------
  |  |   58|      3|#  define tsan_store(ptr, val) atomic_store_explicit((ptr), (val), memory_order_relaxed)
  ------------------
  362|      3|                       tsan_load(&drbg->parent->reseed_counter));
  363|      3|    }
  364|       |
  365|      3| end:
  366|      3|    if (entropy != NULL && drbg->cleanup_entropy != NULL)
  ------------------
  |  Branch (366:9): [True: 3, False: 0]
  |  Branch (366:28): [True: 3, False: 0]
  ------------------
  367|      3|        drbg->cleanup_entropy(drbg, entropy, entropylen);
  368|      3|    if (nonce != NULL && drbg->cleanup_nonce != NULL)
  ------------------
  |  Branch (368:9): [True: 1, False: 2]
  |  Branch (368:26): [True: 1, False: 0]
  ------------------
  369|      1|        drbg->cleanup_nonce(drbg, nonce, noncelen);
  370|      3|    if (drbg->state == DRBG_READY)
  ------------------
  |  Branch (370:9): [True: 3, False: 0]
  ------------------
  371|      3|        return 1;
  372|      0|    return 0;
  373|      3|}
RAND_DRBG_reseed:
  409|      2|{
  410|      2|    unsigned char *entropy = NULL;
  411|      2|    size_t entropylen = 0;
  412|       |
  413|      2|    if (drbg->state == DRBG_ERROR) {
  ------------------
  |  Branch (413:9): [True: 0, False: 2]
  ------------------
  414|      0|        RANDerr(RAND_F_RAND_DRBG_RESEED, RAND_R_IN_ERROR_STATE);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  415|      0|        return 0;
  416|      0|    }
  417|      2|    if (drbg->state == DRBG_UNINITIALISED) {
  ------------------
  |  Branch (417:9): [True: 0, False: 2]
  ------------------
  418|      0|        RANDerr(RAND_F_RAND_DRBG_RESEED, RAND_R_NOT_INSTANTIATED);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  419|      0|        return 0;
  420|      0|    }
  421|       |
  422|      2|    if (adin == NULL) {
  ------------------
  |  Branch (422:9): [True: 0, False: 2]
  ------------------
  423|      0|        adinlen = 0;
  424|      2|    } else if (adinlen > drbg->max_adinlen) {
  ------------------
  |  Branch (424:16): [True: 0, False: 2]
  ------------------
  425|      0|        RANDerr(RAND_F_RAND_DRBG_RESEED, RAND_R_ADDITIONAL_INPUT_TOO_LONG);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  426|      0|        return 0;
  427|      0|    }
  428|       |
  429|      2|    drbg->state = DRBG_ERROR;
  430|      2|    if (drbg->get_entropy != NULL)
  ------------------
  |  Branch (430:9): [True: 2, False: 0]
  ------------------
  431|      2|        entropylen = drbg->get_entropy(drbg, &entropy, drbg->strength,
  432|      2|                                       drbg->min_entropylen,
  433|      2|                                       drbg->max_entropylen,
  434|      2|                                       prediction_resistance);
  435|      2|    if (entropylen < drbg->min_entropylen
  ------------------
  |  Branch (435:9): [True: 0, False: 2]
  ------------------
  436|      2|            || entropylen > drbg->max_entropylen) {
  ------------------
  |  Branch (436:16): [True: 0, False: 2]
  ------------------
  437|      0|        RANDerr(RAND_F_RAND_DRBG_RESEED, RAND_R_ERROR_RETRIEVING_ENTROPY);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  438|      0|        goto end;
  439|      0|    }
  440|       |
  441|      2|    if (!drbg->meth->reseed(drbg, entropy, entropylen, adin, adinlen))
  ------------------
  |  Branch (441:9): [True: 0, False: 2]
  ------------------
  442|      0|        goto end;
  443|       |
  444|      2|    drbg->state = DRBG_READY;
  445|      2|    drbg->generate_counter = 1;
  446|      2|    drbg->reseed_time = time(NULL);
  447|      2|    if (drbg->enable_reseed_propagation) {
  ------------------
  |  Branch (447:9): [True: 2, False: 0]
  ------------------
  448|      2|        if (drbg->parent == NULL)
  ------------------
  |  Branch (448:13): [True: 0, False: 2]
  ------------------
  449|      2|            tsan_counter(&drbg->reseed_counter);
  ------------------
  |  |   59|      2|#  define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed)
  ------------------
  450|      2|        else
  451|      2|            tsan_store(&drbg->reseed_counter,
  ------------------
  |  |   58|      2|#  define tsan_store(ptr, val) atomic_store_explicit((ptr), (val), memory_order_relaxed)
  ------------------
  452|      2|                       tsan_load(&drbg->parent->reseed_counter));
  453|      2|    }
  454|       |
  455|      2| end:
  456|      2|    if (entropy != NULL && drbg->cleanup_entropy != NULL)
  ------------------
  |  Branch (456:9): [True: 2, False: 0]
  |  Branch (456:28): [True: 2, False: 0]
  ------------------
  457|      2|        drbg->cleanup_entropy(drbg, entropy, entropylen);
  458|      2|    if (drbg->state == DRBG_READY)
  ------------------
  |  Branch (458:9): [True: 2, False: 0]
  ------------------
  459|      2|        return 1;
  460|      0|    return 0;
  461|      2|}
RAND_DRBG_generate:
  579|   202k|{
  580|   202k|    int fork_id;
  581|   202k|    int reseed_required = 0;
  582|       |
  583|   202k|    if (drbg->state != DRBG_READY) {
  ------------------
  |  Branch (583:9): [True: 0, False: 202k]
  ------------------
  584|       |        /* try to recover from previous errors */
  585|      0|        rand_drbg_restart(drbg, NULL, 0, 0);
  586|       |
  587|      0|        if (drbg->state == DRBG_ERROR) {
  ------------------
  |  Branch (587:13): [True: 0, False: 0]
  ------------------
  588|      0|            RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_IN_ERROR_STATE);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  589|      0|            return 0;
  590|      0|        }
  591|      0|        if (drbg->state == DRBG_UNINITIALISED) {
  ------------------
  |  Branch (591:13): [True: 0, False: 0]
  ------------------
  592|      0|            RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_NOT_INSTANTIATED);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  593|      0|            return 0;
  594|      0|        }
  595|      0|    }
  596|       |
  597|   202k|    if (outlen > drbg->max_request) {
  ------------------
  |  Branch (597:9): [True: 0, False: 202k]
  ------------------
  598|      0|        RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_REQUEST_TOO_LARGE_FOR_DRBG);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  599|      0|        return 0;
  600|      0|    }
  601|   202k|    if (adinlen > drbg->max_adinlen) {
  ------------------
  |  Branch (601:9): [True: 0, False: 202k]
  ------------------
  602|      0|        RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_ADDITIONAL_INPUT_TOO_LONG);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  603|      0|        return 0;
  604|      0|    }
  605|       |
  606|   202k|    fork_id = openssl_get_fork_id();
  607|       |
  608|   202k|    if (drbg->fork_id != fork_id) {
  ------------------
  |  Branch (608:9): [True: 0, False: 202k]
  ------------------
  609|      0|        drbg->fork_id = fork_id;
  610|      0|        reseed_required = 1;
  611|      0|    }
  612|       |
  613|   202k|    if (drbg->reseed_interval > 0) {
  ------------------
  |  Branch (613:9): [True: 202k, False: 0]
  ------------------
  614|   202k|        if (drbg->generate_counter >= drbg->reseed_interval)
  ------------------
  |  Branch (614:13): [True: 1, False: 202k]
  ------------------
  615|      1|            reseed_required = 1;
  616|   202k|    }
  617|   202k|    if (drbg->reseed_time_interval > 0) {
  ------------------
  |  Branch (617:9): [True: 202k, False: 0]
  ------------------
  618|   202k|        time_t now = time(NULL);
  619|   202k|        if (now < drbg->reseed_time
  ------------------
  |  Branch (619:13): [True: 0, False: 202k]
  ------------------
  620|   202k|            || now - drbg->reseed_time >= drbg->reseed_time_interval)
  ------------------
  |  Branch (620:16): [True: 1, False: 202k]
  ------------------
  621|      1|            reseed_required = 1;
  622|   202k|    }
  623|   202k|    if (drbg->enable_reseed_propagation && drbg->parent != NULL) {
  ------------------
  |  Branch (623:9): [True: 202k, False: 0]
  |  Branch (623:44): [True: 202k, False: 4]
  ------------------
  624|   202k|        if (drbg->reseed_counter != tsan_load(&drbg->parent->reseed_counter))
  ------------------
  |  |   57|   202k|#  define tsan_load(ptr) atomic_load_explicit((ptr), memory_order_relaxed)
  ------------------
  |  Branch (624:13): [True: 0, False: 202k]
  ------------------
  625|      0|            reseed_required = 1;
  626|   202k|    }
  627|       |
  628|   202k|    if (reseed_required || prediction_resistance) {
  ------------------
  |  Branch (628:9): [True: 2, False: 202k]
  |  Branch (628:28): [True: 0, False: 202k]
  ------------------
  629|      2|        if (!RAND_DRBG_reseed(drbg, adin, adinlen, prediction_resistance)) {
  ------------------
  |  Branch (629:13): [True: 0, False: 2]
  ------------------
  630|      0|            RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_RESEED_ERROR);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  631|      0|            return 0;
  632|      0|        }
  633|      2|        adin = NULL;
  634|      2|        adinlen = 0;
  635|      2|    }
  636|       |
  637|   202k|    if (!drbg->meth->generate(drbg, out, outlen, adin, adinlen)) {
  ------------------
  |  Branch (637:9): [True: 0, False: 202k]
  ------------------
  638|      0|        drbg->state = DRBG_ERROR;
  639|      0|        RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_GENERATE_ERROR);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  640|      0|        return 0;
  641|      0|    }
  642|       |
  643|   202k|    drbg->generate_counter++;
  644|       |
  645|   202k|    return 1;
  646|   202k|}
RAND_DRBG_bytes:
  657|   202k|{
  658|   202k|    unsigned char *additional = NULL;
  659|   202k|    size_t additional_len;
  660|   202k|    size_t chunk;
  661|   202k|    size_t ret = 0;
  662|       |
  663|   202k|    if (drbg->adin_pool == NULL) {
  ------------------
  |  Branch (663:9): [True: 2, False: 202k]
  ------------------
  664|      2|        if (drbg->type == 0)
  ------------------
  |  Branch (664:13): [True: 0, False: 2]
  ------------------
  665|      0|            goto err;
  666|      2|        drbg->adin_pool = rand_pool_new(0, 0, 0, drbg->max_adinlen);
  667|      2|        if (drbg->adin_pool == NULL)
  ------------------
  |  Branch (667:13): [True: 0, False: 2]
  ------------------
  668|      0|            goto err;
  669|      2|    }
  670|       |
  671|   202k|    additional_len = rand_drbg_get_additional_data(drbg->adin_pool,
  672|   202k|                                                   &additional);
  673|       |
  674|   405k|    for ( ; outlen > 0; outlen -= chunk, out += chunk) {
  ------------------
  |  Branch (674:13): [True: 202k, False: 202k]
  ------------------
  675|   202k|        chunk = outlen;
  676|   202k|        if (chunk > drbg->max_request)
  ------------------
  |  Branch (676:13): [True: 0, False: 202k]
  ------------------
  677|      0|            chunk = drbg->max_request;
  678|   202k|        ret = RAND_DRBG_generate(drbg, out, chunk, 0, additional, additional_len);
  679|   202k|        if (!ret)
  ------------------
  |  Branch (679:13): [True: 0, False: 202k]
  ------------------
  680|      0|            goto err;
  681|   202k|    }
  682|   202k|    ret = 1;
  683|       |
  684|   202k| err:
  685|   202k|    if (additional != NULL)
  ------------------
  |  Branch (685:9): [True: 202k, False: 0]
  ------------------
  686|   202k|        rand_drbg_cleanup_additional_data(drbg->adin_pool, additional);
  687|       |
  688|   202k|    return ret;
  689|   202k|}
rand_drbg_lock:
  789|      6|{
  790|      6|    if (drbg->lock != NULL)
  ------------------
  |  Branch (790:9): [True: 6, False: 0]
  ------------------
  791|      6|        return CRYPTO_THREAD_write_lock(drbg->lock);
  792|       |
  793|      0|    return 1;
  794|      6|}
rand_drbg_unlock:
  803|      6|{
  804|      6|    if (drbg->lock != NULL)
  ------------------
  |  Branch (804:9): [True: 6, False: 0]
  ------------------
  805|      6|        return CRYPTO_THREAD_unlock(drbg->lock);
  806|       |
  807|      0|    return 1;
  808|      6|}
rand_drbg_enable_locking:
  819|      1|{
  820|      1|    if (drbg->state != DRBG_UNINITIALISED) {
  ------------------
  |  Branch (820:9): [True: 0, False: 1]
  ------------------
  821|      0|        RANDerr(RAND_F_RAND_DRBG_ENABLE_LOCKING,
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  822|      0|                RAND_R_DRBG_ALREADY_INITIALIZED);
  823|      0|        return 0;
  824|      0|    }
  825|       |
  826|      1|    if (drbg->lock == NULL) {
  ------------------
  |  Branch (826:9): [True: 1, False: 0]
  ------------------
  827|      1|        if (drbg->parent != NULL && drbg->parent->lock == NULL) {
  ------------------
  |  Branch (827:13): [True: 0, False: 1]
  |  Branch (827:37): [True: 0, False: 0]
  ------------------
  828|      0|            RANDerr(RAND_F_RAND_DRBG_ENABLE_LOCKING,
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  829|      0|                    RAND_R_PARENT_LOCKING_NOT_ENABLED);
  830|      0|            return 0;
  831|      0|        }
  832|       |
  833|      1|        drbg->lock = CRYPTO_THREAD_lock_new();
  834|      1|        if (drbg->lock == NULL) {
  ------------------
  |  Branch (834:13): [True: 0, False: 1]
  ------------------
  835|      0|            RANDerr(RAND_F_RAND_DRBG_ENABLE_LOCKING,
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  836|      0|                    RAND_R_FAILED_TO_CREATE_LOCK);
  837|      0|            return 0;
  838|      0|        }
  839|      1|    }
  840|       |
  841|      1|    return 1;
  842|      1|}
rand_drbg_cleanup_int:
  935|      2|{
  936|      2|    if (master_drbg != NULL) {
  ------------------
  |  Branch (936:9): [True: 1, False: 1]
  ------------------
  937|      1|        RAND_DRBG_free(master_drbg);
  938|      1|        master_drbg = NULL;
  939|       |
  940|      1|        CRYPTO_THREAD_cleanup_local(&private_drbg);
  941|      1|        CRYPTO_THREAD_cleanup_local(&public_drbg);
  942|      1|    }
  943|      2|}
drbg_delete_thread_state:
  946|      1|{
  947|      1|    RAND_DRBG *drbg;
  948|       |
  949|      1|    drbg = CRYPTO_THREAD_get_local(&public_drbg);
  950|      1|    CRYPTO_THREAD_set_local(&public_drbg, NULL);
  951|      1|    RAND_DRBG_free(drbg);
  952|       |
  953|      1|    drbg = CRYPTO_THREAD_get_local(&private_drbg);
  954|       |    CRYPTO_THREAD_set_local(&private_drbg, NULL);
  955|      1|    RAND_DRBG_free(drbg);
  956|      1|}
RAND_DRBG_get0_public:
 1109|  86.9k|{
 1110|  86.9k|    RAND_DRBG *drbg;
 1111|       |
 1112|  86.9k|    if (!RUN_ONCE(&rand_drbg_init, do_rand_drbg_init))
  ------------------
  |  |  119|  86.9k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 86.9k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1112:9): [True: 0, False: 86.9k]
  ------------------
 1113|      0|        return NULL;
 1114|       |
 1115|  86.9k|    drbg = CRYPTO_THREAD_get_local(&public_drbg);
 1116|  86.9k|    if (drbg == NULL) {
  ------------------
  |  Branch (1116:9): [True: 1, False: 86.9k]
  ------------------
 1117|      1|        if (!ossl_init_thread_start(OPENSSL_INIT_THREAD_RAND))
  ------------------
  |  |   33|      1|# define OPENSSL_INIT_THREAD_RAND            0x04
  ------------------
  |  Branch (1117:13): [True: 0, False: 1]
  ------------------
 1118|      0|            return NULL;
 1119|      1|        drbg = drbg_setup(master_drbg);
 1120|      1|        CRYPTO_THREAD_set_local(&public_drbg, drbg);
 1121|      1|    }
 1122|  86.9k|    return drbg;
 1123|  86.9k|}
RAND_DRBG_get0_private:
 1130|   115k|{
 1131|   115k|    RAND_DRBG *drbg;
 1132|       |
 1133|   115k|    if (!RUN_ONCE(&rand_drbg_init, do_rand_drbg_init))
  ------------------
  |  |  119|   115k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 115k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1133:9): [True: 0, False: 115k]
  ------------------
 1134|      0|        return NULL;
 1135|       |
 1136|   115k|    drbg = CRYPTO_THREAD_get_local(&private_drbg);
 1137|   115k|    if (drbg == NULL) {
  ------------------
  |  Branch (1137:9): [True: 1, False: 115k]
  ------------------
 1138|      1|        if (!ossl_init_thread_start(OPENSSL_INIT_THREAD_RAND))
  ------------------
  |  |   33|      1|# define OPENSSL_INIT_THREAD_RAND            0x04
  ------------------
  |  Branch (1138:13): [True: 0, False: 1]
  ------------------
 1139|      0|            return NULL;
 1140|      1|        drbg = drbg_setup(master_drbg);
 1141|      1|        CRYPTO_THREAD_set_local(&private_drbg, drbg);
 1142|      1|    }
 1143|   115k|    return drbg;
 1144|   115k|}
RAND_OpenSSL:
 1156|   115k|{
 1157|   115k|    return &rand_meth;
 1158|   115k|}
drbg_lib.c:rand_drbg_new:
  190|      3|{
  191|      3|    RAND_DRBG *drbg = secure ? OPENSSL_secure_zalloc(sizeof(*drbg))
  ------------------
  |  |  138|      3|        CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (191:23): [True: 3, False: 0]
  ------------------
  192|      3|                             : OPENSSL_zalloc(sizeof(*drbg));
  ------------------
  |  |  120|      3|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  193|       |
  194|      3|    if (drbg == NULL) {
  ------------------
  |  Branch (194:9): [True: 0, False: 3]
  ------------------
  195|      0|        RANDerr(RAND_F_RAND_DRBG_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  196|      0|        return NULL;
  197|      0|    }
  198|       |
  199|      3|    drbg->secure = secure && CRYPTO_secure_allocated(drbg);
  ------------------
  |  Branch (199:20): [True: 3, False: 0]
  |  Branch (199:30): [True: 0, False: 3]
  ------------------
  200|      3|    drbg->fork_id = openssl_get_fork_id();
  201|      3|    drbg->parent = parent;
  202|       |
  203|      3|    if (parent == NULL) {
  ------------------
  |  Branch (203:9): [True: 1, False: 2]
  ------------------
  204|      1|        drbg->get_entropy = rand_drbg_get_entropy;
  205|      1|        drbg->cleanup_entropy = rand_drbg_cleanup_entropy;
  206|      1|#ifndef RAND_DRBG_GET_RANDOM_NONCE
  207|      1|        drbg->get_nonce = rand_drbg_get_nonce;
  208|      1|        drbg->cleanup_nonce = rand_drbg_cleanup_nonce;
  209|      1|#endif
  210|       |
  211|      1|        drbg->reseed_interval = master_reseed_interval;
  212|      1|        drbg->reseed_time_interval = master_reseed_time_interval;
  213|      2|    } else {
  214|      2|        drbg->get_entropy = rand_drbg_get_entropy;
  215|      2|        drbg->cleanup_entropy = rand_drbg_cleanup_entropy;
  216|       |        /*
  217|       |         * Do not provide nonce callbacks, the child DRBGs will
  218|       |         * obtain their nonce using random bits from the parent.
  219|       |         */
  220|       |
  221|      2|        drbg->reseed_interval = slave_reseed_interval;
  222|      2|        drbg->reseed_time_interval = slave_reseed_time_interval;
  223|      2|    }
  224|       |
  225|      3|    if (RAND_DRBG_set(drbg, type, flags) == 0)
  ------------------
  |  Branch (225:9): [True: 0, False: 3]
  ------------------
  226|      0|        goto err;
  227|       |
  228|      3|    if (parent != NULL) {
  ------------------
  |  Branch (228:9): [True: 2, False: 1]
  ------------------
  229|      2|        rand_drbg_lock(parent);
  230|      2|        if (drbg->strength > parent->strength) {
  ------------------
  |  Branch (230:13): [True: 0, False: 2]
  ------------------
  231|       |            /*
  232|       |             * We currently don't support the algorithm from NIST SP 800-90C
  233|       |             * 10.1.2 to use a weaker DRBG as source
  234|       |             */
  235|      0|            rand_drbg_unlock(parent);
  236|      0|            RANDerr(RAND_F_RAND_DRBG_NEW, RAND_R_PARENT_STRENGTH_TOO_WEAK);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  237|      0|            goto err;
  238|      0|        }
  239|      2|        rand_drbg_unlock(parent);
  240|      2|    }
  241|       |
  242|      3|    return drbg;
  243|       |
  244|      0| err:
  245|      0|    RAND_DRBG_free(drbg);
  246|       |
  247|       |    return NULL;
  248|      3|}
drbg_lib.c:do_rand_drbg_init:
  906|      1|{
  907|       |    /*
  908|       |     * ensure that libcrypto is initialized, otherwise the
  909|       |     * DRBG locks are not cleaned up properly
  910|       |     */
  911|      1|    if (!OPENSSL_init_crypto(0, NULL))
  ------------------
  |  Branch (911:9): [True: 0, False: 1]
  ------------------
  912|      0|        return 0;
  913|       |
  914|      1|    if (!CRYPTO_THREAD_init_local(&private_drbg, NULL))
  ------------------
  |  Branch (914:9): [True: 0, False: 1]
  ------------------
  915|      0|        return 0;
  916|       |
  917|      1|    if (!CRYPTO_THREAD_init_local(&public_drbg, NULL))
  ------------------
  |  Branch (917:9): [True: 0, False: 1]
  ------------------
  918|      0|        goto err1;
  919|       |
  920|      1|    master_drbg = drbg_setup(NULL);
  921|      1|    if (master_drbg == NULL)
  ------------------
  |  Branch (921:9): [True: 0, False: 1]
  ------------------
  922|      0|        goto err2;
  923|       |
  924|      1|    return 1;
  925|       |
  926|      0|err2:
  927|      0|    CRYPTO_THREAD_cleanup_local(&public_drbg);
  928|      0|err1:
  929|      0|    CRYPTO_THREAD_cleanup_local(&private_drbg);
  930|      0|    return 0;
  931|      0|}
drbg_lib.c:drbg_setup:
  870|      3|{
  871|      3|    RAND_DRBG *drbg;
  872|       |
  873|      3|    drbg = RAND_DRBG_secure_new(rand_drbg_type, rand_drbg_flags, parent);
  874|      3|    if (drbg == NULL)
  ------------------
  |  Branch (874:9): [True: 0, False: 3]
  ------------------
  875|      0|        return NULL;
  876|       |
  877|       |    /* Only the master DRBG needs to have a lock */
  878|      3|    if (parent == NULL && rand_drbg_enable_locking(drbg) == 0)
  ------------------
  |  Branch (878:9): [True: 1, False: 2]
  |  Branch (878:27): [True: 0, False: 1]
  ------------------
  879|      0|        goto err;
  880|       |
  881|       |    /* enable reseed propagation */
  882|      3|    drbg->enable_reseed_propagation = 1;
  883|      3|    drbg->reseed_counter = 1;
  884|       |
  885|       |    /*
  886|       |     * Ignore instantiation error to support just-in-time instantiation.
  887|       |     *
  888|       |     * The state of the drbg will be checked in RAND_DRBG_generate() and
  889|       |     * an automatic recovery is attempted.
  890|       |     */
  891|      3|    (void)RAND_DRBG_instantiate(drbg,
  892|      3|                                (const unsigned char *) ossl_pers_string,
  893|      3|                                sizeof(ossl_pers_string) - 1);
  894|      3|    return drbg;
  895|       |
  896|      0|err:
  897|      0|    RAND_DRBG_free(drbg);
  898|       |    return NULL;
  899|      3|}
drbg_lib.c:drbg_bytes:
  960|  86.9k|{
  961|  86.9k|    int ret;
  962|  86.9k|    RAND_DRBG *drbg = RAND_DRBG_get0_public();
  963|       |
  964|  86.9k|    if (drbg == NULL)
  ------------------
  |  Branch (964:9): [True: 0, False: 86.9k]
  ------------------
  965|      0|        return 0;
  966|       |
  967|  86.9k|    ret = RAND_DRBG_bytes(drbg, out, count);
  968|       |
  969|  86.9k|    return ret;
  970|  86.9k|}

ERR_load_RAND_strings:
  131|      2|{
  132|      2|#ifndef OPENSSL_NO_ERR
  133|      2|    if (ERR_func_error_string(RAND_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (133:9): [True: 2, False: 0]
  ------------------
  134|      2|        ERR_load_strings_const(RAND_str_functs);
  135|      2|        ERR_load_strings_const(RAND_str_reasons);
  136|      2|    }
  137|      2|#endif
  138|      2|    return 1;
  139|      2|}

rand_drbg_get_entropy:
  133|      5|{
  134|      5|    size_t ret = 0;
  135|      5|    size_t entropy_available = 0;
  136|      5|    RAND_POOL *pool;
  137|       |
  138|      5|    if (drbg->parent != NULL && drbg->strength > drbg->parent->strength) {
  ------------------
  |  Branch (138:9): [True: 4, False: 1]
  |  Branch (138:33): [True: 0, False: 4]
  ------------------
  139|       |        /*
  140|       |         * We currently don't support the algorithm from NIST SP 800-90C
  141|       |         * 10.1.2 to use a weaker DRBG as source
  142|       |         */
  143|      0|        RANDerr(RAND_F_RAND_DRBG_GET_ENTROPY, RAND_R_PARENT_STRENGTH_TOO_WEAK);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  144|      0|        return 0;
  145|      0|    }
  146|       |
  147|      5|    if (drbg->seed_pool != NULL) {
  ------------------
  |  Branch (147:9): [True: 0, False: 5]
  ------------------
  148|      0|        pool = drbg->seed_pool;
  149|      0|        pool->entropy_requested = entropy;
  150|      5|    } else {
  151|      5|        pool = rand_pool_new(entropy, drbg->secure, min_len, max_len);
  152|      5|        if (pool == NULL)
  ------------------
  |  Branch (152:13): [True: 0, False: 5]
  ------------------
  153|      0|            return 0;
  154|      5|    }
  155|       |
  156|      5|    if (drbg->parent != NULL) {
  ------------------
  |  Branch (156:9): [True: 4, False: 1]
  ------------------
  157|      4|        size_t bytes_needed = rand_pool_bytes_needed(pool, 1 /*entropy_factor*/);
  158|      4|        unsigned char *buffer = rand_pool_add_begin(pool, bytes_needed);
  159|       |
  160|      4|        if (buffer != NULL) {
  ------------------
  |  Branch (160:13): [True: 4, False: 0]
  ------------------
  161|      4|            size_t bytes = 0;
  162|       |
  163|       |            /*
  164|       |             * Get random data from parent. Include our address as additional input,
  165|       |             * in order to provide some additional distinction between different
  166|       |             * DRBG child instances.
  167|       |             * Our lock is already held, but we need to lock our parent before
  168|       |             * generating bits from it. (Note: taking the lock will be a no-op
  169|       |             * if locking if drbg->parent->lock == NULL.)
  170|       |             */
  171|      4|            rand_drbg_lock(drbg->parent);
  172|      4|            if (RAND_DRBG_generate(drbg->parent,
  ------------------
  |  Branch (172:17): [True: 4, False: 0]
  ------------------
  173|      4|                                   buffer, bytes_needed,
  174|      4|                                   prediction_resistance,
  175|      4|                                   (unsigned char *)&drbg, sizeof(drbg)) != 0)
  176|      4|                bytes = bytes_needed;
  177|      4|            rand_drbg_unlock(drbg->parent);
  178|       |
  179|      4|            rand_pool_add_end(pool, bytes, 8 * bytes);
  180|      4|            entropy_available = rand_pool_entropy_available(pool);
  181|      4|        }
  182|       |
  183|      4|    } else {
  184|      1|        if (prediction_resistance) {
  ------------------
  |  Branch (184:13): [True: 0, False: 1]
  ------------------
  185|       |            /*
  186|       |             * We don't have any entropy sources that comply with the NIST
  187|       |             * standard to provide prediction resistance (see NIST SP 800-90C,
  188|       |             * Section 5.4).
  189|       |             */
  190|      0|            RANDerr(RAND_F_RAND_DRBG_GET_ENTROPY,
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  191|      0|                    RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED);
  192|      0|            goto err;
  193|      0|        }
  194|       |
  195|       |        /* Get entropy by polling system entropy sources. */
  196|      1|        entropy_available = rand_pool_acquire_entropy(pool);
  197|      1|    }
  198|       |
  199|      5|    if (entropy_available > 0) {
  ------------------
  |  Branch (199:9): [True: 5, False: 0]
  ------------------
  200|      5|        ret   = rand_pool_length(pool);
  201|      5|        *pout = rand_pool_detach(pool);
  202|      5|    }
  203|       |
  204|      5| err:
  205|      5|    if (drbg->seed_pool == NULL)
  ------------------
  |  Branch (205:9): [True: 5, False: 0]
  ------------------
  206|      5|        rand_pool_free(pool);
  207|      5|    return ret;
  208|      5|}
rand_drbg_cleanup_entropy:
  216|      5|{
  217|      5|    if (drbg->seed_pool == NULL) {
  ------------------
  |  Branch (217:9): [True: 5, False: 0]
  ------------------
  218|      5|        if (drbg->secure)
  ------------------
  |  Branch (218:13): [True: 0, False: 5]
  ------------------
  219|      0|            OPENSSL_secure_clear_free(out, outlen);
  ------------------
  |  |  142|      0|        CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  220|      5|        else
  221|      5|            OPENSSL_clear_free(out, outlen);
  ------------------
  |  |  126|      5|        CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  222|      5|    }
  223|      5|}
rand_drbg_get_nonce:
  233|      1|{
  234|      1|    size_t ret = 0;
  235|      1|    RAND_POOL *pool;
  236|       |
  237|      1|    struct {
  238|      1|        void * instance;
  239|      1|        int count;
  240|      1|    } data;
  241|       |
  242|      1|    memset(&data, 0, sizeof(data));
  243|      1|    pool = rand_pool_new(0, 0, min_len, max_len);
  244|      1|    if (pool == NULL)
  ------------------
  |  Branch (244:9): [True: 0, False: 1]
  ------------------
  245|      0|        return 0;
  246|       |
  247|      1|    if (rand_pool_add_nonce_data(pool) == 0)
  ------------------
  |  Branch (247:9): [True: 0, False: 1]
  ------------------
  248|      0|        goto err;
  249|       |
  250|      1|    data.instance = drbg;
  251|      1|    CRYPTO_atomic_add(&rand_nonce_count, 1, &data.count, rand_nonce_lock);
  252|       |
  253|      1|    if (rand_pool_add(pool, (unsigned char *)&data, sizeof(data), 0) == 0)
  ------------------
  |  Branch (253:9): [True: 0, False: 1]
  ------------------
  254|      0|        goto err;
  255|       |
  256|      1|    ret   = rand_pool_length(pool);
  257|      1|    *pout = rand_pool_detach(pool);
  258|       |
  259|      1| err:
  260|      1|    rand_pool_free(pool);
  261|       |
  262|      1|    return ret;
  263|      1|}
rand_drbg_cleanup_nonce:
  271|      1|{
  272|      1|    OPENSSL_clear_free(out, outlen);
  ------------------
  |  |  126|      1|        CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  273|      1|}
rand_drbg_get_additional_data:
  286|   202k|{
  287|   202k|    size_t ret = 0;
  288|       |
  289|   202k|    if (rand_pool_add_additional_data(pool) == 0)
  ------------------
  |  Branch (289:9): [True: 0, False: 202k]
  ------------------
  290|      0|        goto err;
  291|       |
  292|   202k|    ret = rand_pool_length(pool);
  293|   202k|    *pout = rand_pool_detach(pool);
  294|       |
  295|   202k| err:
  296|   202k|    return ret;
  297|   202k|}
rand_drbg_cleanup_additional_data:
  300|   202k|{
  301|   202k|    rand_pool_reattach(pool, out);
  302|   202k|}
rand_cleanup_int:
  341|      2|{
  342|      2|    const RAND_METHOD *meth = default_RAND_meth;
  343|       |
  344|      2|    if (!rand_inited)
  ------------------
  |  Branch (344:9): [True: 1, False: 1]
  ------------------
  345|      1|        return;
  346|       |
  347|      1|    if (meth != NULL && meth->cleanup != NULL)
  ------------------
  |  Branch (347:9): [True: 1, False: 0]
  |  Branch (347:25): [True: 0, False: 1]
  ------------------
  348|      0|        meth->cleanup();
  349|      1|    RAND_set_rand_method(NULL);
  350|      1|    rand_pool_cleanup();
  351|      1|#ifndef OPENSSL_NO_ENGINE
  352|      1|    CRYPTO_THREAD_lock_free(rand_engine_lock);
  353|      1|    rand_engine_lock = NULL;
  354|      1|#endif
  355|      1|    CRYPTO_THREAD_lock_free(rand_meth_lock);
  356|      1|    rand_meth_lock = NULL;
  357|      1|    CRYPTO_THREAD_lock_free(rand_nonce_lock);
  358|       |    rand_nonce_lock = NULL;
  359|      1|    rand_inited = 0;
  360|      1|}
rand_pool_new:
  434|      8|{
  435|      8|    RAND_POOL *pool;
  436|      8|    size_t min_alloc_size = RAND_POOL_MIN_ALLOCATION(secure);
  ------------------
  |  |   91|      8|# define RAND_POOL_MIN_ALLOCATION(secure) ((secure) ? 16 : 48)
  |  |  ------------------
  |  |  |  Branch (91:44): [True: 0, False: 8]
  |  |  ------------------
  ------------------
  437|       |
  438|      8|    if (!RUN_ONCE(&rand_init, do_rand_init))
  ------------------
  |  |  119|      8|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 8, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (438:9): [True: 0, False: 8]
  ------------------
  439|      0|        return NULL;
  440|       |
  441|      8|    pool = OPENSSL_zalloc(sizeof(*pool));
  ------------------
  |  |  120|      8|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  442|      8|    if (pool == NULL) {
  ------------------
  |  Branch (442:9): [True: 0, False: 8]
  ------------------
  443|      0|        RANDerr(RAND_F_RAND_POOL_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  444|      0|        return NULL;
  445|      0|    }
  446|       |
  447|      8|    pool->min_len = min_len;
  448|      8|    pool->max_len = (max_len > RAND_POOL_MAX_LENGTH) ?
  ------------------
  |  |   67|      8|# define RAND_POOL_MAX_LENGTH    (RAND_POOL_FACTOR * \
  |  |  ------------------
  |  |  |  |   66|      8|# define RAND_POOL_FACTOR        256
  |  |  ------------------
  |  |   68|      8|                                  3 * (RAND_DRBG_STRENGTH / 16))
  |  |  ------------------
  |  |  |  |   47|      8|# define RAND_DRBG_STRENGTH             256
  |  |  ------------------
  ------------------
  |  Branch (448:21): [True: 8, False: 0]
  ------------------
  449|      8|        RAND_POOL_MAX_LENGTH : max_len;
  ------------------
  |  |   67|      8|# define RAND_POOL_MAX_LENGTH    (RAND_POOL_FACTOR * \
  |  |  ------------------
  |  |  |  |   66|      8|# define RAND_POOL_FACTOR        256
  |  |  ------------------
  |  |   68|      8|                                  3 * (RAND_DRBG_STRENGTH / 16))
  |  |  ------------------
  |  |  |  |   47|      8|# define RAND_DRBG_STRENGTH             256
  |  |  ------------------
  ------------------
  450|      8|    pool->alloc_len = min_len < min_alloc_size ? min_alloc_size : min_len;
  ------------------
  |  Branch (450:23): [True: 6, False: 2]
  ------------------
  451|      8|    if (pool->alloc_len > pool->max_len)
  ------------------
  |  Branch (451:9): [True: 0, False: 8]
  ------------------
  452|      0|        pool->alloc_len = pool->max_len;
  453|       |
  454|      8|    if (secure)
  ------------------
  |  Branch (454:9): [True: 0, False: 8]
  ------------------
  455|      0|        pool->buffer = OPENSSL_secure_zalloc(pool->alloc_len);
  ------------------
  |  |  138|      0|        CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  456|      8|    else
  457|      8|        pool->buffer = OPENSSL_zalloc(pool->alloc_len);
  ------------------
  |  |  120|      8|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  458|       |
  459|      8|    if (pool->buffer == NULL) {
  ------------------
  |  Branch (459:9): [True: 0, False: 8]
  ------------------
  460|      0|        RANDerr(RAND_F_RAND_POOL_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  461|      0|        goto err;
  462|      0|    }
  463|       |
  464|      8|    pool->entropy_requested = entropy_requested;
  465|      8|    pool->secure = secure;
  466|       |
  467|      8|    return pool;
  468|       |
  469|      0|err:
  470|      0|    OPENSSL_free(pool);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  471|       |    return NULL;
  472|      8|}
rand_pool_free:
  510|      9|{
  511|      9|    if (pool == NULL)
  ------------------
  |  Branch (511:9): [True: 1, False: 8]
  ------------------
  512|      1|        return;
  513|       |
  514|       |    /*
  515|       |     * Although it would be advisable from a cryptographical viewpoint,
  516|       |     * we are not allowed to clear attached buffers, since they are passed
  517|       |     * to rand_pool_attach() as `const unsigned char*`.
  518|       |     * (see corresponding comment in rand_pool_attach()).
  519|       |     */
  520|      8|    if (!pool->attached) {
  ------------------
  |  Branch (520:9): [True: 8, False: 0]
  ------------------
  521|      8|        if (pool->secure)
  ------------------
  |  Branch (521:13): [True: 0, False: 8]
  ------------------
  522|      0|            OPENSSL_secure_clear_free(pool->buffer, pool->alloc_len);
  ------------------
  |  |  142|      0|        CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  523|      8|        else
  524|      8|            OPENSSL_clear_free(pool->buffer, pool->alloc_len);
  ------------------
  |  |  126|      8|        CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  525|      8|    }
  526|       |
  527|      8|    OPENSSL_free(pool);
  ------------------
  |  |  128|      8|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  528|      8|}
rand_pool_length:
  550|   202k|{
  551|   202k|    return pool->len;
  552|   202k|}
rand_pool_detach:
  561|   202k|{
  562|   202k|    unsigned char *ret = pool->buffer;
  563|       |    pool->buffer = NULL;
  564|   202k|    pool->entropy = 0;
  565|   202k|    return ret;
  566|   202k|}
rand_pool_reattach:
  573|   202k|{
  574|   202k|    pool->buffer = buffer;
  575|   202k|    OPENSSL_cleanse(pool->buffer, pool->len);
  576|   202k|    pool->len = 0;
  577|   202k|}
rand_pool_entropy_available:
  596|      5|{
  597|      5|    if (pool->entropy < pool->entropy_requested)
  ------------------
  |  Branch (597:9): [True: 0, False: 5]
  ------------------
  598|      0|        return 0;
  599|       |
  600|      5|    if (pool->len < pool->min_len)
  ------------------
  |  Branch (600:9): [True: 0, False: 5]
  ------------------
  601|      0|        return 0;
  602|       |
  603|      5|    return pool->entropy;
  604|      5|}
rand_pool_entropy_needed:
  612|      5|{
  613|      5|    if (pool->entropy < pool->entropy_requested)
  ------------------
  |  Branch (613:9): [True: 5, False: 0]
  ------------------
  614|      5|        return pool->entropy_requested - pool->entropy;
  615|       |
  616|      0|    return 0;
  617|      5|}
rand_pool_bytes_needed:
  662|      5|{
  663|      5|    size_t bytes_needed;
  664|      5|    size_t entropy_needed = rand_pool_entropy_needed(pool);
  665|       |
  666|      5|    if (entropy_factor < 1) {
  ------------------
  |  Branch (666:9): [True: 0, False: 5]
  ------------------
  667|      0|        RANDerr(RAND_F_RAND_POOL_BYTES_NEEDED, RAND_R_ARGUMENT_OUT_OF_RANGE);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  668|      0|        return 0;
  669|      0|    }
  670|       |
  671|      5|    bytes_needed = ENTROPY_TO_BYTES(entropy_needed, entropy_factor);
  ------------------
  |  |  584|      5|    (((bits) * (entropy_factor) + 7) / 8)
  ------------------
  672|       |
  673|      5|    if (bytes_needed > pool->max_len - pool->len) {
  ------------------
  |  Branch (673:9): [True: 0, False: 5]
  ------------------
  674|       |        /* not enough space left */
  675|      0|        RANDerr(RAND_F_RAND_POOL_BYTES_NEEDED, RAND_R_RANDOM_POOL_OVERFLOW);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  676|      0|        return 0;
  677|      0|    }
  678|       |
  679|      5|    if (pool->len < pool->min_len &&
  ------------------
  |  Branch (679:9): [True: 5, False: 0]
  ------------------
  680|      5|        bytes_needed < pool->min_len - pool->len)
  ------------------
  |  Branch (680:9): [True: 0, False: 5]
  ------------------
  681|       |        /* to meet the min_len requirement */
  682|      0|        bytes_needed = pool->min_len - pool->len;
  683|       |
  684|       |    /*
  685|       |     * Make sure the buffer is large enough for the requested amount
  686|       |     * of data. This guarantees that existing code patterns where
  687|       |     * rand_pool_add_begin, rand_pool_add_end or rand_pool_add
  688|       |     * are used to collect entropy data without any error handling
  689|       |     * whatsoever, continue to be valid.
  690|       |     * Furthermore if the allocation here fails once, make sure that
  691|       |     * we don't fall back to a less secure or even blocking random source,
  692|       |     * as that could happen by the existing code patterns.
  693|       |     * This is not a concern for additional data, therefore that
  694|       |     * is not needed if rand_pool_grow fails in other places.
  695|       |     */
  696|      5|    if (!rand_pool_grow(pool, bytes_needed)) {
  ------------------
  |  Branch (696:9): [True: 0, False: 5]
  ------------------
  697|       |        /* persistent error for this pool */
  698|      0|        pool->max_len = pool->len = 0;
  699|      0|        return 0;
  700|      0|    }
  701|       |
  702|      5|    return bytes_needed;
  703|      5|}
rand_pool_add:
  722|   202k|{
  723|   202k|    if (len > pool->max_len - pool->len) {
  ------------------
  |  Branch (723:9): [True: 0, False: 202k]
  ------------------
  724|      0|        RANDerr(RAND_F_RAND_POOL_ADD, RAND_R_ENTROPY_INPUT_TOO_LONG);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  725|      0|        return 0;
  726|      0|    }
  727|       |
  728|   202k|    if (pool->buffer == NULL) {
  ------------------
  |  Branch (728:9): [True: 0, False: 202k]
  ------------------
  729|      0|        RANDerr(RAND_F_RAND_POOL_ADD, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  730|      0|        return 0;
  731|      0|    }
  732|       |
  733|   202k|    if (len > 0) {
  ------------------
  |  Branch (733:9): [True: 202k, False: 0]
  ------------------
  734|       |        /*
  735|       |         * This is to protect us from accidentally passing the buffer
  736|       |         * returned from rand_pool_add_begin.
  737|       |         * The check for alloc_len makes sure we do not compare the
  738|       |         * address of the end of the allocated memory to something
  739|       |         * different, since that comparison would have an
  740|       |         * indeterminate result.
  741|       |         */
  742|   202k|        if (pool->alloc_len > pool->len && pool->buffer + pool->len == buffer) {
  ------------------
  |  Branch (742:13): [True: 202k, False: 0]
  |  Branch (742:44): [True: 0, False: 202k]
  ------------------
  743|      0|            RANDerr(RAND_F_RAND_POOL_ADD, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  744|      0|            return 0;
  745|      0|        }
  746|       |        /*
  747|       |         * We have that only for cases when a pool is used to collect
  748|       |         * additional data.
  749|       |         * For entropy data, as long as the allocation request stays within
  750|       |         * the limits given by rand_pool_bytes_needed this rand_pool_grow
  751|       |         * below is guaranteed to succeed, thus no allocation happens.
  752|       |         */
  753|   202k|        if (!rand_pool_grow(pool, len))
  ------------------
  |  Branch (753:13): [True: 0, False: 202k]
  ------------------
  754|      0|            return 0;
  755|   202k|        memcpy(pool->buffer + pool->len, buffer, len);
  756|   202k|        pool->len += len;
  757|   202k|        pool->entropy += entropy;
  758|   202k|    }
  759|       |
  760|   202k|    return 1;
  761|   202k|}
rand_pool_add_begin:
  776|      5|{
  777|      5|    if (len == 0)
  ------------------
  |  Branch (777:9): [True: 0, False: 5]
  ------------------
  778|      0|        return NULL;
  779|       |
  780|      5|    if (len > pool->max_len - pool->len) {
  ------------------
  |  Branch (780:9): [True: 0, False: 5]
  ------------------
  781|      0|        RANDerr(RAND_F_RAND_POOL_ADD_BEGIN, RAND_R_RANDOM_POOL_OVERFLOW);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  782|      0|        return NULL;
  783|      0|    }
  784|       |
  785|      5|    if (pool->buffer == NULL) {
  ------------------
  |  Branch (785:9): [True: 0, False: 5]
  ------------------
  786|      0|        RANDerr(RAND_F_RAND_POOL_ADD_BEGIN, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  787|      0|        return NULL;
  788|      0|    }
  789|       |
  790|       |    /*
  791|       |     * As long as the allocation request stays within the limits given
  792|       |     * by rand_pool_bytes_needed this rand_pool_grow below is guaranteed
  793|       |     * to succeed, thus no allocation happens.
  794|       |     * We have that only for cases when a pool is used to collect
  795|       |     * additional data. Then the buffer might need to grow here,
  796|       |     * and of course the caller is responsible to check the return
  797|       |     * value of this function.
  798|       |     */
  799|      5|    if (!rand_pool_grow(pool, len))
  ------------------
  |  Branch (799:9): [True: 0, False: 5]
  ------------------
  800|      0|        return NULL;
  801|       |
  802|      5|    return pool->buffer + pool->len;
  803|      5|}
rand_pool_add_end:
  815|      5|{
  816|      5|    if (len > pool->alloc_len - pool->len) {
  ------------------
  |  Branch (816:9): [True: 0, False: 5]
  ------------------
  817|      0|        RANDerr(RAND_F_RAND_POOL_ADD_END, RAND_R_RANDOM_POOL_OVERFLOW);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  818|      0|        return 0;
  819|      0|    }
  820|       |
  821|      5|    if (len > 0) {
  ------------------
  |  Branch (821:9): [True: 5, False: 0]
  ------------------
  822|      5|        pool->len += len;
  823|      5|        pool->entropy += entropy;
  824|      5|    }
  825|       |
  826|      5|    return 1;
  827|      5|}
RAND_set_rand_method:
  830|      1|{
  831|      1|    if (!RUN_ONCE(&rand_init, do_rand_init))
  ------------------
  |  |  119|      1|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (831:9): [True: 0, False: 1]
  ------------------
  832|      0|        return 0;
  833|       |
  834|      1|    CRYPTO_THREAD_write_lock(rand_meth_lock);
  835|      1|#ifndef OPENSSL_NO_ENGINE
  836|      1|    ENGINE_finish(funct_ref);
  837|       |    funct_ref = NULL;
  838|      1|#endif
  839|      1|    default_RAND_meth = meth;
  840|      1|    CRYPTO_THREAD_unlock(rand_meth_lock);
  841|      1|    return 1;
  842|      1|}
RAND_get_rand_method:
  845|   202k|{
  846|   202k|    const RAND_METHOD *tmp_meth = NULL;
  847|       |
  848|   202k|    if (!RUN_ONCE(&rand_init, do_rand_init))
  ------------------
  |  |  119|   202k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 202k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (848:9): [True: 0, False: 202k]
  ------------------
  849|      0|        return NULL;
  850|       |
  851|   202k|    CRYPTO_THREAD_write_lock(rand_meth_lock);
  852|   202k|    if (default_RAND_meth == NULL) {
  ------------------
  |  Branch (852:9): [True: 1, False: 202k]
  ------------------
  853|      1|#ifndef OPENSSL_NO_ENGINE
  854|      1|        ENGINE *e;
  855|       |
  856|       |        /* If we have an engine that can do RAND, use it. */
  857|      1|        if ((e = ENGINE_get_default_RAND()) != NULL
  ------------------
  |  Branch (857:13): [True: 0, False: 1]
  ------------------
  858|      0|                && (tmp_meth = ENGINE_get_RAND(e)) != NULL) {
  ------------------
  |  Branch (858:20): [True: 0, False: 0]
  ------------------
  859|      0|            funct_ref = e;
  860|      0|            default_RAND_meth = tmp_meth;
  861|      1|        } else {
  862|      1|            ENGINE_finish(e);
  863|      1|            default_RAND_meth = &rand_meth;
  864|      1|        }
  865|       |#else
  866|       |        default_RAND_meth = &rand_meth;
  867|       |#endif
  868|      1|    }
  869|   202k|    tmp_meth = default_RAND_meth;
  870|   202k|    CRYPTO_THREAD_unlock(rand_meth_lock);
  871|   202k|    return tmp_meth;
  872|   202k|}
RAND_priv_bytes:
  922|   115k|{
  923|   115k|    const RAND_METHOD *meth = RAND_get_rand_method();
  924|   115k|    RAND_DRBG *drbg;
  925|       |
  926|   115k|    if (meth != NULL && meth != RAND_OpenSSL())
  ------------------
  |  Branch (926:9): [True: 115k, False: 0]
  |  Branch (926:25): [True: 0, False: 115k]
  ------------------
  927|      0|        return RAND_bytes(buf, num);
  928|       |
  929|   115k|    drbg = RAND_DRBG_get0_private();
  930|   115k|    if (drbg != NULL)
  ------------------
  |  Branch (930:9): [True: 115k, False: 0]
  ------------------
  931|   115k|        return RAND_DRBG_bytes(drbg, buf, num);
  932|       |
  933|      0|    return 0;
  934|   115k|}
RAND_bytes:
  937|  86.9k|{
  938|  86.9k|    const RAND_METHOD *meth = RAND_get_rand_method();
  939|       |
  940|  86.9k|    if (meth != NULL && meth->bytes != NULL)
  ------------------
  |  Branch (940:9): [True: 86.9k, False: 0]
  |  Branch (940:25): [True: 86.9k, False: 0]
  ------------------
  941|  86.9k|        return meth->bytes(buf, num);
  942|      0|    RANDerr(RAND_F_RAND_BYTES, RAND_R_FUNC_NOT_IMPLEMENTED);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  943|      0|    return -1;
  944|  86.9k|}
rand_lib.c:do_rand_init:
  305|      1|{
  306|      1|#ifndef OPENSSL_NO_ENGINE
  307|      1|    rand_engine_lock = CRYPTO_THREAD_lock_new();
  308|      1|    if (rand_engine_lock == NULL)
  ------------------
  |  Branch (308:9): [True: 0, False: 1]
  ------------------
  309|      0|        return 0;
  310|      1|#endif
  311|       |
  312|      1|    rand_meth_lock = CRYPTO_THREAD_lock_new();
  313|      1|    if (rand_meth_lock == NULL)
  ------------------
  |  Branch (313:9): [True: 0, False: 1]
  ------------------
  314|      0|        goto err1;
  315|       |
  316|      1|    rand_nonce_lock = CRYPTO_THREAD_lock_new();
  317|      1|    if (rand_nonce_lock == NULL)
  ------------------
  |  Branch (317:9): [True: 0, False: 1]
  ------------------
  318|      0|        goto err2;
  319|       |
  320|      1|    if (!rand_pool_init())
  ------------------
  |  Branch (320:9): [True: 0, False: 1]
  ------------------
  321|      0|        goto err3;
  322|       |
  323|      1|    rand_inited = 1;
  324|      1|    return 1;
  325|       |
  326|      0|err3:
  327|      0|    CRYPTO_THREAD_lock_free(rand_nonce_lock);
  328|      0|    rand_nonce_lock = NULL;
  329|      0|err2:
  330|      0|    CRYPTO_THREAD_lock_free(rand_meth_lock);
  331|      0|    rand_meth_lock = NULL;
  332|      0|err1:
  333|      0|#ifndef OPENSSL_NO_ENGINE
  334|      0|    CRYPTO_THREAD_lock_free(rand_engine_lock);
  335|       |    rand_engine_lock = NULL;
  336|      0|#endif
  337|      0|    return 0;
  338|      0|}
rand_lib.c:rand_pool_grow:
  621|   202k|{
  622|   202k|    if (len > pool->alloc_len - pool->len) {
  ------------------
  |  Branch (622:9): [True: 0, False: 202k]
  ------------------
  623|      0|        unsigned char *p;
  624|      0|        const size_t limit = pool->max_len / 2;
  625|      0|        size_t newlen = pool->alloc_len;
  626|       |
  627|      0|        if (pool->attached || len > pool->max_len - pool->len) {
  ------------------
  |  Branch (627:13): [True: 0, False: 0]
  |  Branch (627:31): [True: 0, False: 0]
  ------------------
  628|      0|            RANDerr(RAND_F_RAND_POOL_GROW, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  629|      0|            return 0;
  630|      0|        }
  631|       |
  632|      0|        do
  633|      0|            newlen = newlen < limit ? newlen * 2 : pool->max_len;
  ------------------
  |  Branch (633:22): [True: 0, False: 0]
  ------------------
  634|      0|        while (len > newlen - pool->len);
  ------------------
  |  Branch (634:16): [True: 0, False: 0]
  ------------------
  635|       |
  636|      0|        if (pool->secure)
  ------------------
  |  Branch (636:13): [True: 0, False: 0]
  ------------------
  637|      0|            p = OPENSSL_secure_zalloc(newlen);
  ------------------
  |  |  138|      0|        CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  638|      0|        else
  639|      0|            p = OPENSSL_zalloc(newlen);
  ------------------
  |  |  120|      0|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  640|      0|        if (p == NULL) {
  ------------------
  |  Branch (640:13): [True: 0, False: 0]
  ------------------
  641|      0|            RANDerr(RAND_F_RAND_POOL_GROW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  120|      0|# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  642|      0|            return 0;
  643|      0|        }
  644|      0|        memcpy(p, pool->buffer, pool->len);
  645|      0|        if (pool->secure)
  ------------------
  |  Branch (645:13): [True: 0, False: 0]
  ------------------
  646|      0|            OPENSSL_secure_clear_free(pool->buffer, pool->alloc_len);
  ------------------
  |  |  142|      0|        CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  647|      0|        else
  648|      0|            OPENSSL_clear_free(pool->buffer, pool->alloc_len);
  ------------------
  |  |  126|      0|        CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  649|      0|        pool->buffer = p;
  650|      0|        pool->alloc_len = newlen;
  651|      0|    }
  652|   202k|    return 1;
  653|   202k|}

rand_pool_init:
  577|      1|{
  578|      1|    size_t i;
  579|       |
  580|      5|    for (i = 0; i < OSSL_NELEM(random_devices); i++)
  ------------------
  |  |   13|      5|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
  |  Branch (580:17): [True: 4, False: 1]
  ------------------
  581|      4|        random_devices[i].fd = -1;
  582|       |
  583|      1|    return 1;
  584|      1|}
rand_pool_cleanup:
  587|      1|{
  588|      1|    size_t i;
  589|       |
  590|      5|    for (i = 0; i < OSSL_NELEM(random_devices); i++)
  ------------------
  |  |   13|      5|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
  |  Branch (590:17): [True: 4, False: 1]
  ------------------
  591|      4|        close_random_device(i);
  592|      1|}
rand_pool_acquire_entropy:
  637|      1|{
  638|       |#  if defined(OPENSSL_RAND_SEED_NONE)
  639|       |    return rand_pool_entropy_available(pool);
  640|       |#  else
  641|      1|    size_t entropy_available;
  642|       |
  643|      1|#   if defined(OPENSSL_RAND_SEED_GETRANDOM)
  644|      1|    {
  645|      1|        size_t bytes_needed;
  646|      1|        unsigned char *buffer;
  647|      1|        ssize_t bytes;
  648|       |        /* Maximum allowed number of consecutive unsuccessful attempts */
  649|      1|        int attempts = 3;
  650|       |
  651|      1|        bytes_needed = rand_pool_bytes_needed(pool, 1 /*entropy_factor*/);
  652|      2|        while (bytes_needed != 0 && attempts-- > 0) {
  ------------------
  |  Branch (652:16): [True: 1, False: 1]
  |  Branch (652:37): [True: 1, False: 0]
  ------------------
  653|      1|            buffer = rand_pool_add_begin(pool, bytes_needed);
  654|      1|            bytes = syscall_random(buffer, bytes_needed);
  655|      1|            if (bytes > 0) {
  ------------------
  |  Branch (655:17): [True: 1, False: 0]
  ------------------
  656|      1|                rand_pool_add_end(pool, bytes, 8 * bytes);
  657|      1|                bytes_needed -= bytes;
  658|      1|                attempts = 3; /* reset counter after successful attempt */
  659|      1|            } else if (bytes < 0 && errno != EINTR) {
  ------------------
  |  Branch (659:24): [True: 0, False: 0]
  |  Branch (659:37): [True: 0, False: 0]
  ------------------
  660|      0|                break;
  661|      0|            }
  662|      1|        }
  663|      1|    }
  664|      1|    entropy_available = rand_pool_entropy_available(pool);
  665|      1|    if (entropy_available > 0)
  ------------------
  |  Branch (665:9): [True: 1, False: 0]
  ------------------
  666|      1|        return entropy_available;
  667|      0|#   endif
  668|       |
  669|       |#   if defined(OPENSSL_RAND_SEED_LIBRANDOM)
  670|       |    {
  671|       |        /* Not yet implemented. */
  672|       |    }
  673|       |#   endif
  674|       |
  675|      0|#   if defined(OPENSSL_RAND_SEED_DEVRANDOM)
  676|      0|    if (wait_random_seeded()) {
  ------------------
  |  Branch (676:9): [True: 0, False: 0]
  ------------------
  677|      0|        size_t bytes_needed;
  678|      0|        unsigned char *buffer;
  679|      0|        size_t i;
  680|       |
  681|      0|        bytes_needed = rand_pool_bytes_needed(pool, 1 /*entropy_factor*/);
  682|      0|        for (i = 0; bytes_needed > 0 && i < OSSL_NELEM(random_device_paths);
  ------------------
  |  |   13|      0|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
  |  Branch (682:21): [True: 0, False: 0]
  |  Branch (682:41): [True: 0, False: 0]
  ------------------
  683|      0|             i++) {
  684|      0|            ssize_t bytes = 0;
  685|       |            /* Maximum number of consecutive unsuccessful attempts */
  686|      0|            int attempts = 3;
  687|      0|            const int fd = get_random_device(i);
  688|       |
  689|      0|            if (fd == -1)
  ------------------
  |  Branch (689:17): [True: 0, False: 0]
  ------------------
  690|      0|                continue;
  691|       |
  692|      0|            while (bytes_needed != 0 && attempts-- > 0) {
  ------------------
  |  Branch (692:20): [True: 0, False: 0]
  |  Branch (692:41): [True: 0, False: 0]
  ------------------
  693|      0|                buffer = rand_pool_add_begin(pool, bytes_needed);
  694|      0|                bytes = read(fd, buffer, bytes_needed);
  695|       |
  696|      0|                if (bytes > 0) {
  ------------------
  |  Branch (696:21): [True: 0, False: 0]
  ------------------
  697|      0|                    rand_pool_add_end(pool, bytes, 8 * bytes);
  698|      0|                    bytes_needed -= bytes;
  699|      0|                    attempts = 3; /* reset counter on successful attempt */
  700|      0|                } else if (bytes < 0 && errno != EINTR) {
  ------------------
  |  Branch (700:28): [True: 0, False: 0]
  |  Branch (700:41): [True: 0, False: 0]
  ------------------
  701|      0|                    break;
  702|      0|                }
  703|      0|            }
  704|      0|            if (bytes < 0 || !keep_random_devices_open)
  ------------------
  |  Branch (704:17): [True: 0, False: 0]
  |  Branch (704:30): [True: 0, False: 0]
  ------------------
  705|      0|                close_random_device(i);
  706|       |
  707|      0|            bytes_needed = rand_pool_bytes_needed(pool, 1);
  708|      0|        }
  709|      0|        entropy_available = rand_pool_entropy_available(pool);
  710|      0|        if (entropy_available > 0)
  ------------------
  |  Branch (710:13): [True: 0, False: 0]
  ------------------
  711|      0|            return entropy_available;
  712|      0|    }
  713|      0|#   endif
  714|       |
  715|       |#   if defined(OPENSSL_RAND_SEED_RDTSC)
  716|       |    entropy_available = rand_acquire_entropy_from_tsc(pool);
  717|       |    if (entropy_available > 0)
  718|       |        return entropy_available;
  719|       |#   endif
  720|       |
  721|       |#   if defined(OPENSSL_RAND_SEED_RDCPU)
  722|       |    entropy_available = rand_acquire_entropy_from_cpu(pool);
  723|       |    if (entropy_available > 0)
  724|       |        return entropy_available;
  725|       |#   endif
  726|       |
  727|       |#   if defined(OPENSSL_RAND_SEED_EGD)
  728|       |    {
  729|       |        static const char *paths[] = { DEVRANDOM_EGD, NULL };
  730|       |        size_t bytes_needed;
  731|       |        unsigned char *buffer;
  732|       |        int i;
  733|       |
  734|       |        bytes_needed = rand_pool_bytes_needed(pool, 1 /*entropy_factor*/);
  735|       |        for (i = 0; bytes_needed > 0 && paths[i] != NULL; i++) {
  736|       |            size_t bytes = 0;
  737|       |            int num;
  738|       |
  739|       |            buffer = rand_pool_add_begin(pool, bytes_needed);
  740|       |            num = RAND_query_egd_bytes(paths[i],
  741|       |                                       buffer, (int)bytes_needed);
  742|       |            if (num == (int)bytes_needed)
  743|       |                bytes = bytes_needed;
  744|       |
  745|       |            rand_pool_add_end(pool, bytes, 8 * bytes);
  746|       |            bytes_needed = rand_pool_bytes_needed(pool, 1);
  747|       |        }
  748|       |        entropy_available = rand_pool_entropy_available(pool);
  749|       |        if (entropy_available > 0)
  750|       |            return entropy_available;
  751|       |    }
  752|       |#   endif
  753|       |
  754|      0|    return rand_pool_entropy_available(pool);
  755|      0|#  endif
  756|      0|}
rand_pool_add_nonce_data:
  762|      1|{
  763|      1|    struct {
  764|      1|        pid_t pid;
  765|      1|        CRYPTO_THREAD_ID tid;
  766|      1|        uint64_t time;
  767|      1|    } data = { 0 };
  768|       |
  769|       |    /*
  770|       |     * Add process id, thread id, and a high resolution timestamp to
  771|       |     * ensure that the nonce is unique with high probability for
  772|       |     * different process instances.
  773|       |     */
  774|      1|    data.pid = getpid();
  775|      1|    data.tid = CRYPTO_THREAD_get_current_id();
  776|      1|    data.time = get_time_stamp();
  777|       |
  778|      1|    return rand_pool_add(pool, (unsigned char *)&data, sizeof(data), 0);
  779|      1|}
rand_pool_add_additional_data:
  782|   202k|{
  783|   202k|    struct {
  784|   202k|        int fork_id;
  785|   202k|        CRYPTO_THREAD_ID tid;
  786|   202k|        uint64_t time;
  787|   202k|    } data = { 0 };
  788|       |
  789|       |    /*
  790|       |     * Add some noise from the thread id and a high resolution timer.
  791|       |     * The fork_id adds some extra fork-safety.
  792|       |     * The thread id adds a little randomness if the drbg is accessed
  793|       |     * concurrently (which is the case for the <master> drbg).
  794|       |     */
  795|   202k|    data.fork_id = openssl_get_fork_id();
  796|   202k|    data.tid = CRYPTO_THREAD_get_current_id();
  797|   202k|    data.time = get_timer_bits();
  798|       |
  799|   202k|    return rand_pool_add(pool, (unsigned char *)&data, sizeof(data), 0);
  800|   202k|}
rand_unix.c:close_random_device:
  568|      4|{
  569|      4|    struct random_device * rd = &random_devices[n];
  570|       |
  571|      4|    if (check_random_device(rd))
  ------------------
  |  Branch (571:9): [True: 0, False: 4]
  ------------------
  572|      0|        close(rd->fd);
  573|      4|    rd->fd = -1;
  574|      4|}
rand_unix.c:check_random_device:
  523|      4|{
  524|      4|    struct stat st;
  525|       |
  526|      4|    return rd->fd != -1
  ------------------
  |  Branch (526:12): [True: 0, False: 4]
  ------------------
  527|      0|           && fstat(rd->fd, &st) != -1
  ------------------
  |  Branch (527:15): [True: 0, False: 0]
  ------------------
  528|      0|           && rd->dev == st.st_dev
  ------------------
  |  Branch (528:15): [True: 0, False: 0]
  ------------------
  529|      0|           && rd->ino == st.st_ino
  ------------------
  |  Branch (529:15): [True: 0, False: 0]
  ------------------
  530|      0|           && ((rd->mode ^ st.st_mode) & ~(S_IRWXU | S_IRWXG | S_IRWXO)) == 0
  ------------------
  |  Branch (530:15): [True: 0, False: 0]
  ------------------
  531|      0|           && rd->rdev == st.st_rdev;
  ------------------
  |  Branch (531:15): [True: 0, False: 0]
  ------------------
  532|      4|}
rand_unix.c:syscall_random:
  351|      1|{
  352|       |    /*
  353|       |     * Note: 'buflen' equals the size of the buffer which is used by the
  354|       |     * get_entropy() callback of the RAND_DRBG. It is roughly bounded by
  355|       |     *
  356|       |     *   2 * RAND_POOL_FACTOR * (RAND_DRBG_STRENGTH / 8) = 2^14
  357|       |     *
  358|       |     * which is way below the OSSL_SSIZE_MAX limit. Therefore sign conversion
  359|       |     * between size_t and ssize_t is safe even without a range check.
  360|       |     */
  361|       |
  362|       |    /*
  363|       |     * Do runtime detection to find getentropy().
  364|       |     *
  365|       |     * Known OSs that should support this:
  366|       |     * - Darwin since 16 (OSX 10.12, IOS 10.0).
  367|       |     * - Solaris since 11.3
  368|       |     * - OpenBSD since 5.6
  369|       |     * - Linux since 3.17 with glibc 2.25
  370|       |     * - FreeBSD since 12.0 (1200061)
  371|       |     *
  372|       |     * Note: Sometimes getentropy() can be provided but not implemented
  373|       |     * internally. So we need to check errno for ENOSYS
  374|       |     */
  375|      1|#  if defined(__GNUC__) && __GNUC__>=2 && defined(__ELF__) && !defined(__hpux)
  376|      1|    extern int getentropy(void *buffer, size_t length) __attribute__((weak));
  377|       |
  378|      1|    if (getentropy != NULL) {
  ------------------
  |  Branch (378:9): [True: 1, False: 0]
  ------------------
  379|      1|        if (getentropy(buf, buflen) == 0)
  ------------------
  |  Branch (379:13): [True: 1, False: 0]
  ------------------
  380|      1|            return (ssize_t)buflen;
  381|      0|        if (errno != ENOSYS)
  ------------------
  |  Branch (381:13): [True: 0, False: 0]
  ------------------
  382|      0|            return -1;
  383|      0|    }
  384|       |#  elif defined(__APPLE__)
  385|       |    if (CCRandomGenerateBytes(buf, buflen) == kCCSuccess)
  386|       |	    return (ssize_t)buflen;
  387|       |
  388|       |    return -1;
  389|       |#  else
  390|       |    union {
  391|       |        void *p;
  392|       |        int (*f)(void *buffer, size_t length);
  393|       |    } p_getentropy;
  394|       |
  395|       |    /*
  396|       |     * We could cache the result of the lookup, but we normally don't
  397|       |     * call this function often.
  398|       |     */
  399|       |    ERR_set_mark();
  400|       |    p_getentropy.p = DSO_global_lookup("getentropy");
  401|       |    ERR_pop_to_mark();
  402|       |    if (p_getentropy.p != NULL)
  403|       |        return p_getentropy.f(buf, buflen) == 0 ? (ssize_t)buflen : -1;
  404|       |#  endif
  405|       |
  406|       |    /* Linux supports this since version 3.17 */
  407|      0|#  if defined(__linux) && defined(__NR_getrandom)
  408|      0|    return syscall(__NR_getrandom, buf, buflen, 0);
  409|       |#  elif (defined(__FreeBSD__) || defined(__NetBSD__)) && defined(KERN_ARND)
  410|       |    return sysctl_random(buf, buflen);
  411|       |#  else
  412|       |    errno = ENOSYS;
  413|       |    return -1;
  414|       |#  endif
  415|      1|}
rand_unix.c:get_time_stamp:
  811|      1|{
  812|      1|# if defined(OSSL_POSIX_TIMER_OKAY)
  813|      1|    {
  814|      1|        struct timespec ts;
  815|       |
  816|      1|        if (clock_gettime(CLOCK_REALTIME, &ts) == 0)
  ------------------
  |  Branch (816:13): [True: 1, False: 0]
  ------------------
  817|      1|            return TWO32TO64(ts.tv_sec, ts.tv_nsec);
  ------------------
  |  |   52|      1|# define TWO32TO64(a, b) ((((uint64_t)(a)) << 32) + (b))
  ------------------
  818|      1|    }
  819|      0|# endif
  820|      0|# if defined(__unix__) \
  821|      0|     || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L)
  822|      0|    {
  823|      0|        struct timeval tv;
  824|       |
  825|      0|        if (gettimeofday(&tv, NULL) == 0)
  ------------------
  |  Branch (825:13): [True: 0, False: 0]
  ------------------
  826|      0|            return TWO32TO64(tv.tv_sec, tv.tv_usec);
  ------------------
  |  |   52|      0|# define TWO32TO64(a, b) ((((uint64_t)(a)) << 32) + (b))
  ------------------
  827|      0|    }
  828|      0|# endif
  829|      0|    return time(NULL);
  830|      0|}
rand_unix.c:get_timer_bits:
  840|   202k|{
  841|   202k|    uint64_t res = OPENSSL_rdtsc();
  842|       |
  843|   202k|    if (res != 0)
  ------------------
  |  Branch (843:9): [True: 0, False: 202k]
  ------------------
  844|      0|        return res;
  845|       |
  846|       |# if defined(__sun) || defined(__hpux)
  847|       |    return gethrtime();
  848|       |# elif defined(_AIX)
  849|       |    {
  850|       |        timebasestruct_t t;
  851|       |
  852|       |        read_wall_time(&t, TIMEBASE_SZ);
  853|       |        return TWO32TO64(t.tb_high, t.tb_low);
  854|       |    }
  855|       |# elif defined(OSSL_POSIX_TIMER_OKAY)
  856|   202k|    {
  857|   202k|        struct timespec ts;
  858|       |
  859|   202k|#  ifdef CLOCK_BOOTTIME
  860|   202k|#   define CLOCK_TYPE CLOCK_BOOTTIME
  861|       |#  elif defined(_POSIX_MONOTONIC_CLOCK)
  862|       |#   define CLOCK_TYPE CLOCK_MONOTONIC
  863|       |#  else
  864|       |#   define CLOCK_TYPE CLOCK_REALTIME
  865|       |#  endif
  866|       |
  867|   202k|        if (clock_gettime(CLOCK_TYPE, &ts) == 0)
  ------------------
  |  |  860|   202k|#   define CLOCK_TYPE CLOCK_BOOTTIME
  ------------------
  |  Branch (867:13): [True: 202k, False: 0]
  ------------------
  868|   202k|            return TWO32TO64(ts.tv_sec, ts.tv_nsec);
  ------------------
  |  |   52|   202k|# define TWO32TO64(a, b) ((((uint64_t)(a)) << 32) + (b))
  ------------------
  869|   202k|    }
  870|      0|# endif
  871|      0|# if defined(__unix__) \
  872|      0|     || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L)
  873|      0|    {
  874|      0|        struct timeval tv;
  875|       |
  876|      0|        if (gettimeofday(&tv, NULL) == 0)
  ------------------
  |  Branch (876:13): [True: 0, False: 0]
  ------------------
  877|      0|            return TWO32TO64(tv.tv_sec, tv.tv_usec);
  ------------------
  |  |   52|      0|# define TWO32TO64(a, b) ((((uint64_t)(a)) << 32) + (b))
  ------------------
  878|      0|    }
  879|      0|# endif
  880|      0|    return time(NULL);
  881|      0|}

ERR_load_RSA_strings:
  240|      2|{
  241|      2|#ifndef OPENSSL_NO_ERR
  242|      2|    if (ERR_func_error_string(RSA_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (242:9): [True: 2, False: 0]
  ------------------
  243|      2|        ERR_load_strings_const(RSA_str_functs);
  244|      2|        ERR_load_strings_const(RSA_str_reasons);
  245|      2|    }
  246|      2|#endif
  247|      2|    return 1;
  248|      2|}

EVP_sm3:
   48|      2|{
   49|      2|    return &sm3_md;
   50|      2|}

OPENSSL_sk_set_cmp_func:
   35|  28.9k|{
   36|  28.9k|    OPENSSL_sk_compfunc old = sk->comp;
   37|       |
   38|  28.9k|    if (sk->comp != c)
  ------------------
  |  Branch (38:9): [True: 28.9k, False: 0]
  ------------------
   39|  28.9k|        sk->sorted = 0;
   40|  28.9k|    sk->comp = c;
   41|       |
   42|  28.9k|    return old;
   43|  28.9k|}
OPENSSL_sk_dup:
   46|  57.9k|{
   47|  57.9k|    OPENSSL_STACK *ret;
   48|       |
   49|  57.9k|    if ((ret = OPENSSL_malloc(sizeof(*ret))) == NULL) {
  ------------------
  |  |  118|  57.9k|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (49:9): [True: 0, False: 57.9k]
  ------------------
   50|      0|        CRYPTOerr(CRYPTO_F_OPENSSL_SK_DUP, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  113|      0|# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   51|      0|        return NULL;
   52|      0|    }
   53|       |
   54|       |    /* direct structure assignment */
   55|  57.9k|    *ret = *sk;
   56|       |
   57|  57.9k|    if (sk->num == 0) {
  ------------------
  |  Branch (57:9): [True: 0, False: 57.9k]
  ------------------
   58|       |        /* postpone |ret->data| allocation */
   59|      0|        ret->data = NULL;
   60|      0|        ret->num_alloc = 0;
   61|      0|        return ret;
   62|      0|    }
   63|       |    /* duplicate |sk->data| content */
   64|  57.9k|    if ((ret->data = OPENSSL_malloc(sizeof(*ret->data) * sk->num_alloc)) == NULL)
  ------------------
  |  |  118|  57.9k|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (64:9): [True: 0, False: 57.9k]
  ------------------
   65|      0|        goto err;
   66|  57.9k|    memcpy(ret->data, sk->data, sizeof(void *) * sk->num);
   67|  57.9k|    return ret;
   68|      0| err:
   69|      0|    OPENSSL_sk_free(ret);
   70|       |    return NULL;
   71|  57.9k|}
OPENSSL_sk_new_null:
  117|   231k|{
  118|       |    return OPENSSL_sk_new_reserve(NULL, 0);
  119|   231k|}
OPENSSL_sk_new:
  122|  28.9k|{
  123|  28.9k|    return OPENSSL_sk_new_reserve(c, 0);
  124|  28.9k|}
OPENSSL_sk_new_reserve:
  208|   260k|{
  209|   260k|    OPENSSL_STACK *st = OPENSSL_zalloc(sizeof(OPENSSL_STACK));
  ------------------
  |  |  120|   260k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  210|       |
  211|   260k|    if (st == NULL)
  ------------------
  |  Branch (211:9): [True: 0, False: 260k]
  ------------------
  212|      0|        return NULL;
  213|       |
  214|   260k|    st->comp = c;
  215|       |
  216|   260k|    if (n <= 0)
  ------------------
  |  Branch (216:9): [True: 260k, False: 0]
  ------------------
  217|   260k|        return st;
  218|       |
  219|      0|    if (!sk_reserve(st, n, 1)) {
  ------------------
  |  Branch (219:9): [True: 0, False: 0]
  ------------------
  220|      0|        OPENSSL_sk_free(st);
  221|      0|        return NULL;
  222|      0|    }
  223|       |
  224|      0|    return st;
  225|      0|}
OPENSSL_sk_insert:
  238|  3.56M|{
  239|  3.56M|    if (st == NULL || st->num == max_nodes)
  ------------------
  |  Branch (239:9): [True: 0, False: 3.56M]
  |  Branch (239:23): [True: 0, False: 3.56M]
  ------------------
  240|      0|        return 0;
  241|       |
  242|  3.56M|    if (!sk_reserve(st, 1, 0))
  ------------------
  |  Branch (242:9): [True: 0, False: 3.56M]
  ------------------
  243|      0|        return 0;
  244|       |
  245|  3.56M|    if ((loc >= st->num) || (loc < 0)) {
  ------------------
  |  Branch (245:9): [True: 3.56M, False: 0]
  |  Branch (245:29): [True: 0, False: 0]
  ------------------
  246|  3.56M|        st->data[st->num] = data;
  247|  3.56M|    } else {
  248|      0|        memmove(&st->data[loc + 1], &st->data[loc],
  249|      0|                sizeof(st->data[0]) * (st->num - loc));
  250|      0|        st->data[loc] = data;
  251|      0|    }
  252|  3.56M|    st->num++;
  253|  3.56M|    st->sorted = 0;
  254|  3.56M|    return st->num;
  255|  3.56M|}
OPENSSL_sk_delete:
  280|     10|{
  281|     10|    if (st == NULL || loc < 0 || loc >= st->num)
  ------------------
  |  Branch (281:9): [True: 0, False: 10]
  |  Branch (281:23): [True: 0, False: 10]
  |  Branch (281:34): [True: 0, False: 10]
  ------------------
  282|      0|        return NULL;
  283|       |
  284|     10|    return internal_delete(st, loc);
  285|     10|}
OPENSSL_sk_push:
  327|  3.56M|{
  328|  3.56M|    if (st == NULL)
  ------------------
  |  Branch (328:9): [True: 0, False: 3.56M]
  ------------------
  329|      0|        return -1;
  330|  3.56M|    return OPENSSL_sk_insert(st, data, st->num);
  331|  3.56M|}
OPENSSL_sk_pop:
  346|      2|{
  347|      2|    if (st == NULL || st->num == 0)
  ------------------
  |  Branch (347:9): [True: 2, False: 0]
  |  Branch (347:23): [True: 0, False: 0]
  ------------------
  348|      2|        return NULL;
  349|      0|    return internal_delete(st, st->num - 1);
  350|      2|}
OPENSSL_sk_pop_free:
  361|  1.27M|{
  362|  1.27M|    int i;
  363|       |
  364|  1.27M|    if (st == NULL)
  ------------------
  |  Branch (364:9): [True: 1.15M, False: 115k]
  ------------------
  365|  1.15M|        return;
  366|   115k|    for (i = 0; i < st->num; i++)
  ------------------
  |  Branch (366:17): [True: 4, False: 115k]
  ------------------
  367|      4|        if (st->data[i] != NULL)
  ------------------
  |  Branch (367:13): [True: 3, False: 1]
  ------------------
  368|      3|            func((char *)st->data[i]);
  369|   115k|    OPENSSL_sk_free(st);
  370|   115k|}
OPENSSL_sk_free:
  373|   753k|{
  374|   753k|    if (st == NULL)
  ------------------
  |  Branch (374:9): [True: 434k, False: 318k]
  ------------------
  375|   434k|        return;
  376|   318k|    OPENSSL_free(st->data);
  ------------------
  |  |  128|   318k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  377|   318k|    OPENSSL_free(st);
  ------------------
  |  |  128|   318k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  378|   318k|}
OPENSSL_sk_num:
  381|  5.97M|{
  382|  5.97M|    return st == NULL ? -1 : st->num;
  ------------------
  |  Branch (382:12): [True: 405k, False: 5.56M]
  ------------------
  383|  5.97M|}
OPENSSL_sk_value:
  386|  5.36M|{
  387|  5.36M|    if (st == NULL || i < 0 || i >= st->num)
  ------------------
  |  Branch (387:9): [True: 0, False: 5.36M]
  |  Branch (387:23): [True: 0, False: 5.36M]
  |  Branch (387:32): [True: 0, False: 5.36M]
  ------------------
  388|      0|        return NULL;
  389|  5.36M|    return (void *)st->data[i];
  390|  5.36M|}
OPENSSL_sk_set:
  393|      1|{
  394|      1|    if (st == NULL || i < 0 || i >= st->num)
  ------------------
  |  Branch (394:9): [True: 0, False: 1]
  |  Branch (394:23): [True: 0, False: 1]
  |  Branch (394:32): [True: 0, False: 1]
  ------------------
  395|      0|        return NULL;
  396|      1|    st->data[i] = data;
  397|      1|    st->sorted = 0;
  398|      1|    return (void *)st->data[i];
  399|      1|}
OPENSSL_sk_sort:
  402|  28.9k|{
  403|  28.9k|    if (st != NULL && !st->sorted && st->comp != NULL) {
  ------------------
  |  Branch (403:9): [True: 28.9k, False: 0]
  |  Branch (403:23): [True: 28.9k, False: 0]
  |  Branch (403:38): [True: 28.9k, False: 0]
  ------------------
  404|  28.9k|        if (st->num > 1)
  ------------------
  |  Branch (404:13): [True: 28.9k, False: 0]
  ------------------
  405|  28.9k|            qsort(st->data, st->num, sizeof(void *), st->comp);
  406|  28.9k|        st->sorted = 1; /* empty or single-element stack is considered sorted */
  407|  28.9k|    }
  408|  28.9k|}
stack.c:sk_reserve:
  161|  3.56M|{
  162|  3.56M|    const void **tmpdata;
  163|  3.56M|    int num_alloc;
  164|       |
  165|       |    /* Check to see the reservation isn't exceeding the hard limit */
  166|  3.56M|    if (n > max_nodes - st->num)
  ------------------
  |  Branch (166:9): [True: 0, False: 3.56M]
  ------------------
  167|      0|        return 0;
  168|       |
  169|       |    /* Figure out the new size */
  170|  3.56M|    num_alloc = st->num + n;
  171|  3.56M|    if (num_alloc < min_nodes)
  ------------------
  |  Branch (171:9): [True: 347k, False: 3.21M]
  ------------------
  172|   347k|        num_alloc = min_nodes;
  173|       |
  174|       |    /* If |st->data| allocation was postponed */
  175|  3.56M|    if (st->data == NULL) {
  ------------------
  |  Branch (175:9): [True: 115k, False: 3.44M]
  ------------------
  176|       |        /*
  177|       |         * At this point, |st->num_alloc| and |st->num| are 0;
  178|       |         * so |num_alloc| value is |n| or |min_nodes| if greater than |n|.
  179|       |         */
  180|   115k|        if ((st->data = OPENSSL_zalloc(sizeof(void *) * num_alloc)) == NULL) {
  ------------------
  |  |  120|   115k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (180:13): [True: 0, False: 115k]
  ------------------
  181|      0|            CRYPTOerr(CRYPTO_F_SK_RESERVE, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  113|      0|# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  182|      0|            return 0;
  183|      0|        }
  184|   115k|        st->num_alloc = num_alloc;
  185|   115k|        return 1;
  186|   115k|    }
  187|       |
  188|  3.44M|    if (!exact) {
  ------------------
  |  Branch (188:9): [True: 3.44M, False: 0]
  ------------------
  189|  3.44M|        if (num_alloc <= st->num_alloc)
  ------------------
  |  Branch (189:13): [True: 2.89M, False: 550k]
  ------------------
  190|  2.89M|            return 1;
  191|   550k|        num_alloc = compute_growth(num_alloc, st->num_alloc);
  192|   550k|        if (num_alloc == 0)
  ------------------
  |  Branch (192:13): [True: 0, False: 550k]
  ------------------
  193|      0|            return 0;
  194|   550k|    } else if (num_alloc == st->num_alloc) {
  ------------------
  |  Branch (194:16): [True: 0, False: 0]
  ------------------
  195|      0|        return 1;
  196|      0|    }
  197|       |
  198|   550k|    tmpdata = OPENSSL_realloc((void *)st->data, sizeof(void *) * num_alloc);
  ------------------
  |  |  122|   550k|        CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  199|   550k|    if (tmpdata == NULL)
  ------------------
  |  Branch (199:9): [True: 0, False: 550k]
  ------------------
  200|      0|        return 0;
  201|       |
  202|   550k|    st->data = tmpdata;
  203|   550k|    st->num_alloc = num_alloc;
  204|   550k|    return 1;
  205|   550k|}
stack.c:compute_growth:
  145|   550k|{
  146|   550k|    const int limit = (max_nodes / 3) * 2 + (max_nodes % 3 ? 1 : 0);
  ------------------
  |  Branch (146:46): [True: 550k, Folded]
  ------------------
  147|       |
  148|  1.10M|    while (current < target) {
  ------------------
  |  Branch (148:12): [True: 550k, False: 550k]
  ------------------
  149|       |        /* Check to see if we're at the hard limit */
  150|   550k|        if (current >= max_nodes)
  ------------------
  |  Branch (150:13): [True: 0, False: 550k]
  ------------------
  151|      0|            return 0;
  152|       |
  153|       |        /* Expand the size by a factor of 3/2 if it is within range */
  154|   550k|        current = current < limit ? current + current / 2 : max_nodes;
  ------------------
  |  Branch (154:19): [True: 550k, False: 0]
  ------------------
  155|   550k|    }
  156|   550k|    return current;
  157|   550k|}
stack.c:internal_delete:
  258|     10|{
  259|     10|    const void *ret = st->data[loc];
  260|       |
  261|     10|    if (loc != st->num - 1)
  ------------------
  |  Branch (261:9): [True: 0, False: 10]
  ------------------
  262|      0|         memmove(&st->data[loc], &st->data[loc + 1],
  263|      0|                 sizeof(st->data[0]) * (st->num - loc - 1));
  264|     10|    st->num--;
  265|       |
  266|     10|    return (void *)ret;
  267|     10|}

ERR_load_OSSL_STORE_strings:
  138|      2|{
  139|      2|#ifndef OPENSSL_NO_ERR
  140|      2|    if (ERR_func_error_string(OSSL_STORE_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (140:9): [True: 2, False: 0]
  ------------------
  141|      2|        ERR_load_strings_const(OSSL_STORE_str_functs);
  142|      2|        ERR_load_strings_const(OSSL_STORE_str_reasons);
  143|      2|    }
  144|      2|#endif
  145|      2|    return 1;
  146|      2|}

ossl_store_cleanup_int:
   31|      2|{
   32|      2|    ossl_store_destroy_loaders_int();
   33|      2|}

ossl_store_destroy_loaders_int:
  278|      2|{
  279|      2|    assert(lh_OSSL_STORE_LOADER_num_items(loader_register) == 0);
  ------------------
  |  Branch (279:5): [True: 0, False: 2]
  |  Branch (279:5): [True: 2, False: 0]
  ------------------
  280|      2|    lh_OSSL_STORE_LOADER_free(loader_register);
  281|      2|    loader_register = NULL;
  282|      2|    CRYPTO_THREAD_lock_free(registry_lock);
  283|       |    registry_lock = NULL;
  284|      2|}

CRYPTO_THREAD_lock_new:
   25|   289k|{
   26|   289k|# ifdef USE_RWLOCK
   27|   289k|    CRYPTO_RWLOCK *lock;
   28|       |
   29|   289k|    if ((lock = OPENSSL_zalloc(sizeof(pthread_rwlock_t))) == NULL) {
  ------------------
  |  |  120|   289k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (29:9): [True: 0, False: 289k]
  ------------------
   30|       |        /* Don't set error, to avoid recursion blowup. */
   31|      0|        return NULL;
   32|      0|    }
   33|       |
   34|   289k|    if (pthread_rwlock_init(lock, NULL) != 0) {
  ------------------
  |  Branch (34:9): [True: 0, False: 289k]
  ------------------
   35|      0|        OPENSSL_free(lock);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   36|      0|        return NULL;
   37|      0|    }
   38|       |# else
   39|       |    pthread_mutexattr_t attr;
   40|       |    CRYPTO_RWLOCK *lock;
   41|       |
   42|       |    if ((lock = OPENSSL_zalloc(sizeof(pthread_mutex_t))) == NULL) {
   43|       |        /* Don't set error, to avoid recursion blowup. */
   44|       |        return NULL;
   45|       |    }
   46|       |
   47|       |    pthread_mutexattr_init(&attr);
   48|       |    pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
   49|       |
   50|       |    if (pthread_mutex_init(lock, &attr) != 0) {
   51|       |        pthread_mutexattr_destroy(&attr);
   52|       |        OPENSSL_free(lock);
   53|       |        return NULL;
   54|       |    }
   55|       |
   56|       |    pthread_mutexattr_destroy(&attr);
   57|       |# endif
   58|       |
   59|   289k|    return lock;
   60|   289k|}
CRYPTO_THREAD_read_lock:
   63|   116k|{
   64|   116k|# ifdef USE_RWLOCK
   65|   116k|    if (pthread_rwlock_rdlock(lock) != 0)
  ------------------
  |  Branch (65:9): [True: 0, False: 116k]
  ------------------
   66|      0|        return 0;
   67|       |# else
   68|       |    if (pthread_mutex_lock(lock) != 0)
   69|       |        return 0;
   70|       |# endif
   71|       |
   72|   116k|    return 1;
   73|   116k|}
CRYPTO_THREAD_write_lock:
   76|   697k|{
   77|   697k|# ifdef USE_RWLOCK
   78|   697k|    if (pthread_rwlock_wrlock(lock) != 0)
  ------------------
  |  Branch (78:9): [True: 0, False: 697k]
  ------------------
   79|      0|        return 0;
   80|       |# else
   81|       |    if (pthread_mutex_lock(lock) != 0)
   82|       |        return 0;
   83|       |# endif
   84|       |
   85|   697k|    return 1;
   86|   697k|}
CRYPTO_THREAD_unlock:
   89|   813k|{
   90|   813k|# ifdef USE_RWLOCK
   91|   813k|    if (pthread_rwlock_unlock(lock) != 0)
  ------------------
  |  Branch (91:9): [True: 0, False: 813k]
  ------------------
   92|      0|        return 0;
   93|       |# else
   94|       |    if (pthread_mutex_unlock(lock) != 0)
   95|       |        return 0;
   96|       |# endif
   97|       |
   98|   813k|    return 1;
   99|   813k|}
CRYPTO_THREAD_lock_free:
  102|   289k|{
  103|   289k|    if (lock == NULL)
  ------------------
  |  Branch (103:9): [True: 10, False: 289k]
  ------------------
  104|     10|        return;
  105|       |
  106|   289k|# ifdef USE_RWLOCK
  107|   289k|    pthread_rwlock_destroy(lock);
  108|       |# else
  109|       |    pthread_mutex_destroy(lock);
  110|       |# endif
  111|   289k|    OPENSSL_free(lock);
  ------------------
  |  |  128|   289k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  112|       |
  113|   289k|    return;
  114|   289k|}
CRYPTO_THREAD_run_once:
  117|  1.91M|{
  118|  1.91M|    if (pthread_once(once, init) != 0)
  ------------------
  |  Branch (118:9): [True: 0, False: 1.91M]
  ------------------
  119|      0|        return 0;
  120|       |
  121|  1.91M|    return 1;
  122|  1.91M|}
CRYPTO_THREAD_init_local:
  125|      6|{
  126|      6|    if (pthread_key_create(key, cleanup) != 0)
  ------------------
  |  Branch (126:9): [True: 0, False: 6]
  ------------------
  127|      0|        return 0;
  128|       |
  129|      6|    return 1;
  130|      6|}
CRYPTO_THREAD_get_local:
  133|   347k|{
  134|   347k|    return pthread_getspecific(*key);
  135|   347k|}
CRYPTO_THREAD_set_local:
  138|     14|{
  139|     14|    if (pthread_setspecific(*key, val) != 0)
  ------------------
  |  Branch (139:9): [True: 0, False: 14]
  ------------------
  140|      0|        return 0;
  141|       |
  142|     14|    return 1;
  143|     14|}
CRYPTO_THREAD_cleanup_local:
  146|      6|{
  147|      6|    if (pthread_key_delete(*key) != 0)
  ------------------
  |  Branch (147:9): [True: 0, False: 6]
  ------------------
  148|      0|        return 0;
  149|       |
  150|      6|    return 1;
  151|      6|}
CRYPTO_THREAD_get_current_id:
  154|   202k|{
  155|   202k|    return pthread_self();
  156|   202k|}
CRYPTO_atomic_add:
  164|      1|{
  165|      1|# if defined(__GNUC__) && defined(__ATOMIC_ACQ_REL)
  166|      1|    if (__atomic_is_lock_free(sizeof(*val), val)) {
  ------------------
  |  Branch (166:9): [True: 1, Folded]
  ------------------
  167|      1|        *ret = __atomic_add_fetch(val, amount, __ATOMIC_ACQ_REL);
  168|      1|        return 1;
  169|      1|    }
  170|      0|# endif
  171|      0|    if (!CRYPTO_THREAD_write_lock(lock))
  ------------------
  |  Branch (171:9): [True: 0, False: 0]
  ------------------
  172|      0|        return 0;
  173|       |
  174|      0|    *val += amount;
  175|      0|    *ret  = *val;
  176|       |
  177|      0|    if (!CRYPTO_THREAD_unlock(lock))
  ------------------
  |  Branch (177:9): [True: 0, False: 0]
  ------------------
  178|      0|        return 0;
  179|       |
  180|      0|    return 1;
  181|      0|}
openssl_get_fork_id:
  203|   405k|{
  204|   405k|    return getpid();
  205|   405k|}

ERR_load_TS_strings:
  176|      2|{
  177|      2|#ifndef OPENSSL_NO_ERR
  178|      2|    if (ERR_func_error_string(TS_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (178:9): [True: 2, False: 0]
  ------------------
  179|      2|        ERR_load_strings_const(TS_str_functs);
  180|      2|        ERR_load_strings_const(TS_str_reasons);
  181|      2|    }
  182|      2|#endif
  183|      2|    return 1;
  184|      2|}

ERR_load_UI_strings:
   70|      2|{
   71|      2|#ifndef OPENSSL_NO_ERR
   72|      2|    if (ERR_func_error_string(UI_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (72:9): [True: 2, False: 0]
  ------------------
   73|      2|        ERR_load_strings_const(UI_str_functs);
   74|      2|        ERR_load_strings_const(UI_str_reasons);
   75|      2|    }
   76|      2|#endif
   77|      2|    return 1;
   78|      2|}

X509_LOOKUP_hash_dir:
   63|      2|{
   64|      2|    return &x509_dir_lookup;
   65|      2|}
by_dir.c:new_dir:
   94|      2|{
   95|      2|    BY_DIR *a = OPENSSL_malloc(sizeof(*a));
  ------------------
  |  |  118|      2|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   96|       |
   97|      2|    if (a == NULL) {
  ------------------
  |  Branch (97:9): [True: 0, False: 2]
  ------------------
   98|      0|        X509err(X509_F_NEW_DIR, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   99|      0|        return 0;
  100|      0|    }
  101|       |
  102|      2|    if ((a->buffer = BUF_MEM_new()) == NULL) {
  ------------------
  |  Branch (102:9): [True: 0, False: 2]
  ------------------
  103|      0|        X509err(X509_F_NEW_DIR, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  104|      0|        goto err;
  105|      0|    }
  106|      2|    a->dirs = NULL;
  107|      2|    a->lock = CRYPTO_THREAD_lock_new();
  108|      2|    if (a->lock == NULL) {
  ------------------
  |  Branch (108:9): [True: 0, False: 2]
  ------------------
  109|      0|        BUF_MEM_free(a->buffer);
  110|      0|        X509err(X509_F_NEW_DIR, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  111|      0|        goto err;
  112|      0|    }
  113|      2|    lu->method_data = a;
  114|      2|    return 1;
  115|       |
  116|      0| err:
  117|      0|    OPENSSL_free(a);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  118|      0|    return 0;
  119|      2|}
by_dir.c:dir_ctrl:
   69|      2|{
   70|      2|    int ret = 0;
   71|      2|    BY_DIR *ld = (BY_DIR *)ctx->method_data;
   72|       |
   73|      2|    switch (cmd) {
  ------------------
  |  Branch (73:13): [True: 2, False: 0]
  ------------------
   74|      2|    case X509_L_ADD_DIR:
  ------------------
  |  |   91|      2|# define X509_L_ADD_DIR          2
  ------------------
  |  Branch (74:5): [True: 2, False: 0]
  ------------------
   75|      2|        if (argl == X509_FILETYPE_DEFAULT) {
  ------------------
  |  |   46|      2|# define X509_FILETYPE_DEFAULT   3
  ------------------
  |  Branch (75:13): [True: 2, False: 0]
  ------------------
   76|      2|            const char *dir = ossl_safe_getenv(X509_get_default_cert_dir_env());
   77|       |
   78|      2|            if (dir)
  ------------------
  |  Branch (78:17): [True: 0, False: 2]
  ------------------
   79|      0|                ret = add_cert_dir(ld, dir, X509_FILETYPE_PEM);
  ------------------
  |  |   44|      0|# define X509_FILETYPE_PEM       1
  ------------------
   80|      2|            else
   81|      2|                ret = add_cert_dir(ld, X509_get_default_cert_dir(),
   82|      2|                                   X509_FILETYPE_PEM);
  ------------------
  |  |   44|      2|# define X509_FILETYPE_PEM       1
  ------------------
   83|      2|            if (!ret) {
  ------------------
  |  Branch (83:17): [True: 0, False: 2]
  ------------------
   84|      0|                X509err(X509_F_DIR_CTRL, X509_R_LOADING_CERT_DIR);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   85|      0|            }
   86|      2|        } else
   87|      0|            ret = add_cert_dir(ld, argp, (int)argl);
   88|      2|        break;
   89|      2|    }
   90|      2|    return ret;
   91|      2|}
by_dir.c:add_cert_dir:
  154|      2|{
  155|      2|    int j;
  156|      2|    size_t len;
  157|      2|    const char *s, *ss, *p;
  158|       |
  159|      2|    if (dir == NULL || !*dir) {
  ------------------
  |  Branch (159:9): [True: 0, False: 2]
  |  Branch (159:24): [True: 0, False: 2]
  ------------------
  160|      0|        X509err(X509_F_ADD_CERT_DIR, X509_R_INVALID_DIRECTORY);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  161|      0|        return 0;
  162|      0|    }
  163|       |
  164|      2|    s = dir;
  165|      2|    p = s;
  166|     30|    do {
  167|     30|        if ((*p == LIST_SEPARATOR_CHAR) || (*p == '\0')) {
  ------------------
  |  |  300|     30|#   define LIST_SEPARATOR_CHAR ':'
  ------------------
  |  Branch (167:13): [True: 0, False: 30]
  |  Branch (167:44): [True: 2, False: 28]
  ------------------
  168|      2|            BY_DIR_ENTRY *ent;
  169|       |
  170|      2|            ss = s;
  171|      2|            s = p + 1;
  172|      2|            len = p - ss;
  173|      2|            if (len == 0)
  ------------------
  |  Branch (173:17): [True: 0, False: 2]
  ------------------
  174|      0|                continue;
  175|      2|            for (j = 0; j < sk_BY_DIR_ENTRY_num(ctx->dirs); j++) {
  ------------------
  |  Branch (175:25): [True: 0, False: 2]
  ------------------
  176|      0|                ent = sk_BY_DIR_ENTRY_value(ctx->dirs, j);
  177|      0|                if (strlen(ent->dir) == len && strncmp(ent->dir, ss, len) == 0)
  ------------------
  |  Branch (177:21): [True: 0, False: 0]
  |  Branch (177:48): [True: 0, False: 0]
  ------------------
  178|      0|                    break;
  179|      0|            }
  180|      2|            if (j < sk_BY_DIR_ENTRY_num(ctx->dirs))
  ------------------
  |  Branch (180:17): [True: 0, False: 2]
  ------------------
  181|      0|                continue;
  182|      2|            if (ctx->dirs == NULL) {
  ------------------
  |  Branch (182:17): [True: 2, False: 0]
  ------------------
  183|      2|                ctx->dirs = sk_BY_DIR_ENTRY_new_null();
  184|      2|                if (!ctx->dirs) {
  ------------------
  |  Branch (184:21): [True: 0, False: 2]
  ------------------
  185|      0|                    X509err(X509_F_ADD_CERT_DIR, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  186|      0|                    return 0;
  187|      0|                }
  188|      2|            }
  189|      2|            ent = OPENSSL_malloc(sizeof(*ent));
  ------------------
  |  |  118|      2|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  190|      2|            if (ent == NULL) {
  ------------------
  |  Branch (190:17): [True: 0, False: 2]
  ------------------
  191|      0|                X509err(X509_F_ADD_CERT_DIR, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  192|      0|                return 0;
  193|      0|            }
  194|      2|            ent->dir_type = type;
  195|      2|            ent->hashes = sk_BY_DIR_HASH_new(by_dir_hash_cmp);
  196|      2|            ent->dir = OPENSSL_strndup(ss, len);
  ------------------
  |  |  134|      2|        CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  197|      2|            if (ent->dir == NULL || ent->hashes == NULL) {
  ------------------
  |  Branch (197:17): [True: 0, False: 2]
  |  Branch (197:37): [True: 0, False: 2]
  ------------------
  198|      0|                by_dir_entry_free(ent);
  199|      0|                return 0;
  200|      0|            }
  201|      2|            if (!sk_BY_DIR_ENTRY_push(ctx->dirs, ent)) {
  ------------------
  |  Branch (201:17): [True: 0, False: 2]
  ------------------
  202|      0|                by_dir_entry_free(ent);
  203|      0|                X509err(X509_F_ADD_CERT_DIR, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  204|      0|                return 0;
  205|      0|            }
  206|      2|        }
  207|     30|    } while (*p++ != '\0');
  ------------------
  |  Branch (207:14): [True: 28, False: 2]
  ------------------
  208|      2|    return 1;
  209|      2|}

X509_LOOKUP_file:
   36|      2|{
   37|      2|    return &x509_file_lookup;
   38|      2|}
X509_load_cert_crl_file:
  189|      2|{
  190|      2|    STACK_OF(X509_INFO) *inf;
  ------------------
  |  |   20|      2|# define STACK_OF(type) struct stack_st_##type
  ------------------
  191|      2|    X509_INFO *itmp;
  192|      2|    BIO *in;
  193|      2|    int i, count = 0;
  194|       |
  195|      2|    if (type != X509_FILETYPE_PEM)
  ------------------
  |  |   44|      2|# define X509_FILETYPE_PEM       1
  ------------------
  |  Branch (195:9): [True: 0, False: 2]
  ------------------
  196|      0|        return X509_load_cert_file(ctx, file, type);
  197|      2|    in = BIO_new_file(file, "r");
  198|      2|    if (!in) {
  ------------------
  |  Branch (198:9): [True: 2, False: 0]
  ------------------
  199|      2|        X509err(X509_F_X509_LOAD_CERT_CRL_FILE, ERR_R_SYS_LIB);
  ------------------
  |  |  110|      2|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      2|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  200|      2|        return 0;
  201|      2|    }
  202|      0|    inf = PEM_X509_INFO_read_bio(in, NULL, NULL, "");
  203|      0|    BIO_free(in);
  204|      0|    if (!inf) {
  ------------------
  |  Branch (204:9): [True: 0, False: 0]
  ------------------
  205|      0|        X509err(X509_F_X509_LOAD_CERT_CRL_FILE, ERR_R_PEM_LIB);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  206|      0|        return 0;
  207|      0|    }
  208|      0|    for (i = 0; i < sk_X509_INFO_num(inf); i++) {
  ------------------
  |  Branch (208:17): [True: 0, False: 0]
  ------------------
  209|      0|        itmp = sk_X509_INFO_value(inf, i);
  210|      0|        if (itmp->x509) {
  ------------------
  |  Branch (210:13): [True: 0, False: 0]
  ------------------
  211|      0|            if (!X509_STORE_add_cert(ctx->store_ctx, itmp->x509))
  ------------------
  |  Branch (211:17): [True: 0, False: 0]
  ------------------
  212|      0|                goto err;
  213|      0|            count++;
  214|      0|        }
  215|      0|        if (itmp->crl) {
  ------------------
  |  Branch (215:13): [True: 0, False: 0]
  ------------------
  216|      0|            if (!X509_STORE_add_crl(ctx->store_ctx, itmp->crl))
  ------------------
  |  Branch (216:17): [True: 0, False: 0]
  ------------------
  217|      0|                goto err;
  218|      0|            count++;
  219|      0|        }
  220|      0|    }
  221|      0|    if (count == 0)
  ------------------
  |  Branch (221:9): [True: 0, False: 0]
  ------------------
  222|      0|        X509err(X509_F_X509_LOAD_CERT_CRL_FILE,
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  223|      0|                X509_R_NO_CERTIFICATE_OR_CRL_FOUND);
  224|      0| err:
  225|      0|    sk_X509_INFO_pop_free(inf, X509_INFO_free);
  226|      0|    return count;
  227|      0|}
by_file.c:by_file_ctrl:
   42|      2|{
   43|      2|    int ok = 0;
   44|      2|    const char *file;
   45|       |
   46|      2|    switch (cmd) {
  ------------------
  |  Branch (46:13): [True: 2, False: 0]
  ------------------
   47|      2|    case X509_L_FILE_LOAD:
  ------------------
  |  |   90|      2|# define X509_L_FILE_LOAD        1
  ------------------
  |  Branch (47:5): [True: 2, False: 0]
  ------------------
   48|      2|        if (argl == X509_FILETYPE_DEFAULT) {
  ------------------
  |  |   46|      2|# define X509_FILETYPE_DEFAULT   3
  ------------------
  |  Branch (48:13): [True: 2, False: 0]
  ------------------
   49|      2|            file = ossl_safe_getenv(X509_get_default_cert_file_env());
   50|      2|            if (file)
  ------------------
  |  Branch (50:17): [True: 0, False: 2]
  ------------------
   51|      0|                ok = (X509_load_cert_crl_file(ctx, file,
   52|      0|                                              X509_FILETYPE_PEM) != 0);
  ------------------
  |  |   44|      0|# define X509_FILETYPE_PEM       1
  ------------------
   53|       |
   54|      2|            else
   55|      2|                ok = (X509_load_cert_crl_file
   56|      2|                      (ctx, X509_get_default_cert_file(),
   57|      2|                       X509_FILETYPE_PEM) != 0);
  ------------------
  |  |   44|      2|# define X509_FILETYPE_PEM       1
  ------------------
   58|       |
   59|      2|            if (!ok) {
  ------------------
  |  Branch (59:17): [True: 2, False: 0]
  ------------------
   60|      2|                X509err(X509_F_BY_FILE_CTRL, X509_R_LOADING_DEFAULTS);
  ------------------
  |  |  110|      2|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      2|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   61|      2|            }
   62|      2|        } else {
   63|      0|            if (argl == X509_FILETYPE_PEM)
  ------------------
  |  |   44|      0|# define X509_FILETYPE_PEM       1
  ------------------
  |  Branch (63:17): [True: 0, False: 0]
  ------------------
   64|      0|                ok = (X509_load_cert_crl_file(ctx, argp,
   65|      0|                                              X509_FILETYPE_PEM) != 0);
  ------------------
  |  |   44|      0|# define X509_FILETYPE_PEM       1
  ------------------
   66|      0|            else
   67|      0|                ok = (X509_load_cert_file(ctx, argp, (int)argl) != 0);
   68|      0|        }
   69|      2|        break;
   70|      2|    }
   71|      2|    return ok;
   72|      2|}

X509_STORE_set_default_paths:
   16|      2|{
   17|      2|    X509_LOOKUP *lookup;
   18|       |
   19|      2|    lookup = X509_STORE_add_lookup(ctx, X509_LOOKUP_file());
   20|      2|    if (lookup == NULL)
  ------------------
  |  Branch (20:9): [True: 0, False: 2]
  ------------------
   21|      0|        return 0;
   22|      2|    X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT);
  ------------------
  |  |   94|      2|                X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL)
  |  |  ------------------
  |  |  |  |   90|      2|# define X509_L_FILE_LOAD        1
  |  |  ------------------
  ------------------
   23|       |
   24|      2|    lookup = X509_STORE_add_lookup(ctx, X509_LOOKUP_hash_dir());
   25|      2|    if (lookup == NULL)
  ------------------
  |  Branch (25:9): [True: 0, False: 2]
  ------------------
   26|      0|        return 0;
   27|      2|    X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
  ------------------
  |  |   97|      2|                X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL)
  |  |  ------------------
  |  |  |  |   91|      2|# define X509_L_ADD_DIR          2
  |  |  ------------------
  ------------------
   28|       |
   29|       |    /* clear any errors */
   30|      2|    ERR_clear_error();
   31|       |
   32|      2|    return 1;
   33|      2|}

X509_get_default_cert_area:
   21|      4|{
   22|      4|    return X509_CERT_AREA;
  ------------------
  |  |   57|      4|#  define X509_CERT_AREA          OPENSSLDIR
  ------------------
   23|      4|}
X509_get_default_cert_dir:
   26|      2|{
   27|      2|    return X509_CERT_DIR;
  ------------------
  |  |   58|      2|#  define X509_CERT_DIR           OPENSSLDIR "/certs"
  ------------------
   28|      2|}
X509_get_default_cert_file:
   31|      2|{
   32|      2|    return X509_CERT_FILE;
  ------------------
  |  |   59|      2|#  define X509_CERT_FILE          OPENSSLDIR "/cert.pem"
  ------------------
   33|      2|}
X509_get_default_cert_dir_env:
   36|      2|{
   37|      2|    return X509_CERT_DIR_EVP;
  ------------------
  |  |   70|      2|# define X509_CERT_DIR_EVP        "SSL_CERT_DIR"
  ------------------
   38|      2|}
X509_get_default_cert_file_env:
   41|      2|{
   42|      2|    return X509_CERT_FILE_EVP;
  ------------------
  |  |   71|      2|# define X509_CERT_FILE_EVP       "SSL_CERT_FILE"
  ------------------
   43|      2|}

ERR_load_X509_strings:
  176|      2|{
  177|      2|#ifndef OPENSSL_NO_ERR
  178|      2|    if (ERR_func_error_string(X509_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (178:9): [True: 2, False: 0]
  ------------------
  179|      2|        ERR_load_strings_const(X509_str_functs);
  180|      2|        ERR_load_strings_const(X509_str_reasons);
  181|      2|    }
  182|      2|#endif
  183|      2|    return 1;
  184|      2|}

X509_LOOKUP_new:
   19|      4|{
   20|      4|    X509_LOOKUP *ret = OPENSSL_zalloc(sizeof(*ret));
  ------------------
  |  |  120|      4|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   21|       |
   22|      4|    if (ret == NULL) {
  ------------------
  |  Branch (22:9): [True: 0, False: 4]
  ------------------
   23|      0|        X509err(X509_F_X509_LOOKUP_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   24|      0|        return NULL;
   25|      0|    }
   26|       |
   27|      4|    ret->method = method;
   28|      4|    if (method->new_item != NULL && method->new_item(ret) == 0) {
  ------------------
  |  Branch (28:9): [True: 2, False: 2]
  |  Branch (28:37): [True: 0, False: 2]
  ------------------
   29|      0|        OPENSSL_free(ret);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   30|      0|        return NULL;
   31|      0|    }
   32|      4|    return ret;
   33|      4|}
X509_LOOKUP_ctrl:
   76|      4|{
   77|      4|    if (ctx->method == NULL)
  ------------------
  |  Branch (77:9): [True: 0, False: 4]
  ------------------
   78|      0|        return -1;
   79|      4|    if (ctx->method->ctrl != NULL)
  ------------------
  |  Branch (79:9): [True: 4, False: 0]
  ------------------
   80|      4|        return ctx->method->ctrl(ctx, cmd, argc, argl, ret);
   81|      0|    else
   82|      0|        return 1;
   83|      4|}
X509_STORE_new:
  161|  28.9k|{
  162|  28.9k|    X509_STORE *ret = OPENSSL_zalloc(sizeof(*ret));
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  163|       |
  164|  28.9k|    if (ret == NULL) {
  ------------------
  |  Branch (164:9): [True: 0, False: 28.9k]
  ------------------
  165|      0|        X509err(X509_F_X509_STORE_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  166|      0|        return NULL;
  167|      0|    }
  168|  28.9k|    if ((ret->objs = sk_X509_OBJECT_new(x509_object_cmp)) == NULL) {
  ------------------
  |  Branch (168:9): [True: 0, False: 28.9k]
  ------------------
  169|      0|        X509err(X509_F_X509_STORE_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  170|      0|        goto err;
  171|      0|    }
  172|  28.9k|    ret->cache = 1;
  173|  28.9k|    if ((ret->get_cert_methods = sk_X509_LOOKUP_new_null()) == NULL) {
  ------------------
  |  Branch (173:9): [True: 0, False: 28.9k]
  ------------------
  174|      0|        X509err(X509_F_X509_STORE_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  175|      0|        goto err;
  176|      0|    }
  177|       |
  178|  28.9k|    if ((ret->param = X509_VERIFY_PARAM_new()) == NULL) {
  ------------------
  |  Branch (178:9): [True: 0, False: 28.9k]
  ------------------
  179|      0|        X509err(X509_F_X509_STORE_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  180|      0|        goto err;
  181|      0|    }
  182|  28.9k|    if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_X509_STORE, ret, &ret->ex_data)) {
  ------------------
  |  |   98|  28.9k|# define CRYPTO_EX_INDEX_X509_STORE       4
  ------------------
  |  Branch (182:9): [True: 0, False: 28.9k]
  ------------------
  183|      0|        X509err(X509_F_X509_STORE_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  184|      0|        goto err;
  185|      0|    }
  186|       |
  187|  28.9k|    ret->lock = CRYPTO_THREAD_lock_new();
  188|  28.9k|    if (ret->lock == NULL) {
  ------------------
  |  Branch (188:9): [True: 0, False: 28.9k]
  ------------------
  189|      0|        X509err(X509_F_X509_STORE_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  190|      0|        goto err;
  191|      0|    }
  192|       |
  193|  28.9k|    ret->references = 1;
  194|  28.9k|    return ret;
  195|       |
  196|      0|err:
  197|      0|    X509_VERIFY_PARAM_free(ret->param);
  198|      0|    sk_X509_OBJECT_free(ret->objs);
  199|      0|    sk_X509_LOOKUP_free(ret->get_cert_methods);
  200|      0|    OPENSSL_free(ret);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  201|       |    return NULL;
  202|  28.9k|}
X509_STORE_free:
  205|   173k|{
  206|   173k|    int i;
  207|   173k|    STACK_OF(X509_LOOKUP) *sk;
  ------------------
  |  |   20|   173k|# define STACK_OF(type) struct stack_st_##type
  ------------------
  208|   173k|    X509_LOOKUP *lu;
  209|       |
  210|   173k|    if (vfy == NULL)
  ------------------
  |  Branch (210:9): [True: 115k, False: 57.9k]
  ------------------
  211|   115k|        return;
  212|  57.9k|    CRYPTO_DOWN_REF(&vfy->references, &i, vfy->lock);
  213|  57.9k|    REF_PRINT_COUNT("X509_STORE", vfy);
  214|  57.9k|    if (i > 0)
  ------------------
  |  Branch (214:9): [True: 28.9k, False: 28.9k]
  ------------------
  215|  28.9k|        return;
  216|  28.9k|    REF_ASSERT_ISNT(i < 0);
  ------------------
  |  |  138|  28.9k|    (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0)
  |  |  ------------------
  |  |  |  Branch (138:12): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  217|       |
  218|  28.9k|    sk = vfy->get_cert_methods;
  219|  28.9k|    for (i = 0; i < sk_X509_LOOKUP_num(sk); i++) {
  ------------------
  |  Branch (219:17): [True: 0, False: 28.9k]
  ------------------
  220|      0|        lu = sk_X509_LOOKUP_value(sk, i);
  221|      0|        X509_LOOKUP_shutdown(lu);
  222|      0|        X509_LOOKUP_free(lu);
  223|      0|    }
  224|  28.9k|    sk_X509_LOOKUP_free(sk);
  225|  28.9k|    sk_X509_OBJECT_pop_free(vfy->objs, X509_OBJECT_free);
  226|       |
  227|  28.9k|    CRYPTO_free_ex_data(CRYPTO_EX_INDEX_X509_STORE, vfy, &vfy->ex_data);
  ------------------
  |  |   98|  28.9k|# define CRYPTO_EX_INDEX_X509_STORE       4
  ------------------
  228|  28.9k|    X509_VERIFY_PARAM_free(vfy->param);
  229|  28.9k|    CRYPTO_THREAD_lock_free(vfy->lock);
  230|  28.9k|    OPENSSL_free(vfy);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  231|  28.9k|}
X509_STORE_up_ref:
  234|  28.9k|{
  235|  28.9k|    int i;
  236|       |
  237|  28.9k|    if (CRYPTO_UP_REF(&vfy->references, &i, vfy->lock) <= 0)
  ------------------
  |  Branch (237:9): [True: 0, False: 28.9k]
  ------------------
  238|      0|        return 0;
  239|       |
  240|  28.9k|    REF_PRINT_COUNT("X509_STORE", a);
  241|  28.9k|    REF_ASSERT_ISNT(i < 2);
  ------------------
  |  |  138|  28.9k|    (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0)
  |  |  ------------------
  |  |  |  Branch (138:12): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  242|  28.9k|    return ((i > 1) ? 1 : 0);
  ------------------
  |  Branch (242:13): [True: 28.9k, False: 0]
  ------------------
  243|  28.9k|}
X509_STORE_add_lookup:
  246|      4|{
  247|      4|    int i;
  248|      4|    STACK_OF(X509_LOOKUP) *sk;
  ------------------
  |  |   20|      4|# define STACK_OF(type) struct stack_st_##type
  ------------------
  249|      4|    X509_LOOKUP *lu;
  250|       |
  251|      4|    sk = v->get_cert_methods;
  252|      6|    for (i = 0; i < sk_X509_LOOKUP_num(sk); i++) {
  ------------------
  |  Branch (252:17): [True: 2, False: 4]
  ------------------
  253|      2|        lu = sk_X509_LOOKUP_value(sk, i);
  254|      2|        if (m == lu->method) {
  ------------------
  |  Branch (254:13): [True: 0, False: 2]
  ------------------
  255|      0|            return lu;
  256|      0|        }
  257|      2|    }
  258|       |    /* a new one */
  259|      4|    lu = X509_LOOKUP_new(m);
  260|      4|    if (lu == NULL) {
  ------------------
  |  Branch (260:9): [True: 0, False: 4]
  ------------------
  261|      0|        X509err(X509_F_X509_STORE_ADD_LOOKUP, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  262|      0|        return NULL;
  263|      0|    }
  264|       |
  265|      4|    lu->store_ctx = v;
  266|      4|    if (sk_X509_LOOKUP_push(v->get_cert_methods, lu))
  ------------------
  |  Branch (266:9): [True: 4, False: 0]
  ------------------
  267|      4|        return lu;
  268|       |    /* malloc failed */
  269|      0|    X509err(X509_F_X509_STORE_ADD_LOOKUP, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  270|      0|    X509_LOOKUP_free(lu);
  271|       |    return NULL;
  272|      4|}

X509_VERIFY_PARAM_new:
   83|  86.9k|{
   84|  86.9k|    X509_VERIFY_PARAM *param;
   85|       |
   86|  86.9k|    param = OPENSSL_zalloc(sizeof(*param));
  ------------------
  |  |  120|  86.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   87|  86.9k|    if (param == NULL) {
  ------------------
  |  Branch (87:9): [True: 0, False: 86.9k]
  ------------------
   88|      0|        X509err(X509_F_X509_VERIFY_PARAM_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  110|      0|# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   89|      0|        return NULL;
   90|      0|    }
   91|  86.9k|    param->trust = X509_TRUST_DEFAULT;
  ------------------
  |  |  116|  86.9k|# define X509_TRUST_DEFAULT      0 /* Only valid in purpose settings */
  ------------------
   92|       |    /* param->inh_flags = X509_VP_FLAG_DEFAULT; */
   93|  86.9k|    param->depth = -1;
   94|  86.9k|    param->auth_level = -1; /* -1 means unset, 0 is explicit */
   95|  86.9k|    return param;
   96|  86.9k|}
X509_VERIFY_PARAM_free:
   99|  86.9k|{
  100|  86.9k|    if (param == NULL)
  ------------------
  |  Branch (100:9): [True: 0, False: 86.9k]
  ------------------
  101|      0|        return;
  102|  86.9k|    sk_ASN1_OBJECT_pop_free(param->policies, ASN1_OBJECT_free);
  103|  86.9k|    sk_OPENSSL_STRING_pop_free(param->hosts, str_free);
  104|  86.9k|    OPENSSL_free(param->peername);
  ------------------
  |  |  128|  86.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  105|  86.9k|    OPENSSL_free(param->email);
  ------------------
  |  |  128|  86.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  106|  86.9k|    OPENSSL_free(param->ip);
  ------------------
  |  |  128|  86.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  107|  86.9k|    OPENSSL_free(param);
  ------------------
  |  |  128|  86.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  108|  86.9k|}
X509_VERIFY_PARAM_inherit:
  156|  28.9k|{
  157|  28.9k|    unsigned long inh_flags;
  158|  28.9k|    int to_default, to_overwrite;
  159|  28.9k|    if (!src)
  ------------------
  |  Branch (159:9): [True: 0, False: 28.9k]
  ------------------
  160|      0|        return 1;
  161|  28.9k|    inh_flags = dest->inh_flags | src->inh_flags;
  162|       |
  163|  28.9k|    if (inh_flags & X509_VP_FLAG_ONCE)
  ------------------
  |  |  248|  28.9k|# define X509_VP_FLAG_ONCE                       0x10
  ------------------
  |  Branch (163:9): [True: 0, False: 28.9k]
  ------------------
  164|      0|        dest->inh_flags = 0;
  165|       |
  166|  28.9k|    if (inh_flags & X509_VP_FLAG_LOCKED)
  ------------------
  |  |  247|  28.9k|# define X509_VP_FLAG_LOCKED                     0x8
  ------------------
  |  Branch (166:9): [True: 0, False: 28.9k]
  ------------------
  167|      0|        return 1;
  168|       |
  169|  28.9k|    if (inh_flags & X509_VP_FLAG_DEFAULT)
  ------------------
  |  |  244|  28.9k|# define X509_VP_FLAG_DEFAULT                    0x1
  ------------------
  |  Branch (169:9): [True: 0, False: 28.9k]
  ------------------
  170|      0|        to_default = 1;
  171|  28.9k|    else
  172|  28.9k|        to_default = 0;
  173|       |
  174|  28.9k|    if (inh_flags & X509_VP_FLAG_OVERWRITE)
  ------------------
  |  |  245|  28.9k|# define X509_VP_FLAG_OVERWRITE                  0x2
  ------------------
  |  Branch (174:9): [True: 0, False: 28.9k]
  ------------------
  175|      0|        to_overwrite = 1;
  176|  28.9k|    else
  177|  28.9k|        to_overwrite = 0;
  178|       |
  179|  28.9k|    x509_verify_param_copy(purpose, 0);
  ------------------
  |  |  151|  28.9k|        if (test_x509_verify_param_copy(field, def)) \
  |  |  ------------------
  |  |  |  |  145|  28.9k|        (to_overwrite || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (145:10): [True: 0, False: 28.9k]
  |  |  |  |  ------------------
  |  |  |  |  146|  28.9k|                ((src->field != def) && (to_default || (dest->field == def))))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (146:18): [True: 0, False: 28.9k]
  |  |  |  |  |  Branch (146:42): [True: 0, False: 0]
  |  |  |  |  |  Branch (146:56): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  152|  28.9k|                dest->field = src->field
  ------------------
  180|  28.9k|    x509_verify_param_copy(trust, X509_TRUST_DEFAULT);
  ------------------
  |  |  151|  28.9k|        if (test_x509_verify_param_copy(field, def)) \
  |  |  ------------------
  |  |  |  |  145|  28.9k|        (to_overwrite || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (145:10): [True: 0, False: 28.9k]
  |  |  |  |  ------------------
  |  |  |  |  146|  28.9k|                ((src->field != def) && (to_default || (dest->field == def))))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (146:18): [True: 0, False: 28.9k]
  |  |  |  |  |  Branch (146:42): [True: 0, False: 0]
  |  |  |  |  |  Branch (146:56): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  152|  28.9k|                dest->field = src->field
  ------------------
  181|  28.9k|    x509_verify_param_copy(depth, -1);
  ------------------
  |  |  151|  28.9k|        if (test_x509_verify_param_copy(field, def)) \
  |  |  ------------------
  |  |  |  |  145|  28.9k|        (to_overwrite || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (145:10): [True: 0, False: 28.9k]
  |  |  |  |  ------------------
  |  |  |  |  146|  28.9k|                ((src->field != def) && (to_default || (dest->field == def))))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (146:18): [True: 0, False: 28.9k]
  |  |  |  |  |  Branch (146:42): [True: 0, False: 0]
  |  |  |  |  |  Branch (146:56): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  152|  28.9k|                dest->field = src->field
  ------------------
  182|  28.9k|    x509_verify_param_copy(auth_level, -1);
  ------------------
  |  |  151|  28.9k|        if (test_x509_verify_param_copy(field, def)) \
  |  |  ------------------
  |  |  |  |  145|  28.9k|        (to_overwrite || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (145:10): [True: 0, False: 28.9k]
  |  |  |  |  ------------------
  |  |  |  |  146|  28.9k|                ((src->field != def) && (to_default || (dest->field == def))))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (146:18): [True: 0, False: 28.9k]
  |  |  |  |  |  Branch (146:42): [True: 0, False: 0]
  |  |  |  |  |  Branch (146:56): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  152|  28.9k|                dest->field = src->field
  ------------------
  183|       |
  184|       |    /* If overwrite or check time not set, copy across */
  185|       |
  186|  28.9k|    if (to_overwrite || !(dest->flags & X509_V_FLAG_USE_CHECK_TIME)) {
  ------------------
  |  |  198|  28.9k|# define X509_V_FLAG_USE_CHECK_TIME              0x2
  ------------------
  |  Branch (186:9): [True: 0, False: 28.9k]
  |  Branch (186:25): [True: 28.9k, False: 0]
  ------------------
  187|  28.9k|        dest->check_time = src->check_time;
  188|  28.9k|        dest->flags &= ~X509_V_FLAG_USE_CHECK_TIME;
  ------------------
  |  |  198|  28.9k|# define X509_V_FLAG_USE_CHECK_TIME              0x2
  ------------------
  189|       |        /* Don't need to copy flag: that is done below */
  190|  28.9k|    }
  191|       |
  192|  28.9k|    if (inh_flags & X509_VP_FLAG_RESET_FLAGS)
  ------------------
  |  |  246|  28.9k|# define X509_VP_FLAG_RESET_FLAGS                0x4
  ------------------
  |  Branch (192:9): [True: 0, False: 28.9k]
  ------------------
  193|      0|        dest->flags = 0;
  194|       |
  195|  28.9k|    dest->flags |= src->flags;
  196|       |
  197|  28.9k|    if (test_x509_verify_param_copy(policies, NULL)) {
  ------------------
  |  |  145|  28.9k|        (to_overwrite || \
  |  |  ------------------
  |  |  |  Branch (145:10): [True: 0, False: 28.9k]
  |  |  ------------------
  |  |  146|  28.9k|                ((src->field != def) && (to_default || (dest->field == def))))
  |  |  ------------------
  |  |  |  Branch (146:18): [True: 0, False: 28.9k]
  |  |  |  Branch (146:42): [True: 0, False: 0]
  |  |  |  Branch (146:56): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  198|      0|        if (!X509_VERIFY_PARAM_set1_policies(dest, src->policies))
  ------------------
  |  Branch (198:13): [True: 0, False: 0]
  ------------------
  199|      0|            return 0;
  200|      0|    }
  201|       |
  202|  28.9k|    x509_verify_param_copy(hostflags, 0);
  ------------------
  |  |  151|  28.9k|        if (test_x509_verify_param_copy(field, def)) \
  |  |  ------------------
  |  |  |  |  145|  28.9k|        (to_overwrite || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (145:10): [True: 0, False: 28.9k]
  |  |  |  |  ------------------
  |  |  |  |  146|  28.9k|                ((src->field != def) && (to_default || (dest->field == def))))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (146:18): [True: 0, False: 28.9k]
  |  |  |  |  |  Branch (146:42): [True: 0, False: 0]
  |  |  |  |  |  Branch (146:56): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  152|  28.9k|                dest->field = src->field
  ------------------
  203|       |
  204|  28.9k|    if (test_x509_verify_param_copy(hosts, NULL)) {
  ------------------
  |  |  145|  28.9k|        (to_overwrite || \
  |  |  ------------------
  |  |  |  Branch (145:10): [True: 0, False: 28.9k]
  |  |  ------------------
  |  |  146|  28.9k|                ((src->field != def) && (to_default || (dest->field == def))))
  |  |  ------------------
  |  |  |  Branch (146:18): [True: 0, False: 28.9k]
  |  |  |  Branch (146:42): [True: 0, False: 0]
  |  |  |  Branch (146:56): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  205|      0|        sk_OPENSSL_STRING_pop_free(dest->hosts, str_free);
  206|      0|        dest->hosts = NULL;
  207|      0|        if (src->hosts) {
  ------------------
  |  Branch (207:13): [True: 0, False: 0]
  ------------------
  208|      0|            dest->hosts =
  209|      0|                sk_OPENSSL_STRING_deep_copy(src->hosts, str_copy, str_free);
  210|      0|            if (dest->hosts == NULL)
  ------------------
  |  Branch (210:17): [True: 0, False: 0]
  ------------------
  211|      0|                return 0;
  212|      0|        }
  213|      0|    }
  214|       |
  215|  28.9k|    if (test_x509_verify_param_copy(email, NULL)) {
  ------------------
  |  |  145|  28.9k|        (to_overwrite || \
  |  |  ------------------
  |  |  |  Branch (145:10): [True: 0, False: 28.9k]
  |  |  ------------------
  |  |  146|  28.9k|                ((src->field != def) && (to_default || (dest->field == def))))
  |  |  ------------------
  |  |  |  Branch (146:18): [True: 0, False: 28.9k]
  |  |  |  Branch (146:42): [True: 0, False: 0]
  |  |  |  Branch (146:56): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  216|      0|        if (!X509_VERIFY_PARAM_set1_email(dest, src->email, src->emaillen))
  ------------------
  |  Branch (216:13): [True: 0, False: 0]
  ------------------
  217|      0|            return 0;
  218|      0|    }
  219|       |
  220|  28.9k|    if (test_x509_verify_param_copy(ip, NULL)) {
  ------------------
  |  |  145|  28.9k|        (to_overwrite || \
  |  |  ------------------
  |  |  |  Branch (145:10): [True: 0, False: 28.9k]
  |  |  ------------------
  |  |  146|  28.9k|                ((src->field != def) && (to_default || (dest->field == def))))
  |  |  ------------------
  |  |  |  Branch (146:18): [True: 0, False: 28.9k]
  |  |  |  Branch (146:42): [True: 0, False: 0]
  |  |  |  Branch (146:56): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  221|      0|        if (!X509_VERIFY_PARAM_set1_ip(dest, src->ip, src->iplen))
  ------------------
  |  Branch (221:13): [True: 0, False: 0]
  ------------------
  222|      0|            return 0;
  223|      0|    }
  224|       |
  225|  28.9k|    return 1;
  226|  28.9k|}
X509_VERIFY_PARAM_move_peername:
  413|  57.9k|{
  414|  57.9k|    char *peername = (from != NULL) ? from->peername : NULL;
  ------------------
  |  Branch (414:22): [True: 0, False: 57.9k]
  ------------------
  415|       |
  416|  57.9k|    if (to->peername != peername) {
  ------------------
  |  Branch (416:9): [True: 0, False: 57.9k]
  ------------------
  417|      0|        OPENSSL_free(to->peername);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  418|      0|        to->peername = peername;
  419|      0|    }
  420|  57.9k|    if (from)
  ------------------
  |  Branch (420:9): [True: 0, False: 57.9k]
  ------------------
  421|      0|        from->peername = NULL;
  422|  57.9k|}

ERR_load_X509V3_strings:
  253|      2|{
  254|      2|#ifndef OPENSSL_NO_ERR
  255|      2|    if (ERR_func_error_string(X509V3_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (255:9): [True: 2, False: 0]
  ------------------
  256|      2|        ERR_load_strings_const(X509V3_str_functs);
  257|      2|        ERR_load_strings_const(X509V3_str_reasons);
  258|      2|    }
  259|      2|#endif
  260|      2|    return 1;
  261|      2|}

EVP_aria_128_cbc:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_128_cfb128:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_128_ofb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_128_ecb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_cbc:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_cfb128:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_ofb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_ecb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_cbc:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_cfb128:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_ofb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_ecb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_128_cfb1:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_cfb1:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_cfb1:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_128_cfb8:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_cfb8:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_cfb8:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_bf_cbc:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_bf_cfb64:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_bf_ofb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_bf_ecb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_cast5_cbc:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_cast5_cfb64:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_cast5_ofb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_cast5_ecb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_cbc:
  261|      4|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_cfb64:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ofb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ecb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_cfb1:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_cfb8:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede_cbc:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede_cfb64:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede_ofb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede3_cbc:
  261|      4|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede3_cfb64:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede3_ofb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede3_cfb1:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede3_cfb8:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_idea_cbc:
  261|      4|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_idea_cfb64:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_idea_ofb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_idea_ecb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc2_cbc:
  261|      4|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc2_cfb64:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc2_ofb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc2_ecb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_seed_cbc:
  261|      4|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_seed_cfb128:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_seed_ofb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_seed_ecb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_sm4_cbc:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_sm4_cfb128:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_sm4_ofb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_sm4_ecb:
  261|      2|const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }

b_print.c:ossl_assert_int:
   33|     84|{
   34|     84|    if (!expr)
  ------------------
  |  Branch (34:9): [True: 0, False: 84]
  ------------------
   35|      0|        OPENSSL_die(exprstr, file, line);
   36|       |
   37|     84|    return expr;
   38|     84|}
s3_lib.c:ossl_assert_int:
   33|  57.9k|{
   34|  57.9k|    if (!expr)
  ------------------
  |  Branch (34:9): [True: 0, False: 57.9k]
  ------------------
   35|      0|        OPENSSL_die(exprstr, file, line);
   36|       |
   37|  57.9k|    return expr;
   38|  57.9k|}
ssl_ciph.c:ossl_assert_int:
   33|     18|{
   34|     18|    if (!expr)
  ------------------
  |  Branch (34:9): [True: 0, False: 18]
  ------------------
   35|      0|        OPENSSL_die(exprstr, file, line);
   36|       |
   37|     18|    return expr;
   38|     18|}
ssl_lib.c:ossl_assert_int:
   33|  28.9k|{
   34|  28.9k|    if (!expr)
  ------------------
  |  Branch (34:9): [True: 0, False: 28.9k]
  ------------------
   35|      0|        OPENSSL_die(exprstr, file, line);
   36|       |
   37|  28.9k|    return expr;
   38|  28.9k|}
packet.c:ossl_assert_int:
   33|  6.60M|{
   34|  6.60M|    if (!expr)
  ------------------
  |  Branch (34:9): [True: 0, False: 6.60M]
  ------------------
   35|      0|        OPENSSL_die(exprstr, file, line);
   36|       |
   37|  6.60M|    return expr;
   38|  6.60M|}

bio_lib.c:CRYPTO_DOWN_REF:
   49|   115k|{
   50|   115k|    *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;
   51|   115k|    if (*ret == 0)
  ------------------
  |  Branch (51:9): [True: 86.9k, False: 28.9k]
  ------------------
   52|       |        atomic_thread_fence(memory_order_acquire);
   53|   115k|    return 1;
   54|   115k|}
bio_lib.c:CRYPTO_UP_REF:
   33|  28.9k|{
   34|       |    *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;
   35|  28.9k|    return 1;
   36|  28.9k|}
eng_lib.c:CRYPTO_DOWN_REF:
   49|      4|{
   50|      4|    *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;
   51|      4|    if (*ret == 0)
  ------------------
  |  Branch (51:9): [True: 0, False: 4]
  ------------------
   52|       |        atomic_thread_fence(memory_order_acquire);
   53|      4|    return 1;
   54|      4|}
p_lib.c:CRYPTO_DOWN_REF:
   49|  28.9k|{
   50|  28.9k|    *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;
   51|  28.9k|    if (*ret == 0)
  ------------------
  |  Branch (51:9): [True: 28.9k, False: 0]
  ------------------
   52|       |        atomic_thread_fence(memory_order_acquire);
   53|  28.9k|    return 1;
   54|  28.9k|}
x509_lu.c:CRYPTO_DOWN_REF:
   49|  57.9k|{
   50|  57.9k|    *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;
   51|  57.9k|    if (*ret == 0)
  ------------------
  |  Branch (51:9): [True: 28.9k, False: 28.9k]
  ------------------
   52|       |        atomic_thread_fence(memory_order_acquire);
   53|  57.9k|    return 1;
   54|  57.9k|}
x509_lu.c:CRYPTO_UP_REF:
   33|  28.9k|{
   34|       |    *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;
   35|  28.9k|    return 1;
   36|  28.9k|}
ssl_cert.c:CRYPTO_DOWN_REF:
   49|  57.9k|{
   50|  57.9k|    *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;
   51|  57.9k|    if (*ret == 0)
  ------------------
  |  Branch (51:9): [True: 57.9k, False: 0]
  ------------------
   52|       |        atomic_thread_fence(memory_order_acquire);
   53|  57.9k|    return 1;
   54|  57.9k|}
ssl_lib.c:CRYPTO_UP_REF:
   33|  57.9k|{
   34|       |    *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;
   35|  57.9k|    return 1;
   36|  57.9k|}
ssl_lib.c:CRYPTO_DOWN_REF:
   49|   115k|{
   50|   115k|    *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;
   51|   115k|    if (*ret == 0)
  ------------------
  |  Branch (51:9): [True: 57.9k, False: 57.9k]
  ------------------
   52|       |        atomic_thread_fence(memory_order_acquire);
   53|   115k|    return 1;
   54|   115k|}
ssl_sess.c:CRYPTO_DOWN_REF:
   49|  28.9k|{
   50|  28.9k|    *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;
   51|  28.9k|    if (*ret == 0)
  ------------------
  |  Branch (51:9): [True: 28.9k, False: 0]
  ------------------
   52|       |        atomic_thread_fence(memory_order_acquire);
   53|  28.9k|    return 1;
   54|  28.9k|}

do_engine_lock_init_ossl_:
   30|      2|    {                                           \
   31|      2|        init##_ossl_ret_ = init();              \
   32|      2|    }                                           \
err.c:do_err_strings_init_ossl_:
   62|      2|    {                                           \
   63|      2|        init##_ossl_ret_ = init();              \
   64|      2|    }                                           \
err.c:err_do_init_ossl_:
   62|      2|    {                                           \
   63|      2|        init##_ossl_ret_ = init();              \
   64|      2|    }                                           \
ex_data.c:do_ex_data_init_ossl_:
   62|      2|    {                                           \
   63|      2|        init##_ossl_ret_ = init();              \
   64|      2|    }                                           \
init.c:ossl_init_base_ossl_:
   62|      2|    {                                           \
   63|      2|        init##_ossl_ret_ = init();              \
   64|      2|    }                                           \
init.c:ossl_init_register_atexit_ossl_:
   62|      2|    {                                           \
   63|      2|        init##_ossl_ret_ = init();              \
   64|      2|    }                                           \
init.c:ossl_init_load_crypto_nodelete_ossl_:
   62|      2|    {                                           \
   63|      2|        init##_ossl_ret_ = init();              \
   64|      2|    }                                           \
init.c:ossl_init_load_crypto_strings_ossl_:
   62|      2|    {                                           \
   63|      2|        init##_ossl_ret_ = init();              \
   64|      2|    }                                           \
init.c:ossl_init_add_all_ciphers_ossl_:
   62|      2|    {                                           \
   63|      2|        init##_ossl_ret_ = init();              \
   64|      2|    }                                           \
init.c:ossl_init_add_all_digests_ossl_:
   62|      2|    {                                           \
   63|      2|        init##_ossl_ret_ = init();              \
   64|      2|    }                                           \
init.c:ossl_init_config_ossl_:
   62|      2|    {                                           \
   63|      2|        init##_ossl_ret_ = init();              \
   64|      2|    }                                           \
init.c:ossl_init_engine_rdrand_ossl_:
   62|      2|    {                                           \
   63|      2|        init##_ossl_ret_ = init();              \
   64|      2|    }                                           \
init.c:ossl_init_engine_dynamic_ossl_:
   62|      2|    {                                           \
   63|      2|        init##_ossl_ret_ = init();              \
   64|      2|    }                                           \
o_names.c:o_names_init_ossl_:
   62|      2|    {                                           \
   63|      2|        init##_ossl_ret_ = init();              \
   64|      2|    }                                           \
drbg_lib.c:do_rand_drbg_init_ossl_:
   62|      1|    {                                           \
   63|      1|        init##_ossl_ret_ = init();              \
   64|      1|    }                                           \
rand_lib.c:do_rand_init_ossl_:
   62|      1|    {                                           \
   63|      1|        init##_ossl_ret_ = init();              \
   64|      1|    }                                           \
ssl_cert.c:ssl_x509_store_ctx_init_ossl_:
   62|      1|    {                                           \
   63|      1|        init##_ossl_ret_ = init();              \
   64|      1|    }                                           \
ssl_init.c:ossl_init_ssl_base_ossl_:
   62|      2|    {                                           \
   63|      2|        init##_ossl_ret_ = init();              \
   64|      2|    }                                           \
ssl_init.c:ossl_init_load_ssl_strings_ossl_:
   62|      2|    {                                           \
   63|      2|        init##_ossl_ret_ = init();              \
   64|      2|    }                                           \

X509_free:
  826|   637k|        { \
  827|   637k|                ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \
  ------------------
  |  |  326|   637k|#  define ASN1_ITEM_rptr(ref) (&(ref##_it))
  ------------------
  828|   637k|        }

err.c:lh_ERR_STRING_DATA_free:
  130|      2|    { \
  131|      2|        OPENSSL_LH_free((OPENSSL_LHASH *)lh); \
  132|      2|    } \
err.c:lh_ERR_STRING_DATA_new:
  125|      2|    { \
  126|      2|        return (LHASH_OF(type) *) \
  127|      2|            OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \
  128|      2|    } \
err.c:lh_ERR_STRING_DATA_insert:
  134|  16.5k|    { \
  135|  16.5k|        return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \
  136|  16.5k|    } \
err.c:lh_ERR_STRING_DATA_retrieve:
  142|  58.0k|    { \
  143|  58.0k|        return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \
  144|  58.0k|    } \
o_names.c:lh_OBJ_NAME_new:
  125|      2|    { \
  126|      2|        return (LHASH_OF(type) *) \
  127|      2|            OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \
  128|      2|    } \
o_names.c:lh_OBJ_NAME_retrieve:
  142|   116k|    { \
  143|   116k|        return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \
  144|   116k|    } \
o_names.c:lh_OBJ_NAME_insert:
  134|    944|    { \
  135|    944|        return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \
  136|    944|    } \
o_names.c:lh_OBJ_NAME_error:
  146|    460|    { \
  147|    460|        return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \
  148|    460|    } \
o_names.c:lh_OBJ_NAME_delete:
  138|    460|    { \
  139|    460|        return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \
  140|    460|    } \
o_names.c:lh_OBJ_NAME_get_down_load:
  166|      6|    { \
  167|      6|        return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \
  168|      6|    } \
o_names.c:lh_OBJ_NAME_set_down_load:
  170|     10|    { \
  171|     10|        OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \
  172|     10|    } \
o_names.c:lh_OBJ_NAME_doall:
  175|      6|    { \
  176|      6|        OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \
  177|      6|    } \
o_names.c:lh_OBJ_NAME_free:
  130|      2|    { \
  131|      2|        OPENSSL_LH_free((OPENSSL_LHASH *)lh); \
  132|      2|    } \
store_register.c:lh_OSSL_STORE_LOADER_num_items:
  150|      2|    { \
  151|      2|        return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \
  152|      2|    } \
store_register.c:lh_OSSL_STORE_LOADER_free:
  130|      2|    { \
  131|      2|        OPENSSL_LH_free((OPENSSL_LHASH *)lh); \
  132|      2|    } \
conf_api.c:lh_CONF_VALUE_retrieve:
  142|     58|    { \
  143|     58|        return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \
  144|     58|    } \
conf_api.c:lh_CONF_VALUE_insert:
  134|    218|    { \
  135|    218|        return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \
  136|    218|    } \
conf_api.c:lh_CONF_VALUE_new:
  125|      2|    { \
  126|      2|        return (LHASH_OF(type) *) \
  127|      2|            OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \
  128|      2|    } \
conf_api.c:lh_CONF_VALUE_set_down_load:
  170|      2|    { \
  171|      2|        OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \
  172|      2|    } \
conf_api.c:lh_CONF_VALUE_doall_LH_CONF_VALUE:
  191|      2|    { \
  192|      2|        OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \
  193|      2|    } \
conf_api.c:lh_CONF_VALUE_doall:
  175|      2|    { \
  176|      2|        OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \
  177|      2|    } \
conf_api.c:lh_CONF_VALUE_free:
  130|      2|    { \
  131|      2|        OPENSSL_LH_free((OPENSSL_LHASH *)lh); \
  132|      2|    } \
conf_api.c:lh_CONF_VALUE_delete:
  138|    186|    { \
  139|    186|        return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \
  140|    186|    } \
conf_api.c:lh_CONF_VALUE_error:
  146|     32|    { \
  147|     32|        return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \
  148|     32|    } \
ssl_lib.c:lh_SSL_SESSION_new:
  125|  28.9k|    { \
  126|  28.9k|        return (LHASH_OF(type) *) \
  127|  28.9k|            OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \
  128|  28.9k|    } \
ssl_lib.c:lh_SSL_SESSION_free:
  130|  28.9k|    { \
  131|  28.9k|        OPENSSL_LH_free((OPENSSL_LHASH *)lh); \
  132|  28.9k|    } \
ssl_sess.c:lh_SSL_SESSION_get_down_load:
  166|  28.9k|    { \
  167|  28.9k|        return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \
  168|  28.9k|    } \
ssl_sess.c:lh_SSL_SESSION_set_down_load:
  170|  57.9k|    { \
  171|  57.9k|        OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \
  172|  57.9k|    } \
ssl_sess.c:lh_SSL_SESSION_doall_TIMEOUT_PARAM:
  191|  28.9k|    { \
  192|  28.9k|        OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \
  193|  28.9k|    } \

pmeth_lib.c:OBJ_bsearch_pmeth:
  121|  28.9k|      { \
  122|  28.9k|      return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \
  123|  28.9k|                                        nm##_cmp_BSEARCH_CMP_FN); \
  124|  28.9k|      } \
pmeth_lib.c:pmeth_cmp_BSEARCH_CMP_FN:
  115|   144k|      { \
  116|   144k|      type1 const *a = a_; \
  117|   144k|      type2 const *b = b_; \
  118|   144k|      return nm##_cmp(a,b); \
  119|   144k|      } \
ameth_lib.c:OBJ_bsearch_ameth:
  121|  28.9k|      { \
  122|  28.9k|      return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \
  123|  28.9k|                                        nm##_cmp_BSEARCH_CMP_FN); \
  124|  28.9k|      } \
ameth_lib.c:ameth_cmp_BSEARCH_CMP_FN:
  115|  86.9k|      { \
  116|  86.9k|      type1 const *a = a_; \
  117|  86.9k|      type2 const *b = b_; \
  118|  86.9k|      return nm##_cmp(a,b); \
  119|  86.9k|      } \

eng_lib.c:sk_ENGINE_CLEANUP_ITEM_new_null:
   40|      2|    { \
   41|      2|        return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \
   42|      2|    } \
eng_lib.c:sk_ENGINE_CLEANUP_ITEM_push:
   69|      2|    { \
   70|      2|        return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \
   71|      2|    } \
eng_lib.c:sk_ENGINE_CLEANUP_ITEM_pop_free:
   85|      2|    { \
   86|      2|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|      2|    } \
p_lib.c:sk_X509_ATTRIBUTE_pop_free:
   85|  28.9k|    { \
   86|  28.9k|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|  28.9k|    } \
ex_data.c:sk_EX_CALLBACK_pop_free:
   85|     32|    { \
   86|     32|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|     32|    } \
ex_data.c:sk_EX_CALLBACK_num:
   28|   405k|    { \
   29|   405k|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \
   30|   405k|    } \
ex_data.c:sk_EX_CALLBACK_new_null:
   40|      1|    { \
   41|      1|        return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \
   42|      1|    } \
ex_data.c:sk_EX_CALLBACK_push:
   69|      2|    { \
   70|      2|        return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \
   71|      2|    } \
ex_data.c:sk_EX_CALLBACK_set:
   93|      1|    { \
   94|      1|        return (t2 *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr); \
   95|      1|    } \
ex_data.c:sk_void_free:
   52|   202k|    { \
   53|   202k|        OPENSSL_sk_free((OPENSSL_STACK *)sk); \
   54|   202k|    } \
o_names.c:sk_NAME_FUNCS_pop_free:
   85|      2|    { \
   86|      2|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|      2|    } \
obj_xref.c:sk_nid_triple_pop_free:
   85|      2|    { \
   86|      2|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|      2|    } \
obj_xref.c:sk_nid_triple_free:
   52|      2|    { \
   53|      2|        OPENSSL_sk_free((OPENSSL_STACK *)sk); \
   54|      2|    } \
x509_lu.c:sk_X509_OBJECT_new:
   36|  28.9k|    { \
   37|  28.9k|        return (STACK_OF(t1) *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \
   38|  28.9k|    } \
x509_lu.c:sk_X509_LOOKUP_new_null:
   40|  28.9k|    { \
   41|  28.9k|        return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \
   42|  28.9k|    } \
x509_lu.c:sk_X509_LOOKUP_free:
   52|  28.9k|    { \
   53|  28.9k|        OPENSSL_sk_free((OPENSSL_STACK *)sk); \
   54|  28.9k|    } \
x509_lu.c:sk_X509_LOOKUP_num:
   28|  28.9k|    { \
   29|  28.9k|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \
   30|  28.9k|    } \
x509_lu.c:sk_X509_LOOKUP_value:
   32|      2|    { \
   33|      2|        return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \
   34|      2|    } \
x509_lu.c:sk_X509_OBJECT_pop_free:
   85|  28.9k|    { \
   86|  28.9k|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|  28.9k|    } \
x509_lu.c:sk_X509_LOOKUP_push:
   69|      4|    { \
   70|      4|        return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \
   71|      4|    } \
x509_vpm.c:sk_ASN1_OBJECT_pop_free:
   85|  86.9k|    { \
   86|  86.9k|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|  86.9k|    } \
x509_vpm.c:sk_OPENSSL_STRING_pop_free:
   85|  86.9k|    { \
   86|  86.9k|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|  86.9k|    } \
conf_mod.c:sk_CONF_MODULE_num:
   28|      4|    { \
   29|      4|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \
   30|      4|    } \
conf_mod.c:sk_CONF_MODULE_value:
   32|     10|    { \
   33|     10|        return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \
   34|     10|    } \
conf_mod.c:sk_CONF_MODULE_delete:
   60|     10|    { \
   61|     10|        return (t2 *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i); \
   62|     10|    } \
conf_mod.c:sk_CONF_MODULE_free:
   52|      2|    { \
   53|      2|        OPENSSL_sk_free((OPENSSL_STACK *)sk); \
   54|      2|    } \
conf_mod.c:sk_CONF_IMODULE_num:
   28|      4|    { \
   29|      4|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \
   30|      4|    } \
conf_mod.c:sk_CONF_IMODULE_free:
   52|      4|    { \
   53|      4|        OPENSSL_sk_free((OPENSSL_STACK *)sk); \
   54|      4|    } \
conf_mod.c:sk_CONF_MODULE_new_null:
   40|      2|    { \
   41|      2|        return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \
   42|      2|    } \
conf_mod.c:sk_CONF_MODULE_push:
   69|     10|    { \
   70|     10|        return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \
   71|     10|    } \
evp_pbe.c:sk_EVP_PBE_CTL_pop_free:
   85|      2|    { \
   86|      2|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|      2|    } \
by_dir.c:sk_BY_DIR_ENTRY_num:
   28|      4|    { \
   29|      4|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \
   30|      4|    } \
by_dir.c:sk_BY_DIR_ENTRY_new_null:
   40|      2|    { \
   41|      2|        return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \
   42|      2|    } \
by_dir.c:sk_BY_DIR_HASH_new:
   36|      2|    { \
   37|      2|        return (STACK_OF(t1) *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \
   38|      2|    } \
by_dir.c:sk_BY_DIR_ENTRY_push:
   69|      2|    { \
   70|      2|        return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \
   71|      2|    } \
ct_sct.c:sk_SCT_pop_free:
   85|  28.9k|    { \
   86|  28.9k|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|  28.9k|    } \
conf_api.c:sk_CONF_VALUE_push:
   69|    186|    { \
   70|    186|        return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \
   71|    186|    } \
conf_api.c:sk_CONF_VALUE_num:
   28|     32|    { \
   29|     32|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \
   30|     32|    } \
conf_api.c:sk_CONF_VALUE_value:
   32|    186|    { \
   33|    186|        return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \
   34|    186|    } \
conf_api.c:sk_CONF_VALUE_new_null:
   40|     32|    { \
   41|     32|        return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \
   42|     32|    } \
conf_api.c:sk_CONF_VALUE_free:
   52|     32|    { \
   53|     32|        OPENSSL_sk_free((OPENSSL_STACK *)sk); \
   54|     32|    } \
conf_def.c:sk_BIO_pop:
   77|      2|    { \
   78|      2|        return (t2 *)OPENSSL_sk_pop((OPENSSL_STACK *)sk); \
   79|      2|    } \
conf_def.c:sk_BIO_free:
   52|      2|    { \
   53|      2|        OPENSSL_sk_free((OPENSSL_STACK *)sk); \
   54|      2|    } \
ct_log.c:sk_CTLOG_new_null:
   40|  28.9k|    { \
   41|  28.9k|        return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \
   42|  28.9k|    } \
ct_log.c:sk_CTLOG_pop_free:
   85|  28.9k|    { \
   86|  28.9k|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|  28.9k|    } \
s3_lib.c:sk_X509_NAME_pop_free:
   85|   144k|    { \
   86|   144k|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|   144k|    } \
ssl_cert.c:sk_X509_pop_free:
   85|   521k|    { \
   86|   521k|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|   521k|    } \
ssl_ciph.c:sk_SSL_CIPHER_dup:
  113|  28.9k|    { \
  114|  28.9k|        return (STACK_OF(t1) *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk); \
  115|  28.9k|    } \
ssl_ciph.c:sk_SSL_CIPHER_new_null:
   40|  57.9k|    { \
   41|  57.9k|        return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \
   42|  57.9k|    } \
ssl_ciph.c:sk_SSL_CIPHER_num:
   28|   115k|    { \
   29|   115k|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \
   30|   115k|    } \
ssl_ciph.c:sk_SSL_CIPHER_push:
   69|  1.82M|    { \
   70|  1.82M|        return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \
   71|  1.82M|    } \
ssl_ciph.c:sk_SSL_CIPHER_value:
   32|  86.9k|    { \
   33|  86.9k|        return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \
   34|  86.9k|    } \
ssl_ciph.c:sk_SSL_CIPHER_free:
   52|  86.9k|    { \
   53|  86.9k|        OPENSSL_sk_free((OPENSSL_STACK *)sk); \
   54|  86.9k|    } \
ssl_ciph.c:sk_SSL_CIPHER_set_cmp_func:
  125|  28.9k|    { \
  126|  28.9k|        return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \
  127|  28.9k|    }
ssl_ciph.c:sk_SSL_CIPHER_sort:
  105|  28.9k|    { \
  106|  28.9k|        OPENSSL_sk_sort((OPENSSL_STACK *)sk); \
  107|  28.9k|    } \
ssl_lib.c:sk_SSL_CIPHER_num:
   28|  3.56M|    { \
   29|  3.56M|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \
   30|  3.56M|    } \
ssl_lib.c:sk_SSL_CIPHER_dup:
  113|  28.9k|    { \
  114|  28.9k|        return (STACK_OF(t1) *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk); \
  115|  28.9k|    } \
ssl_lib.c:sk_danetls_record_pop_free:
   85|  28.9k|    { \
   86|  28.9k|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|  28.9k|    } \
ssl_lib.c:sk_SSL_CIPHER_free:
   52|   202k|    { \
   53|   202k|        OPENSSL_sk_free((OPENSSL_STACK *)sk); \
   54|   202k|    } \
ssl_lib.c:sk_X509_EXTENSION_pop_free:
   85|  28.9k|    { \
   86|  28.9k|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|  28.9k|    } \
ssl_lib.c:sk_OCSP_RESPID_pop_free:
   85|  28.9k|    { \
   86|  28.9k|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|  28.9k|    } \
ssl_lib.c:sk_X509_NAME_pop_free:
   85|   115k|    { \
   86|   115k|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|   115k|    } \
ssl_lib.c:sk_X509_pop_free:
   85|  86.9k|    { \
   86|  86.9k|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|  86.9k|    } \
ssl_lib.c:sk_SRTP_PROTECTION_PROFILE_free:
   52|  57.9k|    { \
   53|  57.9k|        OPENSSL_sk_free((OPENSSL_STACK *)sk); \
   54|  57.9k|    } \
ssl_lib.c:sk_SSL_CIPHER_value:
   32|  3.47M|    { \
   33|  3.47M|        return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \
   34|  3.47M|    } \
ssl_lib.c:sk_SSL_CIPHER_new_null:
   40|  57.9k|    { \
   41|  57.9k|        return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \
   42|  57.9k|    } \
ssl_lib.c:sk_SSL_CIPHER_push:
   69|  1.73M|    { \
   70|  1.73M|        return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \
   71|  1.73M|    } \
ssl_lib.c:sk_X509_NAME_new_null:
   40|  57.9k|    { \
   41|  57.9k|        return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \
   42|  57.9k|    } \
ssl_sess.c:sk_X509_pop_free:
   85|  28.9k|    { \
   86|  28.9k|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
   87|  28.9k|    } \
extensions.c:sk_X509_NAME_num:
   28|  28.9k|    { \
   29|  28.9k|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \
   30|  28.9k|    } \
extensions_clnt.c:sk_SSL_CIPHER_num:
   28|  57.9k|    { \
   29|  57.9k|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \
   30|  57.9k|    } \
extensions_clnt.c:sk_SSL_CIPHER_value:
   32|  57.9k|    { \
   33|  57.9k|        return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \
   34|  57.9k|    } \
extensions_clnt.c:sk_SSL_CIPHER_free:
   52|  57.9k|    { \
   53|  57.9k|        OPENSSL_sk_free((OPENSSL_STACK *)sk); \
   54|  57.9k|    } \
statem_clnt.c:sk_SSL_CIPHER_num:
   28|  1.76M|    { \
   29|  1.76M|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \
   30|  1.76M|    } \
statem_clnt.c:sk_SSL_CIPHER_value:
   32|  1.73M|    { \
   33|  1.73M|        return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \
   34|  1.73M|    } \

SSL_get_srtp_profiles:
  123|  28.9k|{
  124|  28.9k|    if (s != NULL) {
  ------------------
  |  Branch (124:9): [True: 28.9k, False: 0]
  ------------------
  125|  28.9k|        if (s->srtp_profiles != NULL) {
  ------------------
  |  Branch (125:13): [True: 0, False: 28.9k]
  ------------------
  126|      0|            return s->srtp_profiles;
  127|  28.9k|        } else if ((s->ctx != NULL) && (s->ctx->srtp_profiles != NULL)) {
  ------------------
  |  Branch (127:20): [True: 28.9k, False: 0]
  |  Branch (127:40): [True: 0, False: 28.9k]
  ------------------
  128|      0|            return s->ctx->srtp_profiles;
  129|      0|        }
  130|  28.9k|    }
  131|       |
  132|  28.9k|    return NULL;
  133|  28.9k|}

WPACKET_allocate_bytes:
   17|  3.27M|{
   18|  3.27M|    if (!WPACKET_reserve_bytes(pkt, len, allocbytes))
  ------------------
  |  Branch (18:9): [True: 0, False: 3.27M]
  ------------------
   19|      0|        return 0;
   20|       |
   21|  3.27M|    pkt->written += len;
   22|  3.27M|    pkt->curr += len;
   23|  3.27M|    return 1;
   24|  3.27M|}
WPACKET_reserve_bytes:
   41|  3.33M|{
   42|       |    /* Internal API, so should not fail */
   43|  3.33M|    if (!ossl_assert(pkt->subs != NULL && len != 0))
  ------------------
  |  |   40|  6.66M|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |  ------------------
  |  |  |  Branch (40:42): [True: 3.33M, False: 0]
  |  |  |  Branch (40:42): [True: 3.33M, False: 0]
  |  |  ------------------
  |  |   41|  3.33M|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (43:9): [True: 0, False: 3.33M]
  ------------------
   44|      0|        return 0;
   45|       |
   46|  3.33M|    if (pkt->maxsize - pkt->written < len)
  ------------------
  |  Branch (46:9): [True: 0, False: 3.33M]
  ------------------
   47|      0|        return 0;
   48|       |
   49|  3.33M|    if (pkt->staticbuf == NULL && (pkt->buf->length - pkt->written < len)) {
  ------------------
  |  Branch (49:9): [True: 3.13M, False: 202k]
  |  Branch (49:35): [True: 0, False: 3.13M]
  ------------------
   50|      0|        size_t newlen;
   51|      0|        size_t reflen;
   52|       |
   53|      0|        reflen = (len > pkt->buf->length) ? len : pkt->buf->length;
  ------------------
  |  Branch (53:18): [True: 0, False: 0]
  ------------------
   54|       |
   55|      0|        if (reflen > SIZE_MAX / 2) {
  ------------------
  |  Branch (55:13): [True: 0, False: 0]
  ------------------
   56|      0|            newlen = SIZE_MAX;
   57|      0|        } else {
   58|      0|            newlen = reflen * 2;
   59|      0|            if (newlen < DEFAULT_BUF_SIZE)
  ------------------
  |  |   14|      0|#define DEFAULT_BUF_SIZE    256
  ------------------
  |  Branch (59:17): [True: 0, False: 0]
  ------------------
   60|      0|                newlen = DEFAULT_BUF_SIZE;
  ------------------
  |  |   14|      0|#define DEFAULT_BUF_SIZE    256
  ------------------
   61|      0|        }
   62|      0|        if (BUF_MEM_grow(pkt->buf, newlen) == 0)
  ------------------
  |  Branch (62:13): [True: 0, False: 0]
  ------------------
   63|      0|            return 0;
   64|      0|    }
   65|  3.33M|    if (allocbytes != NULL)
  ------------------
  |  Branch (65:9): [True: 3.27M, False: 57.9k]
  ------------------
   66|  3.27M|        *allocbytes = WPACKET_get_curr(pkt);
   67|       |
   68|  3.33M|    return 1;
   69|  3.33M|}
WPACKET_init_static_len:
  120|  28.9k|{
  121|  28.9k|    size_t max = maxmaxsize(lenbytes);
  122|       |
  123|       |    /* Internal API, so should not fail */
  124|  28.9k|    if (!ossl_assert(buf != NULL && len > 0))
  ------------------
  |  |   40|  57.9k|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |  ------------------
  |  |  |  Branch (40:42): [True: 28.9k, False: 0]
  |  |  |  Branch (40:42): [True: 28.9k, False: 0]
  |  |  ------------------
  |  |   41|  28.9k|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (124:9): [True: 0, False: 28.9k]
  ------------------
  125|      0|        return 0;
  126|       |
  127|  28.9k|    pkt->staticbuf = buf;
  128|  28.9k|    pkt->buf = NULL;
  129|  28.9k|    pkt->maxsize = (max < len) ? max : len;
  ------------------
  |  Branch (129:20): [True: 0, False: 28.9k]
  ------------------
  130|       |
  131|  28.9k|    return wpacket_intern_init_len(pkt, lenbytes);
  132|  28.9k|}
WPACKET_init_len:
  135|  28.9k|{
  136|       |    /* Internal API, so should not fail */
  137|  28.9k|    if (!ossl_assert(buf != NULL))
  ------------------
  |  |   40|  28.9k|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|  28.9k|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (137:9): [True: 0, False: 28.9k]
  ------------------
  138|      0|        return 0;
  139|       |
  140|  28.9k|    pkt->staticbuf = NULL;
  141|  28.9k|    pkt->buf = buf;
  142|  28.9k|    pkt->maxsize = maxmaxsize(lenbytes);
  143|       |
  144|  28.9k|    return wpacket_intern_init_len(pkt, lenbytes);
  145|  28.9k|}
WPACKET_init:
  148|  28.9k|{
  149|  28.9k|    return WPACKET_init_len(pkt, buf, 0);
  150|  28.9k|}
WPACKET_set_flags:
  153|  28.9k|{
  154|       |    /* Internal API, so should not fail */
  155|  28.9k|    if (!ossl_assert(pkt->subs != NULL))
  ------------------
  |  |   40|  28.9k|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|  28.9k|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (155:9): [True: 0, False: 28.9k]
  ------------------
  156|      0|        return 0;
  157|       |
  158|  28.9k|    pkt->subs->flags = flags;
  159|       |
  160|  28.9k|    return 1;
  161|  28.9k|}
WPACKET_close:
  241|   666k|{
  242|       |    /*
  243|       |     * Internal API, so should not fail - but we do negative testing of this
  244|       |     * so no assert (otherwise the tests fail)
  245|       |     */
  246|   666k|    if (pkt->subs == NULL || pkt->subs->parent == NULL)
  ------------------
  |  Branch (246:9): [True: 0, False: 666k]
  |  Branch (246:30): [True: 0, False: 666k]
  ------------------
  247|      0|        return 0;
  248|       |
  249|   666k|    return wpacket_intern_close(pkt, pkt->subs, 1);
  250|   666k|}
WPACKET_finish:
  253|  57.9k|{
  254|  57.9k|    int ret;
  255|       |
  256|       |    /*
  257|       |     * Internal API, so should not fail - but we do negative testing of this
  258|       |     * so no assert (otherwise the tests fail)
  259|       |     */
  260|  57.9k|    if (pkt->subs == NULL || pkt->subs->parent != NULL)
  ------------------
  |  Branch (260:9): [True: 0, False: 57.9k]
  |  Branch (260:30): [True: 0, False: 57.9k]
  ------------------
  261|      0|        return 0;
  262|       |
  263|  57.9k|    ret = wpacket_intern_close(pkt, pkt->subs, 1);
  264|  57.9k|    if (ret) {
  ------------------
  |  Branch (264:9): [True: 57.9k, False: 0]
  ------------------
  265|  57.9k|        OPENSSL_free(pkt->subs);
  ------------------
  |  |  128|  57.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  266|  57.9k|        pkt->subs = NULL;
  267|  57.9k|    }
  268|       |
  269|  57.9k|    return ret;
  270|  57.9k|}
WPACKET_start_sub_packet_len__:
  273|   666k|{
  274|   666k|    WPACKET_SUB *sub;
  275|   666k|    unsigned char *lenchars;
  276|       |
  277|       |    /* Internal API, so should not fail */
  278|   666k|    if (!ossl_assert(pkt->subs != NULL))
  ------------------
  |  |   40|   666k|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|   666k|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (278:9): [True: 0, False: 666k]
  ------------------
  279|      0|        return 0;
  280|       |
  281|   666k|    if ((sub = OPENSSL_zalloc(sizeof(*sub))) == NULL) {
  ------------------
  |  |  120|   666k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (281:9): [True: 0, False: 666k]
  ------------------
  282|      0|        SSLerr(SSL_F_WPACKET_START_SUB_PACKET_LEN__, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  283|      0|        return 0;
  284|      0|    }
  285|       |
  286|   666k|    sub->parent = pkt->subs;
  287|   666k|    pkt->subs = sub;
  288|   666k|    sub->pwritten = pkt->written + lenbytes;
  289|   666k|    sub->lenbytes = lenbytes;
  290|       |
  291|   666k|    if (lenbytes == 0) {
  ------------------
  |  Branch (291:9): [True: 0, False: 666k]
  ------------------
  292|      0|        sub->packet_len = 0;
  293|      0|        return 1;
  294|      0|    }
  295|       |
  296|   666k|    if (!WPACKET_allocate_bytes(pkt, lenbytes, &lenchars))
  ------------------
  |  Branch (296:9): [True: 0, False: 666k]
  ------------------
  297|      0|        return 0;
  298|       |    /* Convert to an offset in case the underlying BUF_MEM gets realloc'd */
  299|   666k|    sub->packet_len = lenchars - GETBUF(pkt);
  ------------------
  |  |   37|   666k|#define GETBUF(p)   (((p)->staticbuf != NULL) \
  |  |  ------------------
  |  |  |  Branch (37:22): [True: 28.9k, False: 637k]
  |  |  ------------------
  |  |   38|   666k|                     ? (p)->staticbuf : (unsigned char *)(p)->buf->data)
  ------------------
  300|       |
  301|   666k|    return 1;
  302|   666k|}
WPACKET_put_bytes__:
  310|  2.40M|{
  311|  2.40M|    unsigned char *data;
  312|       |
  313|       |    /* Internal API, so should not fail */
  314|  2.40M|    if (!ossl_assert(size <= sizeof(unsigned int))
  ------------------
  |  |   40|  4.81M|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|  4.81M|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (314:9): [True: 0, False: 2.40M]
  ------------------
  315|  2.40M|            || !WPACKET_allocate_bytes(pkt, size, &data)
  ------------------
  |  Branch (315:16): [True: 0, False: 2.40M]
  ------------------
  316|  2.40M|            || !put_value(data, val, size))
  ------------------
  |  Branch (316:16): [True: 0, False: 2.40M]
  ------------------
  317|      0|        return 0;
  318|       |
  319|  2.40M|    return 1;
  320|  2.40M|}
WPACKET_memcpy:
  363|   202k|{
  364|   202k|    unsigned char *dest;
  365|       |
  366|   202k|    if (len == 0)
  ------------------
  |  Branch (366:9): [True: 28.9k, False: 173k]
  ------------------
  367|  28.9k|        return 1;
  368|       |
  369|   173k|    if (!WPACKET_allocate_bytes(pkt, len, &dest))
  ------------------
  |  Branch (369:9): [True: 0, False: 173k]
  ------------------
  370|      0|        return 0;
  371|       |
  372|   173k|    memcpy(dest, src, len);
  373|       |
  374|   173k|    return 1;
  375|   173k|}
WPACKET_sub_memcpy__:
  379|   115k|{
  380|   115k|    if (!WPACKET_start_sub_packet_len__(pkt, lenbytes)
  ------------------
  |  Branch (380:9): [True: 0, False: 115k]
  ------------------
  381|   115k|            || !WPACKET_memcpy(pkt, src, len)
  ------------------
  |  Branch (381:16): [True: 0, False: 115k]
  ------------------
  382|   115k|            || !WPACKET_close(pkt))
  ------------------
  |  Branch (382:16): [True: 0, False: 115k]
  ------------------
  383|      0|        return 0;
  384|       |
  385|   115k|    return 1;
  386|   115k|}
WPACKET_get_length:
  400|   115k|{
  401|       |    /* Internal API, so should not fail */
  402|   115k|    if (!ossl_assert(pkt->subs != NULL && len != NULL))
  ------------------
  |  |   40|   231k|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |  ------------------
  |  |  |  Branch (40:42): [True: 115k, False: 0]
  |  |  |  Branch (40:42): [True: 115k, False: 0]
  |  |  ------------------
  |  |   41|   115k|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (402:9): [True: 0, False: 115k]
  ------------------
  403|      0|        return 0;
  404|       |
  405|   115k|    *len = pkt->written - pkt->subs->pwritten;
  406|       |
  407|   115k|    return 1;
  408|   115k|}
WPACKET_get_curr:
  411|  3.30M|{
  412|       |    return GETBUF(pkt) + pkt->curr;
  ------------------
  |  |   37|  3.30M|#define GETBUF(p)   (((p)->staticbuf != NULL) \
  |  |  ------------------
  |  |  |  Branch (37:22): [True: 173k, False: 3.13M]
  |  |  ------------------
  |  |   38|  3.30M|                     ? (p)->staticbuf : (unsigned char *)(p)->buf->data)
  ------------------
  413|  3.30M|}
packet.c:maxmaxsize:
   83|  57.9k|{
   84|  57.9k|    if (lenbytes >= sizeof(size_t) || lenbytes == 0)
  ------------------
  |  Branch (84:9): [True: 0, False: 57.9k]
  |  Branch (84:39): [True: 57.9k, False: 0]
  ------------------
   85|  57.9k|        return SIZE_MAX;
   86|       |
   87|      0|    return ((size_t)1 << (lenbytes * 8)) - 1 + lenbytes;
   88|  57.9k|}
packet.c:wpacket_intern_init_len:
   91|  57.9k|{
   92|  57.9k|    unsigned char *lenchars;
   93|       |
   94|  57.9k|    pkt->curr = 0;
   95|  57.9k|    pkt->written = 0;
   96|       |
   97|  57.9k|    if ((pkt->subs = OPENSSL_zalloc(sizeof(*pkt->subs))) == NULL) {
  ------------------
  |  |  120|  57.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (97:9): [True: 0, False: 57.9k]
  ------------------
   98|      0|        SSLerr(SSL_F_WPACKET_INTERN_INIT_LEN, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   99|      0|        return 0;
  100|      0|    }
  101|       |
  102|  57.9k|    if (lenbytes == 0)
  ------------------
  |  Branch (102:9): [True: 57.9k, False: 0]
  ------------------
  103|  57.9k|        return 1;
  104|       |
  105|      0|    pkt->subs->pwritten = lenbytes;
  106|      0|    pkt->subs->lenbytes = lenbytes;
  107|       |
  108|      0|    if (!WPACKET_allocate_bytes(pkt, lenbytes, &lenchars)) {
  ------------------
  |  Branch (108:9): [True: 0, False: 0]
  ------------------
  109|      0|        OPENSSL_free(pkt->subs);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  110|      0|        pkt->subs = NULL;
  111|      0|        return 0;
  112|      0|    }
  113|      0|    pkt->subs->packet_len = lenchars - GETBUF(pkt);
  ------------------
  |  |   37|      0|#define GETBUF(p)   (((p)->staticbuf != NULL) \
  |  |  ------------------
  |  |  |  Branch (37:22): [True: 0, False: 0]
  |  |  ------------------
  |  |   38|      0|                     ? (p)->staticbuf : (unsigned char *)(p)->buf->data)
  ------------------
  114|       |
  115|      0|    return 1;
  116|      0|}
packet.c:wpacket_intern_close:
  187|   724k|{
  188|   724k|    size_t packlen = pkt->written - sub->pwritten;
  189|       |
  190|   724k|    if (packlen == 0
  ------------------
  |  Branch (190:9): [True: 28.9k, False: 695k]
  ------------------
  191|  28.9k|            && (sub->flags & WPACKET_FLAGS_NON_ZERO_LENGTH) != 0)
  ------------------
  |  |  649|  28.9k|#define WPACKET_FLAGS_NON_ZERO_LENGTH           1
  ------------------
  |  Branch (191:16): [True: 0, False: 28.9k]
  ------------------
  192|      0|        return 0;
  193|       |
  194|   724k|    if (packlen == 0
  ------------------
  |  Branch (194:9): [True: 28.9k, False: 695k]
  ------------------
  195|  28.9k|            && sub->flags & WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH) {
  ------------------
  |  |  655|  28.9k|#define WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH    2
  ------------------
  |  Branch (195:16): [True: 0, False: 28.9k]
  ------------------
  196|       |        /* We can't handle this case. Return an error */
  197|      0|        if (!doclose)
  ------------------
  |  Branch (197:13): [True: 0, False: 0]
  ------------------
  198|      0|            return 0;
  199|       |
  200|       |        /* Deallocate any bytes allocated for the length of the WPACKET */
  201|      0|        if ((pkt->curr - sub->lenbytes) == sub->packet_len) {
  ------------------
  |  Branch (201:13): [True: 0, False: 0]
  ------------------
  202|      0|            pkt->written -= sub->lenbytes;
  203|      0|            pkt->curr -= sub->lenbytes;
  204|      0|        }
  205|       |
  206|       |        /* Don't write out the packet length */
  207|      0|        sub->packet_len = 0;
  208|      0|        sub->lenbytes = 0;
  209|      0|    }
  210|       |
  211|       |    /* Write out the WPACKET length if needed */
  212|   724k|    if (sub->lenbytes > 0
  ------------------
  |  Branch (212:9): [True: 666k, False: 57.9k]
  ------------------
  213|   666k|                && !put_value(&GETBUF(pkt)[sub->packet_len], packlen,
  ------------------
  |  |   37|   666k|#define GETBUF(p)   (((p)->staticbuf != NULL) \
  |  |  ------------------
  |  |  |  Branch (37:22): [True: 28.9k, False: 637k]
  |  |  ------------------
  |  |   38|   666k|                     ? (p)->staticbuf : (unsigned char *)(p)->buf->data)
  ------------------
  |  Branch (213:20): [True: 0, False: 666k]
  ------------------
  214|   666k|                              sub->lenbytes))
  215|      0|            return 0;
  216|       |
  217|   724k|    if (doclose) {
  ------------------
  |  Branch (217:9): [True: 724k, False: 0]
  ------------------
  218|   724k|        pkt->subs = sub->parent;
  219|   724k|        OPENSSL_free(sub);
  ------------------
  |  |  128|   724k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  220|   724k|    }
  221|       |
  222|   724k|    return 1;
  223|   724k|}
packet.c:put_value:
  165|  3.07M|{
  166|  8.95M|    for (data += len - 1; len > 0; len--) {
  ------------------
  |  Branch (166:27): [True: 5.88M, False: 3.07M]
  ------------------
  167|  5.88M|        *data = (unsigned char)(value & 0xff);
  168|  5.88M|        data--;
  169|  5.88M|        value >>= 8;
  170|  5.88M|    }
  171|       |
  172|       |    /* Check whether we could fit the value in the assigned number of bytes */
  173|  3.07M|    if (value > 0)
  ------------------
  |  Branch (173:9): [True: 0, False: 3.07M]
  ------------------
  174|      0|        return 0;
  175|       |
  176|  3.07M|    return 1;
  177|  3.07M|}

RECORD_LAYER_init:
   30|  28.9k|{
   31|  28.9k|    rl->s = s;
   32|  28.9k|    RECORD_LAYER_set_first_record(&s->rlayer);
  ------------------
  |  |   35|  28.9k|#define RECORD_LAYER_set_first_record(rl)       ((rl)->is_first_record = 1)
  ------------------
   33|  28.9k|    SSL3_RECORD_clear(rl->rrec, SSL_MAX_PIPELINES);
  ------------------
  |  |   53|  28.9k|# define SSL_MAX_PIPELINES  32
  ------------------
   34|  28.9k|}
RECORD_LAYER_clear:
   37|  57.9k|{
   38|  57.9k|    rl->rstate = SSL_ST_READ_HEADER;
  ------------------
  |  | 1082|  57.9k|# define SSL_ST_READ_HEADER                      0xF0
  ------------------
   39|       |
   40|       |    /*
   41|       |     * Do I need to clear read_ahead? As far as I can tell read_ahead did not
   42|       |     * previously get reset by SSL_clear...so I'll keep it that way..but is
   43|       |     * that right?
   44|       |     */
   45|       |
   46|  57.9k|    rl->packet = NULL;
   47|  57.9k|    rl->packet_length = 0;
   48|  57.9k|    rl->wnum = 0;
   49|  57.9k|    memset(rl->handshake_fragment, 0, sizeof(rl->handshake_fragment));
   50|  57.9k|    rl->handshake_fragment_len = 0;
   51|  57.9k|    rl->wpend_tot = 0;
   52|  57.9k|    rl->wpend_type = 0;
   53|  57.9k|    rl->wpend_ret = 0;
   54|  57.9k|    rl->wpend_buf = NULL;
   55|       |
   56|  57.9k|    SSL3_BUFFER_clear(&rl->rbuf);
   57|  57.9k|    ssl3_release_write_buffer(rl->s);
   58|  57.9k|    rl->numrpipes = 0;
   59|  57.9k|    SSL3_RECORD_clear(rl->rrec, SSL_MAX_PIPELINES);
  ------------------
  |  |   53|  57.9k|# define SSL_MAX_PIPELINES  32
  ------------------
   60|       |
   61|  57.9k|    RECORD_LAYER_reset_read_sequence(rl);
   62|  57.9k|    RECORD_LAYER_reset_write_sequence(rl);
   63|       |
   64|  57.9k|    if (rl->d)
  ------------------
  |  Branch (64:9): [True: 0, False: 57.9k]
  ------------------
   65|      0|        DTLS_RECORD_LAYER_clear(rl);
   66|  57.9k|}
RECORD_LAYER_release:
   69|  28.9k|{
   70|  28.9k|    if (SSL3_BUFFER_is_initialised(&rl->rbuf))
  ------------------
  |  |   66|  28.9k|#define SSL3_BUFFER_is_initialised(b)       ((b)->buf != NULL)
  |  |  ------------------
  |  |  |  Branch (66:45): [True: 28.9k, False: 0]
  |  |  ------------------
  ------------------
   71|  28.9k|        ssl3_release_read_buffer(rl->s);
   72|  28.9k|    if (rl->numwpipes > 0)
  ------------------
  |  Branch (72:9): [True: 28.9k, False: 0]
  ------------------
   73|  28.9k|        ssl3_release_write_buffer(rl->s);
   74|  28.9k|    SSL3_RECORD_release(rl->rrec, SSL_MAX_PIPELINES);
  ------------------
  |  |   53|  28.9k|# define SSL_MAX_PIPELINES  32
  ------------------
   75|  28.9k|}
RECORD_LAYER_write_pending:
   96|  28.9k|{
   97|  28.9k|    return (rl->numwpipes > 0)
  ------------------
  |  Branch (97:12): [True: 28.9k, False: 0]
  ------------------
   98|  28.9k|        && SSL3_BUFFER_get_left(&rl->wbuf[rl->numwpipes - 1]) != 0;
  ------------------
  |  |   60|  28.9k|#define SSL3_BUFFER_get_left(b)             ((b)->left)
  ------------------
  |  Branch (98:12): [True: 0, False: 28.9k]
  ------------------
   99|  28.9k|}
RECORD_LAYER_reset_read_sequence:
  102|  57.9k|{
  103|  57.9k|    memset(rl->read_sequence, 0, sizeof(rl->read_sequence));
  104|  57.9k|}
RECORD_LAYER_reset_write_sequence:
  107|  57.9k|{
  108|  57.9k|    memset(rl->write_sequence, 0, sizeof(rl->write_sequence));
  109|  57.9k|}
ssl3_read_n:
  171|  28.9k|{
  172|       |    /*
  173|       |     * If extend == 0, obtain new n-byte packet; if extend == 1, increase
  174|       |     * packet by another n bytes. The packet will be in the sub-array of
  175|       |     * s->rlayer.rbuf.buf specified by s->rlayer.packet and
  176|       |     * s->rlayer.packet_length. (If s->rlayer.read_ahead is set, 'max' bytes may
  177|       |     * be stored in rbuf [plus s->rlayer.packet_length bytes if extend == 1].)
  178|       |     * if clearold == 1, move the packet to the start of the buffer; if
  179|       |     * clearold == 0 then leave any old packets where they were
  180|       |     */
  181|  28.9k|    size_t len, left, align = 0;
  182|  28.9k|    unsigned char *pkt;
  183|  28.9k|    SSL3_BUFFER *rb;
  184|       |
  185|  28.9k|    if (n == 0)
  ------------------
  |  Branch (185:9): [True: 0, False: 28.9k]
  ------------------
  186|      0|        return 0;
  187|       |
  188|  28.9k|    rb = &s->rlayer.rbuf;
  189|  28.9k|    if (rb->buf == NULL)
  ------------------
  |  Branch (189:9): [True: 0, False: 28.9k]
  ------------------
  190|      0|        if (!ssl3_setup_read_buffer(s)) {
  ------------------
  |  Branch (190:13): [True: 0, False: 0]
  ------------------
  191|       |            /* SSLfatal() already called */
  192|      0|            return -1;
  193|      0|        }
  194|       |
  195|  28.9k|    left = rb->left;
  196|  28.9k|#if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0
  197|  28.9k|    align = (size_t)rb->buf + SSL3_RT_HEADER_LENGTH;
  ------------------
  |  |  133|  28.9k|# define SSL3_RT_HEADER_LENGTH                   5
  ------------------
  198|  28.9k|    align = SSL3_ALIGN_PAYLOAD - 1 - ((align - 1) % SSL3_ALIGN_PAYLOAD);
  ------------------
  |  |  146|  28.9k|#  define SSL3_ALIGN_PAYLOAD                     8
  ------------------
                  align = SSL3_ALIGN_PAYLOAD - 1 - ((align - 1) % SSL3_ALIGN_PAYLOAD);
  ------------------
  |  |  146|  28.9k|#  define SSL3_ALIGN_PAYLOAD                     8
  ------------------
  199|  28.9k|#endif
  200|       |
  201|  28.9k|    if (!extend) {
  ------------------
  |  Branch (201:9): [True: 28.9k, False: 0]
  ------------------
  202|       |        /* start with empty packet ... */
  203|  28.9k|        if (left == 0)
  ------------------
  |  Branch (203:13): [True: 28.9k, False: 0]
  ------------------
  204|  28.9k|            rb->offset = align;
  205|      0|        else if (align != 0 && left >= SSL3_RT_HEADER_LENGTH) {
  ------------------
  |  |  133|      0|# define SSL3_RT_HEADER_LENGTH                   5
  ------------------
  |  Branch (205:18): [True: 0, False: 0]
  |  Branch (205:32): [True: 0, False: 0]
  ------------------
  206|       |            /*
  207|       |             * check if next packet length is large enough to justify payload
  208|       |             * alignment...
  209|       |             */
  210|      0|            pkt = rb->buf + rb->offset;
  211|      0|            if (pkt[0] == SSL3_RT_APPLICATION_DATA
  ------------------
  |  |  216|      0|# define SSL3_RT_APPLICATION_DATA        23
  ------------------
  |  Branch (211:17): [True: 0, False: 0]
  ------------------
  212|      0|                && (pkt[3] << 8 | pkt[4]) >= 128) {
  ------------------
  |  Branch (212:20): [True: 0, False: 0]
  ------------------
  213|       |                /*
  214|       |                 * Note that even if packet is corrupted and its length field
  215|       |                 * is insane, we can only be led to wrong decision about
  216|       |                 * whether memmove will occur or not. Header values has no
  217|       |                 * effect on memmove arguments and therefore no buffer
  218|       |                 * overrun can be triggered.
  219|       |                 */
  220|      0|                memmove(rb->buf + align, pkt, left);
  221|      0|                rb->offset = align;
  222|      0|            }
  223|      0|        }
  224|  28.9k|        s->rlayer.packet = rb->buf + rb->offset;
  225|  28.9k|        s->rlayer.packet_length = 0;
  226|       |        /* ... now we can act as if 'extend' was set */
  227|  28.9k|    }
  228|       |
  229|  28.9k|    len = s->rlayer.packet_length;
  230|  28.9k|    pkt = rb->buf + align;
  231|       |    /*
  232|       |     * Move any available bytes to front of buffer: 'len' bytes already
  233|       |     * pointed to by 'packet', 'left' extra ones at the end
  234|       |     */
  235|  28.9k|    if (s->rlayer.packet != pkt && clearold == 1) {
  ------------------
  |  Branch (235:9): [True: 0, False: 28.9k]
  |  Branch (235:36): [True: 0, False: 0]
  ------------------
  236|      0|        memmove(pkt, s->rlayer.packet, len + left);
  237|      0|        s->rlayer.packet = pkt;
  238|      0|        rb->offset = len + align;
  239|      0|    }
  240|       |
  241|       |    /*
  242|       |     * For DTLS/UDP reads should not span multiple packets because the read
  243|       |     * operation returns the whole packet at once (as long as it fits into
  244|       |     * the buffer).
  245|       |     */
  246|  28.9k|    if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|  28.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  247|      0|        if (left == 0 && extend)
  ------------------
  |  Branch (247:13): [True: 0, False: 0]
  |  Branch (247:26): [True: 0, False: 0]
  ------------------
  248|      0|            return 0;
  249|      0|        if (left > 0 && n > left)
  ------------------
  |  Branch (249:13): [True: 0, False: 0]
  |  Branch (249:25): [True: 0, False: 0]
  ------------------
  250|      0|            n = left;
  251|      0|    }
  252|       |
  253|       |    /* if there is enough in the buffer from a previous read, take some */
  254|  28.9k|    if (left >= n) {
  ------------------
  |  Branch (254:9): [True: 0, False: 28.9k]
  ------------------
  255|      0|        s->rlayer.packet_length += n;
  256|      0|        rb->left = left - n;
  257|      0|        rb->offset += n;
  258|      0|        *readbytes = n;
  259|      0|        return 1;
  260|      0|    }
  261|       |
  262|       |    /* else we need to read more data */
  263|       |
  264|  28.9k|    if (n > rb->len - rb->offset) {
  ------------------
  |  Branch (264:9): [True: 0, False: 28.9k]
  ------------------
  265|       |        /* does not happen */
  266|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_READ_N,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  267|      0|                 ERR_R_INTERNAL_ERROR);
  268|      0|        return -1;
  269|      0|    }
  270|       |
  271|       |    /* We always act like read_ahead is set for DTLS */
  272|  28.9k|    if (!s->rlayer.read_ahead && !SSL_IS_DTLS(s))
  ------------------
  |  |  319|  28.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  ------------------
  |  Branch (272:9): [True: 28.9k, False: 0]
  |  Branch (272:34): [True: 28.9k, False: 0]
  ------------------
  273|       |        /* ignore max parameter */
  274|  28.9k|        max = n;
  275|      0|    else {
  276|      0|        if (max < n)
  ------------------
  |  Branch (276:13): [True: 0, False: 0]
  ------------------
  277|      0|            max = n;
  278|      0|        if (max > rb->len - rb->offset)
  ------------------
  |  Branch (278:13): [True: 0, False: 0]
  ------------------
  279|      0|            max = rb->len - rb->offset;
  280|      0|    }
  281|       |
  282|  28.9k|    while (left < n) {
  ------------------
  |  Branch (282:12): [True: 28.9k, False: 0]
  ------------------
  283|  28.9k|        size_t bioread = 0;
  284|  28.9k|        int ret;
  285|       |
  286|       |        /*
  287|       |         * Now we have len+left bytes at the front of s->s3->rbuf.buf and
  288|       |         * need to read in more until we have len+n (up to len+max if
  289|       |         * possible)
  290|       |         */
  291|       |
  292|  28.9k|        clear_sys_error();
  ------------------
  |  |   76|  28.9k|# define clear_sys_error()       errno=0
  ------------------
  293|  28.9k|        if (s->rbio != NULL) {
  ------------------
  |  Branch (293:13): [True: 28.9k, False: 0]
  ------------------
  294|  28.9k|            s->rwstate = SSL_READING;
  ------------------
  |  |  894|  28.9k|# define SSL_READING            3
  ------------------
  295|       |            /* TODO(size_t): Convert this function */
  296|  28.9k|            ret = BIO_read(s->rbio, pkt + len + left, max - left);
  297|  28.9k|            if (ret >= 0)
  ------------------
  |  Branch (297:17): [True: 28.9k, False: 0]
  ------------------
  298|  28.9k|                bioread = ret;
  299|  28.9k|        } else {
  300|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_READ_N,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  301|      0|                     SSL_R_READ_BIO_NOT_SET);
  302|      0|            ret = -1;
  303|      0|        }
  304|       |
  305|  28.9k|        if (ret <= 0) {
  ------------------
  |  Branch (305:13): [True: 28.9k, False: 0]
  ------------------
  306|  28.9k|            rb->left = left;
  307|  28.9k|            if (s->mode & SSL_MODE_RELEASE_BUFFERS && !SSL_IS_DTLS(s))
  ------------------
  |  |  475|  57.9k|# define SSL_MODE_RELEASE_BUFFERS 0x00000010U
  ------------------
                          if (s->mode & SSL_MODE_RELEASE_BUFFERS && !SSL_IS_DTLS(s))
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  ------------------
  |  Branch (307:17): [True: 0, False: 28.9k]
  |  Branch (307:55): [True: 0, False: 0]
  ------------------
  308|      0|                if (len + left == 0)
  ------------------
  |  Branch (308:21): [True: 0, False: 0]
  ------------------
  309|      0|                    ssl3_release_read_buffer(s);
  310|  28.9k|            return ret;
  311|  28.9k|        }
  312|      0|        left += bioread;
  313|       |        /*
  314|       |         * reads should *never* span multiple packets for DTLS because the
  315|       |         * underlying transport protocol is message oriented as opposed to
  316|       |         * byte oriented as in the TLS case.
  317|       |         */
  318|      0|        if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  319|      0|            if (n > left)
  ------------------
  |  Branch (319:17): [True: 0, False: 0]
  ------------------
  320|      0|                n = left;       /* makes the while condition false */
  321|      0|        }
  322|      0|    }
  323|       |
  324|       |    /* done reading, now the book-keeping */
  325|      0|    rb->offset += n;
  326|      0|    rb->left = left - n;
  327|      0|    s->rlayer.packet_length += n;
  328|      0|    s->rwstate = SSL_NOTHING;
  ------------------
  |  |  892|      0|# define SSL_NOTHING            1
  ------------------
  329|      0|    *readbytes = n;
  330|      0|    return 1;
  331|  28.9k|}
ssl3_write_bytes:
  339|  28.9k|{
  340|  28.9k|    const unsigned char *buf = buf_;
  341|  28.9k|    size_t tot;
  342|  28.9k|    size_t n, max_send_fragment, split_send_fragment, maxpipes;
  343|       |#if !defined(OPENSSL_NO_MULTIBLOCK) && EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
  344|       |    size_t nw;
  345|       |#endif
  346|  28.9k|    SSL3_BUFFER *wb = &s->rlayer.wbuf[0];
  347|  28.9k|    int i;
  348|  28.9k|    size_t tmpwrit;
  349|       |
  350|  28.9k|    s->rwstate = SSL_NOTHING;
  ------------------
  |  |  892|  28.9k|# define SSL_NOTHING            1
  ------------------
  351|  28.9k|    tot = s->rlayer.wnum;
  352|       |    /*
  353|       |     * ensure that if we end up with a smaller value of data to write out
  354|       |     * than the original len from a write which didn't complete for
  355|       |     * non-blocking I/O and also somehow ended up avoiding the check for
  356|       |     * this in ssl3_write_pending/SSL_R_BAD_WRITE_RETRY as it must never be
  357|       |     * possible to end up with (len-tot) as a large number that will then
  358|       |     * promptly send beyond the end of the users buffer ... so we trap and
  359|       |     * report the error in a way the user will notice
  360|       |     */
  361|  28.9k|    if ((len < s->rlayer.wnum)
  ------------------
  |  Branch (361:9): [True: 0, False: 28.9k]
  ------------------
  362|  28.9k|        || ((wb->left != 0) && (len < (s->rlayer.wnum + s->rlayer.wpend_tot)))) {
  ------------------
  |  Branch (362:13): [True: 0, False: 28.9k]
  |  Branch (362:32): [True: 0, False: 0]
  ------------------
  363|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_WRITE_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  364|      0|                 SSL_R_BAD_LENGTH);
  365|      0|        return -1;
  366|      0|    }
  367|       |
  368|  28.9k|    if (s->early_data_state == SSL_EARLY_DATA_WRITING
  ------------------
  |  Branch (368:9): [True: 0, False: 28.9k]
  ------------------
  369|      0|            && !early_data_count_ok(s, len, 0, 1)) {
  ------------------
  |  Branch (369:16): [True: 0, False: 0]
  ------------------
  370|       |        /* SSLfatal() already called */
  371|      0|        return -1;
  372|      0|    }
  373|       |
  374|  28.9k|    s->rlayer.wnum = 0;
  375|       |
  376|       |    /*
  377|       |     * If we are supposed to be sending a KeyUpdate then go into init unless we
  378|       |     * have writes pending - in which case we should finish doing that first.
  379|       |     */
  380|  28.9k|    if (wb->left == 0 && s->key_update != SSL_KEY_UPDATE_NONE)
  ------------------
  |  |  974|  28.9k|#define SSL_KEY_UPDATE_NONE             -1
  ------------------
  |  Branch (380:9): [True: 28.9k, False: 0]
  |  Branch (380:26): [True: 0, False: 28.9k]
  ------------------
  381|      0|        ossl_statem_set_in_init(s, 1);
  382|       |
  383|       |    /*
  384|       |     * When writing early data on the server side we could be "in_init" in
  385|       |     * between receiving the EoED and the CF - but we don't want to handle those
  386|       |     * messages yet.
  387|       |     */
  388|  28.9k|    if (SSL_in_init(s) && !ossl_statem_get_in_handshake(s)
  ------------------
  |  Branch (388:9): [True: 28.9k, False: 0]
  |  Branch (388:27): [True: 0, False: 28.9k]
  ------------------
  389|      0|            && s->early_data_state != SSL_EARLY_DATA_UNAUTH_WRITING) {
  ------------------
  |  Branch (389:16): [True: 0, False: 0]
  ------------------
  390|      0|        i = s->handshake_func(s);
  391|       |        /* SSLfatal() already called */
  392|      0|        if (i < 0)
  ------------------
  |  Branch (392:13): [True: 0, False: 0]
  ------------------
  393|      0|            return i;
  394|      0|        if (i == 0) {
  ------------------
  |  Branch (394:13): [True: 0, False: 0]
  ------------------
  395|      0|            return -1;
  396|      0|        }
  397|      0|    }
  398|       |
  399|       |    /*
  400|       |     * first check if there is a SSL3_BUFFER still being written out.  This
  401|       |     * will happen with non blocking IO
  402|       |     */
  403|  28.9k|    if (wb->left != 0) {
  ------------------
  |  Branch (403:9): [True: 0, False: 28.9k]
  ------------------
  404|       |        /* SSLfatal() already called if appropriate */
  405|      0|        i = ssl3_write_pending(s, type, &buf[tot], s->rlayer.wpend_tot,
  406|      0|                               &tmpwrit);
  407|      0|        if (i <= 0) {
  ------------------
  |  Branch (407:13): [True: 0, False: 0]
  ------------------
  408|       |            /* XXX should we ssl3_release_write_buffer if i<0? */
  409|      0|            s->rlayer.wnum = tot;
  410|      0|            return i;
  411|      0|        }
  412|      0|        tot += tmpwrit;               /* this might be last fragment */
  413|      0|    }
  414|       |#if !defined(OPENSSL_NO_MULTIBLOCK) && EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
  415|       |    /*
  416|       |     * Depending on platform multi-block can deliver several *times*
  417|       |     * better performance. Downside is that it has to allocate
  418|       |     * jumbo buffer to accommodate up to 8 records, but the
  419|       |     * compromise is considered worthy.
  420|       |     */
  421|       |    if (type == SSL3_RT_APPLICATION_DATA &&
  422|       |        len >= 4 * (max_send_fragment = ssl_get_max_send_fragment(s)) &&
  423|       |        s->compress == NULL && s->msg_callback == NULL &&
  424|       |        !SSL_WRITE_ETM(s) && SSL_USE_EXPLICIT_IV(s) &&
  425|       |        EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(s->enc_write_ctx)) &
  426|       |        EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK) {
  427|       |        unsigned char aad[13];
  428|       |        EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM mb_param;
  429|       |        size_t packlen;
  430|       |        int packleni;
  431|       |
  432|       |        /* minimize address aliasing conflicts */
  433|       |        if ((max_send_fragment & 0xfff) == 0)
  434|       |            max_send_fragment -= 512;
  435|       |
  436|       |        if (tot == 0 || wb->buf == NULL) { /* allocate jumbo buffer */
  437|       |            ssl3_release_write_buffer(s);
  438|       |
  439|       |            packlen = EVP_CIPHER_CTX_ctrl(s->enc_write_ctx,
  440|       |                                          EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE,
  441|       |                                          (int)max_send_fragment, NULL);
  442|       |
  443|       |            if (len >= 8 * max_send_fragment)
  444|       |                packlen *= 8;
  445|       |            else
  446|       |                packlen *= 4;
  447|       |
  448|       |            if (!ssl3_setup_write_buffer(s, 1, packlen)) {
  449|       |                /* SSLfatal() already called */
  450|       |                return -1;
  451|       |            }
  452|       |        } else if (tot == len) { /* done? */
  453|       |            /* free jumbo buffer */
  454|       |            ssl3_release_write_buffer(s);
  455|       |            *written = tot;
  456|       |            return 1;
  457|       |        }
  458|       |
  459|       |        n = (len - tot);
  460|       |        for (;;) {
  461|       |            if (n < 4 * max_send_fragment) {
  462|       |                /* free jumbo buffer */
  463|       |                ssl3_release_write_buffer(s);
  464|       |                break;
  465|       |            }
  466|       |
  467|       |            if (s->s3->alert_dispatch) {
  468|       |                i = s->method->ssl_dispatch_alert(s);
  469|       |                if (i <= 0) {
  470|       |                    /* SSLfatal() already called if appropriate */
  471|       |                    s->rlayer.wnum = tot;
  472|       |                    return i;
  473|       |                }
  474|       |            }
  475|       |
  476|       |            if (n >= 8 * max_send_fragment)
  477|       |                nw = max_send_fragment * (mb_param.interleave = 8);
  478|       |            else
  479|       |                nw = max_send_fragment * (mb_param.interleave = 4);
  480|       |
  481|       |            memcpy(aad, s->rlayer.write_sequence, 8);
  482|       |            aad[8] = type;
  483|       |            aad[9] = (unsigned char)(s->version >> 8);
  484|       |            aad[10] = (unsigned char)(s->version);
  485|       |            aad[11] = 0;
  486|       |            aad[12] = 0;
  487|       |            mb_param.out = NULL;
  488|       |            mb_param.inp = aad;
  489|       |            mb_param.len = nw;
  490|       |
  491|       |            packleni = EVP_CIPHER_CTX_ctrl(s->enc_write_ctx,
  492|       |                                          EVP_CTRL_TLS1_1_MULTIBLOCK_AAD,
  493|       |                                          sizeof(mb_param), &mb_param);
  494|       |            packlen = (size_t)packleni;
  495|       |            if (packleni <= 0 || packlen > wb->len) { /* never happens */
  496|       |                /* free jumbo buffer */
  497|       |                ssl3_release_write_buffer(s);
  498|       |                break;
  499|       |            }
  500|       |
  501|       |            mb_param.out = wb->buf;
  502|       |            mb_param.inp = &buf[tot];
  503|       |            mb_param.len = nw;
  504|       |
  505|       |            if (EVP_CIPHER_CTX_ctrl(s->enc_write_ctx,
  506|       |                                    EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT,
  507|       |                                    sizeof(mb_param), &mb_param) <= 0)
  508|       |                return -1;
  509|       |
  510|       |            s->rlayer.write_sequence[7] += mb_param.interleave;
  511|       |            if (s->rlayer.write_sequence[7] < mb_param.interleave) {
  512|       |                int j = 6;
  513|       |                while (j >= 0 && (++s->rlayer.write_sequence[j--]) == 0) ;
  514|       |            }
  515|       |
  516|       |            wb->offset = 0;
  517|       |            wb->left = packlen;
  518|       |
  519|       |            s->rlayer.wpend_tot = nw;
  520|       |            s->rlayer.wpend_buf = &buf[tot];
  521|       |            s->rlayer.wpend_type = type;
  522|       |            s->rlayer.wpend_ret = nw;
  523|       |
  524|       |            i = ssl3_write_pending(s, type, &buf[tot], nw, &tmpwrit);
  525|       |            if (i <= 0) {
  526|       |                /* SSLfatal() already called if appropriate */
  527|       |                if (i < 0 && (!s->wbio || !BIO_should_retry(s->wbio))) {
  528|       |                    /* free jumbo buffer */
  529|       |                    ssl3_release_write_buffer(s);
  530|       |                }
  531|       |                s->rlayer.wnum = tot;
  532|       |                return i;
  533|       |            }
  534|       |            if (tmpwrit == n) {
  535|       |                /* free jumbo buffer */
  536|       |                ssl3_release_write_buffer(s);
  537|       |                *written = tot + tmpwrit;
  538|       |                return 1;
  539|       |            }
  540|       |            n -= tmpwrit;
  541|       |            tot += tmpwrit;
  542|       |        }
  543|       |    } else
  544|       |#endif  /* !defined(OPENSSL_NO_MULTIBLOCK) && EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK */
  545|  28.9k|    if (tot == len) {           /* done? */
  ------------------
  |  Branch (545:9): [True: 0, False: 28.9k]
  ------------------
  546|      0|        if (s->mode & SSL_MODE_RELEASE_BUFFERS && !SSL_IS_DTLS(s))
  ------------------
  |  |  475|      0|# define SSL_MODE_RELEASE_BUFFERS 0x00000010U
  ------------------
                      if (s->mode & SSL_MODE_RELEASE_BUFFERS && !SSL_IS_DTLS(s))
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  ------------------
  |  Branch (546:13): [True: 0, False: 0]
  |  Branch (546:51): [True: 0, False: 0]
  ------------------
  547|      0|            ssl3_release_write_buffer(s);
  548|       |
  549|      0|        *written = tot;
  550|      0|        return 1;
  551|      0|    }
  552|       |
  553|  28.9k|    n = (len - tot);
  554|       |
  555|  28.9k|    max_send_fragment = ssl_get_max_send_fragment(s);
  556|  28.9k|    split_send_fragment = ssl_get_split_send_fragment(s);
  557|       |    /*
  558|       |     * If max_pipelines is 0 then this means "undefined" and we default to
  559|       |     * 1 pipeline. Similarly if the cipher does not support pipelined
  560|       |     * processing then we also only use 1 pipeline, or if we're not using
  561|       |     * explicit IVs
  562|       |     */
  563|  28.9k|    maxpipes = s->max_pipelines;
  564|  28.9k|    if (maxpipes > SSL_MAX_PIPELINES) {
  ------------------
  |  |   53|  28.9k|# define SSL_MAX_PIPELINES  32
  ------------------
  |  Branch (564:9): [True: 0, False: 28.9k]
  ------------------
  565|       |        /*
  566|       |         * We should have prevented this when we set max_pipelines so we
  567|       |         * shouldn't get here
  568|       |         */
  569|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_WRITE_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  570|      0|                 ERR_R_INTERNAL_ERROR);
  571|      0|        return -1;
  572|      0|    }
  573|  28.9k|    if (maxpipes == 0
  ------------------
  |  Branch (573:9): [True: 28.9k, False: 0]
  ------------------
  574|      0|        || s->enc_write_ctx == NULL
  ------------------
  |  Branch (574:12): [True: 0, False: 0]
  ------------------
  575|      0|        || !(EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(s->enc_write_ctx))
  ------------------
  |  Branch (575:12): [True: 0, False: 0]
  ------------------
  576|      0|             & EVP_CIPH_FLAG_PIPELINE)
  ------------------
  |  |  280|      0|# define         EVP_CIPH_FLAG_PIPELINE          0X800000
  ------------------
  577|      0|        || !SSL_USE_EXPLICIT_IV(s))
  ------------------
  |  |  338|      0|                (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_EXPLICIT_IV)
  |  |  ------------------
  |  |  |  | 1988|      0|# define SSL_ENC_FLAG_EXPLICIT_IV        0x1
  |  |  ------------------
  ------------------
  |  Branch (577:12): [True: 0, False: 0]
  ------------------
  578|  28.9k|        maxpipes = 1;
  579|  28.9k|    if (max_send_fragment == 0 || split_send_fragment == 0
  ------------------
  |  Branch (579:9): [True: 0, False: 28.9k]
  |  Branch (579:35): [True: 0, False: 28.9k]
  ------------------
  580|  28.9k|        || split_send_fragment > max_send_fragment) {
  ------------------
  |  Branch (580:12): [True: 0, False: 28.9k]
  ------------------
  581|       |        /*
  582|       |         * We should have prevented this when we set/get the split and max send
  583|       |         * fragments so we shouldn't get here
  584|       |         */
  585|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_WRITE_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  586|      0|                 ERR_R_INTERNAL_ERROR);
  587|      0|        return -1;
  588|      0|    }
  589|       |
  590|  28.9k|    for (;;) {
  591|  28.9k|        size_t pipelens[SSL_MAX_PIPELINES], tmppipelen, remain;
  592|  28.9k|        size_t numpipes, j;
  593|       |
  594|  28.9k|        if (n == 0)
  ------------------
  |  Branch (594:13): [True: 0, False: 28.9k]
  ------------------
  595|      0|            numpipes = 1;
  596|  28.9k|        else
  597|  28.9k|            numpipes = ((n - 1) / split_send_fragment) + 1;
  598|  28.9k|        if (numpipes > maxpipes)
  ------------------
  |  Branch (598:13): [True: 0, False: 28.9k]
  ------------------
  599|      0|            numpipes = maxpipes;
  600|       |
  601|  28.9k|        if (n / numpipes >= max_send_fragment) {
  ------------------
  |  Branch (601:13): [True: 0, False: 28.9k]
  ------------------
  602|       |            /*
  603|       |             * We have enough data to completely fill all available
  604|       |             * pipelines
  605|       |             */
  606|      0|            for (j = 0; j < numpipes; j++) {
  ------------------
  |  Branch (606:25): [True: 0, False: 0]
  ------------------
  607|      0|                pipelens[j] = max_send_fragment;
  608|      0|            }
  609|  28.9k|        } else {
  610|       |            /* We can partially fill all available pipelines */
  611|  28.9k|            tmppipelen = n / numpipes;
  612|  28.9k|            remain = n % numpipes;
  613|  57.9k|            for (j = 0; j < numpipes; j++) {
  ------------------
  |  Branch (613:25): [True: 28.9k, False: 28.9k]
  ------------------
  614|  28.9k|                pipelens[j] = tmppipelen;
  615|  28.9k|                if (j < remain)
  ------------------
  |  Branch (615:21): [True: 0, False: 28.9k]
  ------------------
  616|      0|                    pipelens[j]++;
  617|  28.9k|            }
  618|  28.9k|        }
  619|       |
  620|  28.9k|        i = do_ssl3_write(s, type, &(buf[tot]), pipelens, numpipes, 0,
  621|  28.9k|                          &tmpwrit);
  622|  28.9k|        if (i <= 0) {
  ------------------
  |  Branch (622:13): [True: 0, False: 28.9k]
  ------------------
  623|       |            /* SSLfatal() already called if appropriate */
  624|       |            /* XXX should we ssl3_release_write_buffer if i<0? */
  625|      0|            s->rlayer.wnum = tot;
  626|      0|            return i;
  627|      0|        }
  628|       |
  629|  28.9k|        if (tmpwrit == n ||
  ------------------
  |  Branch (629:13): [True: 28.9k, False: 0]
  ------------------
  630|      0|            (type == SSL3_RT_APPLICATION_DATA &&
  ------------------
  |  |  216|      0|# define SSL3_RT_APPLICATION_DATA        23
  ------------------
  |  Branch (630:14): [True: 0, False: 0]
  ------------------
  631|  28.9k|             (s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE))) {
  ------------------
  |  |  457|      0|# define SSL_MODE_ENABLE_PARTIAL_WRITE       0x00000001U
  ------------------
  |  Branch (631:14): [True: 0, False: 0]
  ------------------
  632|       |            /*
  633|       |             * next chunk of data should get another prepended empty fragment
  634|       |             * in ciphersuites with known-IV weakness:
  635|       |             */
  636|  28.9k|            s->s3->empty_fragment_done = 0;
  637|       |
  638|  28.9k|            if (tmpwrit == n
  ------------------
  |  Branch (638:17): [True: 28.9k, False: 0]
  ------------------
  639|  28.9k|                    && (s->mode & SSL_MODE_RELEASE_BUFFERS) != 0
  ------------------
  |  |  475|  28.9k|# define SSL_MODE_RELEASE_BUFFERS 0x00000010U
  ------------------
  |  Branch (639:24): [True: 0, False: 28.9k]
  ------------------
  640|      0|                    && !SSL_IS_DTLS(s))
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  ------------------
  |  Branch (640:24): [True: 0, False: 0]
  ------------------
  641|      0|                ssl3_release_write_buffer(s);
  642|       |
  643|  28.9k|            *written = tot + tmpwrit;
  644|  28.9k|            return 1;
  645|  28.9k|        }
  646|       |
  647|      0|        n -= tmpwrit;
  648|      0|        tot += tmpwrit;
  649|      0|    }
  650|  28.9k|}
do_ssl3_write:
  655|  28.9k|{
  656|  28.9k|    WPACKET pkt[SSL_MAX_PIPELINES];
  657|  28.9k|    SSL3_RECORD wr[SSL_MAX_PIPELINES];
  658|  28.9k|    WPACKET *thispkt;
  659|  28.9k|    SSL3_RECORD *thiswr;
  660|  28.9k|    unsigned char *recordstart;
  661|  28.9k|    int i, mac_size, clear = 0;
  662|  28.9k|    size_t prefix_len = 0;
  663|  28.9k|    int eivlen = 0;
  664|  28.9k|    size_t align = 0;
  665|  28.9k|    SSL3_BUFFER *wb;
  666|  28.9k|    SSL_SESSION *sess;
  667|  28.9k|    size_t totlen = 0, len, wpinited = 0;
  668|  28.9k|    size_t j;
  669|       |
  670|  57.9k|    for (j = 0; j < numpipes; j++)
  ------------------
  |  Branch (670:17): [True: 28.9k, False: 28.9k]
  ------------------
  671|  28.9k|        totlen += pipelens[j];
  672|       |    /*
  673|       |     * first check if there is a SSL3_BUFFER still being written out.  This
  674|       |     * will happen with non blocking IO
  675|       |     */
  676|  28.9k|    if (RECORD_LAYER_write_pending(&s->rlayer)) {
  ------------------
  |  Branch (676:9): [True: 0, False: 28.9k]
  ------------------
  677|       |        /* Calls SSLfatal() as required */
  678|      0|        return ssl3_write_pending(s, type, buf, totlen, written);
  679|      0|    }
  680|       |
  681|       |    /* If we have an alert to send, lets send it */
  682|  28.9k|    if (s->s3->alert_dispatch) {
  ------------------
  |  Branch (682:9): [True: 0, False: 28.9k]
  ------------------
  683|      0|        i = s->method->ssl_dispatch_alert(s);
  684|      0|        if (i <= 0) {
  ------------------
  |  Branch (684:13): [True: 0, False: 0]
  ------------------
  685|       |            /* SSLfatal() already called if appropriate */
  686|      0|            return i;
  687|      0|        }
  688|       |        /* if it went, fall through and send more stuff */
  689|      0|    }
  690|       |
  691|  28.9k|    if (s->rlayer.numwpipes < numpipes) {
  ------------------
  |  Branch (691:9): [True: 0, False: 28.9k]
  ------------------
  692|      0|        if (!ssl3_setup_write_buffer(s, numpipes, 0)) {
  ------------------
  |  Branch (692:13): [True: 0, False: 0]
  ------------------
  693|       |            /* SSLfatal() already called */
  694|      0|            return -1;
  695|      0|        }
  696|      0|    }
  697|       |
  698|  28.9k|    if (totlen == 0 && !create_empty_fragment)
  ------------------
  |  Branch (698:9): [True: 0, False: 28.9k]
  |  Branch (698:24): [True: 0, False: 0]
  ------------------
  699|      0|        return 0;
  700|       |
  701|  28.9k|    sess = s->session;
  702|       |
  703|  28.9k|    if ((sess == NULL) ||
  ------------------
  |  Branch (703:9): [True: 0, False: 28.9k]
  ------------------
  704|  28.9k|        (s->enc_write_ctx == NULL) || (EVP_MD_CTX_md(s->write_hash) == NULL)) {
  ------------------
  |  Branch (704:9): [True: 28.9k, False: 0]
  |  Branch (704:39): [True: 0, False: 0]
  ------------------
  705|  28.9k|        clear = s->enc_write_ctx ? 0 : 1; /* must be AEAD cipher */
  ------------------
  |  Branch (705:17): [True: 0, False: 28.9k]
  ------------------
  706|  28.9k|        mac_size = 0;
  707|  28.9k|    } else {
  708|       |        /* TODO(siz_t): Convert me */
  709|      0|        mac_size = EVP_MD_CTX_size(s->write_hash);
  ------------------
  |  |  457|      0|# define EVP_MD_CTX_size(e)              EVP_MD_size(EVP_MD_CTX_md(e))
  ------------------
  710|      0|        if (mac_size < 0) {
  ------------------
  |  Branch (710:13): [True: 0, False: 0]
  ------------------
  711|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  712|      0|                     ERR_R_INTERNAL_ERROR);
  713|      0|            goto err;
  714|      0|        }
  715|      0|    }
  716|       |
  717|       |    /*
  718|       |     * 'create_empty_fragment' is true only when this function calls itself
  719|       |     */
  720|  28.9k|    if (!clear && !create_empty_fragment && !s->s3->empty_fragment_done) {
  ------------------
  |  Branch (720:9): [True: 0, False: 28.9k]
  |  Branch (720:19): [True: 0, False: 0]
  |  Branch (720:45): [True: 0, False: 0]
  ------------------
  721|       |        /*
  722|       |         * countermeasure against known-IV weakness in CBC ciphersuites (see
  723|       |         * http://www.openssl.org/~bodo/tls-cbc.txt)
  724|       |         */
  725|       |
  726|      0|        if (s->s3->need_empty_fragments && type == SSL3_RT_APPLICATION_DATA) {
  ------------------
  |  |  216|      0|# define SSL3_RT_APPLICATION_DATA        23
  ------------------
  |  Branch (726:13): [True: 0, False: 0]
  |  Branch (726:44): [True: 0, False: 0]
  ------------------
  727|       |            /*
  728|       |             * recursive function call with 'create_empty_fragment' set; this
  729|       |             * prepares and buffers the data for an empty fragment (these
  730|       |             * 'prefix_len' bytes are sent out later together with the actual
  731|       |             * payload)
  732|       |             */
  733|      0|            size_t tmppipelen = 0;
  734|      0|            int ret;
  735|       |
  736|      0|            ret = do_ssl3_write(s, type, buf, &tmppipelen, 1, 1, &prefix_len);
  737|      0|            if (ret <= 0) {
  ------------------
  |  Branch (737:17): [True: 0, False: 0]
  ------------------
  738|       |                /* SSLfatal() already called if appropriate */
  739|      0|                goto err;
  740|      0|            }
  741|       |
  742|      0|            if (prefix_len >
  ------------------
  |  Branch (742:17): [True: 0, False: 0]
  ------------------
  743|      0|                (SSL3_RT_HEADER_LENGTH + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD)) {
  ------------------
  |  |  133|      0|# define SSL3_RT_HEADER_LENGTH                   5
  ------------------
                              (SSL3_RT_HEADER_LENGTH + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD)) {
  ------------------
  |  |  189|      0|                        (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE)
  |  |  ------------------
  |  |  |  |  166|      0|# define SSL_RT_MAX_CIPHER_BLOCK_SIZE            16
  |  |  ------------------
  |  |                                       (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE)
  |  |  ------------------
  |  |  |  |  160|      0|# define SSL3_RT_MAX_MD_SIZE                     64
  |  |  ------------------
  ------------------
  744|       |                /* insufficient space */
  745|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  746|      0|                         ERR_R_INTERNAL_ERROR);
  747|      0|                goto err;
  748|      0|            }
  749|      0|        }
  750|       |
  751|      0|        s->s3->empty_fragment_done = 1;
  752|      0|    }
  753|       |
  754|  28.9k|    if (create_empty_fragment) {
  ------------------
  |  Branch (754:9): [True: 0, False: 28.9k]
  ------------------
  755|      0|        wb = &s->rlayer.wbuf[0];
  756|      0|#if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0
  757|       |        /*
  758|       |         * extra fragment would be couple of cipher blocks, which would be
  759|       |         * multiple of SSL3_ALIGN_PAYLOAD, so if we want to align the real
  760|       |         * payload, then we can just pretend we simply have two headers.
  761|       |         */
  762|      0|        align = (size_t)SSL3_BUFFER_get_buf(wb) + 2 * SSL3_RT_HEADER_LENGTH;
  ------------------
  |  |   56|      0|#define SSL3_BUFFER_get_buf(b)              ((b)->buf)
  ------------------
                      align = (size_t)SSL3_BUFFER_get_buf(wb) + 2 * SSL3_RT_HEADER_LENGTH;
  ------------------
  |  |  133|      0|# define SSL3_RT_HEADER_LENGTH                   5
  ------------------
  763|      0|        align = SSL3_ALIGN_PAYLOAD - 1 - ((align - 1) % SSL3_ALIGN_PAYLOAD);
  ------------------
  |  |  146|      0|#  define SSL3_ALIGN_PAYLOAD                     8
  ------------------
                      align = SSL3_ALIGN_PAYLOAD - 1 - ((align - 1) % SSL3_ALIGN_PAYLOAD);
  ------------------
  |  |  146|      0|#  define SSL3_ALIGN_PAYLOAD                     8
  ------------------
  764|      0|#endif
  765|      0|        SSL3_BUFFER_set_offset(wb, align);
  ------------------
  |  |   64|      0|#define SSL3_BUFFER_set_offset(b, o)        ((b)->offset = (o))
  ------------------
  766|      0|        if (!WPACKET_init_static_len(&pkt[0], SSL3_BUFFER_get_buf(wb),
  ------------------
  |  |   56|      0|#define SSL3_BUFFER_get_buf(b)              ((b)->buf)
  ------------------
  |  Branch (766:13): [True: 0, False: 0]
  ------------------
  767|      0|                                     SSL3_BUFFER_get_len(wb), 0)
  ------------------
  |  |   58|      0|#define SSL3_BUFFER_get_len(b)              ((b)->len)
  ------------------
  768|      0|                || !WPACKET_allocate_bytes(&pkt[0], align, NULL)) {
  ------------------
  |  Branch (768:20): [True: 0, False: 0]
  ------------------
  769|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  770|      0|                     ERR_R_INTERNAL_ERROR);
  771|      0|            goto err;
  772|      0|        }
  773|      0|        wpinited = 1;
  774|  28.9k|    } else if (prefix_len) {
  ------------------
  |  Branch (774:16): [True: 0, False: 28.9k]
  ------------------
  775|      0|        wb = &s->rlayer.wbuf[0];
  776|      0|        if (!WPACKET_init_static_len(&pkt[0],
  ------------------
  |  Branch (776:13): [True: 0, False: 0]
  ------------------
  777|      0|                                     SSL3_BUFFER_get_buf(wb),
  ------------------
  |  |   56|      0|#define SSL3_BUFFER_get_buf(b)              ((b)->buf)
  ------------------
  778|      0|                                     SSL3_BUFFER_get_len(wb), 0)
  ------------------
  |  |   58|      0|#define SSL3_BUFFER_get_len(b)              ((b)->len)
  ------------------
  779|      0|                || !WPACKET_allocate_bytes(&pkt[0], SSL3_BUFFER_get_offset(wb)
  ------------------
  |  |   63|      0|#define SSL3_BUFFER_get_offset(b)           ((b)->offset)
  ------------------
  |  Branch (779:20): [True: 0, False: 0]
  ------------------
  780|      0|                                                    + prefix_len, NULL)) {
  781|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  782|      0|                     ERR_R_INTERNAL_ERROR);
  783|      0|            goto err;
  784|      0|        }
  785|      0|        wpinited = 1;
  786|  28.9k|    } else {
  787|  57.9k|        for (j = 0; j < numpipes; j++) {
  ------------------
  |  Branch (787:21): [True: 28.9k, False: 28.9k]
  ------------------
  788|  28.9k|            thispkt = &pkt[j];
  789|       |
  790|  28.9k|            wb = &s->rlayer.wbuf[j];
  791|  28.9k|#if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD != 0
  792|  28.9k|            align = (size_t)SSL3_BUFFER_get_buf(wb) + SSL3_RT_HEADER_LENGTH;
  ------------------
  |  |   56|  28.9k|#define SSL3_BUFFER_get_buf(b)              ((b)->buf)
  ------------------
                          align = (size_t)SSL3_BUFFER_get_buf(wb) + SSL3_RT_HEADER_LENGTH;
  ------------------
  |  |  133|  28.9k|# define SSL3_RT_HEADER_LENGTH                   5
  ------------------
  793|  28.9k|            align = SSL3_ALIGN_PAYLOAD - 1 - ((align - 1) % SSL3_ALIGN_PAYLOAD);
  ------------------
  |  |  146|  28.9k|#  define SSL3_ALIGN_PAYLOAD                     8
  ------------------
                          align = SSL3_ALIGN_PAYLOAD - 1 - ((align - 1) % SSL3_ALIGN_PAYLOAD);
  ------------------
  |  |  146|  28.9k|#  define SSL3_ALIGN_PAYLOAD                     8
  ------------------
  794|  28.9k|#endif
  795|  28.9k|            SSL3_BUFFER_set_offset(wb, align);
  ------------------
  |  |   64|  28.9k|#define SSL3_BUFFER_set_offset(b, o)        ((b)->offset = (o))
  ------------------
  796|  28.9k|            if (!WPACKET_init_static_len(thispkt, SSL3_BUFFER_get_buf(wb),
  ------------------
  |  |   56|  28.9k|#define SSL3_BUFFER_get_buf(b)              ((b)->buf)
  ------------------
  |  Branch (796:17): [True: 0, False: 28.9k]
  ------------------
  797|  28.9k|                                         SSL3_BUFFER_get_len(wb), 0)
  ------------------
  |  |   58|  28.9k|#define SSL3_BUFFER_get_len(b)              ((b)->len)
  ------------------
  798|  28.9k|                    || !WPACKET_allocate_bytes(thispkt, align, NULL)) {
  ------------------
  |  Branch (798:24): [True: 0, False: 28.9k]
  ------------------
  799|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  800|      0|                         ERR_R_INTERNAL_ERROR);
  801|      0|                goto err;
  802|      0|            }
  803|  28.9k|            wpinited++;
  804|  28.9k|        }
  805|  28.9k|    }
  806|       |
  807|       |    /* Explicit IV length, block ciphers appropriate version flag */
  808|  28.9k|    if (s->enc_write_ctx && SSL_USE_EXPLICIT_IV(s) && !SSL_TREAT_AS_TLS13(s)) {
  ------------------
  |  |  338|  28.9k|                (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_EXPLICIT_IV)
  |  |  ------------------
  |  |  |  | 1988|      0|# define SSL_ENC_FLAG_EXPLICIT_IV        0x1
  |  |  ------------------
  |  |  |  Branch (338:17): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                  if (s->enc_write_ctx && SSL_USE_EXPLICIT_IV(s) && !SSL_TREAT_AS_TLS13(s)) {
  ------------------
  |  |  327|      0|    (SSL_IS_TLS13(s) || (s)->early_data_state == SSL_EARLY_DATA_CONNECTING \
  |  |  ------------------
  |  |  |  |  322|      0|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:27): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (327:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  328|      0|     || (s)->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY \
  |  |  ------------------
  |  |  |  Branch (328:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  329|      0|     || (s)->early_data_state == SSL_EARLY_DATA_WRITING \
  |  |  ------------------
  |  |  |  Branch (329:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|     || (s)->early_data_state == SSL_EARLY_DATA_WRITE_RETRY \
  |  |  ------------------
  |  |  |  Branch (330:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  331|      0|     || (s)->hello_retry_request == SSL_HRR_PENDING)
  |  |  ------------------
  |  |  |  Branch (331:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (808:9): [True: 0, False: 28.9k]
  ------------------
  809|      0|        int mode = EVP_CIPHER_CTX_mode(s->enc_write_ctx);
  ------------------
  |  |  494|      0|# define EVP_CIPHER_CTX_mode(c)         EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c))
  |  |  ------------------
  |  |  |  |  471|      0|# define EVP_CIPHER_mode(e)              (EVP_CIPHER_flags(e) & EVP_CIPH_MODE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|# define         EVP_CIPH_MODE                   0xF0007
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  810|      0|        if (mode == EVP_CIPH_CBC_MODE) {
  ------------------
  |  |  237|      0|# define         EVP_CIPH_CBC_MODE               0x2
  ------------------
  |  Branch (810:13): [True: 0, False: 0]
  ------------------
  811|       |            /* TODO(size_t): Convert me */
  812|      0|            eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx);
  813|      0|            if (eivlen <= 1)
  ------------------
  |  Branch (813:17): [True: 0, False: 0]
  ------------------
  814|      0|                eivlen = 0;
  815|      0|        } else if (mode == EVP_CIPH_GCM_MODE) {
  ------------------
  |  |  241|      0|# define         EVP_CIPH_GCM_MODE               0x6
  ------------------
  |  Branch (815:20): [True: 0, False: 0]
  ------------------
  816|       |            /* Need explicit part of IV for GCM mode */
  817|      0|            eivlen = EVP_GCM_TLS_EXPLICIT_IV_LEN;
  ------------------
  |  |  377|      0|# define EVP_GCM_TLS_EXPLICIT_IV_LEN                     8
  ------------------
  818|      0|        } else if (mode == EVP_CIPH_CCM_MODE) {
  ------------------
  |  |  242|      0|# define         EVP_CIPH_CCM_MODE               0x7
  ------------------
  |  Branch (818:20): [True: 0, False: 0]
  ------------------
  819|      0|            eivlen = EVP_CCM_TLS_EXPLICIT_IV_LEN;
  ------------------
  |  |  385|      0|# define EVP_CCM_TLS_EXPLICIT_IV_LEN                     8
  ------------------
  820|      0|        }
  821|      0|    }
  822|       |
  823|  28.9k|    totlen = 0;
  824|       |    /* Clear our SSL3_RECORD structures */
  825|  28.9k|    memset(wr, 0, sizeof(wr));
  826|  57.9k|    for (j = 0; j < numpipes; j++) {
  ------------------
  |  Branch (826:17): [True: 28.9k, False: 28.9k]
  ------------------
  827|  28.9k|        unsigned int version = (s->version == TLS1_3_VERSION) ? TLS1_2_VERSION
  ------------------
  |  |   30|  28.9k|# define TLS1_3_VERSION                  0x0304
  ------------------
                      unsigned int version = (s->version == TLS1_3_VERSION) ? TLS1_2_VERSION
  ------------------
  |  |   29|  28.9k|# define TLS1_2_VERSION                  0x0303
  ------------------
  |  Branch (827:32): [True: 28.9k, False: 0]
  ------------------
  828|  28.9k|                                                              : s->version;
  829|  28.9k|        unsigned char *compressdata = NULL;
  830|  28.9k|        size_t maxcomplen;
  831|  28.9k|        unsigned int rectype;
  832|       |
  833|  28.9k|        thispkt = &pkt[j];
  834|  28.9k|        thiswr = &wr[j];
  835|       |
  836|       |        /*
  837|       |         * In TLSv1.3, once encrypting, we always use application data for the
  838|       |         * record type
  839|       |         */
  840|  28.9k|        if (SSL_TREAT_AS_TLS13(s)
  ------------------
  |  |  327|  57.9k|    (SSL_IS_TLS13(s) || (s)->early_data_state == SSL_EARLY_DATA_CONNECTING \
  |  |  ------------------
  |  |  |  |  322|  57.9k|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  319|  57.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:27): [True: 28.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|  28.9k|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  57.9k|# define TLS1_3_VERSION                  0x0304
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:30): [True: 28.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|  57.9k|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  28.9k|# define TLS_ANY_VERSION                 0x10000
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:30): [True: 0, False: 28.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (327:25): [True: 0, False: 28.9k]
  |  |  ------------------
  |  |  328|  28.9k|     || (s)->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY \
  |  |  ------------------
  |  |  |  Branch (328:9): [True: 0, False: 28.9k]
  |  |  ------------------
  |  |  329|  28.9k|     || (s)->early_data_state == SSL_EARLY_DATA_WRITING \
  |  |  ------------------
  |  |  |  Branch (329:9): [True: 0, False: 28.9k]
  |  |  ------------------
  |  |  330|  28.9k|     || (s)->early_data_state == SSL_EARLY_DATA_WRITE_RETRY \
  |  |  ------------------
  |  |  |  Branch (330:9): [True: 0, False: 28.9k]
  |  |  ------------------
  |  |  331|  57.9k|     || (s)->hello_retry_request == SSL_HRR_PENDING)
  |  |  ------------------
  |  |  |  Branch (331:9): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  841|      0|                && s->enc_write_ctx != NULL
  ------------------
  |  Branch (841:20): [True: 0, False: 0]
  ------------------
  842|      0|                && (s->statem.enc_write_state != ENC_WRITE_STATE_WRITE_PLAIN_ALERTS
  ------------------
  |  Branch (842:21): [True: 0, False: 0]
  ------------------
  843|      0|                    || type != SSL3_RT_ALERT))
  ------------------
  |  |  214|      0|# define SSL3_RT_ALERT                   21
  ------------------
  |  Branch (843:24): [True: 0, False: 0]
  ------------------
  844|      0|            rectype = SSL3_RT_APPLICATION_DATA;
  ------------------
  |  |  216|      0|# define SSL3_RT_APPLICATION_DATA        23
  ------------------
  845|  28.9k|        else
  846|  28.9k|            rectype = type;
  847|  28.9k|        SSL3_RECORD_set_type(thiswr, rectype);
  ------------------
  |  |   80|  28.9k|#define SSL3_RECORD_set_type(r, t)              ((r)->type = (t))
  ------------------
  848|       |
  849|       |        /*
  850|       |         * Some servers hang if initial client hello is larger than 256 bytes
  851|       |         * and record version number > TLS 1.0
  852|       |         */
  853|  28.9k|        if (SSL_get_state(s) == TLS_ST_CW_CLNT_HELLO
  ------------------
  |  Branch (853:13): [True: 28.9k, False: 0]
  ------------------
  854|  28.9k|                && !s->renegotiate
  ------------------
  |  Branch (854:20): [True: 28.9k, False: 0]
  ------------------
  855|  28.9k|                && TLS1_get_version(s) > TLS1_VERSION
  ------------------
  |  |   46|  28.9k|        ((SSL_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_version(s) : 0)
  |  |  ------------------
  |  |  |  |   36|  28.9k|# define TLS1_VERSION_MAJOR              0x03
  |  |  ------------------
  |  |  |  Branch (46:10): [True: 28.9k, False: 0]
  |  |  ------------------
  ------------------
                              && TLS1_get_version(s) > TLS1_VERSION
  ------------------
  |  |   27|  57.9k|# define TLS1_VERSION                    0x0301
  ------------------
  |  Branch (855:20): [True: 28.9k, False: 0]
  ------------------
  856|  28.9k|                && s->hello_retry_request == SSL_HRR_NONE)
  ------------------
  |  Branch (856:20): [True: 28.9k, False: 0]
  ------------------
  857|  28.9k|            version = TLS1_VERSION;
  ------------------
  |  |   27|  28.9k|# define TLS1_VERSION                    0x0301
  ------------------
  858|  28.9k|        SSL3_RECORD_set_rec_version(thiswr, version);
  ------------------
  |  |   81|  28.9k|#define SSL3_RECORD_set_rec_version(r, v)       ((r)->rec_version = (v))
  ------------------
  859|       |
  860|  28.9k|        maxcomplen = pipelens[j];
  861|  28.9k|        if (s->compress != NULL)
  ------------------
  |  Branch (861:13): [True: 0, False: 28.9k]
  ------------------
  862|      0|            maxcomplen += SSL3_RT_MAX_COMPRESSED_OVERHEAD;
  ------------------
  |  |  173|      0|# define SSL3_RT_MAX_COMPRESSED_OVERHEAD         1024
  ------------------
  863|       |
  864|       |        /* write the header */
  865|  28.9k|        if (!WPACKET_put_bytes_u8(thispkt, rectype)
  ------------------
  |  |  818|  57.9k|    WPACKET_put_bytes__((pkt), (val), 1)
  ------------------
  |  Branch (865:13): [True: 0, False: 28.9k]
  ------------------
  866|  28.9k|                || !WPACKET_put_bytes_u16(thispkt, version)
  ------------------
  |  |  820|  57.9k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (866:20): [True: 0, False: 28.9k]
  ------------------
  867|  28.9k|                || !WPACKET_start_sub_packet_u16(thispkt)
  ------------------
  |  |  721|  57.9k|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (867:20): [True: 0, False: 28.9k]
  ------------------
  868|  28.9k|                || (eivlen > 0
  ------------------
  |  Branch (868:21): [True: 0, False: 28.9k]
  ------------------
  869|      0|                    && !WPACKET_allocate_bytes(thispkt, eivlen, NULL))
  ------------------
  |  Branch (869:24): [True: 0, False: 0]
  ------------------
  870|  28.9k|                || (maxcomplen > 0
  ------------------
  |  Branch (870:21): [True: 28.9k, False: 0]
  ------------------
  871|  28.9k|                    && !WPACKET_reserve_bytes(thispkt, maxcomplen,
  ------------------
  |  Branch (871:24): [True: 0, False: 28.9k]
  ------------------
  872|  28.9k|                                              &compressdata))) {
  873|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  874|      0|                     ERR_R_INTERNAL_ERROR);
  875|      0|            goto err;
  876|      0|        }
  877|       |
  878|       |        /* lets setup the record stuff. */
  879|  28.9k|        SSL3_RECORD_set_data(thiswr, compressdata);
  ------------------
  |  |   87|  28.9k|#define SSL3_RECORD_set_data(r, d)              ((r)->data = (d))
  ------------------
  880|  28.9k|        SSL3_RECORD_set_length(thiswr, pipelens[j]);
  ------------------
  |  |   83|  28.9k|#define SSL3_RECORD_set_length(r, l)            ((r)->length = (l))
  ------------------
  881|  28.9k|        SSL3_RECORD_set_input(thiswr, (unsigned char *)&buf[totlen]);
  ------------------
  |  |   89|  28.9k|#define SSL3_RECORD_set_input(r, i)             ((r)->input = (i))
  ------------------
  882|  28.9k|        totlen += pipelens[j];
  883|       |
  884|       |        /*
  885|       |         * we now 'read' from thiswr->input, thiswr->length bytes into
  886|       |         * thiswr->data
  887|       |         */
  888|       |
  889|       |        /* first we compress */
  890|  28.9k|        if (s->compress != NULL) {
  ------------------
  |  Branch (890:13): [True: 0, False: 28.9k]
  ------------------
  891|      0|            if (!ssl3_do_compress(s, thiswr)
  ------------------
  |  Branch (891:17): [True: 0, False: 0]
  ------------------
  892|      0|                    || !WPACKET_allocate_bytes(thispkt, thiswr->length, NULL)) {
  ------------------
  |  Branch (892:24): [True: 0, False: 0]
  ------------------
  893|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  894|      0|                         SSL_R_COMPRESSION_FAILURE);
  895|      0|                goto err;
  896|      0|            }
  897|  28.9k|        } else {
  898|  28.9k|            if (!WPACKET_memcpy(thispkt, thiswr->input, thiswr->length)) {
  ------------------
  |  Branch (898:17): [True: 0, False: 28.9k]
  ------------------
  899|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  900|      0|                         ERR_R_INTERNAL_ERROR);
  901|      0|                goto err;
  902|      0|            }
  903|  28.9k|            SSL3_RECORD_reset_input(&wr[j]);
  ------------------
  |  |   90|  28.9k|#define SSL3_RECORD_reset_input(r)              ((r)->input = (r)->data)
  ------------------
  904|  28.9k|        }
  905|       |
  906|  28.9k|        if (SSL_TREAT_AS_TLS13(s)
  ------------------
  |  |  327|  57.9k|    (SSL_IS_TLS13(s) || (s)->early_data_state == SSL_EARLY_DATA_CONNECTING \
  |  |  ------------------
  |  |  |  |  322|  57.9k|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  319|  57.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:27): [True: 28.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|  28.9k|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|  57.9k|# define TLS1_3_VERSION                  0x0304
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:30): [True: 28.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|  57.9k|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  28.9k|# define TLS_ANY_VERSION                 0x10000
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:30): [True: 0, False: 28.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (327:25): [True: 0, False: 28.9k]
  |  |  ------------------
  |  |  328|  28.9k|     || (s)->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY \
  |  |  ------------------
  |  |  |  Branch (328:9): [True: 0, False: 28.9k]
  |  |  ------------------
  |  |  329|  28.9k|     || (s)->early_data_state == SSL_EARLY_DATA_WRITING \
  |  |  ------------------
  |  |  |  Branch (329:9): [True: 0, False: 28.9k]
  |  |  ------------------
  |  |  330|  28.9k|     || (s)->early_data_state == SSL_EARLY_DATA_WRITE_RETRY \
  |  |  ------------------
  |  |  |  Branch (330:9): [True: 0, False: 28.9k]
  |  |  ------------------
  |  |  331|  57.9k|     || (s)->hello_retry_request == SSL_HRR_PENDING)
  |  |  ------------------
  |  |  |  Branch (331:9): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  907|      0|                && s->enc_write_ctx != NULL
  ------------------
  |  Branch (907:20): [True: 0, False: 0]
  ------------------
  908|      0|                && (s->statem.enc_write_state != ENC_WRITE_STATE_WRITE_PLAIN_ALERTS
  ------------------
  |  Branch (908:21): [True: 0, False: 0]
  ------------------
  909|      0|                    || type != SSL3_RT_ALERT)) {
  ------------------
  |  |  214|      0|# define SSL3_RT_ALERT                   21
  ------------------
  |  Branch (909:24): [True: 0, False: 0]
  ------------------
  910|      0|            size_t rlen, max_send_fragment;
  911|       |
  912|      0|            if (!WPACKET_put_bytes_u8(thispkt, type)) {
  ------------------
  |  |  818|      0|    WPACKET_put_bytes__((pkt), (val), 1)
  ------------------
  |  Branch (912:17): [True: 0, False: 0]
  ------------------
  913|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  914|      0|                         ERR_R_INTERNAL_ERROR);
  915|      0|                goto err;
  916|      0|            }
  917|      0|            SSL3_RECORD_add_length(thiswr, 1);
  ------------------
  |  |   84|      0|#define SSL3_RECORD_add_length(r, l)            ((r)->length += (l))
  ------------------
  918|       |
  919|       |            /* Add TLS1.3 padding */
  920|      0|            max_send_fragment = ssl_get_max_send_fragment(s);
  921|      0|            rlen = SSL3_RECORD_get_length(thiswr);
  ------------------
  |  |   82|      0|#define SSL3_RECORD_get_length(r)               ((r)->length)
  ------------------
  922|      0|            if (rlen < max_send_fragment) {
  ------------------
  |  Branch (922:17): [True: 0, False: 0]
  ------------------
  923|      0|                size_t padding = 0;
  924|      0|                size_t max_padding = max_send_fragment - rlen;
  925|      0|                if (s->record_padding_cb != NULL) {
  ------------------
  |  Branch (925:21): [True: 0, False: 0]
  ------------------
  926|      0|                    padding = s->record_padding_cb(s, type, rlen, s->record_padding_arg);
  927|      0|                } else if (s->block_padding > 0) {
  ------------------
  |  Branch (927:28): [True: 0, False: 0]
  ------------------
  928|      0|                    size_t mask = s->block_padding - 1;
  929|      0|                    size_t remainder;
  930|       |
  931|       |                    /* optimize for power of 2 */
  932|      0|                    if ((s->block_padding & mask) == 0)
  ------------------
  |  Branch (932:25): [True: 0, False: 0]
  ------------------
  933|      0|                        remainder = rlen & mask;
  934|      0|                    else
  935|      0|                        remainder = rlen % s->block_padding;
  936|       |                    /* don't want to add a block of padding if we don't have to */
  937|      0|                    if (remainder == 0)
  ------------------
  |  Branch (937:25): [True: 0, False: 0]
  ------------------
  938|      0|                        padding = 0;
  939|      0|                    else
  940|      0|                        padding = s->block_padding - remainder;
  941|      0|                }
  942|      0|                if (padding > 0) {
  ------------------
  |  Branch (942:21): [True: 0, False: 0]
  ------------------
  943|       |                    /* do not allow the record to exceed max plaintext length */
  944|      0|                    if (padding > max_padding)
  ------------------
  |  Branch (944:25): [True: 0, False: 0]
  ------------------
  945|      0|                        padding = max_padding;
  946|      0|                    if (!WPACKET_memset(thispkt, 0, padding)) {
  ------------------
  |  Branch (946:25): [True: 0, False: 0]
  ------------------
  947|      0|                        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  948|      0|                                 ERR_R_INTERNAL_ERROR);
  949|      0|                        goto err;
  950|      0|                    }
  951|      0|                    SSL3_RECORD_add_length(thiswr, padding);
  ------------------
  |  |   84|      0|#define SSL3_RECORD_add_length(r, l)            ((r)->length += (l))
  ------------------
  952|      0|                }
  953|      0|            }
  954|      0|        }
  955|       |
  956|       |        /*
  957|       |         * we should still have the output to thiswr->data and the input from
  958|       |         * wr->input. Length should be thiswr->length. thiswr->data still points
  959|       |         * in the wb->buf
  960|       |         */
  961|       |
  962|  28.9k|        if (!SSL_WRITE_ETM(s) && mac_size != 0) {
  ------------------
  |  |  374|  57.9k|# define SSL_WRITE_ETM(s) (s->s3->flags & TLS1_FLAGS_ENCRYPT_THEN_MAC_WRITE)
  |  |  ------------------
  |  |  |  |  291|  28.9k|# define TLS1_FLAGS_ENCRYPT_THEN_MAC_WRITE       0x0400
  |  |  ------------------
  ------------------
  |  Branch (962:13): [True: 28.9k, False: 0]
  |  Branch (962:34): [True: 0, False: 28.9k]
  ------------------
  963|      0|            unsigned char *mac;
  964|       |
  965|      0|            if (!WPACKET_allocate_bytes(thispkt, mac_size, &mac)
  ------------------
  |  Branch (965:17): [True: 0, False: 0]
  ------------------
  966|      0|                    || !s->method->ssl3_enc->mac(s, thiswr, mac, 1)) {
  ------------------
  |  Branch (966:24): [True: 0, False: 0]
  ------------------
  967|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  968|      0|                         ERR_R_INTERNAL_ERROR);
  969|      0|                goto err;
  970|      0|            }
  971|      0|        }
  972|       |
  973|       |        /*
  974|       |         * Reserve some bytes for any growth that may occur during encryption.
  975|       |         * This will be at most one cipher block or the tag length if using
  976|       |         * AEAD. SSL_RT_MAX_CIPHER_BLOCK_SIZE covers either case.
  977|       |         */
  978|  28.9k|        if (!WPACKET_reserve_bytes(thispkt, SSL_RT_MAX_CIPHER_BLOCK_SIZE,
  ------------------
  |  |  166|  28.9k|# define SSL_RT_MAX_CIPHER_BLOCK_SIZE            16
  ------------------
  |  Branch (978:13): [True: 0, False: 28.9k]
  ------------------
  979|  28.9k|                                   NULL)
  980|       |                   /*
  981|       |                    * We also need next the amount of bytes written to this
  982|       |                    * sub-packet
  983|       |                    */
  984|  28.9k|                || !WPACKET_get_length(thispkt, &len)) {
  ------------------
  |  Branch (984:20): [True: 0, False: 28.9k]
  ------------------
  985|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  986|      0|                     ERR_R_INTERNAL_ERROR);
  987|      0|            goto err;
  988|      0|        }
  989|       |
  990|       |        /* Get a pointer to the start of this record excluding header */
  991|  28.9k|        recordstart = WPACKET_get_curr(thispkt) - len;
  992|       |
  993|  28.9k|        SSL3_RECORD_set_data(thiswr, recordstart);
  ------------------
  |  |   87|  28.9k|#define SSL3_RECORD_set_data(r, d)              ((r)->data = (d))
  ------------------
  994|  28.9k|        SSL3_RECORD_reset_input(thiswr);
  ------------------
  |  |   90|  28.9k|#define SSL3_RECORD_reset_input(r)              ((r)->input = (r)->data)
  ------------------
  995|  28.9k|        SSL3_RECORD_set_length(thiswr, len);
  ------------------
  |  |   83|  28.9k|#define SSL3_RECORD_set_length(r, l)            ((r)->length = (l))
  ------------------
  996|  28.9k|    }
  997|       |
  998|  28.9k|    if (s->statem.enc_write_state == ENC_WRITE_STATE_WRITE_PLAIN_ALERTS) {
  ------------------
  |  Branch (998:9): [True: 0, False: 28.9k]
  ------------------
  999|       |        /*
 1000|       |         * We haven't actually negotiated the version yet, but we're trying to
 1001|       |         * send early data - so we need to use the tls13enc function.
 1002|       |         */
 1003|      0|        if (tls13_enc(s, wr, numpipes, 1) < 1) {
  ------------------
  |  Branch (1003:13): [True: 0, False: 0]
  ------------------
 1004|      0|            if (!ossl_statem_in_error(s)) {
  ------------------
  |  Branch (1004:17): [True: 0, False: 0]
  ------------------
 1005|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1006|      0|                         ERR_R_INTERNAL_ERROR);
 1007|      0|            }
 1008|      0|            goto err;
 1009|      0|        }
 1010|  28.9k|    } else {
 1011|  28.9k|        if (s->method->ssl3_enc->enc(s, wr, numpipes, 1) < 1) {
  ------------------
  |  Branch (1011:13): [True: 0, False: 28.9k]
  ------------------
 1012|      0|            if (!ossl_statem_in_error(s)) {
  ------------------
  |  Branch (1012:17): [True: 0, False: 0]
  ------------------
 1013|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1014|      0|                         ERR_R_INTERNAL_ERROR);
 1015|      0|            }
 1016|      0|            goto err;
 1017|      0|        }
 1018|  28.9k|    }
 1019|       |
 1020|  57.9k|    for (j = 0; j < numpipes; j++) {
  ------------------
  |  Branch (1020:17): [True: 28.9k, False: 28.9k]
  ------------------
 1021|  28.9k|        size_t origlen;
 1022|       |
 1023|  28.9k|        thispkt = &pkt[j];
 1024|  28.9k|        thiswr = &wr[j];
 1025|       |
 1026|       |        /* Allocate bytes for the encryption overhead */
 1027|  28.9k|        if (!WPACKET_get_length(thispkt, &origlen)
  ------------------
  |  Branch (1027:13): [True: 0, False: 28.9k]
  ------------------
 1028|       |                   /* Encryption should never shrink the data! */
 1029|  28.9k|                || origlen > thiswr->length
  ------------------
  |  Branch (1029:20): [True: 0, False: 28.9k]
  ------------------
 1030|  28.9k|                || (thiswr->length > origlen
  ------------------
  |  Branch (1030:21): [True: 0, False: 28.9k]
  ------------------
 1031|      0|                    && !WPACKET_allocate_bytes(thispkt,
  ------------------
  |  Branch (1031:24): [True: 0, False: 0]
  ------------------
 1032|      0|                                               thiswr->length - origlen, NULL))) {
 1033|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1034|      0|                     ERR_R_INTERNAL_ERROR);
 1035|      0|            goto err;
 1036|      0|        }
 1037|  28.9k|        if (SSL_WRITE_ETM(s) && mac_size != 0) {
  ------------------
  |  |  374|  57.9k|# define SSL_WRITE_ETM(s) (s->s3->flags & TLS1_FLAGS_ENCRYPT_THEN_MAC_WRITE)
  |  |  ------------------
  |  |  |  |  291|  28.9k|# define TLS1_FLAGS_ENCRYPT_THEN_MAC_WRITE       0x0400
  |  |  ------------------
  |  |  |  Branch (374:27): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  |  Branch (1037:33): [True: 0, False: 0]
  ------------------
 1038|      0|            unsigned char *mac;
 1039|       |
 1040|      0|            if (!WPACKET_allocate_bytes(thispkt, mac_size, &mac)
  ------------------
  |  Branch (1040:17): [True: 0, False: 0]
  ------------------
 1041|      0|                    || !s->method->ssl3_enc->mac(s, thiswr, mac, 1)) {
  ------------------
  |  Branch (1041:24): [True: 0, False: 0]
  ------------------
 1042|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1043|      0|                         ERR_R_INTERNAL_ERROR);
 1044|      0|                goto err;
 1045|      0|            }
 1046|      0|            SSL3_RECORD_add_length(thiswr, mac_size);
  ------------------
  |  |   84|      0|#define SSL3_RECORD_add_length(r, l)            ((r)->length += (l))
  ------------------
 1047|      0|        }
 1048|       |
 1049|  28.9k|        if (!WPACKET_get_length(thispkt, &len)
  ------------------
  |  Branch (1049:13): [True: 0, False: 28.9k]
  ------------------
 1050|  28.9k|                || !WPACKET_close(thispkt)) {
  ------------------
  |  Branch (1050:20): [True: 0, False: 28.9k]
  ------------------
 1051|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1052|      0|                     ERR_R_INTERNAL_ERROR);
 1053|      0|            goto err;
 1054|      0|        }
 1055|       |
 1056|  28.9k|        if (s->msg_callback) {
  ------------------
  |  Branch (1056:13): [True: 0, False: 28.9k]
  ------------------
 1057|      0|            recordstart = WPACKET_get_curr(thispkt) - len
 1058|      0|                          - SSL3_RT_HEADER_LENGTH;
  ------------------
  |  |  133|      0|# define SSL3_RT_HEADER_LENGTH                   5
  ------------------
 1059|      0|            s->msg_callback(1, 0, SSL3_RT_HEADER, recordstart,
  ------------------
  |  |  234|      0|# define SSL3_RT_HEADER                  0x100
  ------------------
 1060|      0|                            SSL3_RT_HEADER_LENGTH, s,
  ------------------
  |  |  133|      0|# define SSL3_RT_HEADER_LENGTH                   5
  ------------------
 1061|      0|                            s->msg_callback_arg);
 1062|       |
 1063|      0|            if (SSL_TREAT_AS_TLS13(s) && s->enc_write_ctx != NULL) {
  ------------------
  |  |  327|      0|    (SSL_IS_TLS13(s) || (s)->early_data_state == SSL_EARLY_DATA_CONNECTING \
  |  |  ------------------
  |  |  |  |  322|      0|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (322:27): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  323|      0|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (323:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  324|      0|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (324:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (327:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  328|      0|     || (s)->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY \
  |  |  ------------------
  |  |  |  Branch (328:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  329|      0|     || (s)->early_data_state == SSL_EARLY_DATA_WRITING \
  |  |  ------------------
  |  |  |  Branch (329:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|     || (s)->early_data_state == SSL_EARLY_DATA_WRITE_RETRY \
  |  |  ------------------
  |  |  |  Branch (330:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  331|      0|     || (s)->hello_retry_request == SSL_HRR_PENDING)
  |  |  ------------------
  |  |  |  Branch (331:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1063:42): [True: 0, False: 0]
  ------------------
 1064|      0|                unsigned char ctype = type;
 1065|       |
 1066|      0|                s->msg_callback(1, s->version, SSL3_RT_INNER_CONTENT_TYPE,
  ------------------
  |  |  235|      0|# define SSL3_RT_INNER_CONTENT_TYPE      0x101
  ------------------
 1067|      0|                                &ctype, 1, s, s->msg_callback_arg);
 1068|      0|            }
 1069|      0|        }
 1070|       |
 1071|  28.9k|        if (!WPACKET_finish(thispkt)) {
  ------------------
  |  Branch (1071:13): [True: 0, False: 28.9k]
  ------------------
 1072|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1073|      0|                     ERR_R_INTERNAL_ERROR);
 1074|      0|            goto err;
 1075|      0|        }
 1076|       |
 1077|       |        /*
 1078|       |         * we should now have thiswr->data pointing to the encrypted data, which
 1079|       |         * is thiswr->length long
 1080|       |         */
 1081|  28.9k|        SSL3_RECORD_set_type(thiswr, type); /* not needed but helps for
  ------------------
  |  |   80|  28.9k|#define SSL3_RECORD_set_type(r, t)              ((r)->type = (t))
  ------------------
 1082|       |                                             * debugging */
 1083|  28.9k|        SSL3_RECORD_add_length(thiswr, SSL3_RT_HEADER_LENGTH);
  ------------------
  |  |   84|  28.9k|#define SSL3_RECORD_add_length(r, l)            ((r)->length += (l))
  ------------------
 1084|       |
 1085|  28.9k|        if (create_empty_fragment) {
  ------------------
  |  Branch (1085:13): [True: 0, False: 28.9k]
  ------------------
 1086|       |            /*
 1087|       |             * we are in a recursive call; just return the length, don't write
 1088|       |             * out anything here
 1089|       |             */
 1090|      0|            if (j > 0) {
  ------------------
  |  Branch (1090:17): [True: 0, False: 0]
  ------------------
 1091|       |                /* We should never be pipelining an empty fragment!! */
 1092|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1093|      0|                         ERR_R_INTERNAL_ERROR);
 1094|      0|                goto err;
 1095|      0|            }
 1096|      0|            *written = SSL3_RECORD_get_length(thiswr);
  ------------------
  |  |   82|      0|#define SSL3_RECORD_get_length(r)               ((r)->length)
  ------------------
 1097|      0|            return 1;
 1098|      0|        }
 1099|       |
 1100|       |        /* now let's set up wb */
 1101|  28.9k|        SSL3_BUFFER_set_left(&s->rlayer.wbuf[j],
  ------------------
  |  |   61|  28.9k|#define SSL3_BUFFER_set_left(b, l)          ((b)->left = (l))
  ------------------
 1102|  28.9k|                             prefix_len + SSL3_RECORD_get_length(thiswr));
 1103|  28.9k|    }
 1104|       |
 1105|       |    /*
 1106|       |     * memorize arguments so that ssl3_write_pending can detect bad write
 1107|       |     * retries later
 1108|       |     */
 1109|  28.9k|    s->rlayer.wpend_tot = totlen;
 1110|  28.9k|    s->rlayer.wpend_buf = buf;
 1111|  28.9k|    s->rlayer.wpend_type = type;
 1112|  28.9k|    s->rlayer.wpend_ret = totlen;
 1113|       |
 1114|       |    /* we now just need to write the buffer */
 1115|  28.9k|    return ssl3_write_pending(s, type, buf, totlen, written);
 1116|      0| err:
 1117|      0|    for (j = 0; j < wpinited; j++)
  ------------------
  |  Branch (1117:17): [True: 0, False: 0]
  ------------------
 1118|      0|        WPACKET_cleanup(&pkt[j]);
 1119|      0|    return -1;
 1120|  28.9k|}
ssl3_write_pending:
 1128|  28.9k|{
 1129|  28.9k|    int i;
 1130|  28.9k|    SSL3_BUFFER *wb = s->rlayer.wbuf;
 1131|  28.9k|    size_t currbuf = 0;
 1132|  28.9k|    size_t tmpwrit = 0;
 1133|       |
 1134|  28.9k|    if ((s->rlayer.wpend_tot > len)
  ------------------
  |  Branch (1134:9): [True: 0, False: 28.9k]
  ------------------
 1135|  28.9k|        || (!(s->mode & SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER)
  ------------------
  |  |  464|  28.9k|# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002U
  ------------------
  |  Branch (1135:13): [True: 0, False: 28.9k]
  ------------------
 1136|      0|            && (s->rlayer.wpend_buf != buf))
  ------------------
  |  Branch (1136:16): [True: 0, False: 0]
  ------------------
 1137|  28.9k|        || (s->rlayer.wpend_type != type)) {
  ------------------
  |  Branch (1137:12): [True: 0, False: 28.9k]
  ------------------
 1138|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_WRITE_PENDING,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1139|      0|                 SSL_R_BAD_WRITE_RETRY);
 1140|      0|        return -1;
 1141|      0|    }
 1142|       |
 1143|  28.9k|    for (;;) {
 1144|       |        /* Loop until we find a buffer we haven't written out yet */
 1145|  28.9k|        if (SSL3_BUFFER_get_left(&wb[currbuf]) == 0
  ------------------
  |  |   60|  28.9k|#define SSL3_BUFFER_get_left(b)             ((b)->left)
  ------------------
  |  Branch (1145:13): [True: 0, False: 28.9k]
  ------------------
 1146|      0|            && currbuf < s->rlayer.numwpipes - 1) {
  ------------------
  |  Branch (1146:16): [True: 0, False: 0]
  ------------------
 1147|      0|            currbuf++;
 1148|      0|            continue;
 1149|      0|        }
 1150|  28.9k|        clear_sys_error();
  ------------------
  |  |   76|  28.9k|# define clear_sys_error()       errno=0
  ------------------
 1151|  28.9k|        if (s->wbio != NULL) {
  ------------------
  |  Branch (1151:13): [True: 28.9k, False: 0]
  ------------------
 1152|  28.9k|            s->rwstate = SSL_WRITING;
  ------------------
  |  |  893|  28.9k|# define SSL_WRITING            2
  ------------------
 1153|       |            /* TODO(size_t): Convert this call */
 1154|  28.9k|            i = BIO_write(s->wbio, (char *)
 1155|  28.9k|                          &(SSL3_BUFFER_get_buf(&wb[currbuf])
  ------------------
  |  |   56|  28.9k|#define SSL3_BUFFER_get_buf(b)              ((b)->buf)
  ------------------
 1156|  28.9k|                            [SSL3_BUFFER_get_offset(&wb[currbuf])]),
  ------------------
  |  |   63|  28.9k|#define SSL3_BUFFER_get_offset(b)           ((b)->offset)
  ------------------
 1157|  28.9k|                          (unsigned int)SSL3_BUFFER_get_left(&wb[currbuf]));
  ------------------
  |  |   60|  28.9k|#define SSL3_BUFFER_get_left(b)             ((b)->left)
  ------------------
 1158|  28.9k|            if (i >= 0)
  ------------------
  |  Branch (1158:17): [True: 28.9k, False: 0]
  ------------------
 1159|  28.9k|                tmpwrit = i;
 1160|  28.9k|        } else {
 1161|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_WRITE_PENDING,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1162|      0|                     SSL_R_BIO_NOT_SET);
 1163|      0|            i = -1;
 1164|      0|        }
 1165|  28.9k|        if (i > 0 && tmpwrit == SSL3_BUFFER_get_left(&wb[currbuf])) {
  ------------------
  |  |   60|  28.9k|#define SSL3_BUFFER_get_left(b)             ((b)->left)
  ------------------
  |  Branch (1165:13): [True: 28.9k, False: 0]
  |  Branch (1165:22): [True: 28.9k, False: 0]
  ------------------
 1166|  28.9k|            SSL3_BUFFER_set_left(&wb[currbuf], 0);
  ------------------
  |  |   61|  28.9k|#define SSL3_BUFFER_set_left(b, l)          ((b)->left = (l))
  ------------------
 1167|  28.9k|            SSL3_BUFFER_add_offset(&wb[currbuf], tmpwrit);
  ------------------
  |  |   65|  28.9k|#define SSL3_BUFFER_add_offset(b, o)        ((b)->offset += (o))
  ------------------
 1168|  28.9k|            if (currbuf + 1 < s->rlayer.numwpipes)
  ------------------
  |  Branch (1168:17): [True: 0, False: 28.9k]
  ------------------
 1169|      0|                continue;
 1170|  28.9k|            s->rwstate = SSL_NOTHING;
  ------------------
  |  |  892|  28.9k|# define SSL_NOTHING            1
  ------------------
 1171|  28.9k|            *written = s->rlayer.wpend_ret;
 1172|  28.9k|            return 1;
 1173|  28.9k|        } else if (i <= 0) {
  ------------------
  |  Branch (1173:20): [True: 0, False: 0]
  ------------------
 1174|      0|            if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1175|       |                /*
 1176|       |                 * For DTLS, just drop it. That's kind of the whole point in
 1177|       |                 * using a datagram service
 1178|       |                 */
 1179|      0|                SSL3_BUFFER_set_left(&wb[currbuf], 0);
  ------------------
  |  |   61|      0|#define SSL3_BUFFER_set_left(b, l)          ((b)->left = (l))
  ------------------
 1180|      0|            }
 1181|      0|            return i;
 1182|      0|        }
 1183|      0|        SSL3_BUFFER_add_offset(&wb[currbuf], tmpwrit);
  ------------------
  |  |   65|      0|#define SSL3_BUFFER_add_offset(b, o)        ((b)->offset += (o))
  ------------------
 1184|      0|        SSL3_BUFFER_sub_left(&wb[currbuf], tmpwrit);
  ------------------
  |  |   62|      0|#define SSL3_BUFFER_sub_left(b, l)          ((b)->left -= (l))
  ------------------
 1185|      0|    }
 1186|  28.9k|}
ssl3_read_bytes:
 1219|  28.9k|{
 1220|  28.9k|    int i, j, ret;
 1221|  28.9k|    size_t n, curr_rec, num_recs, totalbytes;
 1222|  28.9k|    SSL3_RECORD *rr;
 1223|  28.9k|    SSL3_BUFFER *rbuf;
 1224|  28.9k|    void (*cb) (const SSL *ssl, int type2, int val) = NULL;
 1225|  28.9k|    int is_tls13 = SSL_IS_TLS13(s);
  ------------------
  |  |  322|  28.9k|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|  57.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 28.9k, False: 0]
  |  |  ------------------
  |  |  323|  28.9k|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|  57.9k|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 28.9k, False: 0]
  |  |  ------------------
  |  |  324|  28.9k|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|  28.9k|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
 1226|       |
 1227|  28.9k|    rbuf = &s->rlayer.rbuf;
 1228|       |
 1229|  28.9k|    if (!SSL3_BUFFER_is_initialised(rbuf)) {
  ------------------
  |  |   66|  28.9k|#define SSL3_BUFFER_is_initialised(b)       ((b)->buf != NULL)
  ------------------
  |  Branch (1229:9): [True: 0, False: 28.9k]
  ------------------
 1230|       |        /* Not initialized yet */
 1231|      0|        if (!ssl3_setup_read_buffer(s)) {
  ------------------
  |  Branch (1231:13): [True: 0, False: 0]
  ------------------
 1232|       |            /* SSLfatal() already called */
 1233|      0|            return -1;
 1234|      0|        }
 1235|      0|    }
 1236|       |
 1237|  28.9k|    if ((type && (type != SSL3_RT_APPLICATION_DATA)
  ------------------
  |  |  216|  28.9k|# define SSL3_RT_APPLICATION_DATA        23
  ------------------
  |  Branch (1237:10): [True: 28.9k, False: 0]
  |  Branch (1237:18): [True: 28.9k, False: 0]
  ------------------
 1238|  28.9k|         && (type != SSL3_RT_HANDSHAKE)) || (peek
  ------------------
  |  |  215|  28.9k|# define SSL3_RT_HANDSHAKE               22
  ------------------
  |  Branch (1238:13): [True: 0, False: 28.9k]
  |  Branch (1238:46): [True: 0, False: 28.9k]
  ------------------
 1239|      0|                                             && (type !=
  ------------------
  |  Branch (1239:49): [True: 0, False: 0]
  ------------------
 1240|      0|                                                 SSL3_RT_APPLICATION_DATA))) {
  ------------------
  |  |  216|      0|# define SSL3_RT_APPLICATION_DATA        23
  ------------------
 1241|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1242|      0|                 ERR_R_INTERNAL_ERROR);
 1243|      0|        return -1;
 1244|      0|    }
 1245|       |
 1246|  28.9k|    if ((type == SSL3_RT_HANDSHAKE) && (s->rlayer.handshake_fragment_len > 0))
  ------------------
  |  |  215|  28.9k|# define SSL3_RT_HANDSHAKE               22
  ------------------
  |  Branch (1246:9): [True: 28.9k, False: 0]
  |  Branch (1246:40): [True: 0, False: 28.9k]
  ------------------
 1247|       |        /* (partially) satisfy request from storage */
 1248|      0|    {
 1249|      0|        unsigned char *src = s->rlayer.handshake_fragment;
 1250|      0|        unsigned char *dst = buf;
 1251|      0|        unsigned int k;
 1252|       |
 1253|       |        /* peek == 0 */
 1254|      0|        n = 0;
 1255|      0|        while ((len > 0) && (s->rlayer.handshake_fragment_len > 0)) {
  ------------------
  |  Branch (1255:16): [True: 0, False: 0]
  |  Branch (1255:29): [True: 0, False: 0]
  ------------------
 1256|      0|            *dst++ = *src++;
 1257|      0|            len--;
 1258|      0|            s->rlayer.handshake_fragment_len--;
 1259|      0|            n++;
 1260|      0|        }
 1261|       |        /* move any remaining fragment bytes: */
 1262|      0|        for (k = 0; k < s->rlayer.handshake_fragment_len; k++)
  ------------------
  |  Branch (1262:21): [True: 0, False: 0]
  ------------------
 1263|      0|            s->rlayer.handshake_fragment[k] = *src++;
 1264|       |
 1265|      0|        if (recvd_type != NULL)
  ------------------
  |  Branch (1265:13): [True: 0, False: 0]
  ------------------
 1266|      0|            *recvd_type = SSL3_RT_HANDSHAKE;
  ------------------
  |  |  215|      0|# define SSL3_RT_HANDSHAKE               22
  ------------------
 1267|       |
 1268|      0|        *readbytes = n;
 1269|      0|        return 1;
 1270|      0|    }
 1271|       |
 1272|       |    /*
 1273|       |     * Now s->rlayer.handshake_fragment_len == 0 if type == SSL3_RT_HANDSHAKE.
 1274|       |     */
 1275|       |
 1276|  28.9k|    if (!ossl_statem_get_in_handshake(s) && SSL_in_init(s)) {
  ------------------
  |  Branch (1276:9): [True: 0, False: 28.9k]
  |  Branch (1276:45): [True: 0, False: 0]
  ------------------
 1277|       |        /* type == SSL3_RT_APPLICATION_DATA */
 1278|      0|        i = s->handshake_func(s);
 1279|       |        /* SSLfatal() already called */
 1280|      0|        if (i < 0)
  ------------------
  |  Branch (1280:13): [True: 0, False: 0]
  ------------------
 1281|      0|            return i;
 1282|      0|        if (i == 0)
  ------------------
  |  Branch (1282:13): [True: 0, False: 0]
  ------------------
 1283|      0|            return -1;
 1284|      0|    }
 1285|  28.9k| start:
 1286|  28.9k|    s->rwstate = SSL_NOTHING;
  ------------------
  |  |  892|  28.9k|# define SSL_NOTHING            1
  ------------------
 1287|       |
 1288|       |    /*-
 1289|       |     * For each record 'i' up to |num_recs]
 1290|       |     * rr[i].type     - is the type of record
 1291|       |     * rr[i].data,    - data
 1292|       |     * rr[i].off,     - offset into 'data' for next read
 1293|       |     * rr[i].length,  - number of bytes.
 1294|       |     */
 1295|  28.9k|    rr = s->rlayer.rrec;
 1296|  28.9k|    num_recs = RECORD_LAYER_get_numrpipes(&s->rlayer);
  ------------------
  |  |   28|  28.9k|#define RECORD_LAYER_get_numrpipes(rl)          ((rl)->numrpipes)
  ------------------
 1297|       |
 1298|  28.9k|    do {
 1299|       |        /* get new records if necessary */
 1300|  28.9k|        if (num_recs == 0) {
  ------------------
  |  Branch (1300:13): [True: 28.9k, False: 0]
  ------------------
 1301|  28.9k|            ret = ssl3_get_record(s);
 1302|  28.9k|            if (ret <= 0) {
  ------------------
  |  Branch (1302:17): [True: 28.9k, False: 0]
  ------------------
 1303|       |                /* SSLfatal() already called if appropriate */
 1304|  28.9k|                return ret;
 1305|  28.9k|            }
 1306|      0|            num_recs = RECORD_LAYER_get_numrpipes(&s->rlayer);
  ------------------
  |  |   28|      0|#define RECORD_LAYER_get_numrpipes(rl)          ((rl)->numrpipes)
  ------------------
 1307|      0|            if (num_recs == 0) {
  ------------------
  |  Branch (1307:17): [True: 0, False: 0]
  ------------------
 1308|       |                /* Shouldn't happen */
 1309|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1310|      0|                         ERR_R_INTERNAL_ERROR);
 1311|      0|                return -1;
 1312|      0|            }
 1313|      0|        }
 1314|       |        /* Skip over any records we have already read */
 1315|      0|        for (curr_rec = 0;
 1316|      0|             curr_rec < num_recs && SSL3_RECORD_is_read(&rr[curr_rec]);
  ------------------
  |  |   98|      0|#define SSL3_RECORD_is_read(r)                  ((r)->read)
  |  |  ------------------
  |  |  |  Branch (98:49): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1316:14): [True: 0, False: 0]
  ------------------
 1317|      0|             curr_rec++) ;
 1318|      0|        if (curr_rec == num_recs) {
  ------------------
  |  Branch (1318:13): [True: 0, False: 0]
  ------------------
 1319|      0|            RECORD_LAYER_set_numrpipes(&s->rlayer, 0);
  ------------------
  |  |   29|      0|#define RECORD_LAYER_set_numrpipes(rl, n)       ((rl)->numrpipes = (n))
  ------------------
 1320|      0|            num_recs = 0;
 1321|      0|            curr_rec = 0;
 1322|      0|        }
 1323|      0|    } while (num_recs == 0);
  ------------------
  |  Branch (1323:14): [True: 0, False: 0]
  ------------------
 1324|      0|    rr = &rr[curr_rec];
 1325|       |
 1326|      0|    if (s->rlayer.handshake_fragment_len > 0
  ------------------
  |  Branch (1326:9): [True: 0, False: 0]
  ------------------
 1327|      0|            && SSL3_RECORD_get_type(rr) != SSL3_RT_HANDSHAKE
  ------------------
  |  |   79|      0|#define SSL3_RECORD_get_type(r)                 ((r)->type)
  ------------------
                          && SSL3_RECORD_get_type(rr) != SSL3_RT_HANDSHAKE
  ------------------
  |  |  215|      0|# define SSL3_RT_HANDSHAKE               22
  ------------------
  |  Branch (1327:16): [True: 0, False: 0]
  ------------------
 1328|      0|            && SSL_IS_TLS13(s)) {
  ------------------
  |  |  322|      0|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 0, False: 0]
  |  |  ------------------
  |  |  324|      0|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1329|      0|        SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1330|      0|                 SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA);
 1331|      0|        return -1;
 1332|      0|    }
 1333|       |
 1334|       |    /*
 1335|       |     * Reset the count of consecutive warning alerts if we've got a non-empty
 1336|       |     * record that isn't an alert.
 1337|       |     */
 1338|      0|    if (SSL3_RECORD_get_type(rr) != SSL3_RT_ALERT
  ------------------
  |  |   79|      0|#define SSL3_RECORD_get_type(r)                 ((r)->type)
  ------------------
                  if (SSL3_RECORD_get_type(rr) != SSL3_RT_ALERT
  ------------------
  |  |  214|      0|# define SSL3_RT_ALERT                   21
  ------------------
  |  Branch (1338:9): [True: 0, False: 0]
  ------------------
 1339|      0|            && SSL3_RECORD_get_length(rr) != 0)
  ------------------
  |  |   82|      0|#define SSL3_RECORD_get_length(r)               ((r)->length)
  ------------------
  |  Branch (1339:16): [True: 0, False: 0]
  ------------------
 1340|      0|        s->rlayer.alert_count = 0;
 1341|       |
 1342|       |    /* we now have a packet which can be read and processed */
 1343|       |
 1344|      0|    if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec,
  ------------------
  |  Branch (1344:9): [True: 0, False: 0]
  ------------------
 1345|       |                                   * reset by ssl3_get_finished */
 1346|      0|        && (SSL3_RECORD_get_type(rr) != SSL3_RT_HANDSHAKE)) {
  ------------------
  |  |   79|      0|#define SSL3_RECORD_get_type(r)                 ((r)->type)
  ------------------
                      && (SSL3_RECORD_get_type(rr) != SSL3_RT_HANDSHAKE)) {
  ------------------
  |  |  215|      0|# define SSL3_RT_HANDSHAKE               22
  ------------------
  |  Branch (1346:12): [True: 0, False: 0]
  ------------------
 1347|      0|        SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1348|      0|                 SSL_R_DATA_BETWEEN_CCS_AND_FINISHED);
 1349|      0|        return -1;
 1350|      0|    }
 1351|       |
 1352|       |    /*
 1353|       |     * If the other end has shut down, throw anything we read away (even in
 1354|       |     * 'peek' mode)
 1355|       |     */
 1356|      0|    if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
  ------------------
  |  |  192|      0|# define SSL_RECEIVED_SHUTDOWN   2
  ------------------
  |  Branch (1356:9): [True: 0, False: 0]
  ------------------
 1357|      0|        SSL3_RECORD_set_length(rr, 0);
  ------------------
  |  |   83|      0|#define SSL3_RECORD_set_length(r, l)            ((r)->length = (l))
  ------------------
 1358|      0|        s->rwstate = SSL_NOTHING;
  ------------------
  |  |  892|      0|# define SSL_NOTHING            1
  ------------------
 1359|      0|        return 0;
 1360|      0|    }
 1361|       |
 1362|      0|    if (type == SSL3_RECORD_get_type(rr)
  ------------------
  |  |   79|      0|#define SSL3_RECORD_get_type(r)                 ((r)->type)
  ------------------
  |  Branch (1362:9): [True: 0, False: 0]
  ------------------
 1363|      0|        || (SSL3_RECORD_get_type(rr) == SSL3_RT_CHANGE_CIPHER_SPEC
  ------------------
  |  |   79|      0|#define SSL3_RECORD_get_type(r)                 ((r)->type)
  ------------------
                      || (SSL3_RECORD_get_type(rr) == SSL3_RT_CHANGE_CIPHER_SPEC
  ------------------
  |  |  213|      0|# define SSL3_RT_CHANGE_CIPHER_SPEC      20
  ------------------
  |  Branch (1363:13): [True: 0, False: 0]
  ------------------
 1364|      0|            && type == SSL3_RT_HANDSHAKE && recvd_type != NULL
  ------------------
  |  |  215|      0|# define SSL3_RT_HANDSHAKE               22
  ------------------
  |  Branch (1364:16): [True: 0, False: 0]
  |  Branch (1364:45): [True: 0, False: 0]
  ------------------
 1365|      0|            && !is_tls13)) {
  ------------------
  |  Branch (1365:16): [True: 0, False: 0]
  ------------------
 1366|       |        /*
 1367|       |         * SSL3_RT_APPLICATION_DATA or
 1368|       |         * SSL3_RT_HANDSHAKE or
 1369|       |         * SSL3_RT_CHANGE_CIPHER_SPEC
 1370|       |         */
 1371|       |        /*
 1372|       |         * make sure that we are not getting application data when we are
 1373|       |         * doing a handshake for the first time
 1374|       |         */
 1375|      0|        if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) &&
  ------------------
  |  |  216|      0|# define SSL3_RT_APPLICATION_DATA        23
  ------------------
  |  Branch (1375:13): [True: 0, False: 0]
  |  Branch (1375:31): [True: 0, False: 0]
  ------------------
 1376|      0|            (s->enc_read_ctx == NULL)) {
  ------------------
  |  Branch (1376:13): [True: 0, False: 0]
  ------------------
 1377|      0|            SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1378|      0|                     SSL_R_APP_DATA_IN_HANDSHAKE);
 1379|      0|            return -1;
 1380|      0|        }
 1381|       |
 1382|      0|        if (type == SSL3_RT_HANDSHAKE
  ------------------
  |  |  215|      0|# define SSL3_RT_HANDSHAKE               22
  ------------------
  |  Branch (1382:13): [True: 0, False: 0]
  ------------------
 1383|      0|            && SSL3_RECORD_get_type(rr) == SSL3_RT_CHANGE_CIPHER_SPEC
  ------------------
  |  |   79|      0|#define SSL3_RECORD_get_type(r)                 ((r)->type)
  ------------------
                          && SSL3_RECORD_get_type(rr) == SSL3_RT_CHANGE_CIPHER_SPEC
  ------------------
  |  |  213|      0|# define SSL3_RT_CHANGE_CIPHER_SPEC      20
  ------------------
  |  Branch (1383:16): [True: 0, False: 0]
  ------------------
 1384|      0|            && s->rlayer.handshake_fragment_len > 0) {
  ------------------
  |  Branch (1384:16): [True: 0, False: 0]
  ------------------
 1385|      0|            SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1386|      0|                     SSL_R_CCS_RECEIVED_EARLY);
 1387|      0|            return -1;
 1388|      0|        }
 1389|       |
 1390|      0|        if (recvd_type != NULL)
  ------------------
  |  Branch (1390:13): [True: 0, False: 0]
  ------------------
 1391|      0|            *recvd_type = SSL3_RECORD_get_type(rr);
  ------------------
  |  |   79|      0|#define SSL3_RECORD_get_type(r)                 ((r)->type)
  ------------------
 1392|       |
 1393|      0|        if (len == 0) {
  ------------------
  |  Branch (1393:13): [True: 0, False: 0]
  ------------------
 1394|       |            /*
 1395|       |             * Mark a zero length record as read. This ensures multiple calls to
 1396|       |             * SSL_read() with a zero length buffer will eventually cause
 1397|       |             * SSL_pending() to report data as being available.
 1398|       |             */
 1399|      0|            if (SSL3_RECORD_get_length(rr) == 0)
  ------------------
  |  |   82|      0|#define SSL3_RECORD_get_length(r)               ((r)->length)
  ------------------
  |  Branch (1399:17): [True: 0, False: 0]
  ------------------
 1400|      0|                SSL3_RECORD_set_read(rr);
  ------------------
  |  |   99|      0|#define SSL3_RECORD_set_read(r)                 ((r)->read = 1)
  ------------------
 1401|      0|            return 0;
 1402|      0|        }
 1403|       |
 1404|      0|        totalbytes = 0;
 1405|      0|        do {
 1406|      0|            if (len - totalbytes > SSL3_RECORD_get_length(rr))
  ------------------
  |  |   82|      0|#define SSL3_RECORD_get_length(r)               ((r)->length)
  ------------------
  |  Branch (1406:17): [True: 0, False: 0]
  ------------------
 1407|      0|                n = SSL3_RECORD_get_length(rr);
  ------------------
  |  |   82|      0|#define SSL3_RECORD_get_length(r)               ((r)->length)
  ------------------
 1408|      0|            else
 1409|      0|                n = len - totalbytes;
 1410|       |
 1411|      0|            memcpy(buf, &(rr->data[rr->off]), n);
 1412|      0|            buf += n;
 1413|      0|            if (peek) {
  ------------------
  |  Branch (1413:17): [True: 0, False: 0]
  ------------------
 1414|       |                /* Mark any zero length record as consumed CVE-2016-6305 */
 1415|      0|                if (SSL3_RECORD_get_length(rr) == 0)
  ------------------
  |  |   82|      0|#define SSL3_RECORD_get_length(r)               ((r)->length)
  ------------------
  |  Branch (1415:21): [True: 0, False: 0]
  ------------------
 1416|      0|                    SSL3_RECORD_set_read(rr);
  ------------------
  |  |   99|      0|#define SSL3_RECORD_set_read(r)                 ((r)->read = 1)
  ------------------
 1417|      0|            } else {
 1418|      0|                SSL3_RECORD_sub_length(rr, n);
  ------------------
  |  |   85|      0|#define SSL3_RECORD_sub_length(r, l)            ((r)->length -= (l))
  ------------------
 1419|      0|                SSL3_RECORD_add_off(rr, n);
  ------------------
  |  |   94|      0|#define SSL3_RECORD_add_off(r, o)               ((r)->off += (o))
  ------------------
 1420|      0|                if (SSL3_RECORD_get_length(rr) == 0) {
  ------------------
  |  |   82|      0|#define SSL3_RECORD_get_length(r)               ((r)->length)
  ------------------
  |  Branch (1420:21): [True: 0, False: 0]
  ------------------
 1421|      0|                    s->rlayer.rstate = SSL_ST_READ_HEADER;
  ------------------
  |  | 1082|      0|# define SSL_ST_READ_HEADER                      0xF0
  ------------------
 1422|      0|                    SSL3_RECORD_set_off(rr, 0);
  ------------------
  |  |   93|      0|#define SSL3_RECORD_set_off(r, o)               ((r)->off = (o))
  ------------------
 1423|      0|                    SSL3_RECORD_set_read(rr);
  ------------------
  |  |   99|      0|#define SSL3_RECORD_set_read(r)                 ((r)->read = 1)
  ------------------
 1424|      0|                }
 1425|      0|            }
 1426|      0|            if (SSL3_RECORD_get_length(rr) == 0
  ------------------
  |  |   82|      0|#define SSL3_RECORD_get_length(r)               ((r)->length)
  ------------------
  |  Branch (1426:17): [True: 0, False: 0]
  ------------------
 1427|      0|                || (peek && n == SSL3_RECORD_get_length(rr))) {
  ------------------
  |  |   82|      0|#define SSL3_RECORD_get_length(r)               ((r)->length)
  ------------------
  |  Branch (1427:21): [True: 0, False: 0]
  |  Branch (1427:29): [True: 0, False: 0]
  ------------------
 1428|      0|                curr_rec++;
 1429|      0|                rr++;
 1430|      0|            }
 1431|      0|            totalbytes += n;
 1432|      0|        } while (type == SSL3_RT_APPLICATION_DATA && curr_rec < num_recs
  ------------------
  |  |  216|      0|# define SSL3_RT_APPLICATION_DATA        23
  ------------------
  |  Branch (1432:18): [True: 0, False: 0]
  |  Branch (1432:54): [True: 0, False: 0]
  ------------------
 1433|      0|                 && totalbytes < len);
  ------------------
  |  Branch (1433:21): [True: 0, False: 0]
  ------------------
 1434|      0|        if (totalbytes == 0) {
  ------------------
  |  Branch (1434:13): [True: 0, False: 0]
  ------------------
 1435|       |            /* We must have read empty records. Get more data */
 1436|      0|            goto start;
 1437|      0|        }
 1438|      0|        if (!peek && curr_rec == num_recs
  ------------------
  |  Branch (1438:13): [True: 0, False: 0]
  |  Branch (1438:22): [True: 0, False: 0]
  ------------------
 1439|      0|            && (s->mode & SSL_MODE_RELEASE_BUFFERS)
  ------------------
  |  |  475|      0|# define SSL_MODE_RELEASE_BUFFERS 0x00000010U
  ------------------
  |  Branch (1439:16): [True: 0, False: 0]
  ------------------
 1440|      0|            && SSL3_BUFFER_get_left(rbuf) == 0)
  ------------------
  |  |   60|      0|#define SSL3_BUFFER_get_left(b)             ((b)->left)
  ------------------
  |  Branch (1440:16): [True: 0, False: 0]
  ------------------
 1441|      0|            ssl3_release_read_buffer(s);
 1442|      0|        *readbytes = totalbytes;
 1443|      0|        return 1;
 1444|      0|    }
 1445|       |
 1446|       |    /*
 1447|       |     * If we get here, then type != rr->type; if we have a handshake message,
 1448|       |     * then it was unexpected (Hello Request or Client Hello) or invalid (we
 1449|       |     * were actually expecting a CCS).
 1450|       |     */
 1451|       |
 1452|       |    /*
 1453|       |     * Lets just double check that we've not got an SSLv2 record
 1454|       |     */
 1455|      0|    if (rr->rec_version == SSL2_VERSION) {
  ------------------
  |  |   17|      0|# define SSL2_VERSION            0x0002
  ------------------
  |  Branch (1455:9): [True: 0, False: 0]
  ------------------
 1456|       |        /*
 1457|       |         * Should never happen. ssl3_get_record() should only give us an SSLv2
 1458|       |         * record back if this is the first packet and we are looking for an
 1459|       |         * initial ClientHello. Therefore |type| should always be equal to
 1460|       |         * |rr->type|. If not then something has gone horribly wrong
 1461|       |         */
 1462|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1463|      0|                 ERR_R_INTERNAL_ERROR);
 1464|      0|        return -1;
 1465|      0|    }
 1466|       |
 1467|      0|    if (s->method->version == TLS_ANY_VERSION
  ------------------
  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  ------------------
  |  Branch (1467:9): [True: 0, False: 0]
  ------------------
 1468|      0|        && (s->server || rr->type != SSL3_RT_ALERT)) {
  ------------------
  |  |  214|      0|# define SSL3_RT_ALERT                   21
  ------------------
  |  Branch (1468:13): [True: 0, False: 0]
  |  Branch (1468:26): [True: 0, False: 0]
  ------------------
 1469|       |        /*
 1470|       |         * If we've got this far and still haven't decided on what version
 1471|       |         * we're using then this must be a client side alert we're dealing with
 1472|       |         * (we don't allow heartbeats yet). We shouldn't be receiving anything
 1473|       |         * other than a ClientHello if we are a server.
 1474|       |         */
 1475|      0|        s->version = rr->rec_version;
 1476|      0|        SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1477|      0|                 SSL_R_UNEXPECTED_MESSAGE);
 1478|      0|        return -1;
 1479|      0|    }
 1480|       |
 1481|       |    /*-
 1482|       |     * s->rlayer.handshake_fragment_len == 4  iff  rr->type == SSL3_RT_HANDSHAKE;
 1483|       |     * (Possibly rr is 'empty' now, i.e. rr->length may be 0.)
 1484|       |     */
 1485|       |
 1486|      0|    if (SSL3_RECORD_get_type(rr) == SSL3_RT_ALERT) {
  ------------------
  |  |   79|      0|#define SSL3_RECORD_get_type(r)                 ((r)->type)
  ------------------
                  if (SSL3_RECORD_get_type(rr) == SSL3_RT_ALERT) {
  ------------------
  |  |  214|      0|# define SSL3_RT_ALERT                   21
  ------------------
  |  Branch (1486:9): [True: 0, False: 0]
  ------------------
 1487|      0|        unsigned int alert_level, alert_descr;
 1488|      0|        unsigned char *alert_bytes = SSL3_RECORD_get_data(rr)
  ------------------
  |  |   86|      0|#define SSL3_RECORD_get_data(r)                 ((r)->data)
  ------------------
 1489|      0|                                     + SSL3_RECORD_get_off(rr);
  ------------------
  |  |   92|      0|#define SSL3_RECORD_get_off(r)                  ((r)->off)
  ------------------
 1490|      0|        PACKET alert;
 1491|       |
 1492|      0|        if (!PACKET_buf_init(&alert, alert_bytes, SSL3_RECORD_get_length(rr))
  ------------------
  |  |   82|      0|#define SSL3_RECORD_get_length(r)               ((r)->length)
  ------------------
  |  Branch (1492:13): [True: 0, False: 0]
  ------------------
 1493|      0|                || !PACKET_get_1(&alert, &alert_level)
  ------------------
  |  Branch (1493:20): [True: 0, False: 0]
  ------------------
 1494|      0|                || !PACKET_get_1(&alert, &alert_descr)
  ------------------
  |  Branch (1494:20): [True: 0, False: 0]
  ------------------
 1495|      0|                || PACKET_remaining(&alert) != 0) {
  ------------------
  |  Branch (1495:20): [True: 0, False: 0]
  ------------------
 1496|      0|            SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1497|      0|                     SSL_R_INVALID_ALERT);
 1498|      0|            return -1;
 1499|      0|        }
 1500|       |
 1501|      0|        if (s->msg_callback)
  ------------------
  |  Branch (1501:13): [True: 0, False: 0]
  ------------------
 1502|      0|            s->msg_callback(0, s->version, SSL3_RT_ALERT, alert_bytes, 2, s,
  ------------------
  |  |  214|      0|# define SSL3_RT_ALERT                   21
  ------------------
 1503|      0|                            s->msg_callback_arg);
 1504|       |
 1505|      0|        if (s->info_callback != NULL)
  ------------------
  |  Branch (1505:13): [True: 0, False: 0]
  ------------------
 1506|      0|            cb = s->info_callback;
 1507|      0|        else if (s->ctx->info_callback != NULL)
  ------------------
  |  Branch (1507:18): [True: 0, False: 0]
  ------------------
 1508|      0|            cb = s->ctx->info_callback;
 1509|       |
 1510|      0|        if (cb != NULL) {
  ------------------
  |  Branch (1510:13): [True: 0, False: 0]
  ------------------
 1511|      0|            j = (alert_level << 8) | alert_descr;
 1512|      0|            cb(s, SSL_CB_READ_ALERT, j);
  ------------------
  |  | 1062|      0|# define SSL_CB_READ_ALERT               (SSL_CB_ALERT|SSL_CB_READ)
  |  |  ------------------
  |  |  |  | 1061|      0|# define SSL_CB_ALERT                    0x4000/* used in callback */
  |  |  ------------------
  |  |               # define SSL_CB_READ_ALERT               (SSL_CB_ALERT|SSL_CB_READ)
  |  |  ------------------
  |  |  |  | 1059|      0|# define SSL_CB_READ                     0x04
  |  |  ------------------
  ------------------
 1513|      0|        }
 1514|       |
 1515|      0|        if (alert_level == SSL3_AL_WARNING
  ------------------
  |  |  237|      0|# define SSL3_AL_WARNING                 1
  ------------------
  |  Branch (1515:13): [True: 0, False: 0]
  ------------------
 1516|      0|                || (is_tls13 && alert_descr == SSL_AD_USER_CANCELLED)) {
  ------------------
  |  | 1166|      0|# define SSL_AD_USER_CANCELLED           TLS1_AD_USER_CANCELLED
  |  |  ------------------
  |  |  |  |   62|      0|# define TLS1_AD_USER_CANCELLED          90
  |  |  ------------------
  ------------------
  |  Branch (1516:21): [True: 0, False: 0]
  |  Branch (1516:33): [True: 0, False: 0]
  ------------------
 1517|      0|            s->s3->warn_alert = alert_descr;
 1518|      0|            SSL3_RECORD_set_read(rr);
  ------------------
  |  |   99|      0|#define SSL3_RECORD_set_read(r)                 ((r)->read = 1)
  ------------------
 1519|       |
 1520|      0|            s->rlayer.alert_count++;
 1521|      0|            if (s->rlayer.alert_count == MAX_WARN_ALERT_COUNT) {
  ------------------
  |  |   17|      0|#define MAX_WARN_ALERT_COUNT    5
  ------------------
  |  Branch (1521:17): [True: 0, False: 0]
  ------------------
 1522|      0|                SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1523|      0|                         SSL_R_TOO_MANY_WARN_ALERTS);
 1524|      0|                return -1;
 1525|      0|            }
 1526|      0|        }
 1527|       |
 1528|       |        /*
 1529|       |         * Apart from close_notify the only other warning alert in TLSv1.3
 1530|       |         * is user_cancelled - which we just ignore.
 1531|       |         */
 1532|      0|        if (is_tls13 && alert_descr == SSL_AD_USER_CANCELLED) {
  ------------------
  |  | 1166|      0|# define SSL_AD_USER_CANCELLED           TLS1_AD_USER_CANCELLED
  |  |  ------------------
  |  |  |  |   62|      0|# define TLS1_AD_USER_CANCELLED          90
  |  |  ------------------
  ------------------
  |  Branch (1532:13): [True: 0, False: 0]
  |  Branch (1532:25): [True: 0, False: 0]
  ------------------
 1533|      0|            goto start;
 1534|      0|        } else if (alert_descr == SSL_AD_CLOSE_NOTIFY
  ------------------
  |  | 1131|      0|# define SSL_AD_CLOSE_NOTIFY             SSL3_AD_CLOSE_NOTIFY
  |  |  ------------------
  |  |  |  |  240|      0|# define SSL3_AD_CLOSE_NOTIFY             0
  |  |  ------------------
  ------------------
  |  Branch (1534:20): [True: 0, False: 0]
  ------------------
 1535|      0|                && (is_tls13 || alert_level == SSL3_AL_WARNING)) {
  ------------------
  |  |  237|      0|# define SSL3_AL_WARNING                 1
  ------------------
  |  Branch (1535:21): [True: 0, False: 0]
  |  Branch (1535:33): [True: 0, False: 0]
  ------------------
 1536|      0|            s->shutdown |= SSL_RECEIVED_SHUTDOWN;
  ------------------
  |  |  192|      0|# define SSL_RECEIVED_SHUTDOWN   2
  ------------------
 1537|      0|            return 0;
 1538|      0|        } else if (alert_level == SSL3_AL_FATAL || is_tls13) {
  ------------------
  |  |  238|      0|# define SSL3_AL_FATAL                   2
  ------------------
  |  Branch (1538:20): [True: 0, False: 0]
  |  Branch (1538:52): [True: 0, False: 0]
  ------------------
 1539|      0|            char tmp[16];
 1540|       |
 1541|      0|            s->rwstate = SSL_NOTHING;
  ------------------
  |  |  892|      0|# define SSL_NOTHING            1
  ------------------
 1542|      0|            s->s3->fatal_alert = alert_descr;
 1543|      0|            SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1544|      0|                     SSL_AD_REASON_OFFSET + alert_descr);
 1545|      0|            BIO_snprintf(tmp, sizeof tmp, "%d", alert_descr);
 1546|      0|            ERR_add_error_data(2, "SSL alert number ", tmp);
 1547|      0|            s->shutdown |= SSL_RECEIVED_SHUTDOWN;
  ------------------
  |  |  192|      0|# define SSL_RECEIVED_SHUTDOWN   2
  ------------------
 1548|      0|            SSL3_RECORD_set_read(rr);
  ------------------
  |  |   99|      0|#define SSL3_RECORD_set_read(r)                 ((r)->read = 1)
  ------------------
 1549|      0|            SSL_CTX_remove_session(s->session_ctx, s->session);
 1550|      0|            return 0;
 1551|      0|        } else if (alert_descr == SSL_AD_NO_RENEGOTIATION) {
  ------------------
  |  | 1167|      0|# define SSL_AD_NO_RENEGOTIATION         TLS1_AD_NO_RENEGOTIATION
  |  |  ------------------
  |  |  |  |   63|      0|# define TLS1_AD_NO_RENEGOTIATION        100
  |  |  ------------------
  ------------------
  |  Branch (1551:20): [True: 0, False: 0]
  ------------------
 1552|       |            /*
 1553|       |             * This is a warning but we receive it if we requested
 1554|       |             * renegotiation and the peer denied it. Terminate with a fatal
 1555|       |             * alert because if application tried to renegotiate it
 1556|       |             * presumably had a good reason and expects it to succeed. In
 1557|       |             * future we might have a renegotiation where we don't care if
 1558|       |             * the peer refused it where we carry on.
 1559|       |             */
 1560|      0|            SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1561|      0|                     SSL_R_NO_RENEGOTIATION);
 1562|      0|            return -1;
 1563|      0|        } else if (alert_level == SSL3_AL_WARNING) {
  ------------------
  |  |  237|      0|# define SSL3_AL_WARNING                 1
  ------------------
  |  Branch (1563:20): [True: 0, False: 0]
  ------------------
 1564|       |            /* We ignore any other warning alert in TLSv1.2 and below */
 1565|      0|            goto start;
 1566|      0|        }
 1567|       |
 1568|      0|        SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1569|      0|                 SSL_R_UNKNOWN_ALERT_TYPE);
 1570|      0|        return -1;
 1571|      0|    }
 1572|       |
 1573|      0|    if ((s->shutdown & SSL_SENT_SHUTDOWN) != 0) {
  ------------------
  |  |  191|      0|# define SSL_SENT_SHUTDOWN       1
  ------------------
  |  Branch (1573:9): [True: 0, False: 0]
  ------------------
 1574|      0|        if (SSL3_RECORD_get_type(rr) == SSL3_RT_HANDSHAKE) {
  ------------------
  |  |   79|      0|#define SSL3_RECORD_get_type(r)                 ((r)->type)
  ------------------
                      if (SSL3_RECORD_get_type(rr) == SSL3_RT_HANDSHAKE) {
  ------------------
  |  |  215|      0|# define SSL3_RT_HANDSHAKE               22
  ------------------
  |  Branch (1574:13): [True: 0, False: 0]
  ------------------
 1575|      0|            BIO *rbio;
 1576|       |
 1577|       |            /*
 1578|       |             * We ignore any handshake messages sent to us unless they are
 1579|       |             * TLSv1.3 in which case we want to process them. For all other
 1580|       |             * handshake messages we can't do anything reasonable with them
 1581|       |             * because we are unable to write any response due to having already
 1582|       |             * sent close_notify.
 1583|       |             */
 1584|      0|            if (!SSL_IS_TLS13(s)) {
  ------------------
  |  |  322|      0|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 0, False: 0]
  |  |  ------------------
  |  |  324|      0|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1585|      0|                SSL3_RECORD_set_length(rr, 0);
  ------------------
  |  |   83|      0|#define SSL3_RECORD_set_length(r, l)            ((r)->length = (l))
  ------------------
 1586|      0|                SSL3_RECORD_set_read(rr);
  ------------------
  |  |   99|      0|#define SSL3_RECORD_set_read(r)                 ((r)->read = 1)
  ------------------
 1587|       |
 1588|      0|                if ((s->mode & SSL_MODE_AUTO_RETRY) != 0)
  ------------------
  |  |  468|      0|# define SSL_MODE_AUTO_RETRY 0x00000004U
  ------------------
  |  Branch (1588:21): [True: 0, False: 0]
  ------------------
 1589|      0|                    goto start;
 1590|       |
 1591|      0|                s->rwstate = SSL_READING;
  ------------------
  |  |  894|      0|# define SSL_READING            3
  ------------------
 1592|      0|                rbio = SSL_get_rbio(s);
 1593|      0|                BIO_clear_retry_flags(rbio);
  ------------------
  |  |  192|      0|                BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  153|      0|# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  150|      0|# define BIO_FLAGS_READ          0x01
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|# define BIO_FLAGS_WRITE         0x02
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  152|      0|# define BIO_FLAGS_IO_SPECIAL    0x04
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  154|      0|# define BIO_FLAGS_SHOULD_RETRY  0x08
  |  |  ------------------
  ------------------
 1594|      0|                BIO_set_retry_read(rbio);
  ------------------
  |  |  186|      0|                BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  150|      0|# define BIO_FLAGS_READ          0x01
  |  |  ------------------
  |  |                               BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  154|      0|# define BIO_FLAGS_SHOULD_RETRY  0x08
  |  |  ------------------
  ------------------
 1595|      0|                return -1;
 1596|      0|            }
 1597|      0|        } else {
 1598|       |            /*
 1599|       |             * The peer is continuing to send application data, but we have
 1600|       |             * already sent close_notify. If this was expected we should have
 1601|       |             * been called via SSL_read() and this would have been handled
 1602|       |             * above.
 1603|       |             * No alert sent because we already sent close_notify
 1604|       |             */
 1605|      0|            SSL3_RECORD_set_length(rr, 0);
  ------------------
  |  |   83|      0|#define SSL3_RECORD_set_length(r, l)            ((r)->length = (l))
  ------------------
 1606|      0|            SSL3_RECORD_set_read(rr);
  ------------------
  |  |   99|      0|#define SSL3_RECORD_set_read(r)                 ((r)->read = 1)
  ------------------
 1607|      0|            SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1608|      0|                     SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY);
 1609|      0|            return -1;
 1610|      0|        }
 1611|      0|    }
 1612|       |
 1613|       |    /*
 1614|       |     * For handshake data we have 'fragment' storage, so fill that so that we
 1615|       |     * can process the header at a fixed place. This is done after the
 1616|       |     * "SHUTDOWN" code above to avoid filling the fragment storage with data
 1617|       |     * that we're just going to discard.
 1618|       |     */
 1619|      0|    if (SSL3_RECORD_get_type(rr) == SSL3_RT_HANDSHAKE) {
  ------------------
  |  |   79|      0|#define SSL3_RECORD_get_type(r)                 ((r)->type)
  ------------------
                  if (SSL3_RECORD_get_type(rr) == SSL3_RT_HANDSHAKE) {
  ------------------
  |  |  215|      0|# define SSL3_RT_HANDSHAKE               22
  ------------------
  |  Branch (1619:9): [True: 0, False: 0]
  ------------------
 1620|      0|        size_t dest_maxlen = sizeof(s->rlayer.handshake_fragment);
 1621|      0|        unsigned char *dest = s->rlayer.handshake_fragment;
 1622|      0|        size_t *dest_len = &s->rlayer.handshake_fragment_len;
 1623|       |
 1624|      0|        n = dest_maxlen - *dest_len; /* available space in 'dest' */
 1625|      0|        if (SSL3_RECORD_get_length(rr) < n)
  ------------------
  |  |   82|      0|#define SSL3_RECORD_get_length(r)               ((r)->length)
  ------------------
  |  Branch (1625:13): [True: 0, False: 0]
  ------------------
 1626|      0|            n = SSL3_RECORD_get_length(rr); /* available bytes */
  ------------------
  |  |   82|      0|#define SSL3_RECORD_get_length(r)               ((r)->length)
  ------------------
 1627|       |
 1628|       |        /* now move 'n' bytes: */
 1629|      0|        memcpy(dest + *dest_len,
 1630|      0|               SSL3_RECORD_get_data(rr) + SSL3_RECORD_get_off(rr), n);
  ------------------
  |  |   86|      0|#define SSL3_RECORD_get_data(r)                 ((r)->data)
  ------------------
                             SSL3_RECORD_get_data(rr) + SSL3_RECORD_get_off(rr), n);
  ------------------
  |  |   92|      0|#define SSL3_RECORD_get_off(r)                  ((r)->off)
  ------------------
 1631|      0|        SSL3_RECORD_add_off(rr, n);
  ------------------
  |  |   94|      0|#define SSL3_RECORD_add_off(r, o)               ((r)->off += (o))
  ------------------
 1632|      0|        SSL3_RECORD_sub_length(rr, n);
  ------------------
  |  |   85|      0|#define SSL3_RECORD_sub_length(r, l)            ((r)->length -= (l))
  ------------------
 1633|      0|        *dest_len += n;
 1634|      0|        if (SSL3_RECORD_get_length(rr) == 0)
  ------------------
  |  |   82|      0|#define SSL3_RECORD_get_length(r)               ((r)->length)
  ------------------
  |  Branch (1634:13): [True: 0, False: 0]
  ------------------
 1635|      0|            SSL3_RECORD_set_read(rr);
  ------------------
  |  |   99|      0|#define SSL3_RECORD_set_read(r)                 ((r)->read = 1)
  ------------------
 1636|       |
 1637|      0|        if (*dest_len < dest_maxlen)
  ------------------
  |  Branch (1637:13): [True: 0, False: 0]
  ------------------
 1638|      0|            goto start;     /* fragment was too small */
 1639|      0|    }
 1640|       |
 1641|      0|    if (SSL3_RECORD_get_type(rr) == SSL3_RT_CHANGE_CIPHER_SPEC) {
  ------------------
  |  |   79|      0|#define SSL3_RECORD_get_type(r)                 ((r)->type)
  ------------------
                  if (SSL3_RECORD_get_type(rr) == SSL3_RT_CHANGE_CIPHER_SPEC) {
  ------------------
  |  |  213|      0|# define SSL3_RT_CHANGE_CIPHER_SPEC      20
  ------------------
  |  Branch (1641:9): [True: 0, False: 0]
  ------------------
 1642|      0|        SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1643|      0|                 SSL_R_CCS_RECEIVED_EARLY);
 1644|      0|        return -1;
 1645|      0|    }
 1646|       |
 1647|       |    /*
 1648|       |     * Unexpected handshake message (ClientHello, NewSessionTicket (TLS1.3) or
 1649|       |     * protocol violation)
 1650|       |     */
 1651|      0|    if ((s->rlayer.handshake_fragment_len >= 4)
  ------------------
  |  Branch (1651:9): [True: 0, False: 0]
  ------------------
 1652|      0|            && !ossl_statem_get_in_handshake(s)) {
  ------------------
  |  Branch (1652:16): [True: 0, False: 0]
  ------------------
 1653|      0|        int ined = (s->early_data_state == SSL_EARLY_DATA_READING);
 1654|       |
 1655|       |        /* We found handshake data, so we're going back into init */
 1656|      0|        ossl_statem_set_in_init(s, 1);
 1657|       |
 1658|      0|        i = s->handshake_func(s);
 1659|       |        /* SSLfatal() already called if appropriate */
 1660|      0|        if (i < 0)
  ------------------
  |  Branch (1660:13): [True: 0, False: 0]
  ------------------
 1661|      0|            return i;
 1662|      0|        if (i == 0) {
  ------------------
  |  Branch (1662:13): [True: 0, False: 0]
  ------------------
 1663|      0|            return -1;
 1664|      0|        }
 1665|       |
 1666|       |        /*
 1667|       |         * If we were actually trying to read early data and we found a
 1668|       |         * handshake message, then we don't want to continue to try and read
 1669|       |         * the application data any more. It won't be "early" now.
 1670|       |         */
 1671|      0|        if (ined)
  ------------------
  |  Branch (1671:13): [True: 0, False: 0]
  ------------------
 1672|      0|            return -1;
 1673|       |
 1674|      0|        if (!(s->mode & SSL_MODE_AUTO_RETRY)) {
  ------------------
  |  |  468|      0|# define SSL_MODE_AUTO_RETRY 0x00000004U
  ------------------
  |  Branch (1674:13): [True: 0, False: 0]
  ------------------
 1675|      0|            if (SSL3_BUFFER_get_left(rbuf) == 0) {
  ------------------
  |  |   60|      0|#define SSL3_BUFFER_get_left(b)             ((b)->left)
  ------------------
  |  Branch (1675:17): [True: 0, False: 0]
  ------------------
 1676|       |                /* no read-ahead left? */
 1677|      0|                BIO *bio;
 1678|       |                /*
 1679|       |                 * In the case where we try to read application data, but we
 1680|       |                 * trigger an SSL handshake, we return -1 with the retry
 1681|       |                 * option set.  Otherwise renegotiation may cause nasty
 1682|       |                 * problems in the blocking world
 1683|       |                 */
 1684|      0|                s->rwstate = SSL_READING;
  ------------------
  |  |  894|      0|# define SSL_READING            3
  ------------------
 1685|      0|                bio = SSL_get_rbio(s);
 1686|      0|                BIO_clear_retry_flags(bio);
  ------------------
  |  |  192|      0|                BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  153|      0|# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  150|      0|# define BIO_FLAGS_READ          0x01
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|# define BIO_FLAGS_WRITE         0x02
  |  |  |  |  ------------------
  |  |  |  |               # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  152|      0|# define BIO_FLAGS_IO_SPECIAL    0x04
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  154|      0|# define BIO_FLAGS_SHOULD_RETRY  0x08
  |  |  ------------------
  ------------------
 1687|      0|                BIO_set_retry_read(bio);
  ------------------
  |  |  186|      0|                BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  150|      0|# define BIO_FLAGS_READ          0x01
  |  |  ------------------
  |  |                               BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY))
  |  |  ------------------
  |  |  |  |  154|      0|# define BIO_FLAGS_SHOULD_RETRY  0x08
  |  |  ------------------
  ------------------
 1688|      0|                return -1;
 1689|      0|            }
 1690|      0|        }
 1691|      0|        goto start;
 1692|      0|    }
 1693|       |
 1694|      0|    switch (SSL3_RECORD_get_type(rr)) {
  ------------------
  |  |   79|      0|#define SSL3_RECORD_get_type(r)                 ((r)->type)
  ------------------
 1695|      0|    default:
  ------------------
  |  Branch (1695:5): [True: 0, False: 0]
  ------------------
 1696|       |        /*
 1697|       |         * TLS 1.0 and 1.1 say you SHOULD ignore unrecognised record types, but
 1698|       |         * TLS 1.2 says you MUST send an unexpected message alert. We use the
 1699|       |         * TLS 1.2 behaviour for all protocol versions to prevent issues where
 1700|       |         * no progress is being made and the peer continually sends unrecognised
 1701|       |         * record types, using up resources processing them.
 1702|       |         */
 1703|      0|        SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1704|      0|                 SSL_R_UNEXPECTED_RECORD);
 1705|      0|        return -1;
 1706|      0|    case SSL3_RT_CHANGE_CIPHER_SPEC:
  ------------------
  |  |  213|      0|# define SSL3_RT_CHANGE_CIPHER_SPEC      20
  ------------------
  |  Branch (1706:5): [True: 0, False: 0]
  ------------------
 1707|      0|    case SSL3_RT_ALERT:
  ------------------
  |  |  214|      0|# define SSL3_RT_ALERT                   21
  ------------------
  |  Branch (1707:5): [True: 0, False: 0]
  ------------------
 1708|      0|    case SSL3_RT_HANDSHAKE:
  ------------------
  |  |  215|      0|# define SSL3_RT_HANDSHAKE               22
  ------------------
  |  Branch (1708:5): [True: 0, False: 0]
  ------------------
 1709|       |        /*
 1710|       |         * we already handled all of these, with the possible exception of
 1711|       |         * SSL3_RT_HANDSHAKE when ossl_statem_get_in_handshake(s) is true, but
 1712|       |         * that should not happen when type != rr->type
 1713|       |         */
 1714|      0|        SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1715|      0|                 ERR_R_INTERNAL_ERROR);
 1716|      0|        return -1;
 1717|      0|    case SSL3_RT_APPLICATION_DATA:
  ------------------
  |  |  216|      0|# define SSL3_RT_APPLICATION_DATA        23
  ------------------
  |  Branch (1717:5): [True: 0, False: 0]
  ------------------
 1718|       |        /*
 1719|       |         * At this point, we were expecting handshake data, but have
 1720|       |         * application data.  If the library was running inside ssl3_read()
 1721|       |         * (i.e. in_read_app_data is set) and it makes sense to read
 1722|       |         * application data at this point (session renegotiation not yet
 1723|       |         * started), we will indulge it.
 1724|       |         */
 1725|      0|        if (ossl_statem_app_data_allowed(s)) {
  ------------------
  |  Branch (1725:13): [True: 0, False: 0]
  ------------------
 1726|      0|            s->s3->in_read_app_data = 2;
 1727|      0|            return -1;
 1728|      0|        } else if (ossl_statem_skip_early_data(s)) {
  ------------------
  |  Branch (1728:20): [True: 0, False: 0]
  ------------------
 1729|       |            /*
 1730|       |             * This can happen after a client sends a CH followed by early_data,
 1731|       |             * but the server responds with a HelloRetryRequest. The server
 1732|       |             * reads the next record from the client expecting to find a
 1733|       |             * plaintext ClientHello but gets a record which appears to be
 1734|       |             * application data. The trial decrypt "works" because null
 1735|       |             * decryption was applied. We just skip it and move on to the next
 1736|       |             * record.
 1737|       |             */
 1738|      0|            if (!early_data_count_ok(s, rr->length,
  ------------------
  |  Branch (1738:17): [True: 0, False: 0]
  ------------------
 1739|      0|                                     EARLY_DATA_CIPHERTEXT_OVERHEAD, 0)) {
  ------------------
  |  |  641|      0|# define EARLY_DATA_CIPHERTEXT_OVERHEAD ((6 * (EVP_GCM_TLS_TAG_LEN + 1)) + 2)
  |  |  ------------------
  |  |  |  |  379|      0|# define EVP_GCM_TLS_TAG_LEN                             16
  |  |  ------------------
  ------------------
 1740|       |                /* SSLfatal() already called */
 1741|      0|                return -1;
 1742|      0|            }
 1743|      0|            SSL3_RECORD_set_read(rr);
  ------------------
  |  |   99|      0|#define SSL3_RECORD_set_read(r)                 ((r)->read = 1)
  ------------------
 1744|      0|            goto start;
 1745|      0|        } else {
 1746|      0|            SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1747|      0|                     SSL_R_UNEXPECTED_RECORD);
 1748|      0|            return -1;
 1749|      0|        }
 1750|      0|    }
 1751|      0|}

SSL3_BUFFER_clear:
   26|  57.9k|{
   27|  57.9k|    b->offset = 0;
   28|  57.9k|    b->left = 0;
   29|  57.9k|}
ssl3_setup_read_buffer:
   38|  28.9k|{
   39|  28.9k|    unsigned char *p;
   40|  28.9k|    size_t len, align = 0, headerlen;
   41|  28.9k|    SSL3_BUFFER *b;
   42|       |
   43|  28.9k|    b = RECORD_LAYER_get_rbuf(&s->rlayer);
  ------------------
  |  |  191|  28.9k|#define RECORD_LAYER_get_rbuf(rl)               (&(rl)->rbuf)
  ------------------
   44|       |
   45|  28.9k|    if (SSL_IS_DTLS(s))
  ------------------
  |  |  319|  28.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
   46|      0|        headerlen = DTLS1_RT_HEADER_LENGTH;
  ------------------
  |  |   35|      0|# define DTLS1_RT_HEADER_LENGTH                  13
  ------------------
   47|  28.9k|    else
   48|  28.9k|        headerlen = SSL3_RT_HEADER_LENGTH;
  ------------------
  |  |  133|  28.9k|# define SSL3_RT_HEADER_LENGTH                   5
  ------------------
   49|       |
   50|  28.9k|#if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0
   51|  28.9k|    align = (-SSL3_RT_HEADER_LENGTH) & (SSL3_ALIGN_PAYLOAD - 1);
  ------------------
  |  |  133|  28.9k|# define SSL3_RT_HEADER_LENGTH                   5
  ------------------
                  align = (-SSL3_RT_HEADER_LENGTH) & (SSL3_ALIGN_PAYLOAD - 1);
  ------------------
  |  |  146|  28.9k|#  define SSL3_ALIGN_PAYLOAD                     8
  ------------------
   52|  28.9k|#endif
   53|       |
   54|  28.9k|    if (b->buf == NULL) {
  ------------------
  |  Branch (54:9): [True: 28.9k, False: 0]
  ------------------
   55|  28.9k|        len = SSL3_RT_MAX_PLAIN_LENGTH
  ------------------
  |  |  171|  28.9k|# define SSL3_RT_MAX_PLAIN_LENGTH                16384
  ------------------
   56|  28.9k|            + SSL3_RT_MAX_ENCRYPTED_OVERHEAD + headerlen + align;
  ------------------
  |  |  180|  28.9k|# define SSL3_RT_MAX_ENCRYPTED_OVERHEAD        (256 + SSL3_RT_MAX_MD_SIZE)
  |  |  ------------------
  |  |  |  |  160|  28.9k|# define SSL3_RT_MAX_MD_SIZE                     64
  |  |  ------------------
  ------------------
   57|       |#ifndef OPENSSL_NO_COMP
   58|       |        if (ssl_allow_compression(s))
   59|       |            len += SSL3_RT_MAX_COMPRESSED_OVERHEAD;
   60|       |#endif
   61|  28.9k|        if (b->default_len > len)
  ------------------
  |  Branch (61:13): [True: 0, False: 28.9k]
  ------------------
   62|      0|            len = b->default_len;
   63|  28.9k|        if ((p = OPENSSL_malloc(len)) == NULL) {
  ------------------
  |  |  118|  28.9k|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (63:13): [True: 0, False: 28.9k]
  ------------------
   64|       |            /*
   65|       |             * We've got a malloc failure, and we're still initialising buffers.
   66|       |             * We assume we're so doomed that we won't even be able to send an
   67|       |             * alert.
   68|       |             */
   69|      0|            SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_SETUP_READ_BUFFER,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   70|      0|                     ERR_R_MALLOC_FAILURE);
   71|      0|            return 0;
   72|      0|        }
   73|  28.9k|        b->buf = p;
   74|  28.9k|        b->len = len;
   75|  28.9k|    }
   76|       |
   77|  28.9k|    return 1;
   78|  28.9k|}
ssl3_setup_write_buffer:
   81|  28.9k|{
   82|  28.9k|    unsigned char *p;
   83|  28.9k|    size_t align = 0, headerlen;
   84|  28.9k|    SSL3_BUFFER *wb;
   85|  28.9k|    size_t currpipe;
   86|       |
   87|  28.9k|    s->rlayer.numwpipes = numwpipes;
   88|       |
   89|  28.9k|    if (len == 0) {
  ------------------
  |  Branch (89:9): [True: 28.9k, False: 0]
  ------------------
   90|  28.9k|        if (SSL_IS_DTLS(s))
  ------------------
  |  |  319|  28.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
   91|      0|            headerlen = DTLS1_RT_HEADER_LENGTH + 1;
  ------------------
  |  |   35|      0|# define DTLS1_RT_HEADER_LENGTH                  13
  ------------------
   92|  28.9k|        else
   93|  28.9k|            headerlen = SSL3_RT_HEADER_LENGTH;
  ------------------
  |  |  133|  28.9k|# define SSL3_RT_HEADER_LENGTH                   5
  ------------------
   94|       |
   95|  28.9k|#if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0
   96|  28.9k|        align = SSL3_ALIGN_PAYLOAD - 1;
  ------------------
  |  |  146|  28.9k|#  define SSL3_ALIGN_PAYLOAD                     8
  ------------------
   97|  28.9k|#endif
   98|       |
   99|  28.9k|        len = ssl_get_max_send_fragment(s)
  100|  28.9k|            + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD + headerlen + align;
  ------------------
  |  |  189|  28.9k|                        (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE)
  |  |  ------------------
  |  |  |  |  166|  28.9k|# define SSL_RT_MAX_CIPHER_BLOCK_SIZE            16
  |  |  ------------------
  |  |                                       (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE)
  |  |  ------------------
  |  |  |  |  160|  28.9k|# define SSL3_RT_MAX_MD_SIZE                     64
  |  |  ------------------
  ------------------
  101|       |#ifndef OPENSSL_NO_COMP
  102|       |        if (ssl_allow_compression(s))
  103|       |            len += SSL3_RT_MAX_COMPRESSED_OVERHEAD;
  104|       |#endif
  105|  28.9k|        if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS))
  ------------------
  |  |  326|  28.9k|# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS              0x00000800U
  ------------------
  |  Branch (105:13): [True: 28.9k, False: 0]
  ------------------
  106|  28.9k|            len += headerlen + align + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD;
  ------------------
  |  |  189|  28.9k|                        (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE)
  |  |  ------------------
  |  |  |  |  166|  28.9k|# define SSL_RT_MAX_CIPHER_BLOCK_SIZE            16
  |  |  ------------------
  |  |                                       (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE)
  |  |  ------------------
  |  |  |  |  160|  28.9k|# define SSL3_RT_MAX_MD_SIZE                     64
  |  |  ------------------
  ------------------
  107|  28.9k|    }
  108|       |
  109|  28.9k|    wb = RECORD_LAYER_get_wbuf(&s->rlayer);
  ------------------
  |  |  192|  28.9k|#define RECORD_LAYER_get_wbuf(rl)               ((rl)->wbuf)
  ------------------
  110|  57.9k|    for (currpipe = 0; currpipe < numwpipes; currpipe++) {
  ------------------
  |  Branch (110:24): [True: 28.9k, False: 28.9k]
  ------------------
  111|  28.9k|        SSL3_BUFFER *thiswb = &wb[currpipe];
  112|       |
  113|  28.9k|        if (thiswb->buf != NULL && thiswb->len != len) {
  ------------------
  |  Branch (113:13): [True: 0, False: 28.9k]
  |  Branch (113:36): [True: 0, False: 0]
  ------------------
  114|      0|            OPENSSL_free(thiswb->buf);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  115|      0|            thiswb->buf = NULL;         /* force reallocation */
  116|      0|        }
  117|       |
  118|  28.9k|        if (thiswb->buf == NULL) {
  ------------------
  |  Branch (118:13): [True: 28.9k, False: 0]
  ------------------
  119|  28.9k|            p = OPENSSL_malloc(len);
  ------------------
  |  |  118|  28.9k|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  120|  28.9k|            if (p == NULL) {
  ------------------
  |  Branch (120:17): [True: 0, False: 28.9k]
  ------------------
  121|      0|                s->rlayer.numwpipes = currpipe;
  122|       |                /*
  123|       |                 * We've got a malloc failure, and we're still initialising
  124|       |                 * buffers. We assume we're so doomed that we won't even be able
  125|       |                 * to send an alert.
  126|       |                 */
  127|      0|                SSLfatal(s, SSL_AD_NO_ALERT,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  128|      0|                         SSL_F_SSL3_SETUP_WRITE_BUFFER, ERR_R_MALLOC_FAILURE);
  129|      0|                return 0;
  130|      0|            }
  131|  28.9k|            memset(thiswb, 0, sizeof(SSL3_BUFFER));
  132|  28.9k|            thiswb->buf = p;
  133|  28.9k|            thiswb->len = len;
  134|  28.9k|        }
  135|  28.9k|    }
  136|       |
  137|  28.9k|    return 1;
  138|  28.9k|}
ssl3_setup_buffers:
  141|  28.9k|{
  142|  28.9k|    if (!ssl3_setup_read_buffer(s)) {
  ------------------
  |  Branch (142:9): [True: 0, False: 28.9k]
  ------------------
  143|       |        /* SSLfatal() already called */
  144|      0|        return 0;
  145|      0|    }
  146|  28.9k|    if (!ssl3_setup_write_buffer(s, 1, 0)) {
  ------------------
  |  Branch (146:9): [True: 0, False: 28.9k]
  ------------------
  147|       |        /* SSLfatal() already called */
  148|      0|        return 0;
  149|      0|    }
  150|  28.9k|    return 1;
  151|  28.9k|}
ssl3_release_write_buffer:
  154|  86.9k|{
  155|  86.9k|    SSL3_BUFFER *wb;
  156|  86.9k|    size_t pipes;
  157|       |
  158|  86.9k|    pipes = s->rlayer.numwpipes;
  159|   115k|    while (pipes > 0) {
  ------------------
  |  Branch (159:12): [True: 28.9k, False: 86.9k]
  ------------------
  160|  28.9k|        wb = &RECORD_LAYER_get_wbuf(&s->rlayer)[pipes - 1];
  ------------------
  |  |  192|  28.9k|#define RECORD_LAYER_get_wbuf(rl)               ((rl)->wbuf)
  ------------------
  161|       |
  162|  28.9k|        OPENSSL_free(wb->buf);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  163|       |        wb->buf = NULL;
  164|  28.9k|        pipes--;
  165|  28.9k|    }
  166|  86.9k|    s->rlayer.numwpipes = 0;
  167|  86.9k|    return 1;
  168|  86.9k|}
ssl3_release_read_buffer:
  171|  28.9k|{
  172|  28.9k|    SSL3_BUFFER *b;
  173|       |
  174|  28.9k|    b = RECORD_LAYER_get_rbuf(&s->rlayer);
  ------------------
  |  |  191|  28.9k|#define RECORD_LAYER_get_rbuf(rl)               (&(rl)->rbuf)
  ------------------
  175|  28.9k|    OPENSSL_free(b->buf);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  176|       |    b->buf = NULL;
  177|  28.9k|    return 1;
  178|  28.9k|}

SSL3_RECORD_clear:
   38|  86.9k|{
   39|  86.9k|    unsigned char *comp;
   40|  86.9k|    size_t i;
   41|       |
   42|  2.86M|    for (i = 0; i < num_recs; i++) {
  ------------------
  |  Branch (42:17): [True: 2.78M, False: 86.9k]
  ------------------
   43|  2.78M|        comp = r[i].comp;
   44|       |
   45|  2.78M|        memset(&r[i], 0, sizeof(*r));
   46|  2.78M|        r[i].comp = comp;
   47|  2.78M|    }
   48|  86.9k|}
SSL3_RECORD_release:
   51|  28.9k|{
   52|  28.9k|    size_t i;
   53|       |
   54|   956k|    for (i = 0; i < num_recs; i++) {
  ------------------
  |  Branch (54:17): [True: 927k, False: 28.9k]
  ------------------
   55|   927k|        OPENSSL_free(r[i].comp);
  ------------------
  |  |  128|   927k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   56|       |        r[i].comp = NULL;
   57|   927k|    }
   58|  28.9k|}
ssl3_get_record:
  174|  28.9k|{
  175|  28.9k|    int enc_err, rret;
  176|  28.9k|    int i;
  177|  28.9k|    size_t more, n;
  178|  28.9k|    SSL3_RECORD *rr, *thisrr;
  179|  28.9k|    SSL3_BUFFER *rbuf;
  180|  28.9k|    SSL_SESSION *sess;
  181|  28.9k|    unsigned char *p;
  182|  28.9k|    unsigned char md[EVP_MAX_MD_SIZE];
  183|  28.9k|    unsigned int version;
  184|  28.9k|    size_t mac_size;
  185|  28.9k|    int imac_size;
  186|  28.9k|    size_t num_recs = 0, max_recs, j;
  187|  28.9k|    PACKET pkt, sslv2pkt;
  188|  28.9k|    size_t first_rec_len;
  189|       |
  190|  28.9k|    rr = RECORD_LAYER_get_rrec(&s->rlayer);
  ------------------
  |  |   21|  28.9k|#define RECORD_LAYER_get_rrec(rl)               ((rl)->rrec)
  ------------------
  191|  28.9k|    rbuf = RECORD_LAYER_get_rbuf(&s->rlayer);
  ------------------
  |  |  191|  28.9k|#define RECORD_LAYER_get_rbuf(rl)               (&(rl)->rbuf)
  ------------------
  192|  28.9k|    max_recs = s->max_pipelines;
  193|  28.9k|    if (max_recs == 0)
  ------------------
  |  Branch (193:9): [True: 28.9k, False: 0]
  ------------------
  194|  28.9k|        max_recs = 1;
  195|  28.9k|    sess = s->session;
  196|       |
  197|  28.9k|    do {
  198|  28.9k|        thisrr = &rr[num_recs];
  199|       |
  200|       |        /* check if we have the header */
  201|  28.9k|        if ((RECORD_LAYER_get_rstate(&s->rlayer) != SSL_ST_READ_BODY) ||
  ------------------
  |  |   24|  28.9k|#define RECORD_LAYER_get_rstate(rl)             ((rl)->rstate)
  ------------------
                      if ((RECORD_LAYER_get_rstate(&s->rlayer) != SSL_ST_READ_BODY) ||
  ------------------
  |  | 1083|  28.9k|# define SSL_ST_READ_BODY                        0xF1
  ------------------
  |  Branch (201:13): [True: 28.9k, False: 0]
  ------------------
  202|      0|            (RECORD_LAYER_get_packet_length(&s->rlayer)
  ------------------
  |  |  184|      0|#define RECORD_LAYER_get_packet_length(rl)      ((rl)->packet_length)
  ------------------
  |  Branch (202:13): [True: 0, False: 0]
  ------------------
  203|  28.9k|             < SSL3_RT_HEADER_LENGTH)) {
  ------------------
  |  |  133|      0|# define SSL3_RT_HEADER_LENGTH                   5
  ------------------
  204|  28.9k|            size_t sslv2len;
  205|  28.9k|            unsigned int type;
  206|       |
  207|  28.9k|            rret = ssl3_read_n(s, SSL3_RT_HEADER_LENGTH,
  ------------------
  |  |  133|  28.9k|# define SSL3_RT_HEADER_LENGTH                   5
  ------------------
  208|  28.9k|                               SSL3_BUFFER_get_len(rbuf), 0,
  ------------------
  |  |   58|  28.9k|#define SSL3_BUFFER_get_len(b)              ((b)->len)
  ------------------
  209|  28.9k|                               num_recs == 0 ? 1 : 0, &n);
  ------------------
  |  Branch (209:32): [True: 28.9k, False: 0]
  ------------------
  210|  28.9k|            if (rret <= 0)
  ------------------
  |  Branch (210:17): [True: 28.9k, False: 0]
  ------------------
  211|  28.9k|                return rret;     /* error or non-blocking */
  212|      0|            RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_BODY);
  ------------------
  |  |   25|      0|#define RECORD_LAYER_set_rstate(rl, st)         ((rl)->rstate = (st))
  ------------------
  213|       |
  214|      0|            p = RECORD_LAYER_get_packet(&s->rlayer);
  ------------------
  |  |  183|      0|#define RECORD_LAYER_get_packet(rl)             ((rl)->packet)
  ------------------
  215|      0|            if (!PACKET_buf_init(&pkt, RECORD_LAYER_get_packet(&s->rlayer),
  ------------------
  |  |  183|      0|#define RECORD_LAYER_get_packet(rl)             ((rl)->packet)
  ------------------
  |  Branch (215:17): [True: 0, False: 0]
  ------------------
  216|      0|                                 RECORD_LAYER_get_packet_length(&s->rlayer))) {
  ------------------
  |  |  184|      0|#define RECORD_LAYER_get_packet_length(rl)      ((rl)->packet_length)
  ------------------
  217|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  218|      0|                         ERR_R_INTERNAL_ERROR);
  219|      0|                return -1;
  220|      0|            }
  221|      0|            sslv2pkt = pkt;
  222|      0|            if (!PACKET_get_net_2_len(&sslv2pkt, &sslv2len)
  ------------------
  |  Branch (222:17): [True: 0, False: 0]
  ------------------
  223|      0|                    || !PACKET_get_1(&sslv2pkt, &type)) {
  ------------------
  |  Branch (223:24): [True: 0, False: 0]
  ------------------
  224|      0|                SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  225|      0|                         ERR_R_INTERNAL_ERROR);
  226|      0|                return -1;
  227|      0|            }
  228|       |            /*
  229|       |             * The first record received by the server may be a V2ClientHello.
  230|       |             */
  231|      0|            if (s->server && RECORD_LAYER_is_first_record(&s->rlayer)
  ------------------
  |  |   34|      0|#define RECORD_LAYER_is_first_record(rl)        ((rl)->is_first_record)
  |  |  ------------------
  |  |  |  Branch (34:49): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (231:17): [True: 0, False: 0]
  ------------------
  232|      0|                    && (sslv2len & 0x8000) != 0
  ------------------
  |  Branch (232:24): [True: 0, False: 0]
  ------------------
  233|      0|                    && (type == SSL2_MT_CLIENT_HELLO)) {
  ------------------
  |  |   19|      0|# define SSL2_MT_CLIENT_HELLO            1
  ------------------
  |  Branch (233:24): [True: 0, False: 0]
  ------------------
  234|       |                /*
  235|       |                 *  SSLv2 style record
  236|       |                 *
  237|       |                 * |num_recs| here will actually always be 0 because
  238|       |                 * |num_recs > 0| only ever occurs when we are processing
  239|       |                 * multiple app data records - which we know isn't the case here
  240|       |                 * because it is an SSLv2ClientHello. We keep it using
  241|       |                 * |num_recs| for the sake of consistency
  242|       |                 */
  243|      0|                thisrr->type = SSL3_RT_HANDSHAKE;
  ------------------
  |  |  215|      0|# define SSL3_RT_HANDSHAKE               22
  ------------------
  244|      0|                thisrr->rec_version = SSL2_VERSION;
  ------------------
  |  |   17|      0|# define SSL2_VERSION            0x0002
  ------------------
  245|       |
  246|      0|                thisrr->length = sslv2len & 0x7fff;
  247|       |
  248|      0|                if (thisrr->length > SSL3_BUFFER_get_len(rbuf)
  ------------------
  |  |   58|      0|#define SSL3_BUFFER_get_len(b)              ((b)->len)
  ------------------
  |  Branch (248:21): [True: 0, False: 0]
  ------------------
  249|      0|                    - SSL2_RT_HEADER_LENGTH) {
  ------------------
  |  |  159|      0|#define SSL2_RT_HEADER_LENGTH   2
  ------------------
  250|      0|                    SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  251|      0|                             SSL_R_PACKET_LENGTH_TOO_LONG);
  252|      0|                    return -1;
  253|      0|                }
  254|       |
  255|      0|                if (thisrr->length < MIN_SSL2_RECORD_LEN) {
  ------------------
  |  |  179|      0|#define MIN_SSL2_RECORD_LEN     9
  ------------------
  |  Branch (255:21): [True: 0, False: 0]
  ------------------
  256|      0|                    SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  257|      0|                             SSL_R_LENGTH_TOO_SHORT);
  258|      0|                    return -1;
  259|      0|                }
  260|      0|            } else {
  261|       |                /* SSLv3+ style record */
  262|      0|                if (s->msg_callback)
  ------------------
  |  Branch (262:21): [True: 0, False: 0]
  ------------------
  263|      0|                    s->msg_callback(0, 0, SSL3_RT_HEADER, p, 5, s,
  ------------------
  |  |  234|      0|# define SSL3_RT_HEADER                  0x100
  ------------------
  264|      0|                                    s->msg_callback_arg);
  265|       |
  266|       |                /* Pull apart the header into the SSL3_RECORD */
  267|      0|                if (!PACKET_get_1(&pkt, &type)
  ------------------
  |  Branch (267:21): [True: 0, False: 0]
  ------------------
  268|      0|                        || !PACKET_get_net_2(&pkt, &version)
  ------------------
  |  Branch (268:28): [True: 0, False: 0]
  ------------------
  269|      0|                        || !PACKET_get_net_2_len(&pkt, &thisrr->length)) {
  ------------------
  |  Branch (269:28): [True: 0, False: 0]
  ------------------
  270|      0|                    SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  271|      0|                             ERR_R_INTERNAL_ERROR);
  272|      0|                    return -1;
  273|      0|                }
  274|      0|                thisrr->type = type;
  275|      0|                thisrr->rec_version = version;
  276|       |
  277|       |                /*
  278|       |                 * Lets check version. In TLSv1.3 we only check this field
  279|       |                 * when encryption is occurring (see later check). For the
  280|       |                 * ServerHello after an HRR we haven't actually selected TLSv1.3
  281|       |                 * yet, but we still treat it as TLSv1.3, so we must check for
  282|       |                 * that explicitly
  283|       |                 */
  284|      0|                if (!s->first_packet && !SSL_IS_TLS13(s)
  ------------------
  |  |  322|      0|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 0, False: 0]
  |  |  ------------------
  |  |  324|      0|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (284:21): [True: 0, False: 0]
  ------------------
  285|      0|                        && s->hello_retry_request != SSL_HRR_PENDING
  ------------------
  |  Branch (285:28): [True: 0, False: 0]
  ------------------
  286|      0|                        && version != (unsigned int)s->version) {
  ------------------
  |  Branch (286:28): [True: 0, False: 0]
  ------------------
  287|      0|                    if ((s->version & 0xFF00) == (version & 0xFF00)
  ------------------
  |  Branch (287:25): [True: 0, False: 0]
  ------------------
  288|      0|                        && !s->enc_write_ctx && !s->write_hash) {
  ------------------
  |  Branch (288:28): [True: 0, False: 0]
  |  Branch (288:49): [True: 0, False: 0]
  ------------------
  289|      0|                        if (thisrr->type == SSL3_RT_ALERT) {
  ------------------
  |  |  214|      0|# define SSL3_RT_ALERT                   21
  ------------------
  |  Branch (289:29): [True: 0, False: 0]
  ------------------
  290|       |                            /*
  291|       |                             * The record is using an incorrect version number,
  292|       |                             * but what we've got appears to be an alert. We
  293|       |                             * haven't read the body yet to check whether its a
  294|       |                             * fatal or not - but chances are it is. We probably
  295|       |                             * shouldn't send a fatal alert back. We'll just
  296|       |                             * end.
  297|       |                             */
  298|      0|                            SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  299|      0|                                     SSL_R_WRONG_VERSION_NUMBER);
  300|      0|                            return -1;
  301|      0|                        }
  302|       |                        /*
  303|       |                         * Send back error using their minor version number :-)
  304|       |                         */
  305|      0|                        s->version = (unsigned short)version;
  306|      0|                    }
  307|      0|                    SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  308|      0|                             SSL_R_WRONG_VERSION_NUMBER);
  309|      0|                    return -1;
  310|      0|                }
  311|       |
  312|      0|                if ((version >> 8) != SSL3_VERSION_MAJOR) {
  ------------------
  |  |  210|      0|# define SSL3_VERSION_MAJOR              0x03
  ------------------
  |  Branch (312:21): [True: 0, False: 0]
  ------------------
  313|      0|                    if (RECORD_LAYER_is_first_record(&s->rlayer)) {
  ------------------
  |  |   34|      0|#define RECORD_LAYER_is_first_record(rl)        ((rl)->is_first_record)
  |  |  ------------------
  |  |  |  Branch (34:49): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  314|       |                        /* Go back to start of packet, look at the five bytes
  315|       |                         * that we have. */
  316|      0|                        p = RECORD_LAYER_get_packet(&s->rlayer);
  ------------------
  |  |  183|      0|#define RECORD_LAYER_get_packet(rl)             ((rl)->packet)
  ------------------
  317|      0|                        if (strncmp((char *)p, "GET ", 4) == 0 ||
  ------------------
  |  Branch (317:29): [True: 0, False: 0]
  ------------------
  318|      0|                            strncmp((char *)p, "POST ", 5) == 0 ||
  ------------------
  |  Branch (318:29): [True: 0, False: 0]
  ------------------
  319|      0|                            strncmp((char *)p, "HEAD ", 5) == 0 ||
  ------------------
  |  Branch (319:29): [True: 0, False: 0]
  ------------------
  320|      0|                            strncmp((char *)p, "PUT ", 4) == 0) {
  ------------------
  |  Branch (320:29): [True: 0, False: 0]
  ------------------
  321|      0|                            SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  322|      0|                                     SSL_R_HTTP_REQUEST);
  323|      0|                            return -1;
  324|      0|                        } else if (strncmp((char *)p, "CONNE", 5) == 0) {
  ------------------
  |  Branch (324:36): [True: 0, False: 0]
  ------------------
  325|      0|                            SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  326|      0|                                     SSL_R_HTTPS_PROXY_REQUEST);
  327|      0|                            return -1;
  328|      0|                        }
  329|       |
  330|       |                        /* Doesn't look like TLS - don't send an alert */
  331|      0|                        SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  332|      0|                                 SSL_R_WRONG_VERSION_NUMBER);
  333|      0|                        return -1;
  334|      0|                    } else {
  335|      0|                        SSLfatal(s, SSL_AD_PROTOCOL_VERSION,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  336|      0|                                 SSL_F_SSL3_GET_RECORD,
  337|      0|                                 SSL_R_WRONG_VERSION_NUMBER);
  338|      0|                        return -1;
  339|      0|                    }
  340|      0|                }
  341|       |
  342|      0|                if (SSL_IS_TLS13(s) && s->enc_read_ctx != NULL) {
  ------------------
  |  |  322|      0|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 0, False: 0]
  |  |  ------------------
  |  |  324|      0|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (342:40): [True: 0, False: 0]
  ------------------
  343|      0|                    if (thisrr->type != SSL3_RT_APPLICATION_DATA
  ------------------
  |  |  216|      0|# define SSL3_RT_APPLICATION_DATA        23
  ------------------
  |  Branch (343:25): [True: 0, False: 0]
  ------------------
  344|      0|                            && (thisrr->type != SSL3_RT_CHANGE_CIPHER_SPEC
  ------------------
  |  |  213|      0|# define SSL3_RT_CHANGE_CIPHER_SPEC      20
  ------------------
  |  Branch (344:33): [True: 0, False: 0]
  ------------------
  345|      0|                                || !SSL_IS_FIRST_HANDSHAKE(s))
  ------------------
  |  |  333|      0|# define SSL_IS_FIRST_HANDSHAKE(S) ((s)->s3->tmp.finish_md_len == 0 \
  |  |  ------------------
  |  |  |  Branch (333:37): [True: 0, False: 0]
  |  |  ------------------
  |  |  334|      0|                                    || (s)->s3->tmp.peer_finish_md_len == 0)
  |  |  ------------------
  |  |  |  Branch (334:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  346|      0|                            && (thisrr->type != SSL3_RT_ALERT
  ------------------
  |  |  214|      0|# define SSL3_RT_ALERT                   21
  ------------------
  |  Branch (346:33): [True: 0, False: 0]
  ------------------
  347|      0|                                || s->statem.enc_read_state
  ------------------
  |  Branch (347:36): [True: 0, False: 0]
  ------------------
  348|      0|                                   != ENC_READ_STATE_ALLOW_PLAIN_ALERTS)) {
  349|      0|                        SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  350|      0|                                 SSL_F_SSL3_GET_RECORD, SSL_R_BAD_RECORD_TYPE);
  351|      0|                        return -1;
  352|      0|                    }
  353|      0|                    if (thisrr->rec_version != TLS1_2_VERSION) {
  ------------------
  |  |   29|      0|# define TLS1_2_VERSION                  0x0303
  ------------------
  |  Branch (353:25): [True: 0, False: 0]
  ------------------
  354|      0|                        SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  355|      0|                                 SSL_R_WRONG_VERSION_NUMBER);
  356|      0|                        return -1;
  357|      0|                    }
  358|      0|                }
  359|       |
  360|      0|                if (thisrr->length >
  ------------------
  |  Branch (360:21): [True: 0, False: 0]
  ------------------
  361|      0|                    SSL3_BUFFER_get_len(rbuf) - SSL3_RT_HEADER_LENGTH) {
  ------------------
  |  |   58|      0|#define SSL3_BUFFER_get_len(b)              ((b)->len)
  ------------------
                                  SSL3_BUFFER_get_len(rbuf) - SSL3_RT_HEADER_LENGTH) {
  ------------------
  |  |  133|      0|# define SSL3_RT_HEADER_LENGTH                   5
  ------------------
  362|      0|                    SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  363|      0|                             SSL_R_PACKET_LENGTH_TOO_LONG);
  364|      0|                    return -1;
  365|      0|                }
  366|      0|            }
  367|       |
  368|       |            /* now s->rlayer.rstate == SSL_ST_READ_BODY */
  369|      0|        }
  370|       |
  371|      0|        if (SSL_IS_TLS13(s)) {
  ------------------
  |  |  322|      0|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 0, False: 0]
  |  |  ------------------
  |  |  324|      0|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  372|      0|            if (thisrr->length > SSL3_RT_MAX_TLS13_ENCRYPTED_LENGTH) {
  ------------------
  |  |  202|      0|            (SSL3_RT_MAX_PLAIN_LENGTH + SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD)
  |  |  ------------------
  |  |  |  |  171|      0|# define SSL3_RT_MAX_PLAIN_LENGTH                16384
  |  |  ------------------
  |  |                           (SSL3_RT_MAX_PLAIN_LENGTH + SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD)
  |  |  ------------------
  |  |  |  |  181|      0|# define SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD  256
  |  |  ------------------
  ------------------
  |  Branch (372:17): [True: 0, False: 0]
  ------------------
  373|      0|                SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  374|      0|                         SSL_R_ENCRYPTED_LENGTH_TOO_LONG);
  375|      0|                return -1;
  376|      0|            }
  377|      0|        } else {
  378|      0|            size_t len = SSL3_RT_MAX_ENCRYPTED_LENGTH;
  ------------------
  |  |  200|      0|            (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH)
  |  |  ------------------
  |  |  |  |  180|      0|# define SSL3_RT_MAX_ENCRYPTED_OVERHEAD        (256 + SSL3_RT_MAX_MD_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  160|      0|# define SSL3_RT_MAX_MD_SIZE                     64
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                           (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH)
  |  |  ------------------
  |  |  |  |  194|      0|#  define SSL3_RT_MAX_COMPRESSED_LENGTH           SSL3_RT_MAX_PLAIN_LENGTH
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|# define SSL3_RT_MAX_PLAIN_LENGTH                16384
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  379|       |
  380|       |#ifndef OPENSSL_NO_COMP
  381|       |            /*
  382|       |             * If OPENSSL_NO_COMP is defined then SSL3_RT_MAX_ENCRYPTED_LENGTH
  383|       |             * does not include the compression overhead anyway.
  384|       |             */
  385|       |            if (s->expand == NULL)
  386|       |                len -= SSL3_RT_MAX_COMPRESSED_OVERHEAD;
  387|       |#endif
  388|       |
  389|      0|            if (thisrr->length > len) {
  ------------------
  |  Branch (389:17): [True: 0, False: 0]
  ------------------
  390|      0|                SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  391|      0|                         SSL_R_ENCRYPTED_LENGTH_TOO_LONG);
  392|      0|                return -1;
  393|      0|            }
  394|      0|        }
  395|       |
  396|       |        /*
  397|       |         * s->rlayer.rstate == SSL_ST_READ_BODY, get and decode the data.
  398|       |         * Calculate how much more data we need to read for the rest of the
  399|       |         * record
  400|       |         */
  401|      0|        if (thisrr->rec_version == SSL2_VERSION) {
  ------------------
  |  |   17|      0|# define SSL2_VERSION            0x0002
  ------------------
  |  Branch (401:13): [True: 0, False: 0]
  ------------------
  402|      0|            more = thisrr->length + SSL2_RT_HEADER_LENGTH
  ------------------
  |  |  159|      0|#define SSL2_RT_HEADER_LENGTH   2
  ------------------
  403|      0|                - SSL3_RT_HEADER_LENGTH;
  ------------------
  |  |  133|      0|# define SSL3_RT_HEADER_LENGTH                   5
  ------------------
  404|      0|        } else {
  405|      0|            more = thisrr->length;
  406|      0|        }
  407|      0|        if (more > 0) {
  ------------------
  |  Branch (407:13): [True: 0, False: 0]
  ------------------
  408|       |            /* now s->rlayer.packet_length == SSL3_RT_HEADER_LENGTH */
  409|       |
  410|      0|            rret = ssl3_read_n(s, more, more, 1, 0, &n);
  411|      0|            if (rret <= 0)
  ------------------
  |  Branch (411:17): [True: 0, False: 0]
  ------------------
  412|      0|                return rret;     /* error or non-blocking io */
  413|      0|        }
  414|       |
  415|       |        /* set state for later operations */
  416|      0|        RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_HEADER);
  ------------------
  |  |   25|      0|#define RECORD_LAYER_set_rstate(rl, st)         ((rl)->rstate = (st))
  ------------------
  417|       |
  418|       |        /*
  419|       |         * At this point, s->rlayer.packet_length == SSL3_RT_HEADER_LENGTH
  420|       |         * + thisrr->length, or s->rlayer.packet_length == SSL2_RT_HEADER_LENGTH
  421|       |         * + thisrr->length and we have that many bytes in s->rlayer.packet
  422|       |         */
  423|      0|        if (thisrr->rec_version == SSL2_VERSION) {
  ------------------
  |  |   17|      0|# define SSL2_VERSION            0x0002
  ------------------
  |  Branch (423:13): [True: 0, False: 0]
  ------------------
  424|      0|            thisrr->input =
  425|      0|                &(RECORD_LAYER_get_packet(&s->rlayer)[SSL2_RT_HEADER_LENGTH]);
  ------------------
  |  |  183|      0|#define RECORD_LAYER_get_packet(rl)             ((rl)->packet)
  ------------------
                              &(RECORD_LAYER_get_packet(&s->rlayer)[SSL2_RT_HEADER_LENGTH]);
  ------------------
  |  |  159|      0|#define SSL2_RT_HEADER_LENGTH   2
  ------------------
  426|      0|        } else {
  427|      0|            thisrr->input =
  428|      0|                &(RECORD_LAYER_get_packet(&s->rlayer)[SSL3_RT_HEADER_LENGTH]);
  ------------------
  |  |  183|      0|#define RECORD_LAYER_get_packet(rl)             ((rl)->packet)
  ------------------
                              &(RECORD_LAYER_get_packet(&s->rlayer)[SSL3_RT_HEADER_LENGTH]);
  ------------------
  |  |  133|      0|# define SSL3_RT_HEADER_LENGTH                   5
  ------------------
  429|      0|        }
  430|       |
  431|       |        /*
  432|       |         * ok, we can now read from 's->rlayer.packet' data into 'thisrr'.
  433|       |         * thisrr->input points at thisrr->length bytes, which need to be copied
  434|       |         * into thisrr->data by either the decryption or by the decompression.
  435|       |         * When the data is 'copied' into the thisrr->data buffer,
  436|       |         * thisrr->input will be updated to point at the new buffer
  437|       |         */
  438|       |
  439|       |        /*
  440|       |         * We now have - encrypted [ MAC [ compressed [ plain ] ] ]
  441|       |         * thisrr->length bytes of encrypted compressed stuff.
  442|       |         */
  443|       |
  444|       |        /* decrypt in place in 'thisrr->input' */
  445|      0|        thisrr->data = thisrr->input;
  446|      0|        thisrr->orig_len = thisrr->length;
  447|       |
  448|       |        /* Mark this record as not read by upper layers yet */
  449|      0|        thisrr->read = 0;
  450|       |
  451|      0|        num_recs++;
  452|       |
  453|       |        /* we have pulled in a full packet so zero things */
  454|      0|        RECORD_LAYER_reset_packet_length(&s->rlayer);
  ------------------
  |  |   23|      0|#define RECORD_LAYER_reset_packet_length(rl)    ((rl)->packet_length = 0)
  ------------------
  455|      0|        RECORD_LAYER_clear_first_record(&s->rlayer);
  ------------------
  |  |   36|      0|#define RECORD_LAYER_clear_first_record(rl)     ((rl)->is_first_record = 0)
  ------------------
  456|      0|    } while (num_recs < max_recs
  ------------------
  |  Branch (456:14): [True: 0, False: 0]
  ------------------
  457|      0|             && thisrr->type == SSL3_RT_APPLICATION_DATA
  ------------------
  |  |  216|      0|# define SSL3_RT_APPLICATION_DATA        23
  ------------------
  |  Branch (457:17): [True: 0, False: 0]
  ------------------
  458|      0|             && SSL_USE_EXPLICIT_IV(s)
  ------------------
  |  |  338|      0|                (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_EXPLICIT_IV)
  |  |  ------------------
  |  |  |  | 1988|      0|# define SSL_ENC_FLAG_EXPLICIT_IV        0x1
  |  |  ------------------
  |  |  |  Branch (338:17): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  459|      0|             && s->enc_read_ctx != NULL
  ------------------
  |  Branch (459:17): [True: 0, False: 0]
  ------------------
  460|      0|             && (EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(s->enc_read_ctx))
  ------------------
  |  Branch (460:17): [True: 0, False: 0]
  ------------------
  461|      0|                 & EVP_CIPH_FLAG_PIPELINE)
  ------------------
  |  |  280|      0|# define         EVP_CIPH_FLAG_PIPELINE          0X800000
  ------------------
  462|      0|             && ssl3_record_app_data_waiting(s));
  ------------------
  |  Branch (462:17): [True: 0, False: 0]
  ------------------
  463|       |
  464|      0|    if (num_recs == 1
  ------------------
  |  Branch (464:9): [True: 0, False: 0]
  ------------------
  465|      0|            && thisrr->type == SSL3_RT_CHANGE_CIPHER_SPEC
  ------------------
  |  |  213|      0|# define SSL3_RT_CHANGE_CIPHER_SPEC      20
  ------------------
  |  Branch (465:16): [True: 0, False: 0]
  ------------------
  466|      0|            && (SSL_IS_TLS13(s) || s->hello_retry_request != SSL_HRR_NONE)
  ------------------
  |  |  322|      0|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 0, False: 0]
  |  |  ------------------
  |  |  324|      0|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (466:36): [True: 0, False: 0]
  ------------------
  467|      0|            && SSL_IS_FIRST_HANDSHAKE(s)) {
  ------------------
  |  |  333|      0|# define SSL_IS_FIRST_HANDSHAKE(S) ((s)->s3->tmp.finish_md_len == 0 \
  |  |  ------------------
  |  |  |  Branch (333:37): [True: 0, False: 0]
  |  |  ------------------
  |  |  334|      0|                                    || (s)->s3->tmp.peer_finish_md_len == 0)
  |  |  ------------------
  |  |  |  Branch (334:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  468|       |        /*
  469|       |         * CCS messages must be exactly 1 byte long, containing the value 0x01
  470|       |         */
  471|      0|        if (thisrr->length != 1 || thisrr->data[0] != 0x01) {
  ------------------
  |  Branch (471:13): [True: 0, False: 0]
  |  Branch (471:36): [True: 0, False: 0]
  ------------------
  472|      0|            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  473|      0|                     SSL_R_INVALID_CCS_MESSAGE);
  474|      0|            return -1;
  475|      0|        }
  476|       |        /*
  477|       |         * CCS messages are ignored in TLSv1.3. We treat it like an empty
  478|       |         * handshake record
  479|       |         */
  480|      0|        thisrr->type = SSL3_RT_HANDSHAKE;
  ------------------
  |  |  215|      0|# define SSL3_RT_HANDSHAKE               22
  ------------------
  481|      0|        RECORD_LAYER_inc_empty_record_count(&s->rlayer);
  ------------------
  |  |   30|      0|#define RECORD_LAYER_inc_empty_record_count(rl) ((rl)->empty_record_count++)
  ------------------
  482|      0|        if (RECORD_LAYER_get_empty_record_count(&s->rlayer)
  ------------------
  |  |   33|      0|#define RECORD_LAYER_get_empty_record_count(rl) ((rl)->empty_record_count)
  ------------------
  |  Branch (482:13): [True: 0, False: 0]
  ------------------
  483|      0|            > MAX_EMPTY_RECORDS) {
  ------------------
  |  |  157|      0|#define MAX_EMPTY_RECORDS 32
  ------------------
  484|      0|            SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  485|      0|                     SSL_R_UNEXPECTED_CCS_MESSAGE);
  486|      0|            return -1;
  487|      0|        }
  488|      0|        thisrr->read = 1;
  489|      0|        RECORD_LAYER_set_numrpipes(&s->rlayer, 1);
  ------------------
  |  |   29|      0|#define RECORD_LAYER_set_numrpipes(rl, n)       ((rl)->numrpipes = (n))
  ------------------
  490|       |
  491|      0|        return 1;
  492|      0|    }
  493|       |
  494|       |    /*
  495|       |     * If in encrypt-then-mac mode calculate mac from encrypted record. All
  496|       |     * the details below are public so no timing details can leak.
  497|       |     */
  498|      0|    if (SSL_READ_ETM(s) && s->read_hash) {
  ------------------
  |  |  373|      0|# define SSL_READ_ETM(s) (s->s3->flags & TLS1_FLAGS_ENCRYPT_THEN_MAC_READ)
  |  |  ------------------
  |  |  |  |  285|      0|# define TLS1_FLAGS_ENCRYPT_THEN_MAC_READ        0x0100
  |  |  ------------------
  |  |  |  Branch (373:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (498:28): [True: 0, False: 0]
  ------------------
  499|      0|        unsigned char *mac;
  500|       |        /* TODO(size_t): convert this to do size_t properly */
  501|      0|        imac_size = EVP_MD_CTX_size(s->read_hash);
  ------------------
  |  |  457|      0|# define EVP_MD_CTX_size(e)              EVP_MD_size(EVP_MD_CTX_md(e))
  ------------------
  502|      0|        if (!ossl_assert(imac_size >= 0 && imac_size <= EVP_MAX_MD_SIZE)) {
  ------------------
  |  |   40|      0|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |  ------------------
  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  ------------------
  |  |   41|      0|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (502:13): [True: 0, False: 0]
  ------------------
  503|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  504|      0|                         ERR_LIB_EVP);
  505|      0|                return -1;
  506|      0|        }
  507|      0|        mac_size = (size_t)imac_size;
  508|      0|        for (j = 0; j < num_recs; j++) {
  ------------------
  |  Branch (508:21): [True: 0, False: 0]
  ------------------
  509|      0|            thisrr = &rr[j];
  510|       |
  511|      0|            if (thisrr->length < mac_size) {
  ------------------
  |  Branch (511:17): [True: 0, False: 0]
  ------------------
  512|      0|                SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  513|      0|                         SSL_R_LENGTH_TOO_SHORT);
  514|      0|                return -1;
  515|      0|            }
  516|      0|            thisrr->length -= mac_size;
  517|      0|            mac = thisrr->data + thisrr->length;
  518|      0|            i = s->method->ssl3_enc->mac(s, thisrr, md, 0 /* not send */ );
  519|      0|            if (i == 0 || CRYPTO_memcmp(md, mac, mac_size) != 0) {
  ------------------
  |  |  349|      0|#  define CRYPTO_memcmp memcmp
  ------------------
  |  Branch (519:17): [True: 0, False: 0]
  |  Branch (519:27): [True: 0, False: 0]
  ------------------
  520|      0|                SSLfatal(s, SSL_AD_BAD_RECORD_MAC, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  521|      0|                       SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC);
  522|      0|                return -1;
  523|      0|            }
  524|      0|        }
  525|      0|    }
  526|       |
  527|      0|    first_rec_len = rr[0].length;
  528|       |
  529|      0|    enc_err = s->method->ssl3_enc->enc(s, rr, num_recs, 0);
  530|       |
  531|       |    /*-
  532|       |     * enc_err is:
  533|       |     *    0: (in non-constant time) if the record is publicly invalid.
  534|       |     *    1: if the padding is valid
  535|       |     *    -1: if the padding is invalid
  536|       |     */
  537|      0|    if (enc_err == 0) {
  ------------------
  |  Branch (537:9): [True: 0, False: 0]
  ------------------
  538|      0|        if (ossl_statem_in_error(s)) {
  ------------------
  |  Branch (538:13): [True: 0, False: 0]
  ------------------
  539|       |            /* SSLfatal() already got called */
  540|      0|            return -1;
  541|      0|        }
  542|      0|        if (num_recs == 1 && ossl_statem_skip_early_data(s)) {
  ------------------
  |  Branch (542:13): [True: 0, False: 0]
  |  Branch (542:30): [True: 0, False: 0]
  ------------------
  543|       |            /*
  544|       |             * Valid early_data that we cannot decrypt might fail here as
  545|       |             * publicly invalid. We treat it like an empty record.
  546|       |             */
  547|       |
  548|      0|            thisrr = &rr[0];
  549|       |
  550|      0|            if (!early_data_count_ok(s, thisrr->length,
  ------------------
  |  Branch (550:17): [True: 0, False: 0]
  ------------------
  551|      0|                                     EARLY_DATA_CIPHERTEXT_OVERHEAD, 0)) {
  ------------------
  |  |  641|      0|# define EARLY_DATA_CIPHERTEXT_OVERHEAD ((6 * (EVP_GCM_TLS_TAG_LEN + 1)) + 2)
  |  |  ------------------
  |  |  |  |  379|      0|# define EVP_GCM_TLS_TAG_LEN                             16
  |  |  ------------------
  ------------------
  552|       |                /* SSLfatal() already called */
  553|      0|                return -1;
  554|      0|            }
  555|       |
  556|      0|            thisrr->length = 0;
  557|      0|            thisrr->read = 1;
  558|      0|            RECORD_LAYER_set_numrpipes(&s->rlayer, 1);
  ------------------
  |  |   29|      0|#define RECORD_LAYER_set_numrpipes(rl, n)       ((rl)->numrpipes = (n))
  ------------------
  559|      0|            RECORD_LAYER_reset_read_sequence(&s->rlayer);
  560|      0|            return 1;
  561|      0|        }
  562|      0|        SSLfatal(s, SSL_AD_BAD_RECORD_MAC, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  563|      0|                 SSL_R_BLOCK_CIPHER_PAD_IS_WRONG);
  564|      0|        return -1;
  565|      0|    }
  566|       |#ifdef SSL_DEBUG
  567|       |    printf("dec %lu\n", (unsigned long)rr[0].length);
  568|       |    {
  569|       |        size_t z;
  570|       |        for (z = 0; z < rr[0].length; z++)
  571|       |            printf("%02X%c", rr[0].data[z], ((z + 1) % 16) ? ' ' : '\n');
  572|       |    }
  573|       |    printf("\n");
  574|       |#endif
  575|       |
  576|       |    /* r->length is now the compressed data plus mac */
  577|      0|    if ((sess != NULL) &&
  ------------------
  |  Branch (577:9): [True: 0, False: 0]
  ------------------
  578|      0|        (s->enc_read_ctx != NULL) &&
  ------------------
  |  Branch (578:9): [True: 0, False: 0]
  ------------------
  579|      0|        (!SSL_READ_ETM(s) && EVP_MD_CTX_md(s->read_hash) != NULL)) {
  ------------------
  |  |  373|      0|# define SSL_READ_ETM(s) (s->s3->flags & TLS1_FLAGS_ENCRYPT_THEN_MAC_READ)
  |  |  ------------------
  |  |  |  |  285|      0|# define TLS1_FLAGS_ENCRYPT_THEN_MAC_READ        0x0100
  |  |  ------------------
  ------------------
  |  Branch (579:10): [True: 0, False: 0]
  |  Branch (579:30): [True: 0, False: 0]
  ------------------
  580|       |        /* s->read_hash != NULL => mac_size != -1 */
  581|      0|        unsigned char *mac = NULL;
  582|      0|        unsigned char mac_tmp[EVP_MAX_MD_SIZE];
  583|       |
  584|      0|        mac_size = EVP_MD_CTX_size(s->read_hash);
  ------------------
  |  |  457|      0|# define EVP_MD_CTX_size(e)              EVP_MD_size(EVP_MD_CTX_md(e))
  ------------------
  585|      0|        if (!ossl_assert(mac_size <= EVP_MAX_MD_SIZE)) {
  ------------------
  |  |   40|      0|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|      0|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (585:13): [True: 0, False: 0]
  ------------------
  586|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  587|      0|                     ERR_R_INTERNAL_ERROR);
  588|      0|            return -1;
  589|      0|        }
  590|       |
  591|      0|        for (j = 0; j < num_recs; j++) {
  ------------------
  |  Branch (591:21): [True: 0, False: 0]
  ------------------
  592|      0|            thisrr = &rr[j];
  593|       |            /*
  594|       |             * orig_len is the length of the record before any padding was
  595|       |             * removed. This is public information, as is the MAC in use,
  596|       |             * therefore we can safely process the record in a different amount
  597|       |             * of time if it's too short to possibly contain a MAC.
  598|       |             */
  599|      0|            if (thisrr->orig_len < mac_size ||
  ------------------
  |  Branch (599:17): [True: 0, False: 0]
  ------------------
  600|       |                /* CBC records must have a padding length byte too. */
  601|      0|                (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE &&
  ------------------
  |  |  494|      0|# define EVP_CIPHER_CTX_mode(c)         EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c))
  |  |  ------------------
  |  |  |  |  471|      0|# define EVP_CIPHER_mode(e)              (EVP_CIPHER_flags(e) & EVP_CIPH_MODE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|# define         EVP_CIPH_MODE                   0xF0007
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                              (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE &&
  ------------------
  |  |  237|      0|# define         EVP_CIPH_CBC_MODE               0x2
  ------------------
  |  Branch (601:18): [True: 0, False: 0]
  ------------------
  602|      0|                 thisrr->orig_len < mac_size + 1)) {
  ------------------
  |  Branch (602:18): [True: 0, False: 0]
  ------------------
  603|      0|                SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  604|      0|                         SSL_R_LENGTH_TOO_SHORT);
  605|      0|                return -1;
  606|      0|            }
  607|       |
  608|      0|            if (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE) {
  ------------------
  |  |  494|      0|# define EVP_CIPHER_CTX_mode(c)         EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c))
  |  |  ------------------
  |  |  |  |  471|      0|# define EVP_CIPHER_mode(e)              (EVP_CIPHER_flags(e) & EVP_CIPH_MODE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|# define         EVP_CIPH_MODE                   0xF0007
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          if (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE) {
  ------------------
  |  |  237|      0|# define         EVP_CIPH_CBC_MODE               0x2
  ------------------
  |  Branch (608:17): [True: 0, False: 0]
  ------------------
  609|       |                /*
  610|       |                 * We update the length so that the TLS header bytes can be
  611|       |                 * constructed correctly but we need to extract the MAC in
  612|       |                 * constant time from within the record, without leaking the
  613|       |                 * contents of the padding bytes.
  614|       |                 */
  615|      0|                mac = mac_tmp;
  616|      0|                if (!ssl3_cbc_copy_mac(mac_tmp, thisrr, mac_size)) {
  ------------------
  |  Branch (616:21): [True: 0, False: 0]
  ------------------
  617|      0|                    SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  618|      0|                             ERR_R_INTERNAL_ERROR);
  619|      0|                    return -1;
  620|      0|                }
  621|      0|                thisrr->length -= mac_size;
  622|      0|            } else {
  623|       |                /*
  624|       |                 * In this case there's no padding, so |rec->orig_len| equals
  625|       |                 * |rec->length| and we checked that there's enough bytes for
  626|       |                 * |mac_size| above.
  627|       |                 */
  628|      0|                thisrr->length -= mac_size;
  629|      0|                mac = &thisrr->data[thisrr->length];
  630|      0|            }
  631|       |
  632|      0|            i = s->method->ssl3_enc->mac(s, thisrr, md, 0 /* not send */ );
  633|      0|            if (i == 0 || mac == NULL
  ------------------
  |  Branch (633:17): [True: 0, False: 0]
  |  Branch (633:27): [True: 0, False: 0]
  ------------------
  634|      0|                || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0)
  ------------------
  |  |  349|      0|#  define CRYPTO_memcmp memcmp
  ------------------
  |  Branch (634:20): [True: 0, False: 0]
  ------------------
  635|      0|                enc_err = -1;
  636|      0|            if (thisrr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + mac_size)
  ------------------
  |  |  194|      0|#  define SSL3_RT_MAX_COMPRESSED_LENGTH           SSL3_RT_MAX_PLAIN_LENGTH
  |  |  ------------------
  |  |  |  |  171|      0|# define SSL3_RT_MAX_PLAIN_LENGTH                16384
  |  |  ------------------
  ------------------
  |  Branch (636:17): [True: 0, False: 0]
  ------------------
  637|      0|                enc_err = -1;
  638|      0|        }
  639|      0|    }
  640|       |
  641|      0|    if (enc_err < 0) {
  ------------------
  |  Branch (641:9): [True: 0, False: 0]
  ------------------
  642|      0|        if (ossl_statem_in_error(s)) {
  ------------------
  |  Branch (642:13): [True: 0, False: 0]
  ------------------
  643|       |            /* We already called SSLfatal() */
  644|      0|            return -1;
  645|      0|        }
  646|      0|        if (num_recs == 1 && ossl_statem_skip_early_data(s)) {
  ------------------
  |  Branch (646:13): [True: 0, False: 0]
  |  Branch (646:30): [True: 0, False: 0]
  ------------------
  647|       |            /*
  648|       |             * We assume this is unreadable early_data - we treat it like an
  649|       |             * empty record
  650|       |             */
  651|       |
  652|       |            /*
  653|       |             * The record length may have been modified by the mac check above
  654|       |             * so we use the previously saved value
  655|       |             */
  656|      0|            if (!early_data_count_ok(s, first_rec_len,
  ------------------
  |  Branch (656:17): [True: 0, False: 0]
  ------------------
  657|      0|                                     EARLY_DATA_CIPHERTEXT_OVERHEAD, 0)) {
  ------------------
  |  |  641|      0|# define EARLY_DATA_CIPHERTEXT_OVERHEAD ((6 * (EVP_GCM_TLS_TAG_LEN + 1)) + 2)
  |  |  ------------------
  |  |  |  |  379|      0|# define EVP_GCM_TLS_TAG_LEN                             16
  |  |  ------------------
  ------------------
  658|       |                /* SSLfatal() already called */
  659|      0|                return -1;
  660|      0|            }
  661|       |
  662|      0|            thisrr = &rr[0];
  663|      0|            thisrr->length = 0;
  664|      0|            thisrr->read = 1;
  665|      0|            RECORD_LAYER_set_numrpipes(&s->rlayer, 1);
  ------------------
  |  |   29|      0|#define RECORD_LAYER_set_numrpipes(rl, n)       ((rl)->numrpipes = (n))
  ------------------
  666|      0|            RECORD_LAYER_reset_read_sequence(&s->rlayer);
  667|      0|            return 1;
  668|      0|        }
  669|       |        /*
  670|       |         * A separate 'decryption_failed' alert was introduced with TLS 1.0,
  671|       |         * SSL 3.0 only has 'bad_record_mac'.  But unless a decryption
  672|       |         * failure is directly visible from the ciphertext anyway, we should
  673|       |         * not reveal which kind of error occurred -- this might become
  674|       |         * visible to an attacker (e.g. via a logfile)
  675|       |         */
  676|      0|        SSLfatal(s, SSL_AD_BAD_RECORD_MAC, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  677|      0|                 SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC);
  678|      0|        return -1;
  679|      0|    }
  680|       |
  681|      0|    for (j = 0; j < num_recs; j++) {
  ------------------
  |  Branch (681:17): [True: 0, False: 0]
  ------------------
  682|      0|        thisrr = &rr[j];
  683|       |
  684|       |        /* thisrr->length is now just compressed */
  685|      0|        if (s->expand != NULL) {
  ------------------
  |  Branch (685:13): [True: 0, False: 0]
  ------------------
  686|      0|            if (thisrr->length > SSL3_RT_MAX_COMPRESSED_LENGTH) {
  ------------------
  |  |  194|      0|#  define SSL3_RT_MAX_COMPRESSED_LENGTH           SSL3_RT_MAX_PLAIN_LENGTH
  |  |  ------------------
  |  |  |  |  171|      0|# define SSL3_RT_MAX_PLAIN_LENGTH                16384
  |  |  ------------------
  ------------------
  |  Branch (686:17): [True: 0, False: 0]
  ------------------
  687|      0|                SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  688|      0|                         SSL_R_COMPRESSED_LENGTH_TOO_LONG);
  689|      0|                return -1;
  690|      0|            }
  691|      0|            if (!ssl3_do_uncompress(s, thisrr)) {
  ------------------
  |  Branch (691:17): [True: 0, False: 0]
  ------------------
  692|      0|                SSLfatal(s, SSL_AD_DECOMPRESSION_FAILURE, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  693|      0|                         SSL_R_BAD_DECOMPRESSION);
  694|      0|                return -1;
  695|      0|            }
  696|      0|        }
  697|       |
  698|      0|        if (SSL_IS_TLS13(s)
  ------------------
  |  |  322|      0|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 0, False: 0]
  |  |  ------------------
  |  |  324|      0|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  699|      0|                && s->enc_read_ctx != NULL
  ------------------
  |  Branch (699:20): [True: 0, False: 0]
  ------------------
  700|      0|                && thisrr->type != SSL3_RT_ALERT) {
  ------------------
  |  |  214|      0|# define SSL3_RT_ALERT                   21
  ------------------
  |  Branch (700:20): [True: 0, False: 0]
  ------------------
  701|      0|            size_t end;
  702|       |
  703|      0|            if (thisrr->length == 0
  ------------------
  |  Branch (703:17): [True: 0, False: 0]
  ------------------
  704|      0|                    || thisrr->type != SSL3_RT_APPLICATION_DATA) {
  ------------------
  |  |  216|      0|# define SSL3_RT_APPLICATION_DATA        23
  ------------------
  |  Branch (704:24): [True: 0, False: 0]
  ------------------
  705|      0|                SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  706|      0|                         SSL_R_BAD_RECORD_TYPE);
  707|      0|                return -1;
  708|      0|            }
  709|       |
  710|       |            /* Strip trailing padding */
  711|      0|            for (end = thisrr->length - 1; end > 0 && thisrr->data[end] == 0;
  ------------------
  |  Branch (711:44): [True: 0, False: 0]
  |  Branch (711:55): [True: 0, False: 0]
  ------------------
  712|      0|                 end--)
  713|      0|                continue;
  714|       |
  715|      0|            thisrr->length = end;
  716|      0|            thisrr->type = thisrr->data[end];
  717|      0|            if (thisrr->type != SSL3_RT_APPLICATION_DATA
  ------------------
  |  |  216|      0|# define SSL3_RT_APPLICATION_DATA        23
  ------------------
  |  Branch (717:17): [True: 0, False: 0]
  ------------------
  718|      0|                    && thisrr->type != SSL3_RT_ALERT
  ------------------
  |  |  214|      0|# define SSL3_RT_ALERT                   21
  ------------------
  |  Branch (718:24): [True: 0, False: 0]
  ------------------
  719|      0|                    && thisrr->type != SSL3_RT_HANDSHAKE) {
  ------------------
  |  |  215|      0|# define SSL3_RT_HANDSHAKE               22
  ------------------
  |  Branch (719:24): [True: 0, False: 0]
  ------------------
  720|      0|                SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  721|      0|                         SSL_R_BAD_RECORD_TYPE);
  722|      0|                return -1;
  723|      0|            }
  724|      0|            if (s->msg_callback)
  ------------------
  |  Branch (724:17): [True: 0, False: 0]
  ------------------
  725|      0|                s->msg_callback(0, s->version, SSL3_RT_INNER_CONTENT_TYPE,
  ------------------
  |  |  235|      0|# define SSL3_RT_INNER_CONTENT_TYPE      0x101
  ------------------
  726|      0|                                &thisrr->data[end], 1, s, s->msg_callback_arg);
  727|      0|        }
  728|       |
  729|       |        /*
  730|       |         * TLSv1.3 alert and handshake records are required to be non-zero in
  731|       |         * length.
  732|       |         */
  733|      0|        if (SSL_IS_TLS13(s)
  ------------------
  |  |  322|      0|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 0, False: 0]
  |  |  ------------------
  |  |  324|      0|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  734|      0|                && (thisrr->type == SSL3_RT_HANDSHAKE
  ------------------
  |  |  215|      0|# define SSL3_RT_HANDSHAKE               22
  ------------------
  |  Branch (734:21): [True: 0, False: 0]
  ------------------
  735|      0|                    || thisrr->type == SSL3_RT_ALERT)
  ------------------
  |  |  214|      0|# define SSL3_RT_ALERT                   21
  ------------------
  |  Branch (735:24): [True: 0, False: 0]
  ------------------
  736|      0|                && thisrr->length == 0) {
  ------------------
  |  Branch (736:20): [True: 0, False: 0]
  ------------------
  737|      0|            SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  738|      0|                     SSL_R_BAD_LENGTH);
  739|      0|            return -1;
  740|      0|        }
  741|       |
  742|      0|        if (thisrr->length > SSL3_RT_MAX_PLAIN_LENGTH) {
  ------------------
  |  |  171|      0|# define SSL3_RT_MAX_PLAIN_LENGTH                16384
  ------------------
  |  Branch (742:13): [True: 0, False: 0]
  ------------------
  743|      0|            SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  744|      0|                     SSL_R_DATA_LENGTH_TOO_LONG);
  745|      0|            return -1;
  746|      0|        }
  747|       |
  748|       |        /* If received packet overflows current Max Fragment Length setting */
  749|      0|        if (s->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(s->session)
  ------------------
  |  |  369|      0|    IS_MAX_FRAGMENT_LENGTH_EXT_VALID(session->ext.max_fragment_len_mode)
  |  |  ------------------
  |  |  |  |  366|      0|    (((value) >= TLSEXT_max_fragment_length_512) && \
  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|# define TLSEXT_max_fragment_length_512         1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (366:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  367|      0|     ((value) <= TLSEXT_max_fragment_length_4096))
  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|# define TLSEXT_max_fragment_length_4096        4
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (367:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (749:13): [True: 0, False: 0]
  ------------------
  750|      0|                && thisrr->length > GET_MAX_FRAGMENT_LENGTH(s->session)) {
  ------------------
  |  |  371|      0|    (512U << (session->ext.max_fragment_len_mode - 1))
  ------------------
  |  Branch (750:20): [True: 0, False: 0]
  ------------------
  751|      0|            SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  752|      0|                     SSL_R_DATA_LENGTH_TOO_LONG);
  753|      0|            return -1;
  754|      0|        }
  755|       |
  756|      0|        thisrr->off = 0;
  757|       |        /*-
  758|       |         * So at this point the following is true
  759|       |         * thisrr->type   is the type of record
  760|       |         * thisrr->length == number of bytes in record
  761|       |         * thisrr->off    == offset to first valid byte
  762|       |         * thisrr->data   == where to take bytes from, increment after use :-).
  763|       |         */
  764|       |
  765|       |        /* just read a 0 length packet */
  766|      0|        if (thisrr->length == 0) {
  ------------------
  |  Branch (766:13): [True: 0, False: 0]
  ------------------
  767|      0|            RECORD_LAYER_inc_empty_record_count(&s->rlayer);
  ------------------
  |  |   30|      0|#define RECORD_LAYER_inc_empty_record_count(rl) ((rl)->empty_record_count++)
  ------------------
  768|      0|            if (RECORD_LAYER_get_empty_record_count(&s->rlayer)
  ------------------
  |  |   33|      0|#define RECORD_LAYER_get_empty_record_count(rl) ((rl)->empty_record_count)
  ------------------
  |  Branch (768:17): [True: 0, False: 0]
  ------------------
  769|      0|                > MAX_EMPTY_RECORDS) {
  ------------------
  |  |  157|      0|#define MAX_EMPTY_RECORDS 32
  ------------------
  770|      0|                SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_GET_RECORD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  771|      0|                         SSL_R_RECORD_TOO_SMALL);
  772|      0|                return -1;
  773|      0|            }
  774|      0|        } else {
  775|      0|            RECORD_LAYER_reset_empty_record_count(&s->rlayer);
  ------------------
  |  |   32|      0|                                                ((rl)->empty_record_count = 0)
  ------------------
  776|      0|        }
  777|      0|    }
  778|       |
  779|      0|    if (s->early_data_state == SSL_EARLY_DATA_READING) {
  ------------------
  |  Branch (779:9): [True: 0, False: 0]
  ------------------
  780|      0|        thisrr = &rr[0];
  781|      0|        if (thisrr->type == SSL3_RT_APPLICATION_DATA
  ------------------
  |  |  216|      0|# define SSL3_RT_APPLICATION_DATA        23
  ------------------
  |  Branch (781:13): [True: 0, False: 0]
  ------------------
  782|      0|                && !early_data_count_ok(s, thisrr->length, 0, 0)) {
  ------------------
  |  Branch (782:20): [True: 0, False: 0]
  ------------------
  783|       |            /* SSLfatal already called */
  784|      0|            return -1;
  785|      0|        }
  786|      0|    }
  787|       |
  788|      0|    RECORD_LAYER_set_numrpipes(&s->rlayer, num_recs);
  ------------------
  |  |   29|      0|#define RECORD_LAYER_set_numrpipes(rl, n)       ((rl)->numrpipes = (n))
  ------------------
  789|      0|    return 1;
  790|      0|}
tls1_enc:
  938|  28.9k|{
  939|  28.9k|    EVP_CIPHER_CTX *ds;
  940|  28.9k|    size_t reclen[SSL_MAX_PIPELINES];
  941|  28.9k|    unsigned char buf[SSL_MAX_PIPELINES][EVP_AEAD_TLS1_AAD_LEN];
  942|  28.9k|    int i, pad = 0, ret, tmpr;
  943|  28.9k|    size_t bs, mac_size = 0, ctr, padnum, loop;
  944|  28.9k|    unsigned char padval;
  945|  28.9k|    int imac_size;
  946|  28.9k|    const EVP_CIPHER *enc;
  947|       |
  948|  28.9k|    if (n_recs == 0) {
  ------------------
  |  Branch (948:9): [True: 0, False: 28.9k]
  ------------------
  949|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  950|      0|                 ERR_R_INTERNAL_ERROR);
  951|      0|        return 0;
  952|      0|    }
  953|       |
  954|  28.9k|    if (sending) {
  ------------------
  |  Branch (954:9): [True: 28.9k, False: 0]
  ------------------
  955|  28.9k|        if (EVP_MD_CTX_md(s->write_hash)) {
  ------------------
  |  Branch (955:13): [True: 0, False: 28.9k]
  ------------------
  956|      0|            int n = EVP_MD_CTX_size(s->write_hash);
  ------------------
  |  |  457|      0|# define EVP_MD_CTX_size(e)              EVP_MD_size(EVP_MD_CTX_md(e))
  ------------------
  957|      0|            if (!ossl_assert(n >= 0)) {
  ------------------
  |  |   40|      0|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|      0|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (957:17): [True: 0, False: 0]
  ------------------
  958|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  959|      0|                         ERR_R_INTERNAL_ERROR);
  960|      0|                return -1;
  961|      0|            }
  962|      0|        }
  963|  28.9k|        ds = s->enc_write_ctx;
  964|  28.9k|        if (s->enc_write_ctx == NULL)
  ------------------
  |  Branch (964:13): [True: 28.9k, False: 0]
  ------------------
  965|  28.9k|            enc = NULL;
  966|      0|        else {
  967|      0|            int ivlen;
  968|      0|            enc = EVP_CIPHER_CTX_cipher(s->enc_write_ctx);
  969|       |            /* For TLSv1.1 and later explicit IV */
  970|      0|            if (SSL_USE_EXPLICIT_IV(s)
  ------------------
  |  |  338|      0|                (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_EXPLICIT_IV)
  |  |  ------------------
  |  |  |  | 1988|      0|# define SSL_ENC_FLAG_EXPLICIT_IV        0x1
  |  |  ------------------
  |  |  |  Branch (338:17): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  971|      0|                && EVP_CIPHER_mode(enc) == EVP_CIPH_CBC_MODE)
  ------------------
  |  |  471|      0|# define EVP_CIPHER_mode(e)              (EVP_CIPHER_flags(e) & EVP_CIPH_MODE)
  |  |  ------------------
  |  |  |  |  246|      0|# define         EVP_CIPH_MODE                   0xF0007
  |  |  ------------------
  ------------------
                              && EVP_CIPHER_mode(enc) == EVP_CIPH_CBC_MODE)
  ------------------
  |  |  237|      0|# define         EVP_CIPH_CBC_MODE               0x2
  ------------------
  |  Branch (971:20): [True: 0, False: 0]
  ------------------
  972|      0|                ivlen = EVP_CIPHER_iv_length(enc);
  973|      0|            else
  974|      0|                ivlen = 0;
  975|      0|            if (ivlen > 1) {
  ------------------
  |  Branch (975:17): [True: 0, False: 0]
  ------------------
  976|      0|                for (ctr = 0; ctr < n_recs; ctr++) {
  ------------------
  |  Branch (976:31): [True: 0, False: 0]
  ------------------
  977|      0|                    if (recs[ctr].data != recs[ctr].input) {
  ------------------
  |  Branch (977:25): [True: 0, False: 0]
  ------------------
  978|       |                        /*
  979|       |                         * we can't write into the input stream: Can this ever
  980|       |                         * happen?? (steve)
  981|       |                         */
  982|      0|                        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  983|      0|                                 ERR_R_INTERNAL_ERROR);
  984|      0|                        return -1;
  985|      0|                    } else if (RAND_bytes(recs[ctr].input, ivlen) <= 0) {
  ------------------
  |  Branch (985:32): [True: 0, False: 0]
  ------------------
  986|      0|                        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  987|      0|                                 ERR_R_INTERNAL_ERROR);
  988|      0|                        return -1;
  989|      0|                    }
  990|      0|                }
  991|      0|            }
  992|      0|        }
  993|  28.9k|    } else {
  994|      0|        if (EVP_MD_CTX_md(s->read_hash)) {
  ------------------
  |  Branch (994:13): [True: 0, False: 0]
  ------------------
  995|      0|            int n = EVP_MD_CTX_size(s->read_hash);
  ------------------
  |  |  457|      0|# define EVP_MD_CTX_size(e)              EVP_MD_size(EVP_MD_CTX_md(e))
  ------------------
  996|      0|            if (!ossl_assert(n >= 0)) {
  ------------------
  |  |   40|      0|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|      0|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (996:17): [True: 0, False: 0]
  ------------------
  997|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  998|      0|                         ERR_R_INTERNAL_ERROR);
  999|      0|                return -1;
 1000|      0|            }
 1001|      0|        }
 1002|      0|        ds = s->enc_read_ctx;
 1003|      0|        if (s->enc_read_ctx == NULL)
  ------------------
  |  Branch (1003:13): [True: 0, False: 0]
  ------------------
 1004|      0|            enc = NULL;
 1005|      0|        else
 1006|      0|            enc = EVP_CIPHER_CTX_cipher(s->enc_read_ctx);
 1007|      0|    }
 1008|       |
 1009|  28.9k|    if ((s->session == NULL) || (ds == NULL) || (enc == NULL)) {
  ------------------
  |  Branch (1009:9): [True: 0, False: 28.9k]
  |  Branch (1009:33): [True: 28.9k, False: 0]
  |  Branch (1009:49): [True: 0, False: 0]
  ------------------
 1010|  57.9k|        for (ctr = 0; ctr < n_recs; ctr++) {
  ------------------
  |  Branch (1010:23): [True: 28.9k, False: 28.9k]
  ------------------
 1011|  28.9k|            memmove(recs[ctr].data, recs[ctr].input, recs[ctr].length);
 1012|  28.9k|            recs[ctr].input = recs[ctr].data;
 1013|  28.9k|        }
 1014|  28.9k|        ret = 1;
 1015|  28.9k|    } else {
 1016|      0|        bs = EVP_CIPHER_block_size(EVP_CIPHER_CTX_cipher(ds));
 1017|       |
 1018|      0|        if (n_recs > 1) {
  ------------------
  |  Branch (1018:13): [True: 0, False: 0]
  ------------------
 1019|      0|            if (!(EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(ds))
  ------------------
  |  Branch (1019:17): [True: 0, False: 0]
  ------------------
 1020|      0|                  & EVP_CIPH_FLAG_PIPELINE)) {
  ------------------
  |  |  280|      0|# define         EVP_CIPH_FLAG_PIPELINE          0X800000
  ------------------
 1021|       |                /*
 1022|       |                 * We shouldn't have been called with pipeline data if the
 1023|       |                 * cipher doesn't support pipelining
 1024|       |                 */
 1025|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1026|      0|                         SSL_R_PIPELINE_FAILURE);
 1027|      0|                return -1;
 1028|      0|            }
 1029|      0|        }
 1030|      0|        for (ctr = 0; ctr < n_recs; ctr++) {
  ------------------
  |  Branch (1030:23): [True: 0, False: 0]
  ------------------
 1031|      0|            reclen[ctr] = recs[ctr].length;
 1032|       |
 1033|      0|            if (EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(ds))
  ------------------
  |  Branch (1033:17): [True: 0, False: 0]
  ------------------
 1034|      0|                & EVP_CIPH_FLAG_AEAD_CIPHER) {
  ------------------
  |  |  277|      0|# define         EVP_CIPH_FLAG_AEAD_CIPHER       0x200000
  ------------------
 1035|      0|                unsigned char *seq;
 1036|       |
 1037|      0|                seq = sending ? RECORD_LAYER_get_write_sequence(&s->rlayer)
  ------------------
  |  |   27|      0|#define RECORD_LAYER_get_write_sequence(rl)     ((rl)->write_sequence)
  ------------------
  |  Branch (1037:23): [True: 0, False: 0]
  ------------------
 1038|      0|                    : RECORD_LAYER_get_read_sequence(&s->rlayer);
  ------------------
  |  |   26|      0|#define RECORD_LAYER_get_read_sequence(rl)      ((rl)->read_sequence)
  ------------------
 1039|       |
 1040|      0|                if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1041|       |                    /* DTLS does not support pipelining */
 1042|      0|                    unsigned char dtlsseq[9], *p = dtlsseq;
 1043|       |
 1044|      0|                    s2n(sending ? DTLS_RECORD_LAYER_get_w_epoch(&s->rlayer) :
  ------------------
  |  |  122|      0|# define s2n(s,c)        (((c)[0]=(unsigned char)(((s)>> 8)&0xff), \
  |  |  ------------------
  |  |  |  Branch (122:53): [True: 0, False: 0]
  |  |  ------------------
  |  |  123|      0|                           (c)[1]=(unsigned char)(((s)    )&0xff)),(c)+=2)
  |  |  ------------------
  |  |  |  Branch (123:53): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1045|      0|                        DTLS_RECORD_LAYER_get_r_epoch(&s->rlayer), p);
 1046|      0|                    memcpy(p, &seq[2], 6);
 1047|      0|                    memcpy(buf[ctr], dtlsseq, 8);
 1048|      0|                } else {
 1049|      0|                    memcpy(buf[ctr], seq, 8);
 1050|      0|                    for (i = 7; i >= 0; i--) { /* increment */
  ------------------
  |  Branch (1050:33): [True: 0, False: 0]
  ------------------
 1051|      0|                        ++seq[i];
 1052|      0|                        if (seq[i] != 0)
  ------------------
  |  Branch (1052:29): [True: 0, False: 0]
  ------------------
 1053|      0|                            break;
 1054|      0|                    }
 1055|      0|                }
 1056|       |
 1057|      0|                buf[ctr][8] = recs[ctr].type;
 1058|      0|                buf[ctr][9] = (unsigned char)(s->version >> 8);
 1059|      0|                buf[ctr][10] = (unsigned char)(s->version);
 1060|      0|                buf[ctr][11] = (unsigned char)(recs[ctr].length >> 8);
 1061|      0|                buf[ctr][12] = (unsigned char)(recs[ctr].length & 0xff);
 1062|      0|                pad = EVP_CIPHER_CTX_ctrl(ds, EVP_CTRL_AEAD_TLS1_AAD,
  ------------------
  |  |  320|      0|# define         EVP_CTRL_AEAD_TLS1_AAD          0x16
  ------------------
 1063|      0|                                          EVP_AEAD_TLS1_AAD_LEN, buf[ctr]);
  ------------------
  |  |  364|      0|# define         EVP_AEAD_TLS1_AAD_LEN           13
  ------------------
 1064|      0|                if (pad <= 0) {
  ------------------
  |  Branch (1064:21): [True: 0, False: 0]
  ------------------
 1065|      0|                    SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1066|      0|                             ERR_R_INTERNAL_ERROR);
 1067|      0|                    return -1;
 1068|      0|                }
 1069|       |
 1070|      0|                if (sending) {
  ------------------
  |  Branch (1070:21): [True: 0, False: 0]
  ------------------
 1071|      0|                    reclen[ctr] += pad;
 1072|      0|                    recs[ctr].length += pad;
 1073|      0|                }
 1074|       |
 1075|      0|            } else if ((bs != 1) && sending) {
  ------------------
  |  Branch (1075:24): [True: 0, False: 0]
  |  Branch (1075:37): [True: 0, False: 0]
  ------------------
 1076|      0|                padnum = bs - (reclen[ctr] % bs);
 1077|       |
 1078|       |                /* Add weird padding of up to 256 bytes */
 1079|       |
 1080|      0|                if (padnum > MAX_PADDING) {
  ------------------
  |  |  925|      0|#define MAX_PADDING 256
  ------------------
  |  Branch (1080:21): [True: 0, False: 0]
  ------------------
 1081|      0|                    SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1082|      0|                             ERR_R_INTERNAL_ERROR);
 1083|      0|                    return -1;
 1084|      0|                }
 1085|       |                /* we need to add 'padnum' padding bytes of value padval */
 1086|      0|                padval = (unsigned char)(padnum - 1);
 1087|      0|                for (loop = reclen[ctr]; loop < reclen[ctr] + padnum; loop++)
  ------------------
  |  Branch (1087:42): [True: 0, False: 0]
  ------------------
 1088|      0|                    recs[ctr].input[loop] = padval;
 1089|      0|                reclen[ctr] += padnum;
 1090|      0|                recs[ctr].length += padnum;
 1091|      0|            }
 1092|       |
 1093|      0|            if (!sending) {
  ------------------
  |  Branch (1093:17): [True: 0, False: 0]
  ------------------
 1094|      0|                if (reclen[ctr] == 0 || reclen[ctr] % bs != 0)
  ------------------
  |  Branch (1094:21): [True: 0, False: 0]
  |  Branch (1094:41): [True: 0, False: 0]
  ------------------
 1095|      0|                    return 0;
 1096|      0|            }
 1097|      0|        }
 1098|      0|        if (n_recs > 1) {
  ------------------
  |  Branch (1098:13): [True: 0, False: 0]
  ------------------
 1099|      0|            unsigned char *data[SSL_MAX_PIPELINES];
 1100|       |
 1101|       |            /* Set the output buffers */
 1102|      0|            for (ctr = 0; ctr < n_recs; ctr++) {
  ------------------
  |  Branch (1102:27): [True: 0, False: 0]
  ------------------
 1103|      0|                data[ctr] = recs[ctr].data;
 1104|      0|            }
 1105|      0|            if (EVP_CIPHER_CTX_ctrl(ds, EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS,
  ------------------
  |  |  348|      0|# define         EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS       0x22
  ------------------
  |  Branch (1105:17): [True: 0, False: 0]
  ------------------
 1106|      0|                                    (int)n_recs, data) <= 0) {
 1107|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1108|      0|                         SSL_R_PIPELINE_FAILURE);
 1109|      0|                return -1;
 1110|      0|            }
 1111|       |            /* Set the input buffers */
 1112|      0|            for (ctr = 0; ctr < n_recs; ctr++) {
  ------------------
  |  Branch (1112:27): [True: 0, False: 0]
  ------------------
 1113|      0|                data[ctr] = recs[ctr].input;
 1114|      0|            }
 1115|      0|            if (EVP_CIPHER_CTX_ctrl(ds, EVP_CTRL_SET_PIPELINE_INPUT_BUFS,
  ------------------
  |  |  350|      0|# define         EVP_CTRL_SET_PIPELINE_INPUT_BUFS        0x23
  ------------------
  |  Branch (1115:17): [True: 0, False: 0]
  ------------------
 1116|      0|                                    (int)n_recs, data) <= 0
 1117|      0|                || EVP_CIPHER_CTX_ctrl(ds, EVP_CTRL_SET_PIPELINE_INPUT_LENS,
  ------------------
  |  |  352|      0|# define         EVP_CTRL_SET_PIPELINE_INPUT_LENS        0x24
  ------------------
  |  Branch (1117:20): [True: 0, False: 0]
  ------------------
 1118|      0|                                       (int)n_recs, reclen) <= 0) {
 1119|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1120|      0|                         SSL_R_PIPELINE_FAILURE);
 1121|      0|                return -1;
 1122|      0|            }
 1123|      0|        }
 1124|       |
 1125|       |        /* TODO(size_t): Convert this call */
 1126|      0|        tmpr = EVP_Cipher(ds, recs[0].data, recs[0].input,
 1127|      0|                          (unsigned int)reclen[0]);
 1128|      0|        if ((EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(ds))
  ------------------
  |  Branch (1128:13): [True: 0, False: 0]
  |  Branch (1128:13): [True: 0, False: 0]
  ------------------
 1129|      0|             & EVP_CIPH_FLAG_CUSTOM_CIPHER)
  ------------------
  |  |  276|      0|# define         EVP_CIPH_FLAG_CUSTOM_CIPHER     0x100000
  ------------------
 1130|      0|            ? (tmpr < 0)
 1131|      0|            : (tmpr == 0))
 1132|      0|            return -1;          /* AEAD can fail to verify MAC */
 1133|       |
 1134|      0|        if (sending == 0) {
  ------------------
  |  Branch (1134:13): [True: 0, False: 0]
  ------------------
 1135|      0|            if (EVP_CIPHER_mode(enc) == EVP_CIPH_GCM_MODE) {
  ------------------
  |  |  471|      0|# define EVP_CIPHER_mode(e)              (EVP_CIPHER_flags(e) & EVP_CIPH_MODE)
  |  |  ------------------
  |  |  |  |  246|      0|# define         EVP_CIPH_MODE                   0xF0007
  |  |  ------------------
  ------------------
                          if (EVP_CIPHER_mode(enc) == EVP_CIPH_GCM_MODE) {
  ------------------
  |  |  241|      0|# define         EVP_CIPH_GCM_MODE               0x6
  ------------------
  |  Branch (1135:17): [True: 0, False: 0]
  ------------------
 1136|      0|                for (ctr = 0; ctr < n_recs; ctr++) {
  ------------------
  |  Branch (1136:31): [True: 0, False: 0]
  ------------------
 1137|      0|                    recs[ctr].data += EVP_GCM_TLS_EXPLICIT_IV_LEN;
  ------------------
  |  |  377|      0|# define EVP_GCM_TLS_EXPLICIT_IV_LEN                     8
  ------------------
 1138|      0|                    recs[ctr].input += EVP_GCM_TLS_EXPLICIT_IV_LEN;
  ------------------
  |  |  377|      0|# define EVP_GCM_TLS_EXPLICIT_IV_LEN                     8
  ------------------
 1139|      0|                    recs[ctr].length -= EVP_GCM_TLS_EXPLICIT_IV_LEN;
  ------------------
  |  |  377|      0|# define EVP_GCM_TLS_EXPLICIT_IV_LEN                     8
  ------------------
 1140|      0|                }
 1141|      0|            } else if (EVP_CIPHER_mode(enc) == EVP_CIPH_CCM_MODE) {
  ------------------
  |  |  471|      0|# define EVP_CIPHER_mode(e)              (EVP_CIPHER_flags(e) & EVP_CIPH_MODE)
  |  |  ------------------
  |  |  |  |  246|      0|# define         EVP_CIPH_MODE                   0xF0007
  |  |  ------------------
  ------------------
                          } else if (EVP_CIPHER_mode(enc) == EVP_CIPH_CCM_MODE) {
  ------------------
  |  |  242|      0|# define         EVP_CIPH_CCM_MODE               0x7
  ------------------
  |  Branch (1141:24): [True: 0, False: 0]
  ------------------
 1142|      0|                for (ctr = 0; ctr < n_recs; ctr++) {
  ------------------
  |  Branch (1142:31): [True: 0, False: 0]
  ------------------
 1143|      0|                    recs[ctr].data += EVP_CCM_TLS_EXPLICIT_IV_LEN;
  ------------------
  |  |  385|      0|# define EVP_CCM_TLS_EXPLICIT_IV_LEN                     8
  ------------------
 1144|      0|                    recs[ctr].input += EVP_CCM_TLS_EXPLICIT_IV_LEN;
  ------------------
  |  |  385|      0|# define EVP_CCM_TLS_EXPLICIT_IV_LEN                     8
  ------------------
 1145|      0|                    recs[ctr].length -= EVP_CCM_TLS_EXPLICIT_IV_LEN;
  ------------------
  |  |  385|      0|# define EVP_CCM_TLS_EXPLICIT_IV_LEN                     8
  ------------------
 1146|      0|                }
 1147|      0|            }
 1148|      0|        }
 1149|       |
 1150|      0|        ret = 1;
 1151|      0|        if (!SSL_READ_ETM(s) && EVP_MD_CTX_md(s->read_hash) != NULL) {
  ------------------
  |  |  373|      0|# define SSL_READ_ETM(s) (s->s3->flags & TLS1_FLAGS_ENCRYPT_THEN_MAC_READ)
  |  |  ------------------
  |  |  |  |  285|      0|# define TLS1_FLAGS_ENCRYPT_THEN_MAC_READ        0x0100
  |  |  ------------------
  ------------------
  |  Branch (1151:13): [True: 0, False: 0]
  |  Branch (1151:33): [True: 0, False: 0]
  ------------------
 1152|      0|            imac_size = EVP_MD_CTX_size(s->read_hash);
  ------------------
  |  |  457|      0|# define EVP_MD_CTX_size(e)              EVP_MD_size(EVP_MD_CTX_md(e))
  ------------------
 1153|      0|            if (imac_size < 0) {
  ------------------
  |  Branch (1153:17): [True: 0, False: 0]
  ------------------
 1154|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1155|      0|                         ERR_R_INTERNAL_ERROR);
 1156|      0|                return -1;
 1157|      0|            }
 1158|      0|            mac_size = (size_t)imac_size;
 1159|      0|        }
 1160|      0|        if ((bs != 1) && !sending) {
  ------------------
  |  Branch (1160:13): [True: 0, False: 0]
  |  Branch (1160:26): [True: 0, False: 0]
  ------------------
 1161|      0|            int tmpret;
 1162|      0|            for (ctr = 0; ctr < n_recs; ctr++) {
  ------------------
  |  Branch (1162:27): [True: 0, False: 0]
  ------------------
 1163|      0|                tmpret = tls1_cbc_remove_padding(s, &recs[ctr], bs, mac_size);
 1164|       |                /*
 1165|       |                 * If tmpret == 0 then this means publicly invalid so we can
 1166|       |                 * short circuit things here. Otherwise we must respect constant
 1167|       |                 * time behaviour.
 1168|       |                 */
 1169|      0|                if (tmpret == 0)
  ------------------
  |  Branch (1169:21): [True: 0, False: 0]
  ------------------
 1170|      0|                    return 0;
 1171|      0|                ret = constant_time_select_int(constant_time_eq_int(tmpret, 1),
 1172|      0|                                               ret, -1);
 1173|      0|            }
 1174|      0|        }
 1175|      0|        if (pad && !sending) {
  ------------------
  |  Branch (1175:13): [True: 0, False: 0]
  |  Branch (1175:20): [True: 0, False: 0]
  ------------------
 1176|      0|            for (ctr = 0; ctr < n_recs; ctr++) {
  ------------------
  |  Branch (1176:27): [True: 0, False: 0]
  ------------------
 1177|      0|                recs[ctr].length -= pad;
 1178|      0|            }
 1179|      0|        }
 1180|      0|    }
 1181|  28.9k|    return ret;
 1182|  28.9k|}

ssl3_cleanup_key_block:
  314|   144k|{
  315|   144k|    OPENSSL_clear_free(s->s3->tmp.key_block, s->s3->tmp.key_block_length);
  ------------------
  |  |  126|   144k|        CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  316|       |    s->s3->tmp.key_block = NULL;
  317|   144k|    s->s3->tmp.key_block_length = 0;
  318|   144k|}
ssl3_init_finished_mac:
  321|  28.9k|{
  322|  28.9k|    BIO *buf = BIO_new(BIO_s_mem());
  323|       |
  324|  28.9k|    if (buf == NULL) {
  ------------------
  |  Branch (324:9): [True: 0, False: 28.9k]
  ------------------
  325|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_INIT_FINISHED_MAC,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  326|      0|                 ERR_R_MALLOC_FAILURE);
  327|      0|        return 0;
  328|      0|    }
  329|  28.9k|    ssl3_free_digest_list(s);
  330|  28.9k|    s->s3->handshake_buffer = buf;
  331|       |    (void)BIO_set_close(s->s3->handshake_buffer, BIO_CLOSE);
  ------------------
  |  |  482|  28.9k|# define BIO_set_close(b,c)      (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL)
  |  |  ------------------
  |  |  |  |   79|  28.9k|# define BIO_CTRL_SET_CLOSE      9/* man - set the 'close' on free */
  |  |  ------------------
  ------------------
  332|  28.9k|    return 1;
  333|  28.9k|}
ssl3_free_digest_list:
  341|   173k|{
  342|   173k|    BIO_free(s->s3->handshake_buffer);
  343|   173k|    s->s3->handshake_buffer = NULL;
  344|   173k|    EVP_MD_CTX_free(s->s3->handshake_dgst);
  345|       |    s->s3->handshake_dgst = NULL;
  346|   173k|}
ssl3_finish_mac:
  349|  28.9k|{
  350|  28.9k|    int ret;
  351|       |
  352|  28.9k|    if (s->s3->handshake_dgst == NULL) {
  ------------------
  |  Branch (352:9): [True: 28.9k, False: 0]
  ------------------
  353|       |        /* Note: this writes to a memory BIO so a failure is a fatal error */
  354|  28.9k|        if (len > INT_MAX) {
  ------------------
  |  Branch (354:13): [True: 0, False: 28.9k]
  ------------------
  355|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_FINISH_MAC,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  356|      0|                     SSL_R_OVERFLOW_ERROR);
  357|      0|            return 0;
  358|      0|        }
  359|  28.9k|        ret = BIO_write(s->s3->handshake_buffer, (void *)buf, (int)len);
  360|  28.9k|        if (ret <= 0 || ret != (int)len) {
  ------------------
  |  Branch (360:13): [True: 0, False: 28.9k]
  |  Branch (360:25): [True: 0, False: 28.9k]
  ------------------
  361|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_FINISH_MAC,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  362|      0|                     ERR_R_INTERNAL_ERROR);
  363|      0|            return 0;
  364|      0|        }
  365|  28.9k|    } else {
  366|      0|        ret = EVP_DigestUpdate(s->s3->handshake_dgst, buf, len);
  367|      0|        if (!ret) {
  ------------------
  |  Branch (367:13): [True: 0, False: 0]
  ------------------
  368|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_FINISH_MAC,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  369|      0|                     ERR_R_INTERNAL_ERROR);
  370|      0|            return 0;
  371|      0|        }
  372|      0|    }
  373|  28.9k|    return 1;
  374|  28.9k|}

ssl_sort_cipher_list:
 3212|      2|{
 3213|      2|    qsort(tls13_ciphers, TLS13_NUM_CIPHERS, sizeof(tls13_ciphers[0]),
  ------------------
  |  |   21|      2|#define TLS13_NUM_CIPHERS       OSSL_NELEM(tls13_ciphers)
  |  |  ------------------
  |  |  |  |   13|      2|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  |  |  ------------------
  ------------------
 3214|      2|          cipher_compare);
 3215|      2|    qsort(ssl3_ciphers, SSL3_NUM_CIPHERS, sizeof(ssl3_ciphers[0]),
  ------------------
  |  |   22|      2|#define SSL3_NUM_CIPHERS        OSSL_NELEM(ssl3_ciphers)
  |  |  ------------------
  |  |  |  |   13|      2|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  |  |  ------------------
  ------------------
 3216|      2|          cipher_compare);
 3217|      2|    qsort(ssl3_scsvs, SSL3_NUM_SCSVS, sizeof(ssl3_scsvs[0]), cipher_compare);
  ------------------
  |  |   23|      2|#define SSL3_NUM_SCSVS          OSSL_NELEM(ssl3_scsvs)
  |  |  ------------------
  |  |  |  |   13|      2|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  |  |  ------------------
  ------------------
 3218|      2|}
ssl3_num_ciphers:
 3261|  28.9k|{
 3262|  28.9k|    return SSL3_NUM_CIPHERS;
  ------------------
  |  |   22|  28.9k|#define SSL3_NUM_CIPHERS        OSSL_NELEM(ssl3_ciphers)
  |  |  ------------------
  |  |  |  |   13|  28.9k|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  |  |  ------------------
  ------------------
 3263|  28.9k|}
ssl3_get_cipher:
 3266|  4.75M|{
 3267|  4.75M|    if (u < SSL3_NUM_CIPHERS)
  ------------------
  |  |   22|  4.75M|#define SSL3_NUM_CIPHERS        OSSL_NELEM(ssl3_ciphers)
  |  |  ------------------
  |  |  |  |   13|  4.75M|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  |  |  ------------------
  ------------------
  |  Branch (3267:9): [True: 4.75M, False: 0]
  ------------------
 3268|  4.75M|        return &(ssl3_ciphers[SSL3_NUM_CIPHERS - 1 - u]);
  ------------------
  |  |   22|  4.75M|#define SSL3_NUM_CIPHERS        OSSL_NELEM(ssl3_ciphers)
  |  |  ------------------
  |  |  |  |   13|  4.75M|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  |  |  ------------------
  ------------------
 3269|      0|    else
 3270|      0|        return NULL;
 3271|  4.75M|}
ssl3_set_handshake_header:
 3274|  28.9k|{
 3275|       |    /* No header in the event of a CCS */
 3276|  28.9k|    if (htype == SSL3_MT_CHANGE_CIPHER_SPEC)
  ------------------
  |  |  322|  28.9k|# define SSL3_MT_CHANGE_CIPHER_SPEC              0x0101
  ------------------
  |  Branch (3276:9): [True: 0, False: 28.9k]
  ------------------
 3277|      0|        return 1;
 3278|       |
 3279|       |    /* Set the content type and 3 bytes for the message len */
 3280|  28.9k|    if (!WPACKET_put_bytes_u8(pkt, htype)
  ------------------
  |  |  818|  57.9k|    WPACKET_put_bytes__((pkt), (val), 1)
  ------------------
  |  Branch (3280:9): [True: 0, False: 28.9k]
  ------------------
 3281|  28.9k|            || !WPACKET_start_sub_packet_u24(pkt))
  ------------------
  |  |  723|  28.9k|    WPACKET_start_sub_packet_len__((pkt), 3)
  ------------------
  |  Branch (3281:16): [True: 0, False: 28.9k]
  ------------------
 3282|      0|        return 0;
 3283|       |
 3284|  28.9k|    return 1;
 3285|  28.9k|}
ssl3_handshake_write:
 3288|  28.9k|{
 3289|  28.9k|    return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
  ------------------
  |  |  215|  28.9k|# define SSL3_RT_HANDSHAKE               22
  ------------------
 3290|  28.9k|}
ssl3_new:
 3293|  28.9k|{
 3294|  28.9k|    SSL3_STATE *s3;
 3295|       |
 3296|  28.9k|    if ((s3 = OPENSSL_zalloc(sizeof(*s3))) == NULL)
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (3296:9): [True: 0, False: 28.9k]
  ------------------
 3297|      0|        goto err;
 3298|  28.9k|    s->s3 = s3;
 3299|       |
 3300|  28.9k|#ifndef OPENSSL_NO_SRP
 3301|  28.9k|    if (!SSL_SRP_CTX_init(s))
  ------------------
  |  Branch (3301:9): [True: 0, False: 28.9k]
  ------------------
 3302|      0|        goto err;
 3303|  28.9k|#endif
 3304|       |
 3305|  28.9k|    if (!s->method->ssl_clear(s))
  ------------------
  |  Branch (3305:9): [True: 0, False: 28.9k]
  ------------------
 3306|      0|        return 0;
 3307|       |
 3308|  28.9k|    return 1;
 3309|      0| err:
 3310|      0|    return 0;
 3311|  28.9k|}
ssl3_free:
 3314|  28.9k|{
 3315|  28.9k|    if (s == NULL || s->s3 == NULL)
  ------------------
  |  Branch (3315:9): [True: 0, False: 28.9k]
  |  Branch (3315:22): [True: 0, False: 28.9k]
  ------------------
 3316|      0|        return;
 3317|       |
 3318|  28.9k|    ssl3_cleanup_key_block(s);
 3319|       |
 3320|  28.9k|#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
 3321|  28.9k|    EVP_PKEY_free(s->s3->peer_tmp);
 3322|  28.9k|    s->s3->peer_tmp = NULL;
 3323|  28.9k|    EVP_PKEY_free(s->s3->tmp.pkey);
 3324|  28.9k|    s->s3->tmp.pkey = NULL;
 3325|  28.9k|#endif
 3326|       |
 3327|  28.9k|    OPENSSL_free(s->s3->tmp.ctype);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3328|  28.9k|    sk_X509_NAME_pop_free(s->s3->tmp.peer_ca_names, X509_NAME_free);
 3329|  28.9k|    OPENSSL_free(s->s3->tmp.ciphers_raw);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3330|  28.9k|    OPENSSL_clear_free(s->s3->tmp.pms, s->s3->tmp.pmslen);
  ------------------
  |  |  126|  28.9k|        CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3331|  28.9k|    OPENSSL_free(s->s3->tmp.peer_sigalgs);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3332|  28.9k|    OPENSSL_free(s->s3->tmp.peer_cert_sigalgs);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3333|  28.9k|    ssl3_free_digest_list(s);
 3334|  28.9k|    OPENSSL_free(s->s3->alpn_selected);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3335|  28.9k|    OPENSSL_free(s->s3->alpn_proposed);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3336|       |
 3337|  28.9k|#ifndef OPENSSL_NO_SRP
 3338|  28.9k|    SSL_SRP_CTX_free(s);
 3339|  28.9k|#endif
 3340|  28.9k|    OPENSSL_clear_free(s->s3, sizeof(*s->s3));
  ------------------
  |  |  126|  28.9k|        CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3341|       |    s->s3 = NULL;
 3342|  28.9k|}
ssl3_clear:
 3345|   115k|{
 3346|   115k|    ssl3_cleanup_key_block(s);
 3347|   115k|    OPENSSL_free(s->s3->tmp.ctype);
  ------------------
  |  |  128|   115k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3348|   115k|    sk_X509_NAME_pop_free(s->s3->tmp.peer_ca_names, X509_NAME_free);
 3349|   115k|    OPENSSL_free(s->s3->tmp.ciphers_raw);
  ------------------
  |  |  128|   115k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3350|   115k|    OPENSSL_clear_free(s->s3->tmp.pms, s->s3->tmp.pmslen);
  ------------------
  |  |  126|   115k|        CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3351|   115k|    OPENSSL_free(s->s3->tmp.peer_sigalgs);
  ------------------
  |  |  128|   115k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3352|   115k|    OPENSSL_free(s->s3->tmp.peer_cert_sigalgs);
  ------------------
  |  |  128|   115k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3353|       |
 3354|   115k|#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
 3355|   115k|    EVP_PKEY_free(s->s3->tmp.pkey);
 3356|   115k|    EVP_PKEY_free(s->s3->peer_tmp);
 3357|   115k|#endif                          /* !OPENSSL_NO_EC */
 3358|       |
 3359|   115k|    ssl3_free_digest_list(s);
 3360|       |
 3361|   115k|    OPENSSL_free(s->s3->alpn_selected);
  ------------------
  |  |  128|   115k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3362|   115k|    OPENSSL_free(s->s3->alpn_proposed);
  ------------------
  |  |  128|   115k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3363|       |
 3364|       |    /* NULL/zero-out everything in the s3 struct */
 3365|   115k|    memset(s->s3, 0, sizeof(*s->s3));
 3366|       |
 3367|   115k|    if (!ssl_free_wbio_buffer(s))
  ------------------
  |  Branch (3367:9): [True: 0, False: 115k]
  ------------------
 3368|      0|        return 0;
 3369|       |
 3370|   115k|    s->version = SSL3_VERSION;
  ------------------
  |  |  209|   115k|# define SSL3_VERSION                    0x0300
  ------------------
 3371|       |
 3372|   115k|#if !defined(OPENSSL_NO_NEXTPROTONEG)
 3373|   115k|    OPENSSL_free(s->ext.npn);
  ------------------
  |  |  128|   115k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3374|   115k|    s->ext.npn = NULL;
 3375|   115k|    s->ext.npn_len = 0;
 3376|   115k|#endif
 3377|       |
 3378|   115k|    return 1;
 3379|   115k|}
ssl3_ctrl:
 3391|  28.9k|{
 3392|  28.9k|    int ret = 0;
 3393|       |
 3394|  28.9k|    switch (cmd) {
 3395|      0|    case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
  ------------------
  |  | 1196|      0|# define SSL_CTRL_GET_CLIENT_CERT_REQUEST        9
  ------------------
  |  Branch (3395:5): [True: 0, False: 28.9k]
  ------------------
 3396|      0|        break;
 3397|      0|    case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
  ------------------
  |  | 1197|      0|# define SSL_CTRL_GET_NUM_RENEGOTIATIONS         10
  ------------------
  |  Branch (3397:5): [True: 0, False: 28.9k]
  ------------------
 3398|      0|        ret = s->s3->num_renegotiations;
 3399|      0|        break;
 3400|      0|    case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
  ------------------
  |  | 1198|      0|# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS       11
  ------------------
  |  Branch (3400:5): [True: 0, False: 28.9k]
  ------------------
 3401|      0|        ret = s->s3->num_renegotiations;
 3402|      0|        s->s3->num_renegotiations = 0;
 3403|      0|        break;
 3404|      0|    case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
  ------------------
  |  | 1199|      0|# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS       12
  ------------------
  |  Branch (3404:5): [True: 0, False: 28.9k]
  ------------------
 3405|      0|        ret = s->s3->total_renegotiations;
 3406|      0|        break;
 3407|      0|    case SSL_CTRL_GET_FLAGS:
  ------------------
  |  | 1200|      0|# define SSL_CTRL_GET_FLAGS                      13
  ------------------
  |  Branch (3407:5): [True: 0, False: 28.9k]
  ------------------
 3408|      0|        ret = (int)(s->s3->flags);
 3409|      0|        break;
 3410|      0|#ifndef OPENSSL_NO_DH
 3411|      0|    case SSL_CTRL_SET_TMP_DH:
  ------------------
  |  | 1193|      0|# define SSL_CTRL_SET_TMP_DH                     3
  ------------------
  |  Branch (3411:5): [True: 0, False: 28.9k]
  ------------------
 3412|      0|        {
 3413|      0|            DH *dh = (DH *)parg;
 3414|      0|            EVP_PKEY *pkdh = NULL;
 3415|      0|            if (dh == NULL) {
  ------------------
  |  Branch (3415:17): [True: 0, False: 0]
  ------------------
 3416|      0|                SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3417|      0|                return ret;
 3418|      0|            }
 3419|      0|            pkdh = ssl_dh_to_pkey(dh);
 3420|      0|            if (pkdh == NULL) {
  ------------------
  |  Branch (3420:17): [True: 0, False: 0]
  ------------------
 3421|      0|                SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3422|      0|                return 0;
 3423|      0|            }
 3424|      0|            if (!ssl_security(s, SSL_SECOP_TMP_DH,
  ------------------
  |  | 2301|      0|# define SSL_SECOP_TMP_DH                (7 | SSL_SECOP_OTHER_PKEY)
  |  |  ------------------
  |  |  |  | 2278|      0|# define SSL_SECOP_OTHER_PKEY    (4 << 16)
  |  |  ------------------
  ------------------
  |  Branch (3424:17): [True: 0, False: 0]
  ------------------
 3425|      0|                              EVP_PKEY_security_bits(pkdh), 0, pkdh)) {
 3426|      0|                SSLerr(SSL_F_SSL3_CTRL, SSL_R_DH_KEY_TOO_SMALL);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3427|      0|                EVP_PKEY_free(pkdh);
 3428|      0|                return ret;
 3429|      0|            }
 3430|      0|            EVP_PKEY_free(s->cert->dh_tmp);
 3431|      0|            s->cert->dh_tmp = pkdh;
 3432|      0|            ret = 1;
 3433|      0|        }
 3434|      0|        break;
 3435|      0|    case SSL_CTRL_SET_TMP_DH_CB:
  ------------------
  |  | 1195|      0|# define SSL_CTRL_SET_TMP_DH_CB                  6
  ------------------
  |  Branch (3435:5): [True: 0, False: 28.9k]
  ------------------
 3436|      0|        {
 3437|      0|            SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3438|      0|            return ret;
 3439|      0|        }
 3440|      0|    case SSL_CTRL_SET_DH_AUTO:
  ------------------
  |  | 1293|      0|# define SSL_CTRL_SET_DH_AUTO                    118
  ------------------
  |  Branch (3440:5): [True: 0, False: 28.9k]
  ------------------
 3441|      0|        s->cert->dh_tmp_auto = larg;
 3442|      0|        return 1;
 3443|      0|#endif
 3444|      0|#ifndef OPENSSL_NO_EC
 3445|      0|    case SSL_CTRL_SET_TMP_ECDH:
  ------------------
  |  | 1194|      0|# define SSL_CTRL_SET_TMP_ECDH                   4
  ------------------
  |  Branch (3445:5): [True: 0, False: 28.9k]
  ------------------
 3446|      0|        {
 3447|      0|            const EC_GROUP *group = NULL;
 3448|      0|            int nid;
 3449|       |
 3450|      0|            if (parg == NULL) {
  ------------------
  |  Branch (3450:17): [True: 0, False: 0]
  ------------------
 3451|      0|                SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3452|      0|                return 0;
 3453|      0|            }
 3454|      0|            group = EC_KEY_get0_group((const EC_KEY *)parg);
 3455|      0|            if (group == NULL) {
  ------------------
  |  Branch (3455:17): [True: 0, False: 0]
  ------------------
 3456|      0|                SSLerr(SSL_F_SSL3_CTRL, EC_R_MISSING_PARAMETERS);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3457|      0|                return 0;
 3458|      0|            }
 3459|      0|            nid = EC_GROUP_get_curve_name(group);
 3460|      0|            if (nid == NID_undef)
  ------------------
  |  |   14|      0|#define NID_undef                       0
  ------------------
  |  Branch (3460:17): [True: 0, False: 0]
  ------------------
 3461|      0|                return 0;
 3462|      0|            return tls1_set_groups(&s->ext.supportedgroups,
 3463|      0|                                   &s->ext.supportedgroups_len,
 3464|      0|                                   &nid, 1);
 3465|      0|        }
 3466|      0|        break;
 3467|      0|#endif                          /* !OPENSSL_NO_EC */
 3468|  28.9k|    case SSL_CTRL_SET_TLSEXT_HOSTNAME:
  ------------------
  |  | 1232|  28.9k|# define SSL_CTRL_SET_TLSEXT_HOSTNAME            55
  ------------------
  |  Branch (3468:5): [True: 28.9k, False: 0]
  ------------------
 3469|       |        /*
 3470|       |         * TODO(OpenSSL1.2)
 3471|       |         * This API is only used for a client to set what SNI it will request
 3472|       |         * from the server, but we currently allow it to be used on servers
 3473|       |         * as well, which is a programming error.  Currently we just clear
 3474|       |         * the field in SSL_do_handshake() for server SSLs, but when we can
 3475|       |         * make ABI-breaking changes, we may want to make use of this API
 3476|       |         * an error on server SSLs.
 3477|       |         */
 3478|  28.9k|        if (larg == TLSEXT_NAMETYPE_host_name) {
  ------------------
  |  |  157|  28.9k|# define TLSEXT_NAMETYPE_host_name 0
  ------------------
  |  Branch (3478:13): [True: 28.9k, False: 0]
  ------------------
 3479|  28.9k|            size_t len;
 3480|       |
 3481|  28.9k|            OPENSSL_free(s->ext.hostname);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3482|  28.9k|            s->ext.hostname = NULL;
 3483|       |
 3484|  28.9k|            ret = 1;
 3485|  28.9k|            if (parg == NULL)
  ------------------
  |  Branch (3485:17): [True: 0, False: 28.9k]
  ------------------
 3486|      0|                break;
 3487|  28.9k|            len = strlen((char *)parg);
 3488|  28.9k|            if (len == 0 || len > TLSEXT_MAXLEN_host_name) {
  ------------------
  |  |  214|  28.9k|# define TLSEXT_MAXLEN_host_name 255
  ------------------
  |  Branch (3488:17): [True: 0, False: 28.9k]
  |  Branch (3488:29): [True: 0, False: 28.9k]
  ------------------
 3489|      0|                SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3490|      0|                return 0;
 3491|      0|            }
 3492|  28.9k|            if ((s->ext.hostname = OPENSSL_strdup((char *)parg)) == NULL) {
  ------------------
  |  |  132|  28.9k|        CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (3492:17): [True: 0, False: 28.9k]
  ------------------
 3493|      0|                SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3494|      0|                return 0;
 3495|      0|            }
 3496|  28.9k|        } else {
 3497|      0|            SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3498|      0|            return 0;
 3499|      0|        }
 3500|  28.9k|        break;
 3501|  28.9k|    case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
  ------------------
  |  | 1234|      0|# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG           57
  ------------------
  |  Branch (3501:5): [True: 0, False: 28.9k]
  ------------------
 3502|      0|        s->ext.debug_arg = parg;
 3503|      0|        ret = 1;
 3504|      0|        break;
 3505|       |
 3506|      0|    case SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE:
  ------------------
  |  | 1301|      0|# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE     127
  ------------------
  |  Branch (3506:5): [True: 0, False: 28.9k]
  ------------------
 3507|      0|        ret = s->ext.status_type;
 3508|      0|        break;
 3509|       |
 3510|      0|    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
  ------------------
  |  | 1242|      0|# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE     65
  ------------------
  |  Branch (3510:5): [True: 0, False: 28.9k]
  ------------------
 3511|      0|        s->ext.status_type = larg;
 3512|      0|        ret = 1;
 3513|      0|        break;
 3514|       |
 3515|      0|    case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS:
  ------------------
  |  | 1243|      0|# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS     66
  ------------------
  |  Branch (3515:5): [True: 0, False: 28.9k]
  ------------------
 3516|      0|        *(STACK_OF(X509_EXTENSION) **)parg = s->ext.ocsp.exts;
 3517|      0|        ret = 1;
 3518|      0|        break;
 3519|       |
 3520|      0|    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS:
  ------------------
  |  | 1244|      0|# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS     67
  ------------------
  |  Branch (3520:5): [True: 0, False: 28.9k]
  ------------------
 3521|      0|        s->ext.ocsp.exts = parg;
 3522|      0|        ret = 1;
 3523|      0|        break;
 3524|       |
 3525|      0|    case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS:
  ------------------
  |  | 1245|      0|# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS      68
  ------------------
  |  Branch (3525:5): [True: 0, False: 28.9k]
  ------------------
 3526|      0|        *(STACK_OF(OCSP_RESPID) **)parg = s->ext.ocsp.ids;
 3527|      0|        ret = 1;
 3528|      0|        break;
 3529|       |
 3530|      0|    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS:
  ------------------
  |  | 1246|      0|# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS      69
  ------------------
  |  Branch (3530:5): [True: 0, False: 28.9k]
  ------------------
 3531|      0|        s->ext.ocsp.ids = parg;
 3532|      0|        ret = 1;
 3533|      0|        break;
 3534|       |
 3535|      0|    case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP:
  ------------------
  |  | 1247|      0|# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP        70
  ------------------
  |  Branch (3535:5): [True: 0, False: 28.9k]
  ------------------
 3536|      0|        *(unsigned char **)parg = s->ext.ocsp.resp;
 3537|      0|        if (s->ext.ocsp.resp_len == 0
  ------------------
  |  Branch (3537:13): [True: 0, False: 0]
  ------------------
 3538|      0|                || s->ext.ocsp.resp_len > LONG_MAX)
  ------------------
  |  Branch (3538:20): [True: 0, False: 0]
  ------------------
 3539|      0|            return -1;
 3540|      0|        return (long)s->ext.ocsp.resp_len;
 3541|       |
 3542|      0|    case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP:
  ------------------
  |  | 1248|      0|# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP        71
  ------------------
  |  Branch (3542:5): [True: 0, False: 28.9k]
  ------------------
 3543|      0|        OPENSSL_free(s->ext.ocsp.resp);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3544|      0|        s->ext.ocsp.resp = parg;
 3545|      0|        s->ext.ocsp.resp_len = larg;
 3546|      0|        ret = 1;
 3547|      0|        break;
 3548|       |
 3549|       |#ifndef OPENSSL_NO_HEARTBEATS
 3550|       |    case SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT:
 3551|       |    case SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING:
 3552|       |    case SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS:
 3553|       |        break;
 3554|       |#endif
 3555|       |
 3556|      0|    case SSL_CTRL_CHAIN:
  ------------------
  |  | 1269|      0|# define SSL_CTRL_CHAIN                          88
  ------------------
  |  Branch (3556:5): [True: 0, False: 28.9k]
  ------------------
 3557|      0|        if (larg)
  ------------------
  |  Branch (3557:13): [True: 0, False: 0]
  ------------------
 3558|      0|            return ssl_cert_set1_chain(s, NULL, (STACK_OF(X509) *)parg);
 3559|      0|        else
 3560|      0|            return ssl_cert_set0_chain(s, NULL, (STACK_OF(X509) *)parg);
 3561|       |
 3562|      0|    case SSL_CTRL_CHAIN_CERT:
  ------------------
  |  | 1270|      0|# define SSL_CTRL_CHAIN_CERT                     89
  ------------------
  |  Branch (3562:5): [True: 0, False: 28.9k]
  ------------------
 3563|      0|        if (larg)
  ------------------
  |  Branch (3563:13): [True: 0, False: 0]
  ------------------
 3564|      0|            return ssl_cert_add1_chain_cert(s, NULL, (X509 *)parg);
 3565|      0|        else
 3566|      0|            return ssl_cert_add0_chain_cert(s, NULL, (X509 *)parg);
 3567|       |
 3568|      0|    case SSL_CTRL_GET_CHAIN_CERTS:
  ------------------
  |  | 1290|      0|# define SSL_CTRL_GET_CHAIN_CERTS                115
  ------------------
  |  Branch (3568:5): [True: 0, False: 28.9k]
  ------------------
 3569|      0|        *(STACK_OF(X509) **)parg = s->cert->key->chain;
 3570|      0|        ret = 1;
 3571|      0|        break;
 3572|       |
 3573|      0|    case SSL_CTRL_SELECT_CURRENT_CERT:
  ------------------
  |  | 1291|      0|# define SSL_CTRL_SELECT_CURRENT_CERT            116
  ------------------
  |  Branch (3573:5): [True: 0, False: 28.9k]
  ------------------
 3574|      0|        return ssl_cert_select_current(s->cert, (X509 *)parg);
 3575|       |
 3576|      0|    case SSL_CTRL_SET_CURRENT_CERT:
  ------------------
  |  | 1292|      0|# define SSL_CTRL_SET_CURRENT_CERT               117
  ------------------
  |  Branch (3576:5): [True: 0, False: 28.9k]
  ------------------
 3577|      0|        if (larg == SSL_CERT_SET_SERVER) {
  ------------------
  |  | 1310|      0|# define SSL_CERT_SET_SERVER                     3
  ------------------
  |  Branch (3577:13): [True: 0, False: 0]
  ------------------
 3578|      0|            const SSL_CIPHER *cipher;
 3579|      0|            if (!s->server)
  ------------------
  |  Branch (3579:17): [True: 0, False: 0]
  ------------------
 3580|      0|                return 0;
 3581|      0|            cipher = s->s3->tmp.new_cipher;
 3582|      0|            if (cipher == NULL)
  ------------------
  |  Branch (3582:17): [True: 0, False: 0]
  ------------------
 3583|      0|                return 0;
 3584|       |            /*
 3585|       |             * No certificate for unauthenticated ciphersuites or using SRP
 3586|       |             * authentication
 3587|       |             */
 3588|      0|            if (cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
  ------------------
  |  |  193|      0|# define SSL_aNULL               0x00000004U
  ------------------
                          if (cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
  ------------------
  |  |  201|      0|# define SSL_aSRP                0x00000040U
  ------------------
  |  Branch (3588:17): [True: 0, False: 0]
  ------------------
 3589|      0|                return 2;
 3590|      0|            if (s->s3->tmp.cert == NULL)
  ------------------
  |  Branch (3590:17): [True: 0, False: 0]
  ------------------
 3591|      0|                return 0;
 3592|      0|            s->cert->key = s->s3->tmp.cert;
 3593|      0|            return 1;
 3594|      0|        }
 3595|      0|        return ssl_cert_set_current(s->cert, larg);
 3596|       |
 3597|      0|#ifndef OPENSSL_NO_EC
 3598|      0|    case SSL_CTRL_GET_GROUPS:
  ------------------
  |  | 1271|      0|# define SSL_CTRL_GET_GROUPS                     90
  ------------------
  |  Branch (3598:5): [True: 0, False: 28.9k]
  ------------------
 3599|      0|        {
 3600|      0|            uint16_t *clist;
 3601|      0|            size_t clistlen;
 3602|       |
 3603|      0|            if (!s->session)
  ------------------
  |  Branch (3603:17): [True: 0, False: 0]
  ------------------
 3604|      0|                return 0;
 3605|      0|            clist = s->ext.peer_supportedgroups;
 3606|      0|            clistlen = s->ext.peer_supportedgroups_len;
 3607|      0|            if (parg) {
  ------------------
  |  Branch (3607:17): [True: 0, False: 0]
  ------------------
 3608|      0|                size_t i;
 3609|      0|                int *cptr = parg;
 3610|       |
 3611|      0|                for (i = 0; i < clistlen; i++) {
  ------------------
  |  Branch (3611:29): [True: 0, False: 0]
  ------------------
 3612|      0|                    const TLS_GROUP_INFO *cinf = tls1_group_id_lookup(clist[i]);
 3613|       |
 3614|      0|                    if (cinf != NULL)
  ------------------
  |  Branch (3614:25): [True: 0, False: 0]
  ------------------
 3615|      0|                        cptr[i] = cinf->nid;
 3616|      0|                    else
 3617|      0|                        cptr[i] = TLSEXT_nid_unknown | clist[i];
  ------------------
  |  |  196|      0|# define TLSEXT_nid_unknown                              0x1000000
  ------------------
 3618|      0|                }
 3619|      0|            }
 3620|      0|            return (int)clistlen;
 3621|      0|        }
 3622|       |
 3623|      0|    case SSL_CTRL_SET_GROUPS:
  ------------------
  |  | 1272|      0|# define SSL_CTRL_SET_GROUPS                     91
  ------------------
  |  Branch (3623:5): [True: 0, False: 28.9k]
  ------------------
 3624|      0|        return tls1_set_groups(&s->ext.supportedgroups,
 3625|      0|                               &s->ext.supportedgroups_len, parg, larg);
 3626|       |
 3627|      0|    case SSL_CTRL_SET_GROUPS_LIST:
  ------------------
  |  | 1273|      0|# define SSL_CTRL_SET_GROUPS_LIST                92
  ------------------
  |  Branch (3627:5): [True: 0, False: 28.9k]
  ------------------
 3628|      0|        return tls1_set_groups_list(&s->ext.supportedgroups,
 3629|      0|                                    &s->ext.supportedgroups_len, parg);
 3630|       |
 3631|      0|    case SSL_CTRL_GET_SHARED_GROUP:
  ------------------
  |  | 1274|      0|# define SSL_CTRL_GET_SHARED_GROUP               93
  ------------------
  |  Branch (3631:5): [True: 0, False: 28.9k]
  ------------------
 3632|      0|        {
 3633|      0|            uint16_t id = tls1_shared_group(s, larg);
 3634|       |
 3635|      0|            if (larg != -1) {
  ------------------
  |  Branch (3635:17): [True: 0, False: 0]
  ------------------
 3636|      0|                const TLS_GROUP_INFO *ginf = tls1_group_id_lookup(id);
 3637|       |
 3638|      0|                return ginf == NULL ? 0 : ginf->nid;
  ------------------
  |  Branch (3638:24): [True: 0, False: 0]
  ------------------
 3639|      0|            }
 3640|      0|            return id;
 3641|      0|        }
 3642|      0|#endif
 3643|      0|    case SSL_CTRL_SET_SIGALGS:
  ------------------
  |  | 1275|      0|# define SSL_CTRL_SET_SIGALGS                    97
  ------------------
  |  Branch (3643:5): [True: 0, False: 28.9k]
  ------------------
 3644|      0|        return tls1_set_sigalgs(s->cert, parg, larg, 0);
 3645|       |
 3646|      0|    case SSL_CTRL_SET_SIGALGS_LIST:
  ------------------
  |  | 1276|      0|# define SSL_CTRL_SET_SIGALGS_LIST               98
  ------------------
  |  Branch (3646:5): [True: 0, False: 28.9k]
  ------------------
 3647|      0|        return tls1_set_sigalgs_list(s->cert, parg, 0);
 3648|       |
 3649|      0|    case SSL_CTRL_SET_CLIENT_SIGALGS:
  ------------------
  |  | 1279|      0|# define SSL_CTRL_SET_CLIENT_SIGALGS             101
  ------------------
  |  Branch (3649:5): [True: 0, False: 28.9k]
  ------------------
 3650|      0|        return tls1_set_sigalgs(s->cert, parg, larg, 1);
 3651|       |
 3652|      0|    case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
  ------------------
  |  | 1280|      0|# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST        102
  ------------------
  |  Branch (3652:5): [True: 0, False: 28.9k]
  ------------------
 3653|      0|        return tls1_set_sigalgs_list(s->cert, parg, 1);
 3654|       |
 3655|      0|    case SSL_CTRL_GET_CLIENT_CERT_TYPES:
  ------------------
  |  | 1281|      0|# define SSL_CTRL_GET_CLIENT_CERT_TYPES          103
  ------------------
  |  Branch (3655:5): [True: 0, False: 28.9k]
  ------------------
 3656|      0|        {
 3657|      0|            const unsigned char **pctype = parg;
 3658|      0|            if (s->server || !s->s3->tmp.cert_req)
  ------------------
  |  Branch (3658:17): [True: 0, False: 0]
  |  Branch (3658:30): [True: 0, False: 0]
  ------------------
 3659|      0|                return 0;
 3660|      0|            if (pctype)
  ------------------
  |  Branch (3660:17): [True: 0, False: 0]
  ------------------
 3661|      0|                *pctype = s->s3->tmp.ctype;
 3662|      0|            return s->s3->tmp.ctype_len;
 3663|      0|        }
 3664|       |
 3665|      0|    case SSL_CTRL_SET_CLIENT_CERT_TYPES:
  ------------------
  |  | 1282|      0|# define SSL_CTRL_SET_CLIENT_CERT_TYPES          104
  ------------------
  |  Branch (3665:5): [True: 0, False: 28.9k]
  ------------------
 3666|      0|        if (!s->server)
  ------------------
  |  Branch (3666:13): [True: 0, False: 0]
  ------------------
 3667|      0|            return 0;
 3668|      0|        return ssl3_set_req_cert_type(s->cert, parg, larg);
 3669|       |
 3670|      0|    case SSL_CTRL_BUILD_CERT_CHAIN:
  ------------------
  |  | 1283|      0|# define SSL_CTRL_BUILD_CERT_CHAIN               105
  ------------------
  |  Branch (3670:5): [True: 0, False: 28.9k]
  ------------------
 3671|      0|        return ssl_build_cert_chain(s, NULL, larg);
 3672|       |
 3673|      0|    case SSL_CTRL_SET_VERIFY_CERT_STORE:
  ------------------
  |  | 1284|      0|# define SSL_CTRL_SET_VERIFY_CERT_STORE          106
  ------------------
  |  Branch (3673:5): [True: 0, False: 28.9k]
  ------------------
 3674|      0|        return ssl_cert_set_cert_store(s->cert, parg, 0, larg);
 3675|       |
 3676|      0|    case SSL_CTRL_SET_CHAIN_CERT_STORE:
  ------------------
  |  | 1285|      0|# define SSL_CTRL_SET_CHAIN_CERT_STORE           107
  ------------------
  |  Branch (3676:5): [True: 0, False: 28.9k]
  ------------------
 3677|      0|        return ssl_cert_set_cert_store(s->cert, parg, 1, larg);
 3678|       |
 3679|      0|    case SSL_CTRL_GET_PEER_SIGNATURE_NID:
  ------------------
  |  | 1286|      0|# define SSL_CTRL_GET_PEER_SIGNATURE_NID         108
  ------------------
  |  Branch (3679:5): [True: 0, False: 28.9k]
  ------------------
 3680|      0|        if (s->s3->tmp.peer_sigalg == NULL)
  ------------------
  |  Branch (3680:13): [True: 0, False: 0]
  ------------------
 3681|      0|            return 0;
 3682|      0|        *(int *)parg = s->s3->tmp.peer_sigalg->hash;
 3683|      0|        return 1;
 3684|       |
 3685|      0|    case SSL_CTRL_GET_SIGNATURE_NID:
  ------------------
  |  | 1306|      0|# define SSL_CTRL_GET_SIGNATURE_NID              132
  ------------------
  |  Branch (3685:5): [True: 0, False: 28.9k]
  ------------------
 3686|      0|        if (s->s3->tmp.sigalg == NULL)
  ------------------
  |  Branch (3686:13): [True: 0, False: 0]
  ------------------
 3687|      0|            return 0;
 3688|      0|        *(int *)parg = s->s3->tmp.sigalg->hash;
 3689|      0|        return 1;
 3690|       |
 3691|      0|    case SSL_CTRL_GET_PEER_TMP_KEY:
  ------------------
  |  | 1287|      0|# define SSL_CTRL_GET_PEER_TMP_KEY               109
  ------------------
  |  Branch (3691:5): [True: 0, False: 28.9k]
  ------------------
 3692|      0|#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
 3693|      0|        if (s->session == NULL || s->s3->peer_tmp == NULL) {
  ------------------
  |  Branch (3693:13): [True: 0, False: 0]
  |  Branch (3693:35): [True: 0, False: 0]
  ------------------
 3694|      0|            return 0;
 3695|      0|        } else {
 3696|      0|            EVP_PKEY_up_ref(s->s3->peer_tmp);
 3697|      0|            *(EVP_PKEY **)parg = s->s3->peer_tmp;
 3698|      0|            return 1;
 3699|      0|        }
 3700|       |#else
 3701|       |        return 0;
 3702|       |#endif
 3703|       |
 3704|      0|    case SSL_CTRL_GET_TMP_KEY:
  ------------------
  |  | 1307|      0|# define SSL_CTRL_GET_TMP_KEY                    133
  ------------------
  |  Branch (3704:5): [True: 0, False: 28.9k]
  ------------------
 3705|      0|#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
 3706|      0|        if (s->session == NULL || s->s3->tmp.pkey == NULL) {
  ------------------
  |  Branch (3706:13): [True: 0, False: 0]
  |  Branch (3706:35): [True: 0, False: 0]
  ------------------
 3707|      0|            return 0;
 3708|      0|        } else {
 3709|      0|            EVP_PKEY_up_ref(s->s3->tmp.pkey);
 3710|      0|            *(EVP_PKEY **)parg = s->s3->tmp.pkey;
 3711|      0|            return 1;
 3712|      0|        }
 3713|       |#else
 3714|       |        return 0;
 3715|       |#endif
 3716|       |
 3717|      0|#ifndef OPENSSL_NO_EC
 3718|      0|    case SSL_CTRL_GET_EC_POINT_FORMATS:
  ------------------
  |  | 1289|      0|# define SSL_CTRL_GET_EC_POINT_FORMATS           111
  ------------------
  |  Branch (3718:5): [True: 0, False: 28.9k]
  ------------------
 3719|      0|        {
 3720|      0|            const unsigned char **pformat = parg;
 3721|       |
 3722|      0|            if (s->ext.peer_ecpointformats == NULL)
  ------------------
  |  Branch (3722:17): [True: 0, False: 0]
  ------------------
 3723|      0|                return 0;
 3724|      0|            *pformat = s->ext.peer_ecpointformats;
 3725|      0|            return (int)s->ext.peer_ecpointformats_len;
 3726|      0|        }
 3727|      0|#endif
 3728|       |
 3729|      0|    default:
  ------------------
  |  Branch (3729:5): [True: 0, False: 28.9k]
  ------------------
 3730|      0|        break;
 3731|  28.9k|    }
 3732|  28.9k|    return ret;
 3733|  28.9k|}
ssl3_get_cipher_by_std_name:
 4074|  86.9k|{
 4075|  86.9k|    SSL_CIPHER *tbl;
 4076|  86.9k|    SSL_CIPHER *alltabs[] = {tls13_ciphers, ssl3_ciphers, ssl3_scsvs};
 4077|  86.9k|    size_t i, j, tblsize[] = {TLS13_NUM_CIPHERS, SSL3_NUM_CIPHERS,
  ------------------
  |  |   21|  86.9k|#define TLS13_NUM_CIPHERS       OSSL_NELEM(tls13_ciphers)
  |  |  ------------------
  |  |  |  |   13|  86.9k|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  |  |  ------------------
  ------------------
                  size_t i, j, tblsize[] = {TLS13_NUM_CIPHERS, SSL3_NUM_CIPHERS,
  ------------------
  |  |   22|  86.9k|#define SSL3_NUM_CIPHERS        OSSL_NELEM(ssl3_ciphers)
  |  |  ------------------
  |  |  |  |   13|  86.9k|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  |  |  ------------------
  ------------------
 4078|  86.9k|                              SSL3_NUM_SCSVS};
  ------------------
  |  |   23|  86.9k|#define SSL3_NUM_SCSVS          OSSL_NELEM(ssl3_scsvs)
  |  |  ------------------
  |  |  |  |   13|  86.9k|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  |  |  ------------------
  ------------------
 4079|       |
 4080|       |    /* this is not efficient, necessary to optimize this? */
 4081|  86.9k|    for (j = 0; j < OSSL_NELEM(alltabs); j++) {
  ------------------
  |  |   13|  86.9k|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
  |  Branch (4081:17): [True: 86.9k, False: 0]
  ------------------
 4082|   173k|        for (i = 0, tbl = alltabs[j]; i < tblsize[j]; i++, tbl++) {
  ------------------
  |  Branch (4082:39): [True: 173k, False: 0]
  ------------------
 4083|   173k|            if (tbl->stdname == NULL)
  ------------------
  |  Branch (4083:17): [True: 0, False: 173k]
  ------------------
 4084|      0|                continue;
 4085|   173k|            if (strcmp(stdname, tbl->stdname) == 0) {
  ------------------
  |  Branch (4085:17): [True: 86.9k, False: 86.9k]
  ------------------
 4086|  86.9k|                return tbl;
 4087|  86.9k|            }
 4088|   173k|        }
 4089|  86.9k|    }
 4090|      0|    return NULL;
 4091|  86.9k|}
ssl3_put_cipher_by_char:
 4105|   898k|{
 4106|   898k|    if ((c->id & 0xff000000) != SSL3_CK_CIPHERSUITE_FLAG) {
  ------------------
  |  |  316|   898k|# define SSL3_CK_CIPHERSUITE_FLAG                0x03000000
  ------------------
  |  Branch (4106:9): [True: 0, False: 898k]
  ------------------
 4107|      0|        *len = 0;
 4108|      0|        return 1;
 4109|      0|    }
 4110|       |
 4111|   898k|    if (!WPACKET_put_bytes_u16(pkt, c->id & 0xffff))
  ------------------
  |  |  820|   898k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (4111:9): [True: 0, False: 898k]
  ------------------
 4112|      0|        return 0;
 4113|       |
 4114|   898k|    *len = 2;
 4115|   898k|    return 1;
 4116|   898k|}
ssl3_renegotiate_check:
 4514|  28.9k|{
 4515|  28.9k|    int ret = 0;
 4516|       |
 4517|  28.9k|    if (s->s3->renegotiate) {
  ------------------
  |  Branch (4517:9): [True: 0, False: 28.9k]
  ------------------
 4518|      0|        if (!RECORD_LAYER_read_pending(&s->rlayer)
  ------------------
  |  Branch (4518:13): [True: 0, False: 0]
  ------------------
 4519|      0|            && !RECORD_LAYER_write_pending(&s->rlayer)
  ------------------
  |  Branch (4519:16): [True: 0, False: 0]
  ------------------
 4520|      0|            && (initok || !SSL_in_init(s))) {
  ------------------
  |  Branch (4520:17): [True: 0, False: 0]
  |  Branch (4520:27): [True: 0, False: 0]
  ------------------
 4521|       |            /*
 4522|       |             * if we are the server, and we have sent a 'RENEGOTIATE'
 4523|       |             * message, we need to set the state machine into the renegotiate
 4524|       |             * state.
 4525|       |             */
 4526|      0|            ossl_statem_set_renegotiate(s);
 4527|      0|            s->s3->renegotiate = 0;
 4528|      0|            s->s3->num_renegotiations++;
 4529|      0|            s->s3->total_renegotiations++;
 4530|      0|            ret = 1;
 4531|      0|        }
 4532|      0|    }
 4533|  28.9k|    return ret;
 4534|  28.9k|}
ssl_fill_hello_random:
 4564|  28.9k|{
 4565|  28.9k|    int send_time = 0, ret;
 4566|       |
 4567|  28.9k|    if (len < 4)
  ------------------
  |  Branch (4567:9): [True: 0, False: 28.9k]
  ------------------
 4568|      0|        return 0;
 4569|  28.9k|    if (server)
  ------------------
  |  Branch (4569:9): [True: 0, False: 28.9k]
  ------------------
 4570|      0|        send_time = (s->mode & SSL_MODE_SEND_SERVERHELLO_TIME) != 0;
  ------------------
  |  |  482|      0|# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040U
  ------------------
 4571|  28.9k|    else
 4572|  28.9k|        send_time = (s->mode & SSL_MODE_SEND_CLIENTHELLO_TIME) != 0;
  ------------------
  |  |  481|  28.9k|# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020U
  ------------------
 4573|  28.9k|    if (send_time) {
  ------------------
  |  Branch (4573:9): [True: 0, False: 28.9k]
  ------------------
 4574|      0|        unsigned long Time = (unsigned long)time(NULL);
 4575|      0|        unsigned char *p = result;
 4576|       |
 4577|      0|        l2n(Time, p);
  ------------------
  |  |   84|      0|# define l2n(l,c)        (*((c)++)=(unsigned char)(((l)>>24)&0xff), \
  |  |   85|      0|                         *((c)++)=(unsigned char)(((l)>>16)&0xff), \
  |  |   86|      0|                         *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
  |  |   87|      0|                         *((c)++)=(unsigned char)(((l)    )&0xff))
  ------------------
 4578|      0|        ret = RAND_bytes(p, len - 4);
 4579|  28.9k|    } else {
 4580|  28.9k|        ret = RAND_bytes(result, len);
 4581|  28.9k|    }
 4582|       |
 4583|  28.9k|    if (ret > 0) {
  ------------------
  |  Branch (4583:9): [True: 28.9k, False: 0]
  ------------------
 4584|  28.9k|        if (!ossl_assert(sizeof(tls11downgrade) < len)
  ------------------
  |  |   40|  57.9k|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|  57.9k|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (4584:13): [True: 0, False: 28.9k]
  ------------------
 4585|  28.9k|                || !ossl_assert(sizeof(tls12downgrade) < len))
  ------------------
  |  |   40|  28.9k|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|  28.9k|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (4585:20): [True: 0, False: 28.9k]
  ------------------
 4586|      0|             return 0;
 4587|  28.9k|        if (dgrd == DOWNGRADE_TO_1_2)
  ------------------
  |  Branch (4587:13): [True: 0, False: 28.9k]
  ------------------
 4588|      0|            memcpy(result + len - sizeof(tls12downgrade), tls12downgrade,
 4589|      0|                   sizeof(tls12downgrade));
 4590|  28.9k|        else if (dgrd == DOWNGRADE_TO_1_1)
  ------------------
  |  Branch (4590:18): [True: 0, False: 28.9k]
  ------------------
 4591|      0|            memcpy(result + len - sizeof(tls11downgrade), tls11downgrade,
 4592|      0|                   sizeof(tls11downgrade));
 4593|  28.9k|    }
 4594|       |
 4595|  28.9k|    return ret;
 4596|  28.9k|}
ssl_generate_pkey_group:
 4694|  28.9k|{
 4695|  28.9k|    EVP_PKEY_CTX *pctx = NULL;
 4696|  28.9k|    EVP_PKEY *pkey = NULL;
 4697|  28.9k|    const TLS_GROUP_INFO *ginf = tls1_group_id_lookup(id);
 4698|  28.9k|    uint16_t gtype;
 4699|       |
 4700|  28.9k|    if (ginf == NULL) {
  ------------------
  |  Branch (4700:9): [True: 0, False: 28.9k]
  ------------------
 4701|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 4702|      0|                 ERR_R_INTERNAL_ERROR);
 4703|      0|        goto err;
 4704|      0|    }
 4705|  28.9k|    gtype = ginf->flags & TLS_CURVE_TYPE;
  ------------------
  |  | 1514|  28.9k|# define TLS_CURVE_TYPE          0x3 /* Mask for group type */
  ------------------
 4706|  28.9k|    if (gtype == TLS_CURVE_CUSTOM)
  ------------------
  |  | 1517|  28.9k|# define TLS_CURVE_CUSTOM        0x2
  ------------------
  |  Branch (4706:9): [True: 28.9k, False: 0]
  ------------------
 4707|  28.9k|        pctx = EVP_PKEY_CTX_new_id(ginf->nid, NULL);
 4708|      0|    else
 4709|      0|        pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL);
  ------------------
  |  |   52|      0|# define EVP_PKEY_EC     NID_X9_62_id_ecPublicKey
  |  |  ------------------
  |  |  |  |  169|      0|#define NID_X9_62_id_ecPublicKey                408
  |  |  ------------------
  ------------------
 4710|  28.9k|    if (pctx == NULL) {
  ------------------
  |  Branch (4710:9): [True: 0, False: 28.9k]
  ------------------
 4711|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 4712|      0|                 ERR_R_MALLOC_FAILURE);
 4713|      0|        goto err;
 4714|      0|    }
 4715|  28.9k|    if (EVP_PKEY_keygen_init(pctx) <= 0) {
  ------------------
  |  Branch (4715:9): [True: 0, False: 28.9k]
  ------------------
 4716|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 4717|      0|                 ERR_R_EVP_LIB);
 4718|      0|        goto err;
 4719|      0|    }
 4720|  28.9k|    if (gtype != TLS_CURVE_CUSTOM
  ------------------
  |  | 1517|  57.9k|# define TLS_CURVE_CUSTOM        0x2
  ------------------
  |  Branch (4720:9): [True: 0, False: 28.9k]
  ------------------
 4721|      0|            && EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx, ginf->nid) <= 0) {
  ------------------
  |  | 1380|      0|        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
  |  |  ------------------
  |  |  |  |   52|      0|# define EVP_PKEY_EC     NID_X9_62_id_ecPublicKey
  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      0|#define NID_X9_62_id_ecPublicKey                408
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1381|      0|                                EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \
  |  |  ------------------
  |  |  |  | 1258|      0|# define EVP_PKEY_OP_PARAMGEN            (1<<1)
  |  |  ------------------
  |  |                                               EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \
  |  |  ------------------
  |  |  |  | 1259|      0|# define EVP_PKEY_OP_KEYGEN              (1<<2)
  |  |  ------------------
  |  | 1382|      0|                                EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL)
  |  |  ------------------
  |  |  |  | 1453|      0|# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID             (EVP_PKEY_ALG_CTRL + 1)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1319|      0|# define EVP_PKEY_ALG_CTRL               0x1000
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4721:16): [True: 0, False: 0]
  ------------------
 4722|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 4723|      0|                 ERR_R_EVP_LIB);
 4724|      0|        goto err;
 4725|      0|    }
 4726|  28.9k|    if (EVP_PKEY_keygen(pctx, &pkey) <= 0) {
  ------------------
  |  Branch (4726:9): [True: 0, False: 28.9k]
  ------------------
 4727|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 4728|      0|                 ERR_R_EVP_LIB);
 4729|      0|        EVP_PKEY_free(pkey);
 4730|      0|        pkey = NULL;
 4731|      0|    }
 4732|       |
 4733|  28.9k| err:
 4734|  28.9k|    EVP_PKEY_CTX_free(pctx);
 4735|  28.9k|    return pkey;
 4736|  28.9k|}
s3_lib.c:cipher_compare:
 3202|  1.62k|{
 3203|  1.62k|    const SSL_CIPHER *ap = (const SSL_CIPHER *)a;
 3204|  1.62k|    const SSL_CIPHER *bp = (const SSL_CIPHER *)b;
 3205|       |
 3206|  1.62k|    if (ap->id == bp->id)
  ------------------
  |  Branch (3206:9): [True: 0, False: 1.62k]
  ------------------
 3207|      0|        return 0;
 3208|  1.62k|    return ap->id < bp->id ? -1 : 1;
  ------------------
  |  Branch (3208:12): [True: 1.05k, False: 570]
  ------------------
 3209|  1.62k|}

SSL_get_ex_data_X509_STORE_CTX_idx:
   43|  28.9k|{
   44|       |
   45|  28.9k|    if (!RUN_ONCE(&ssl_x509_store_ctx_once, ssl_x509_store_ctx_init))
  ------------------
  |  |  119|  28.9k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 28.9k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (45:9): [True: 0, False: 28.9k]
  ------------------
   46|      0|        return -1;
   47|  28.9k|    return ssl_x509_store_ctx_idx;
   48|  28.9k|}
ssl_cert_new:
   51|  28.9k|{
   52|  28.9k|    CERT *ret = OPENSSL_zalloc(sizeof(*ret));
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   53|       |
   54|  28.9k|    if (ret == NULL) {
  ------------------
  |  Branch (54:9): [True: 0, False: 28.9k]
  ------------------
   55|      0|        SSLerr(SSL_F_SSL_CERT_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   56|      0|        return NULL;
   57|      0|    }
   58|       |
   59|  28.9k|    ret->key = &(ret->pkeys[SSL_PKEY_RSA]);
  ------------------
  |  |  377|  28.9k|# define SSL_PKEY_RSA            0
  ------------------
   60|  28.9k|    ret->references = 1;
   61|  28.9k|    ret->sec_cb = ssl_security_default_callback;
   62|  28.9k|    ret->sec_level = OPENSSL_TLS_SECURITY_LEVEL;
  ------------------
  |  |   24|  28.9k|#  define OPENSSL_TLS_SECURITY_LEVEL 1
  ------------------
   63|  28.9k|    ret->sec_ex = NULL;
   64|  28.9k|    ret->lock = CRYPTO_THREAD_lock_new();
   65|  28.9k|    if (ret->lock == NULL) {
  ------------------
  |  Branch (65:9): [True: 0, False: 28.9k]
  ------------------
   66|      0|        SSLerr(SSL_F_SSL_CERT_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   67|      0|        OPENSSL_free(ret);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   68|      0|        return NULL;
   69|      0|    }
   70|       |
   71|  28.9k|    return ret;
   72|  28.9k|}
ssl_cert_dup:
   75|  28.9k|{
   76|  28.9k|    CERT *ret = OPENSSL_zalloc(sizeof(*ret));
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   77|  28.9k|    int i;
   78|       |
   79|  28.9k|    if (ret == NULL) {
  ------------------
  |  Branch (79:9): [True: 0, False: 28.9k]
  ------------------
   80|      0|        SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   81|      0|        return NULL;
   82|      0|    }
   83|       |
   84|  28.9k|    ret->references = 1;
   85|  28.9k|    ret->key = &ret->pkeys[cert->key - cert->pkeys];
   86|  28.9k|    ret->lock = CRYPTO_THREAD_lock_new();
   87|  28.9k|    if (ret->lock == NULL) {
  ------------------
  |  Branch (87:9): [True: 0, False: 28.9k]
  ------------------
   88|      0|        SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   89|      0|        OPENSSL_free(ret);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   90|      0|        return NULL;
   91|      0|    }
   92|  28.9k|#ifndef OPENSSL_NO_DH
   93|  28.9k|    if (cert->dh_tmp != NULL) {
  ------------------
  |  Branch (93:9): [True: 0, False: 28.9k]
  ------------------
   94|      0|        ret->dh_tmp = cert->dh_tmp;
   95|      0|        EVP_PKEY_up_ref(ret->dh_tmp);
   96|      0|    }
   97|  28.9k|    ret->dh_tmp_cb = cert->dh_tmp_cb;
   98|  28.9k|    ret->dh_tmp_auto = cert->dh_tmp_auto;
   99|  28.9k|#endif
  100|       |
  101|   289k|    for (i = 0; i < SSL_PKEY_NUM; i++) {
  ------------------
  |  |  386|   289k|# define SSL_PKEY_NUM            9
  ------------------
  |  Branch (101:17): [True: 260k, False: 28.9k]
  ------------------
  102|   260k|        CERT_PKEY *cpk = cert->pkeys + i;
  103|   260k|        CERT_PKEY *rpk = ret->pkeys + i;
  104|   260k|        if (cpk->x509 != NULL) {
  ------------------
  |  Branch (104:13): [True: 0, False: 260k]
  ------------------
  105|      0|            rpk->x509 = cpk->x509;
  106|      0|            X509_up_ref(rpk->x509);
  107|      0|        }
  108|       |
  109|   260k|        if (cpk->privatekey != NULL) {
  ------------------
  |  Branch (109:13): [True: 0, False: 260k]
  ------------------
  110|      0|            rpk->privatekey = cpk->privatekey;
  111|      0|            EVP_PKEY_up_ref(cpk->privatekey);
  112|      0|        }
  113|       |
  114|   260k|        if (cpk->chain) {
  ------------------
  |  Branch (114:13): [True: 0, False: 260k]
  ------------------
  115|      0|            rpk->chain = X509_chain_up_ref(cpk->chain);
  116|      0|            if (!rpk->chain) {
  ------------------
  |  Branch (116:17): [True: 0, False: 0]
  ------------------
  117|      0|                SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  118|      0|                goto err;
  119|      0|            }
  120|      0|        }
  121|   260k|        if (cert->pkeys[i].serverinfo != NULL) {
  ------------------
  |  Branch (121:13): [True: 0, False: 260k]
  ------------------
  122|       |            /* Just copy everything. */
  123|      0|            ret->pkeys[i].serverinfo =
  124|      0|                OPENSSL_malloc(cert->pkeys[i].serverinfo_length);
  ------------------
  |  |  118|      0|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  125|      0|            if (ret->pkeys[i].serverinfo == NULL) {
  ------------------
  |  Branch (125:17): [True: 0, False: 0]
  ------------------
  126|      0|                SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  127|      0|                goto err;
  128|      0|            }
  129|      0|            ret->pkeys[i].serverinfo_length = cert->pkeys[i].serverinfo_length;
  130|      0|            memcpy(ret->pkeys[i].serverinfo,
  131|      0|                   cert->pkeys[i].serverinfo, cert->pkeys[i].serverinfo_length);
  132|      0|        }
  133|   260k|    }
  134|       |
  135|       |    /* Configured sigalgs copied across */
  136|  28.9k|    if (cert->conf_sigalgs) {
  ------------------
  |  Branch (136:9): [True: 0, False: 28.9k]
  ------------------
  137|      0|        ret->conf_sigalgs = OPENSSL_malloc(cert->conf_sigalgslen
  ------------------
  |  |  118|      0|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  138|      0|                                           * sizeof(*cert->conf_sigalgs));
  139|      0|        if (ret->conf_sigalgs == NULL)
  ------------------
  |  Branch (139:13): [True: 0, False: 0]
  ------------------
  140|      0|            goto err;
  141|      0|        memcpy(ret->conf_sigalgs, cert->conf_sigalgs,
  142|      0|               cert->conf_sigalgslen * sizeof(*cert->conf_sigalgs));
  143|      0|        ret->conf_sigalgslen = cert->conf_sigalgslen;
  144|      0|    } else
  145|  28.9k|        ret->conf_sigalgs = NULL;
  146|       |
  147|  28.9k|    if (cert->client_sigalgs) {
  ------------------
  |  Branch (147:9): [True: 0, False: 28.9k]
  ------------------
  148|      0|        ret->client_sigalgs = OPENSSL_malloc(cert->client_sigalgslen
  ------------------
  |  |  118|      0|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  149|      0|                                             * sizeof(*cert->client_sigalgs));
  150|      0|        if (ret->client_sigalgs == NULL)
  ------------------
  |  Branch (150:13): [True: 0, False: 0]
  ------------------
  151|      0|            goto err;
  152|      0|        memcpy(ret->client_sigalgs, cert->client_sigalgs,
  153|      0|               cert->client_sigalgslen * sizeof(*cert->client_sigalgs));
  154|      0|        ret->client_sigalgslen = cert->client_sigalgslen;
  155|      0|    } else
  156|  28.9k|        ret->client_sigalgs = NULL;
  157|       |    /* Copy any custom client certificate types */
  158|  28.9k|    if (cert->ctype) {
  ------------------
  |  Branch (158:9): [True: 0, False: 28.9k]
  ------------------
  159|      0|        ret->ctype = OPENSSL_memdup(cert->ctype, cert->ctype_len);
  ------------------
  |  |  130|      0|        CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  160|      0|        if (ret->ctype == NULL)
  ------------------
  |  Branch (160:13): [True: 0, False: 0]
  ------------------
  161|      0|            goto err;
  162|      0|        ret->ctype_len = cert->ctype_len;
  163|      0|    }
  164|       |
  165|  28.9k|    ret->cert_flags = cert->cert_flags;
  166|       |
  167|  28.9k|    ret->cert_cb = cert->cert_cb;
  168|  28.9k|    ret->cert_cb_arg = cert->cert_cb_arg;
  169|       |
  170|  28.9k|    if (cert->verify_store) {
  ------------------
  |  Branch (170:9): [True: 0, False: 28.9k]
  ------------------
  171|      0|        X509_STORE_up_ref(cert->verify_store);
  172|      0|        ret->verify_store = cert->verify_store;
  173|      0|    }
  174|       |
  175|  28.9k|    if (cert->chain_store) {
  ------------------
  |  Branch (175:9): [True: 0, False: 28.9k]
  ------------------
  176|      0|        X509_STORE_up_ref(cert->chain_store);
  177|      0|        ret->chain_store = cert->chain_store;
  178|      0|    }
  179|       |
  180|  28.9k|    ret->sec_cb = cert->sec_cb;
  181|  28.9k|    ret->sec_level = cert->sec_level;
  182|  28.9k|    ret->sec_ex = cert->sec_ex;
  183|       |
  184|  28.9k|    if (!custom_exts_copy(&ret->custext, &cert->custext))
  ------------------
  |  Branch (184:9): [True: 0, False: 28.9k]
  ------------------
  185|      0|        goto err;
  186|  28.9k|#ifndef OPENSSL_NO_PSK
  187|  28.9k|    if (cert->psk_identity_hint) {
  ------------------
  |  Branch (187:9): [True: 0, False: 28.9k]
  ------------------
  188|      0|        ret->psk_identity_hint = OPENSSL_strdup(cert->psk_identity_hint);
  ------------------
  |  |  132|      0|        CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  189|      0|        if (ret->psk_identity_hint == NULL)
  ------------------
  |  Branch (189:13): [True: 0, False: 0]
  ------------------
  190|      0|            goto err;
  191|      0|    }
  192|  28.9k|#endif
  193|  28.9k|    return ret;
  194|       |
  195|      0| err:
  196|      0|    ssl_cert_free(ret);
  197|       |
  198|       |    return NULL;
  199|  28.9k|}
ssl_cert_clear_certs:
  204|  57.9k|{
  205|  57.9k|    int i;
  206|  57.9k|    if (c == NULL)
  ------------------
  |  Branch (206:9): [True: 0, False: 57.9k]
  ------------------
  207|      0|        return;
  208|   579k|    for (i = 0; i < SSL_PKEY_NUM; i++) {
  ------------------
  |  |  386|   579k|# define SSL_PKEY_NUM            9
  ------------------
  |  Branch (208:17): [True: 521k, False: 57.9k]
  ------------------
  209|   521k|        CERT_PKEY *cpk = c->pkeys + i;
  210|   521k|        X509_free(cpk->x509);
  211|   521k|        cpk->x509 = NULL;
  212|   521k|        EVP_PKEY_free(cpk->privatekey);
  213|   521k|        cpk->privatekey = NULL;
  214|   521k|        sk_X509_pop_free(cpk->chain, X509_free);
  215|   521k|        cpk->chain = NULL;
  216|   521k|        OPENSSL_free(cpk->serverinfo);
  ------------------
  |  |  128|   521k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  217|       |        cpk->serverinfo = NULL;
  218|   521k|        cpk->serverinfo_length = 0;
  219|   521k|    }
  220|  57.9k|}
ssl_cert_free:
  223|  57.9k|{
  224|  57.9k|    int i;
  225|       |
  226|  57.9k|    if (c == NULL)
  ------------------
  |  Branch (226:9): [True: 0, False: 57.9k]
  ------------------
  227|      0|        return;
  228|  57.9k|    CRYPTO_DOWN_REF(&c->references, &i, c->lock);
  229|  57.9k|    REF_PRINT_COUNT("CERT", c);
  230|  57.9k|    if (i > 0)
  ------------------
  |  Branch (230:9): [True: 0, False: 57.9k]
  ------------------
  231|      0|        return;
  232|  57.9k|    REF_ASSERT_ISNT(i < 0);
  ------------------
  |  |  138|  57.9k|    (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0)
  |  |  ------------------
  |  |  |  Branch (138:12): [True: 0, False: 57.9k]
  |  |  ------------------
  ------------------
  233|       |
  234|  57.9k|#ifndef OPENSSL_NO_DH
  235|  57.9k|    EVP_PKEY_free(c->dh_tmp);
  236|  57.9k|#endif
  237|       |
  238|  57.9k|    ssl_cert_clear_certs(c);
  239|  57.9k|    OPENSSL_free(c->conf_sigalgs);
  ------------------
  |  |  128|  57.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  240|  57.9k|    OPENSSL_free(c->client_sigalgs);
  ------------------
  |  |  128|  57.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  241|  57.9k|    OPENSSL_free(c->ctype);
  ------------------
  |  |  128|  57.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  242|  57.9k|    X509_STORE_free(c->verify_store);
  243|  57.9k|    X509_STORE_free(c->chain_store);
  244|  57.9k|    custom_exts_free(&c->custext);
  245|  57.9k|#ifndef OPENSSL_NO_PSK
  246|  57.9k|    OPENSSL_free(c->psk_identity_hint);
  ------------------
  |  |  128|  57.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  247|  57.9k|#endif
  248|  57.9k|    CRYPTO_THREAD_lock_free(c->lock);
  249|  57.9k|    OPENSSL_free(c);
  ------------------
  |  |  128|  57.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  250|  57.9k|}
SSL_get0_CA_list:
  495|  28.9k|{
  496|  28.9k|    return s->ca_names != NULL ? s->ca_names : s->ctx->ca_names;
  ------------------
  |  Branch (496:12): [True: 0, False: 28.9k]
  ------------------
  497|  28.9k|}
ssl_get_security_level_bits:
  880|  4.46M|{
  881|  4.46M|    int level;
  882|  4.46M|    static const int minbits_table[5 + 1] = { 0, 80, 112, 128, 192, 256 };
  883|       |
  884|  4.46M|    if (ctx != NULL)
  ------------------
  |  Branch (884:9): [True: 0, False: 4.46M]
  ------------------
  885|      0|        level = SSL_CTX_get_security_level(ctx);
  886|  4.46M|    else
  887|  4.46M|        level = SSL_get_security_level(s);
  888|       |
  889|  4.46M|    if (level > 5)
  ------------------
  |  Branch (889:9): [True: 0, False: 4.46M]
  ------------------
  890|      0|        level = 5;
  891|  4.46M|    else if (level < 0)
  ------------------
  |  Branch (891:14): [True: 0, False: 4.46M]
  ------------------
  892|      0|        level = 0;
  893|       |
  894|  4.46M|    if (levelp != NULL)
  ------------------
  |  Branch (894:9): [True: 4.46M, False: 0]
  ------------------
  895|  4.46M|        *levelp = level;
  896|       |
  897|  4.46M|    return minbits_table[level];
  898|  4.46M|}
ssl_security:
  978|  4.46M|{
  979|       |    return s->cert->sec_cb(s, NULL, op, bits, nid, other, s->cert->sec_ex);
  980|  4.46M|}
ssl_cert_lookup_by_idx:
 1020|  3.18M|{
 1021|  3.18M|    if (idx >= OSSL_NELEM(ssl_cert_info))
  ------------------
  |  |   13|  3.18M|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
  |  Branch (1021:9): [True: 0, False: 3.18M]
  ------------------
 1022|      0|        return NULL;
 1023|  3.18M|    return &ssl_cert_info[idx];
 1024|  3.18M|}
ssl_cert.c:ssl_x509_store_ctx_init:
   35|      1|{
   36|      1|    ssl_x509_store_ctx_idx = X509_STORE_CTX_get_ex_new_index(0,
  ------------------
  |  |  490|      1|    CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef)
  |  |  ------------------
  |  |  |  |   99|      1|# define CRYPTO_EX_INDEX_X509_STORE_CTX   5
  |  |  ------------------
  ------------------
   37|      1|                                                             "SSL for verify callback",
   38|      1|                                                             NULL, NULL, NULL);
   39|      1|    return ssl_x509_store_ctx_idx >= 0;
   40|      1|}
ssl_cert.c:ssl_security_default_callback:
  903|  4.46M|{
  904|  4.46M|    int level, minbits;
  905|       |
  906|  4.46M|    minbits = ssl_get_security_level_bits(s, ctx, &level);
  907|       |
  908|  4.46M|    if (level == 0) {
  ------------------
  |  Branch (908:9): [True: 0, False: 4.46M]
  ------------------
  909|       |        /*
  910|       |         * No EDH keys weaker than 1024-bits even at level 0, otherwise,
  911|       |         * anything goes.
  912|       |         */
  913|      0|        if (op == SSL_SECOP_TMP_DH && bits < 80)
  ------------------
  |  | 2301|      0|# define SSL_SECOP_TMP_DH                (7 | SSL_SECOP_OTHER_PKEY)
  |  |  ------------------
  |  |  |  | 2278|      0|# define SSL_SECOP_OTHER_PKEY    (4 << 16)
  |  |  ------------------
  ------------------
  |  Branch (913:13): [True: 0, False: 0]
  |  Branch (913:39): [True: 0, False: 0]
  ------------------
  914|      0|            return 0;
  915|      0|        return 1;
  916|      0|    }
  917|  4.46M|    switch (op) {
  918|  2.60M|    case SSL_SECOP_CIPHER_SUPPORTED:
  ------------------
  |  | 2289|  2.60M|# define SSL_SECOP_CIPHER_SUPPORTED      (1 | SSL_SECOP_OTHER_CIPHER)
  |  |  ------------------
  |  |  |  | 2275|  2.60M|# define SSL_SECOP_OTHER_CIPHER  (1 << 16)
  |  |  ------------------
  ------------------
  |  Branch (918:5): [True: 2.60M, False: 1.85M]
  ------------------
  919|  2.60M|    case SSL_SECOP_CIPHER_SHARED:
  ------------------
  |  | 2291|  2.60M|# define SSL_SECOP_CIPHER_SHARED         (2 | SSL_SECOP_OTHER_CIPHER)
  |  |  ------------------
  |  |  |  | 2275|  2.60M|# define SSL_SECOP_OTHER_CIPHER  (1 << 16)
  |  |  ------------------
  ------------------
  |  Branch (919:5): [True: 0, False: 4.46M]
  ------------------
  920|  2.60M|    case SSL_SECOP_CIPHER_CHECK:
  ------------------
  |  | 2293|  2.60M|# define SSL_SECOP_CIPHER_CHECK          (3 | SSL_SECOP_OTHER_CIPHER)
  |  |  ------------------
  |  |  |  | 2275|  2.60M|# define SSL_SECOP_OTHER_CIPHER  (1 << 16)
  |  |  ------------------
  ------------------
  |  Branch (920:5): [True: 0, False: 4.46M]
  ------------------
  921|  2.60M|        {
  922|  2.60M|            const SSL_CIPHER *c = other;
  923|       |            /* No ciphers below security level */
  924|  2.60M|            if (bits < minbits)
  ------------------
  |  Branch (924:17): [True: 0, False: 2.60M]
  ------------------
  925|      0|                return 0;
  926|       |            /* No unauthenticated ciphersuites */
  927|  2.60M|            if (c->algorithm_auth & SSL_aNULL)
  ------------------
  |  |  193|  2.60M|# define SSL_aNULL               0x00000004U
  ------------------
  |  Branch (927:17): [True: 0, False: 2.60M]
  ------------------
  928|      0|                return 0;
  929|       |            /* No MD5 mac ciphersuites */
  930|  2.60M|            if (c->algorithm_mac & SSL_MD5)
  ------------------
  |  |  244|  2.60M|# define SSL_MD5                 0x00000001U
  ------------------
  |  Branch (930:17): [True: 0, False: 2.60M]
  ------------------
  931|      0|                return 0;
  932|       |            /* SHA1 HMAC is 160 bits of security */
  933|  2.60M|            if (minbits > 160 && c->algorithm_mac & SSL_SHA1)
  ------------------
  |  |  245|      0|# define SSL_SHA1                0x00000002U
  ------------------
  |  Branch (933:17): [True: 0, False: 2.60M]
  |  Branch (933:34): [True: 0, False: 0]
  ------------------
  934|      0|                return 0;
  935|       |            /* Level 2: no RC4 */
  936|  2.60M|            if (level >= 2 && c->algorithm_enc == SSL_RC4)
  ------------------
  |  |  213|      0|# define SSL_RC4                 0x00000004U
  ------------------
  |  Branch (936:17): [True: 0, False: 2.60M]
  |  Branch (936:31): [True: 0, False: 0]
  ------------------
  937|      0|                return 0;
  938|       |            /* Level 3: forward secure ciphersuites only */
  939|  2.60M|            if (level >= 3 && c->min_tls != TLS1_3_VERSION &&
  ------------------
  |  |   30|  2.60M|# define TLS1_3_VERSION                  0x0304
  ------------------
  |  Branch (939:17): [True: 0, False: 2.60M]
  |  Branch (939:31): [True: 0, False: 0]
  ------------------
  940|      0|                               !(c->algorithm_mkey & (SSL_kEDH | SSL_kEECDH)))
  ------------------
  |  |  164|      0|# define SSL_kEDH                SSL_kDHE
  |  |  ------------------
  |  |  |  |  162|      0|# define SSL_kDHE                0x00000002U
  |  |  ------------------
  ------------------
                                             !(c->algorithm_mkey & (SSL_kEDH | SSL_kEECDH)))
  ------------------
  |  |  168|      0|# define SSL_kEECDH              SSL_kECDHE
  |  |  ------------------
  |  |  |  |  166|      0|# define SSL_kECDHE              0x00000004U
  |  |  ------------------
  ------------------
  |  Branch (940:32): [True: 0, False: 0]
  ------------------
  941|      0|                return 0;
  942|  2.60M|            break;
  943|  2.60M|        }
  944|  2.60M|    case SSL_SECOP_VERSION:
  ------------------
  |  | 2303|   724k|# define SSL_SECOP_VERSION               (9 | SSL_SECOP_OTHER_NONE)
  |  |  ------------------
  |  |  |  | 2274|   724k|# define SSL_SECOP_OTHER_NONE    0
  |  |  ------------------
  ------------------
  |  Branch (944:5): [True: 724k, False: 3.73M]
  ------------------
  945|   724k|        if (!SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|   724k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|   724k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  ------------------
  |  Branch (945:13): [True: 724k, False: 0]
  ------------------
  946|       |            /* SSLv3 not allowed at level 2 */
  947|   724k|            if (nid <= SSL3_VERSION && level >= 2)
  ------------------
  |  |  209|  1.44M|# define SSL3_VERSION                    0x0300
  ------------------
  |  Branch (947:17): [True: 0, False: 724k]
  |  Branch (947:40): [True: 0, False: 0]
  ------------------
  948|      0|                return 0;
  949|       |            /* TLS v1.1 and above only for level 3 */
  950|   724k|            if (nid <= TLS1_VERSION && level >= 3)
  ------------------
  |  |   27|  1.44M|# define TLS1_VERSION                    0x0301
  ------------------
  |  Branch (950:17): [True: 173k, False: 550k]
  |  Branch (950:40): [True: 0, False: 173k]
  ------------------
  951|      0|                return 0;
  952|       |            /* TLS v1.2 only for level 4 and above */
  953|   724k|            if (nid <= TLS1_1_VERSION && level >= 4)
  ------------------
  |  |   28|  1.44M|# define TLS1_1_VERSION                  0x0302
  ------------------
  |  Branch (953:17): [True: 347k, False: 376k]
  |  Branch (953:42): [True: 0, False: 347k]
  ------------------
  954|      0|                return 0;
  955|   724k|        } else {
  956|       |            /* DTLS v1.2 only for level 4 and above */
  957|      0|            if (DTLS_VERSION_LT(nid, DTLS1_2_VERSION) && level >= 4)
  ------------------
  |  |  140|      0|# define DTLS_VERSION_LT(v1, v2) (dtls_ver_ordinal(v1) > dtls_ver_ordinal(v2))
  |  |  ------------------
  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               # define DTLS_VERSION_LT(v1, v2) (dtls_ver_ordinal(v1) > dtls_ver_ordinal(v2))
  |  |  ------------------
  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:32): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (140:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (957:58): [True: 0, False: 0]
  ------------------
  958|      0|                return 0;
  959|      0|        }
  960|   724k|        break;
  961|       |
  962|   724k|    case SSL_SECOP_COMPRESSION:
  ------------------
  |  | 2315|      0|# define SSL_SECOP_COMPRESSION           (15 | SSL_SECOP_OTHER_NONE)
  |  |  ------------------
  |  |  |  | 2274|      0|# define SSL_SECOP_OTHER_NONE    0
  |  |  ------------------
  ------------------
  |  Branch (962:5): [True: 0, False: 4.46M]
  ------------------
  963|      0|        if (level >= 2)
  ------------------
  |  Branch (963:13): [True: 0, False: 0]
  ------------------
  964|      0|            return 0;
  965|      0|        break;
  966|  28.9k|    case SSL_SECOP_TICKET:
  ------------------
  |  | 2305|  28.9k|# define SSL_SECOP_TICKET                (10 | SSL_SECOP_OTHER_NONE)
  |  |  ------------------
  |  |  |  | 2274|  28.9k|# define SSL_SECOP_OTHER_NONE    0
  |  |  ------------------
  ------------------
  |  Branch (966:5): [True: 28.9k, False: 4.43M]
  ------------------
  967|  28.9k|        if (level >= 3)
  ------------------
  |  Branch (967:13): [True: 0, False: 28.9k]
  ------------------
  968|      0|            return 0;
  969|  28.9k|        break;
  970|  1.10M|    default:
  ------------------
  |  Branch (970:5): [True: 1.10M, False: 3.36M]
  ------------------
  971|  1.10M|        if (bits < minbits)
  ------------------
  |  Branch (971:13): [True: 0, False: 1.10M]
  ------------------
  972|      0|            return 0;
  973|  4.46M|    }
  974|  4.46M|    return 1;
  975|  4.46M|}

ssl_load_ciphers:
  358|      2|{
  359|      2|    size_t i;
  360|      2|    const ssl_cipher_table *t;
  361|       |
  362|      2|    disabled_enc_mask = 0;
  363|      2|    ssl_sort_cipher_list();
  364|     46|    for (i = 0, t = ssl_cipher_table_cipher; i < SSL_ENC_NUM_IDX; i++, t++) {
  ------------------
  |  |   46|     46|#define SSL_ENC_NUM_IDX         22
  ------------------
  |  Branch (364:46): [True: 44, False: 2]
  ------------------
  365|     44|        if (t->nid == NID_undef) {
  ------------------
  |  |   14|     44|#define NID_undef                       0
  ------------------
  |  Branch (365:13): [True: 2, False: 42]
  ------------------
  366|      2|            ssl_cipher_methods[i] = NULL;
  367|     42|        } else {
  368|     42|            const EVP_CIPHER *cipher = EVP_get_cipherbynid(t->nid);
  ------------------
  |  |  440|     42|# define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a))
  ------------------
  369|     42|            ssl_cipher_methods[i] = cipher;
  370|     42|            if (cipher == NULL)
  ------------------
  |  Branch (370:17): [True: 4, False: 38]
  ------------------
  371|      4|                disabled_enc_mask |= t->mask;
  372|     42|        }
  373|     44|    }
  374|      2|    disabled_mac_mask = 0;
  375|     26|    for (i = 0, t = ssl_cipher_table_mac; i < SSL_MD_NUM_IDX; i++, t++) {
  ------------------
  |  |   98|     26|#define SSL_MD_NUM_IDX  SSL_MAX_DIGEST
  |  |  ------------------
  |  |  |  |  273|     26|# define SSL_MAX_DIGEST 12
  |  |  ------------------
  ------------------
  |  Branch (375:43): [True: 24, False: 2]
  ------------------
  376|     24|        const EVP_MD *md = EVP_get_digestbynid(t->nid);
  ------------------
  |  |  438|     24|# define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a))
  ------------------
  377|     24|        ssl_digest_methods[i] = md;
  378|     24|        if (md == NULL) {
  ------------------
  |  Branch (378:13): [True: 10, False: 14]
  ------------------
  379|     10|            disabled_mac_mask |= t->mask;
  380|     14|        } else {
  381|     14|            int tmpsize = EVP_MD_size(md);
  382|     14|            if (!ossl_assert(tmpsize >= 0))
  ------------------
  |  |   40|     14|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|     14|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (382:17): [True: 0, False: 14]
  ------------------
  383|      0|                return 0;
  384|     14|            ssl_mac_secret_size[i] = tmpsize;
  385|     14|        }
  386|     24|    }
  387|       |    /* Make sure we can access MD5 and SHA1 */
  388|      2|    if (!ossl_assert(ssl_digest_methods[SSL_MD_MD5_IDX] != NULL))
  ------------------
  |  |   40|      2|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|      2|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (388:9): [True: 0, False: 2]
  ------------------
  389|      0|        return 0;
  390|      2|    if (!ossl_assert(ssl_digest_methods[SSL_MD_SHA1_IDX] != NULL))
  ------------------
  |  |   40|      2|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|      2|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (390:9): [True: 0, False: 2]
  ------------------
  391|      0|        return 0;
  392|       |
  393|      2|    disabled_mkey_mask = 0;
  394|      2|    disabled_auth_mask = 0;
  395|       |
  396|       |#ifdef OPENSSL_NO_RSA
  397|       |    disabled_mkey_mask |= SSL_kRSA | SSL_kRSAPSK;
  398|       |    disabled_auth_mask |= SSL_aRSA;
  399|       |#endif
  400|       |#ifdef OPENSSL_NO_DSA
  401|       |    disabled_auth_mask |= SSL_aDSS;
  402|       |#endif
  403|       |#ifdef OPENSSL_NO_DH
  404|       |    disabled_mkey_mask |= SSL_kDHE | SSL_kDHEPSK;
  405|       |#endif
  406|       |#ifdef OPENSSL_NO_EC
  407|       |    disabled_mkey_mask |= SSL_kECDHE | SSL_kECDHEPSK;
  408|       |    disabled_auth_mask |= SSL_aECDSA;
  409|       |#endif
  410|       |#ifdef OPENSSL_NO_PSK
  411|       |    disabled_mkey_mask |= SSL_PSK;
  412|       |    disabled_auth_mask |= SSL_aPSK;
  413|       |#endif
  414|       |#ifdef OPENSSL_NO_SRP
  415|       |    disabled_mkey_mask |= SSL_kSRP;
  416|       |#endif
  417|       |
  418|       |    /*
  419|       |     * Check for presence of GOST 34.10 algorithms, and if they are not
  420|       |     * present, disable appropriate auth and key exchange
  421|       |     */
  422|      2|    ssl_mac_pkey_id[SSL_MD_GOST89MAC_IDX] = get_optional_pkey_id("gost-mac");
  ------------------
  |  |  264|      2|# define SSL_MD_GOST89MAC_IDX 3
  ------------------
  423|      2|    if (ssl_mac_pkey_id[SSL_MD_GOST89MAC_IDX])
  ------------------
  |  |  264|      2|# define SSL_MD_GOST89MAC_IDX 3
  ------------------
  |  Branch (423:9): [True: 0, False: 2]
  ------------------
  424|      0|        ssl_mac_secret_size[SSL_MD_GOST89MAC_IDX] = 32;
  ------------------
  |  |  264|      0|# define SSL_MD_GOST89MAC_IDX 3
  ------------------
  425|      2|    else
  426|      2|        disabled_mac_mask |= SSL_GOST89MAC;
  ------------------
  |  |  247|      2|# define SSL_GOST89MAC   0x00000008U
  ------------------
  427|       |
  428|      2|    ssl_mac_pkey_id[SSL_MD_GOST89MAC12_IDX] =
  ------------------
  |  |  268|      2|# define SSL_MD_GOST89MAC12_IDX 7
  ------------------
  429|      2|        get_optional_pkey_id("gost-mac-12");
  430|      2|    if (ssl_mac_pkey_id[SSL_MD_GOST89MAC12_IDX])
  ------------------
  |  |  268|      2|# define SSL_MD_GOST89MAC12_IDX 7
  ------------------
  |  Branch (430:9): [True: 0, False: 2]
  ------------------
  431|      0|        ssl_mac_secret_size[SSL_MD_GOST89MAC12_IDX] = 32;
  ------------------
  |  |  268|      0|# define SSL_MD_GOST89MAC12_IDX 7
  ------------------
  432|      2|    else
  433|      2|        disabled_mac_mask |= SSL_GOST89MAC12;
  ------------------
  |  |  253|      2|# define SSL_GOST89MAC12         0x00000100U
  ------------------
  434|       |
  435|      2|    if (!get_optional_pkey_id("gost2001"))
  ------------------
  |  Branch (435:9): [True: 2, False: 0]
  ------------------
  436|      2|        disabled_auth_mask |= SSL_aGOST01 | SSL_aGOST12;
  ------------------
  |  |  199|      2|# define SSL_aGOST01             0x00000020U
  ------------------
                      disabled_auth_mask |= SSL_aGOST01 | SSL_aGOST12;
  ------------------
  |  |  203|      2|# define SSL_aGOST12             0x00000080U
  ------------------
  437|      2|    if (!get_optional_pkey_id("gost2012_256"))
  ------------------
  |  Branch (437:9): [True: 2, False: 0]
  ------------------
  438|      2|        disabled_auth_mask |= SSL_aGOST12;
  ------------------
  |  |  203|      2|# define SSL_aGOST12             0x00000080U
  ------------------
  439|      2|    if (!get_optional_pkey_id("gost2012_512"))
  ------------------
  |  Branch (439:9): [True: 2, False: 0]
  ------------------
  440|      2|        disabled_auth_mask |= SSL_aGOST12;
  ------------------
  |  |  203|      2|# define SSL_aGOST12             0x00000080U
  ------------------
  441|       |    /*
  442|       |     * Disable GOST key exchange if no GOST signature algs are available *
  443|       |     */
  444|      2|    if ((disabled_auth_mask & (SSL_aGOST01 | SSL_aGOST12)) ==
  ------------------
  |  |  199|      2|# define SSL_aGOST01             0x00000020U
  ------------------
                  if ((disabled_auth_mask & (SSL_aGOST01 | SSL_aGOST12)) ==
  ------------------
  |  |  203|      2|# define SSL_aGOST12             0x00000080U
  ------------------
  |  Branch (444:9): [True: 2, False: 0]
  ------------------
  445|      2|        (SSL_aGOST01 | SSL_aGOST12))
  ------------------
  |  |  199|      2|# define SSL_aGOST01             0x00000020U
  ------------------
                      (SSL_aGOST01 | SSL_aGOST12))
  ------------------
  |  |  203|      2|# define SSL_aGOST12             0x00000080U
  ------------------
  446|      2|        disabled_mkey_mask |= SSL_kGOST;
  ------------------
  |  |  172|      2|# define SSL_kGOST               0x00000010U
  ------------------
  447|       |
  448|      2|    return 1;
  449|      2|}
ssl_md:
  587|  1.82M|{
  588|  1.82M|    idx &= SSL_HANDSHAKE_MAC_MASK;
  ------------------
  |  |  278|  1.82M|# define SSL_HANDSHAKE_MAC_MASK  0xFF
  ------------------
  589|  1.82M|    if (idx < 0 || idx >= SSL_MD_NUM_IDX)
  ------------------
  |  |   98|  1.82M|#define SSL_MD_NUM_IDX  SSL_MAX_DIGEST
  |  |  ------------------
  |  |  |  |  273|  1.82M|# define SSL_MAX_DIGEST 12
  |  |  ------------------
  ------------------
  |  Branch (589:9): [True: 0, False: 1.82M]
  |  Branch (589:20): [True: 0, False: 1.82M]
  ------------------
  590|      0|        return NULL;
  591|  1.82M|    return ssl_digest_methods[idx];
  592|  1.82M|}
SSL_CTX_set_ciphersuites:
 1377|  28.9k|{
 1378|  28.9k|    int ret = set_ciphersuites(&(ctx->tls13_ciphersuites), str);
 1379|       |
 1380|  28.9k|    if (ret && ctx->cipher_list != NULL)
  ------------------
  |  Branch (1380:9): [True: 28.9k, False: 0]
  |  Branch (1380:16): [True: 0, False: 28.9k]
  ------------------
 1381|      0|        return update_cipher_list(&ctx->cipher_list, &ctx->cipher_list_by_id,
 1382|      0|                                  ctx->tls13_ciphersuites);
 1383|       |
 1384|  28.9k|    return ret;
 1385|  28.9k|}
ssl_create_cipher_list:
 1409|  28.9k|{
 1410|  28.9k|    int ok, num_of_ciphers, num_of_alias_max, num_of_group_aliases, i;
 1411|  28.9k|    uint32_t disabled_mkey, disabled_auth, disabled_enc, disabled_mac;
 1412|  28.9k|    STACK_OF(SSL_CIPHER) *cipherstack;
  ------------------
  |  |   20|  28.9k|# define STACK_OF(type) struct stack_st_##type
  ------------------
 1413|  28.9k|    const char *rule_p;
 1414|  28.9k|    CIPHER_ORDER *co_list = NULL, *head = NULL, *tail = NULL, *curr;
 1415|  28.9k|    const SSL_CIPHER **ca_list = NULL;
 1416|       |
 1417|       |    /*
 1418|       |     * Return with error if nothing to do.
 1419|       |     */
 1420|  28.9k|    if (rule_str == NULL || cipher_list == NULL || cipher_list_by_id == NULL)
  ------------------
  |  Branch (1420:9): [True: 0, False: 28.9k]
  |  Branch (1420:29): [True: 0, False: 28.9k]
  |  Branch (1420:52): [True: 0, False: 28.9k]
  ------------------
 1421|      0|        return NULL;
 1422|  28.9k|#ifndef OPENSSL_NO_EC
 1423|  28.9k|    if (!check_suiteb_cipher_list(ssl_method, c, &rule_str))
  ------------------
  |  Branch (1423:9): [True: 0, False: 28.9k]
  ------------------
 1424|      0|        return NULL;
 1425|  28.9k|#endif
 1426|       |
 1427|       |    /*
 1428|       |     * To reduce the work to do we only want to process the compiled
 1429|       |     * in algorithms, so we first get the mask of disabled ciphers.
 1430|       |     */
 1431|       |
 1432|  28.9k|    disabled_mkey = disabled_mkey_mask;
 1433|  28.9k|    disabled_auth = disabled_auth_mask;
 1434|  28.9k|    disabled_enc = disabled_enc_mask;
 1435|  28.9k|    disabled_mac = disabled_mac_mask;
 1436|       |
 1437|       |    /*
 1438|       |     * Now we have to collect the available ciphers from the compiled
 1439|       |     * in ciphers. We cannot get more than the number compiled in, so
 1440|       |     * it is used for allocation.
 1441|       |     */
 1442|  28.9k|    num_of_ciphers = ssl_method->num_ciphers();
 1443|       |
 1444|  28.9k|    co_list = OPENSSL_malloc(sizeof(*co_list) * num_of_ciphers);
  ------------------
  |  |  118|  28.9k|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1445|  28.9k|    if (co_list == NULL) {
  ------------------
  |  Branch (1445:9): [True: 0, False: 28.9k]
  ------------------
 1446|      0|        SSLerr(SSL_F_SSL_CREATE_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 1447|      0|        return NULL;          /* Failure */
 1448|      0|    }
 1449|       |
 1450|  28.9k|    ssl_cipher_collect_ciphers(ssl_method, num_of_ciphers,
 1451|  28.9k|                               disabled_mkey, disabled_auth, disabled_enc,
 1452|  28.9k|                               disabled_mac, co_list, &head, &tail);
 1453|       |
 1454|       |    /* Now arrange all ciphers by preference. */
 1455|       |
 1456|       |    /*
 1457|       |     * Everything else being equal, prefer ephemeral ECDH over other key
 1458|       |     * exchange mechanisms.
 1459|       |     * For consistency, prefer ECDSA over RSA (though this only matters if the
 1460|       |     * server has both certificates, and is using the DEFAULT, or a client
 1461|       |     * preference).
 1462|       |     */
 1463|  28.9k|    ssl_cipher_apply_rule(0, SSL_kECDHE, SSL_aECDSA, 0, 0, 0, 0, CIPHER_ADD,
  ------------------
  |  |  166|  28.9k|# define SSL_kECDHE              0x00000004U
  ------------------
                  ssl_cipher_apply_rule(0, SSL_kECDHE, SSL_aECDSA, 0, 0, 0, 0, CIPHER_ADD,
  ------------------
  |  |  195|  28.9k|# define SSL_aECDSA              0x00000008U
  ------------------
                  ssl_cipher_apply_rule(0, SSL_kECDHE, SSL_aECDSA, 0, 0, 0, 0, CIPHER_ADD,
  ------------------
  |  |  180|  28.9k|#define CIPHER_ADD      1
  ------------------
 1464|  28.9k|                          -1, &head, &tail);
 1465|  28.9k|    ssl_cipher_apply_rule(0, SSL_kECDHE, 0, 0, 0, 0, 0, CIPHER_ADD, -1, &head,
  ------------------
  |  |  166|  28.9k|# define SSL_kECDHE              0x00000004U
  ------------------
                  ssl_cipher_apply_rule(0, SSL_kECDHE, 0, 0, 0, 0, 0, CIPHER_ADD, -1, &head,
  ------------------
  |  |  180|  28.9k|#define CIPHER_ADD      1
  ------------------
 1466|  28.9k|                          &tail);
 1467|  28.9k|    ssl_cipher_apply_rule(0, SSL_kECDHE, 0, 0, 0, 0, 0, CIPHER_DEL, -1, &head,
  ------------------
  |  |  166|  28.9k|# define SSL_kECDHE              0x00000004U
  ------------------
                  ssl_cipher_apply_rule(0, SSL_kECDHE, 0, 0, 0, 0, 0, CIPHER_DEL, -1, &head,
  ------------------
  |  |  182|  28.9k|#define CIPHER_DEL      3
  ------------------
 1468|  28.9k|                          &tail);
 1469|       |
 1470|       |    /* Within each strength group, we prefer GCM over CHACHA... */
 1471|  28.9k|    ssl_cipher_apply_rule(0, 0, 0, SSL_AESGCM, 0, 0, 0, CIPHER_ADD, -1,
  ------------------
  |  |  234|  28.9k|# define SSL_AESGCM              (SSL_AES128GCM | SSL_AES256GCM)
  |  |  ------------------
  |  |  |  |  223|  28.9k|# define SSL_AES128GCM           0x00001000U
  |  |  ------------------
  |  |               # define SSL_AESGCM              (SSL_AES128GCM | SSL_AES256GCM)
  |  |  ------------------
  |  |  |  |  224|  28.9k|# define SSL_AES256GCM           0x00002000U
  |  |  ------------------
  ------------------
                  ssl_cipher_apply_rule(0, 0, 0, SSL_AESGCM, 0, 0, 0, CIPHER_ADD, -1,
  ------------------
  |  |  180|  28.9k|#define CIPHER_ADD      1
  ------------------
 1472|  28.9k|                          &head, &tail);
 1473|  28.9k|    ssl_cipher_apply_rule(0, 0, 0, SSL_CHACHA20, 0, 0, 0, CIPHER_ADD, -1,
  ------------------
  |  |  238|  28.9k|# define SSL_CHACHA20            (SSL_CHACHA20POLY1305)
  |  |  ------------------
  |  |  |  |  230|  28.9k|# define SSL_CHACHA20POLY1305    0x00080000U
  |  |  ------------------
  ------------------
                  ssl_cipher_apply_rule(0, 0, 0, SSL_CHACHA20, 0, 0, 0, CIPHER_ADD, -1,
  ------------------
  |  |  180|  28.9k|#define CIPHER_ADD      1
  ------------------
 1474|  28.9k|                          &head, &tail);
 1475|       |
 1476|       |    /*
 1477|       |     * ...and generally, our preferred cipher is AES.
 1478|       |     * Note that AEADs will be bumped to take preference after sorting by
 1479|       |     * strength.
 1480|       |     */
 1481|  28.9k|    ssl_cipher_apply_rule(0, 0, 0, SSL_AES ^ SSL_AESGCM, 0, 0, 0, CIPHER_ADD,
  ------------------
  |  |  236|  28.9k|# define SSL_AES                 (SSL_AES128|SSL_AES256|SSL_AESGCM|SSL_AESCCM)
  |  |  ------------------
  |  |  |  |  217|  28.9k|# define SSL_AES128              0x00000040U
  |  |  ------------------
  |  |               # define SSL_AES                 (SSL_AES128|SSL_AES256|SSL_AESGCM|SSL_AESCCM)
  |  |  ------------------
  |  |  |  |  218|  28.9k|# define SSL_AES256              0x00000080U
  |  |  ------------------
  |  |               # define SSL_AES                 (SSL_AES128|SSL_AES256|SSL_AESGCM|SSL_AESCCM)
  |  |  ------------------
  |  |  |  |  234|  28.9k|# define SSL_AESGCM              (SSL_AES128GCM | SSL_AES256GCM)
  |  |  |  |  ------------------
  |  |  |  |  |  |  223|  28.9k|# define SSL_AES128GCM           0x00001000U
  |  |  |  |  ------------------
  |  |  |  |               # define SSL_AESGCM              (SSL_AES128GCM | SSL_AES256GCM)
  |  |  |  |  ------------------
  |  |  |  |  |  |  224|  28.9k|# define SSL_AES256GCM           0x00002000U
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               # define SSL_AES                 (SSL_AES128|SSL_AES256|SSL_AESGCM|SSL_AESCCM)
  |  |  ------------------
  |  |  |  |  235|  28.9k|# define SSL_AESCCM              (SSL_AES128CCM | SSL_AES256CCM | SSL_AES128CCM8 | SSL_AES256CCM8)
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|  28.9k|# define SSL_AES128CCM           0x00004000U
  |  |  |  |  ------------------
  |  |  |  |               # define SSL_AESCCM              (SSL_AES128CCM | SSL_AES256CCM | SSL_AES128CCM8 | SSL_AES256CCM8)
  |  |  |  |  ------------------
  |  |  |  |  |  |  226|  28.9k|# define SSL_AES256CCM           0x00008000U
  |  |  |  |  ------------------
  |  |  |  |               # define SSL_AESCCM              (SSL_AES128CCM | SSL_AES256CCM | SSL_AES128CCM8 | SSL_AES256CCM8)
  |  |  |  |  ------------------
  |  |  |  |  |  |  227|  28.9k|# define SSL_AES128CCM8          0x00010000U
  |  |  |  |  ------------------
  |  |  |  |               # define SSL_AESCCM              (SSL_AES128CCM | SSL_AES256CCM | SSL_AES128CCM8 | SSL_AES256CCM8)
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|  28.9k|# define SSL_AES256CCM8          0x00020000U
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  ssl_cipher_apply_rule(0, 0, 0, SSL_AES ^ SSL_AESGCM, 0, 0, 0, CIPHER_ADD,
  ------------------
  |  |  234|  28.9k|# define SSL_AESGCM              (SSL_AES128GCM | SSL_AES256GCM)
  |  |  ------------------
  |  |  |  |  223|  28.9k|# define SSL_AES128GCM           0x00001000U
  |  |  ------------------
  |  |               # define SSL_AESGCM              (SSL_AES128GCM | SSL_AES256GCM)
  |  |  ------------------
  |  |  |  |  224|  28.9k|# define SSL_AES256GCM           0x00002000U
  |  |  ------------------
  ------------------
                  ssl_cipher_apply_rule(0, 0, 0, SSL_AES ^ SSL_AESGCM, 0, 0, 0, CIPHER_ADD,
  ------------------
  |  |  180|  28.9k|#define CIPHER_ADD      1
  ------------------
 1482|  28.9k|                          -1, &head, &tail);
 1483|       |
 1484|       |    /* Temporarily enable everything else for sorting */
 1485|  28.9k|    ssl_cipher_apply_rule(0, 0, 0, 0, 0, 0, 0, CIPHER_ADD, -1, &head, &tail);
  ------------------
  |  |  180|  28.9k|#define CIPHER_ADD      1
  ------------------
 1486|       |
 1487|       |    /* Low priority for MD5 */
 1488|  28.9k|    ssl_cipher_apply_rule(0, 0, 0, 0, SSL_MD5, 0, 0, CIPHER_ORD, -1, &head,
  ------------------
  |  |  244|  28.9k|# define SSL_MD5                 0x00000001U
  ------------------
                  ssl_cipher_apply_rule(0, 0, 0, 0, SSL_MD5, 0, 0, CIPHER_ORD, -1, &head,
  ------------------
  |  |  183|  28.9k|#define CIPHER_ORD      4
  ------------------
 1489|  28.9k|                          &tail);
 1490|       |
 1491|       |    /*
 1492|       |     * Move anonymous ciphers to the end.  Usually, these will remain
 1493|       |     * disabled. (For applications that allow them, they aren't too bad, but
 1494|       |     * we prefer authenticated ciphers.)
 1495|       |     */
 1496|  28.9k|    ssl_cipher_apply_rule(0, 0, SSL_aNULL, 0, 0, 0, 0, CIPHER_ORD, -1, &head,
  ------------------
  |  |  193|  28.9k|# define SSL_aNULL               0x00000004U
  ------------------
                  ssl_cipher_apply_rule(0, 0, SSL_aNULL, 0, 0, 0, 0, CIPHER_ORD, -1, &head,
  ------------------
  |  |  183|  28.9k|#define CIPHER_ORD      4
  ------------------
 1497|  28.9k|                          &tail);
 1498|       |
 1499|  28.9k|    ssl_cipher_apply_rule(0, SSL_kRSA, 0, 0, 0, 0, 0, CIPHER_ORD, -1, &head,
  ------------------
  |  |  160|  28.9k|# define SSL_kRSA                0x00000001U
  ------------------
                  ssl_cipher_apply_rule(0, SSL_kRSA, 0, 0, 0, 0, 0, CIPHER_ORD, -1, &head,
  ------------------
  |  |  183|  28.9k|#define CIPHER_ORD      4
  ------------------
 1500|  28.9k|                          &tail);
 1501|  28.9k|    ssl_cipher_apply_rule(0, SSL_kPSK, 0, 0, 0, 0, 0, CIPHER_ORD, -1, &head,
  ------------------
  |  |  170|  28.9k|# define SSL_kPSK                0x00000008U
  ------------------
                  ssl_cipher_apply_rule(0, SSL_kPSK, 0, 0, 0, 0, 0, CIPHER_ORD, -1, &head,
  ------------------
  |  |  183|  28.9k|#define CIPHER_ORD      4
  ------------------
 1502|  28.9k|                          &tail);
 1503|       |
 1504|       |    /* RC4 is sort-of broken -- move to the end */
 1505|  28.9k|    ssl_cipher_apply_rule(0, 0, 0, SSL_RC4, 0, 0, 0, CIPHER_ORD, -1, &head,
  ------------------
  |  |  213|  28.9k|# define SSL_RC4                 0x00000004U
  ------------------
                  ssl_cipher_apply_rule(0, 0, 0, SSL_RC4, 0, 0, 0, CIPHER_ORD, -1, &head,
  ------------------
  |  |  183|  28.9k|#define CIPHER_ORD      4
  ------------------
 1506|  28.9k|                          &tail);
 1507|       |
 1508|       |    /*
 1509|       |     * Now sort by symmetric encryption strength.  The above ordering remains
 1510|       |     * in force within each class
 1511|       |     */
 1512|  28.9k|    if (!ssl_cipher_strength_sort(&head, &tail)) {
  ------------------
  |  Branch (1512:9): [True: 0, False: 28.9k]
  ------------------
 1513|      0|        OPENSSL_free(co_list);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1514|      0|        return NULL;
 1515|      0|    }
 1516|       |
 1517|       |    /*
 1518|       |     * Partially overrule strength sort to prefer TLS 1.2 ciphers/PRFs.
 1519|       |     * TODO(openssl-team): is there an easier way to accomplish all this?
 1520|       |     */
 1521|  28.9k|    ssl_cipher_apply_rule(0, 0, 0, 0, 0, TLS1_2_VERSION, 0, CIPHER_BUMP, -1,
  ------------------
  |  |   29|  28.9k|# define TLS1_2_VERSION                  0x0303
  ------------------
                  ssl_cipher_apply_rule(0, 0, 0, 0, 0, TLS1_2_VERSION, 0, CIPHER_BUMP, -1,
  ------------------
  |  |  189|  28.9k|#define CIPHER_BUMP     6
  ------------------
 1522|  28.9k|                          &head, &tail);
 1523|       |
 1524|       |    /*
 1525|       |     * Irrespective of strength, enforce the following order:
 1526|       |     * (EC)DHE + AEAD > (EC)DHE > rest of AEAD > rest.
 1527|       |     * Within each group, ciphers remain sorted by strength and previous
 1528|       |     * preference, i.e.,
 1529|       |     * 1) ECDHE > DHE
 1530|       |     * 2) GCM > CHACHA
 1531|       |     * 3) AES > rest
 1532|       |     * 4) TLS 1.2 > legacy
 1533|       |     *
 1534|       |     * Because we now bump ciphers to the top of the list, we proceed in
 1535|       |     * reverse order of preference.
 1536|       |     */
 1537|  28.9k|    ssl_cipher_apply_rule(0, 0, 0, 0, SSL_AEAD, 0, 0, CIPHER_BUMP, -1,
  ------------------
  |  |  251|  28.9k|# define SSL_AEAD                0x00000040U
  ------------------
                  ssl_cipher_apply_rule(0, 0, 0, 0, SSL_AEAD, 0, 0, CIPHER_BUMP, -1,
  ------------------
  |  |  189|  28.9k|#define CIPHER_BUMP     6
  ------------------
 1538|  28.9k|                          &head, &tail);
 1539|  28.9k|    ssl_cipher_apply_rule(0, SSL_kDHE | SSL_kECDHE, 0, 0, 0, 0, 0,
  ------------------
  |  |  162|  28.9k|# define SSL_kDHE                0x00000002U
  ------------------
                  ssl_cipher_apply_rule(0, SSL_kDHE | SSL_kECDHE, 0, 0, 0, 0, 0,
  ------------------
  |  |  166|  28.9k|# define SSL_kECDHE              0x00000004U
  ------------------
 1540|  28.9k|                          CIPHER_BUMP, -1, &head, &tail);
  ------------------
  |  |  189|  28.9k|#define CIPHER_BUMP     6
  ------------------
 1541|  28.9k|    ssl_cipher_apply_rule(0, SSL_kDHE | SSL_kECDHE, 0, 0, SSL_AEAD, 0, 0,
  ------------------
  |  |  162|  28.9k|# define SSL_kDHE                0x00000002U
  ------------------
                  ssl_cipher_apply_rule(0, SSL_kDHE | SSL_kECDHE, 0, 0, SSL_AEAD, 0, 0,
  ------------------
  |  |  166|  28.9k|# define SSL_kECDHE              0x00000004U
  ------------------
                  ssl_cipher_apply_rule(0, SSL_kDHE | SSL_kECDHE, 0, 0, SSL_AEAD, 0, 0,
  ------------------
  |  |  251|  28.9k|# define SSL_AEAD                0x00000040U
  ------------------
 1542|  28.9k|                          CIPHER_BUMP, -1, &head, &tail);
  ------------------
  |  |  189|  28.9k|#define CIPHER_BUMP     6
  ------------------
 1543|       |
 1544|       |    /* Now disable everything (maintaining the ordering!) */
 1545|  28.9k|    ssl_cipher_apply_rule(0, 0, 0, 0, 0, 0, 0, CIPHER_DEL, -1, &head, &tail);
  ------------------
  |  |  182|  28.9k|#define CIPHER_DEL      3
  ------------------
 1546|       |
 1547|       |    /*
 1548|       |     * We also need cipher aliases for selecting based on the rule_str.
 1549|       |     * There might be two types of entries in the rule_str: 1) names
 1550|       |     * of ciphers themselves 2) aliases for groups of ciphers.
 1551|       |     * For 1) we need the available ciphers and for 2) the cipher
 1552|       |     * groups of cipher_aliases added together in one list (otherwise
 1553|       |     * we would be happy with just the cipher_aliases table).
 1554|       |     */
 1555|  28.9k|    num_of_group_aliases = OSSL_NELEM(cipher_aliases);
  ------------------
  |  |   13|  28.9k|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
 1556|  28.9k|    num_of_alias_max = num_of_ciphers + num_of_group_aliases + 1;
 1557|  28.9k|    ca_list = OPENSSL_malloc(sizeof(*ca_list) * num_of_alias_max);
  ------------------
  |  |  118|  28.9k|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1558|  28.9k|    if (ca_list == NULL) {
  ------------------
  |  Branch (1558:9): [True: 0, False: 28.9k]
  ------------------
 1559|      0|        OPENSSL_free(co_list);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1560|      0|        SSLerr(SSL_F_SSL_CREATE_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 1561|      0|        return NULL;          /* Failure */
 1562|      0|    }
 1563|  28.9k|    ssl_cipher_collect_aliases(ca_list, num_of_group_aliases,
 1564|  28.9k|                               disabled_mkey, disabled_auth, disabled_enc,
 1565|  28.9k|                               disabled_mac, head);
 1566|       |
 1567|       |    /*
 1568|       |     * If the rule_string begins with DEFAULT, apply the default rule
 1569|       |     * before using the (possibly available) additional rules.
 1570|       |     */
 1571|  28.9k|    ok = 1;
 1572|  28.9k|    rule_p = rule_str;
 1573|  28.9k|    if (strncmp(rule_str, "DEFAULT", 7) == 0) {
  ------------------
  |  Branch (1573:9): [True: 0, False: 28.9k]
  ------------------
 1574|      0|        ok = ssl_cipher_process_rulestr(SSL_DEFAULT_CIPHER_LIST,
  ------------------
  |  |  173|      0|# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL"
  ------------------
 1575|      0|                                        &head, &tail, ca_list, c);
 1576|      0|        rule_p += 7;
 1577|      0|        if (*rule_p == ':')
  ------------------
  |  Branch (1577:13): [True: 0, False: 0]
  ------------------
 1578|      0|            rule_p++;
 1579|      0|    }
 1580|       |
 1581|  28.9k|    if (ok && (strlen(rule_p) > 0))
  ------------------
  |  Branch (1581:9): [True: 28.9k, False: 0]
  |  Branch (1581:15): [True: 28.9k, False: 0]
  ------------------
 1582|  28.9k|        ok = ssl_cipher_process_rulestr(rule_p, &head, &tail, ca_list, c);
 1583|       |
 1584|  28.9k|    OPENSSL_free(ca_list);      /* Not needed anymore */
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1585|       |
 1586|  28.9k|    if (!ok) {                  /* Rule processing failure */
  ------------------
  |  Branch (1586:9): [True: 0, False: 28.9k]
  ------------------
 1587|      0|        OPENSSL_free(co_list);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1588|      0|        return NULL;
 1589|      0|    }
 1590|       |
 1591|       |    /*
 1592|       |     * Allocate new "cipherstack" for the result, return with error
 1593|       |     * if we cannot get one.
 1594|       |     */
 1595|  28.9k|    if ((cipherstack = sk_SSL_CIPHER_new_null()) == NULL) {
  ------------------
  |  Branch (1595:9): [True: 0, False: 28.9k]
  ------------------
 1596|      0|        OPENSSL_free(co_list);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1597|      0|        return NULL;
 1598|      0|    }
 1599|       |
 1600|       |    /* Add TLSv1.3 ciphers first - we always prefer those if possible */
 1601|   115k|    for (i = 0; i < sk_SSL_CIPHER_num(tls13_ciphersuites); i++) {
  ------------------
  |  Branch (1601:17): [True: 86.9k, False: 28.9k]
  ------------------
 1602|  86.9k|        if (!sk_SSL_CIPHER_push(cipherstack,
  ------------------
  |  Branch (1602:13): [True: 0, False: 86.9k]
  ------------------
 1603|  86.9k|                                sk_SSL_CIPHER_value(tls13_ciphersuites, i))) {
 1604|      0|            sk_SSL_CIPHER_free(cipherstack);
 1605|      0|            return NULL;
 1606|      0|        }
 1607|  86.9k|    }
 1608|       |
 1609|       |    /*
 1610|       |     * The cipher selection for the list is done. The ciphers are added
 1611|       |     * to the resulting precedence to the STACK_OF(SSL_CIPHER).
 1612|       |     */
 1613|  1.68M|    for (curr = head; curr != NULL; curr = curr->next) {
  ------------------
  |  Branch (1613:23): [True: 1.65M, False: 28.9k]
  ------------------
 1614|  1.65M|        if (curr->active) {
  ------------------
  |  Branch (1614:13): [True: 1.65M, False: 0]
  ------------------
 1615|  1.65M|            if (!sk_SSL_CIPHER_push(cipherstack, curr->cipher)) {
  ------------------
  |  Branch (1615:17): [True: 0, False: 1.65M]
  ------------------
 1616|      0|                OPENSSL_free(co_list);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1617|      0|                sk_SSL_CIPHER_free(cipherstack);
 1618|      0|                return NULL;
 1619|      0|            }
 1620|       |#ifdef CIPHER_DEBUG
 1621|       |            fprintf(stderr, "<%s>\n", curr->cipher->name);
 1622|       |#endif
 1623|  1.65M|        }
 1624|  1.65M|    }
 1625|  28.9k|    OPENSSL_free(co_list);      /* Not needed any longer */
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1626|       |
 1627|  28.9k|    if (!update_cipher_list_by_id(cipher_list_by_id, cipherstack)) {
  ------------------
  |  Branch (1627:9): [True: 0, False: 28.9k]
  ------------------
 1628|      0|        sk_SSL_CIPHER_free(cipherstack);
 1629|      0|        return NULL;
 1630|      0|    }
 1631|  28.9k|    sk_SSL_CIPHER_free(*cipher_list);
 1632|  28.9k|    *cipher_list = cipherstack;
 1633|       |
 1634|  28.9k|    return cipherstack;
 1635|  28.9k|}
SSL_COMP_get_compression_methods:
 1919|  28.9k|{
 1920|       |    return NULL;
 1921|  28.9k|}
ssl_cert_is_disabled:
 2158|   927k|{
 2159|   927k|    const SSL_CERT_LOOKUP *cl = ssl_cert_lookup_by_idx(idx);
 2160|       |
 2161|   927k|    if (cl == NULL || (cl->amask & disabled_auth_mask) != 0)
  ------------------
  |  Branch (2161:9): [True: 0, False: 927k]
  |  Branch (2161:23): [True: 0, False: 927k]
  ------------------
 2162|      0|        return 1;
 2163|   927k|    return 0;
 2164|   927k|}
ssl_ciph.c:get_optional_pkey_id:
  335|     10|{
  336|     10|    const EVP_PKEY_ASN1_METHOD *ameth;
  337|     10|    ENGINE *tmpeng = NULL;
  338|     10|    int pkey_id = 0;
  339|     10|    ameth = EVP_PKEY_asn1_find_str(&tmpeng, pkey_name, -1);
  340|     10|    if (ameth) {
  ------------------
  |  Branch (340:9): [True: 0, False: 10]
  ------------------
  341|      0|        if (EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL,
  ------------------
  |  Branch (341:13): [True: 0, False: 0]
  ------------------
  342|      0|                                    ameth) <= 0)
  343|      0|            pkey_id = 0;
  344|      0|    }
  345|     10|    ENGINE_finish(tmpeng);
  346|     10|    return pkey_id;
  347|     10|}
ssl_ciph.c:set_ciphersuites:
 1307|  28.9k|{
 1308|  28.9k|    STACK_OF(SSL_CIPHER) *newciphers = sk_SSL_CIPHER_new_null();
  ------------------
  |  |   20|  28.9k|# define STACK_OF(type) struct stack_st_##type
  ------------------
 1309|       |
 1310|  28.9k|    if (newciphers == NULL)
  ------------------
  |  Branch (1310:9): [True: 0, False: 28.9k]
  ------------------
 1311|      0|        return 0;
 1312|       |
 1313|       |    /* Parse the list. We explicitly allow an empty list */
 1314|  28.9k|    if (*str != '\0'
  ------------------
  |  Branch (1314:9): [True: 28.9k, False: 0]
  ------------------
 1315|  28.9k|            && !CONF_parse_list(str, ':', 1, ciphersuite_cb, newciphers)) {
  ------------------
  |  Branch (1315:16): [True: 0, False: 28.9k]
  ------------------
 1316|      0|        sk_SSL_CIPHER_free(newciphers);
 1317|      0|        return 0;
 1318|      0|    }
 1319|  28.9k|    sk_SSL_CIPHER_free(*currciphers);
 1320|  28.9k|    *currciphers = newciphers;
 1321|       |
 1322|  28.9k|    return 1;
 1323|  28.9k|}
ssl_ciph.c:ciphersuite_cb:
 1278|  86.9k|{
 1279|  86.9k|    STACK_OF(SSL_CIPHER) *ciphersuites = (STACK_OF(SSL_CIPHER) *)arg;
  ------------------
  |  |   20|  86.9k|# define STACK_OF(type) struct stack_st_##type
  ------------------
 1280|  86.9k|    const SSL_CIPHER *cipher;
 1281|       |    /* Arbitrary sized temp buffer for the cipher name. Should be big enough */
 1282|  86.9k|    char name[80];
 1283|       |
 1284|  86.9k|    if (len > (int)(sizeof(name) - 1)) {
  ------------------
  |  Branch (1284:9): [True: 0, False: 86.9k]
  ------------------
 1285|      0|        SSLerr(SSL_F_CIPHERSUITE_CB, SSL_R_NO_CIPHER_MATCH);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 1286|      0|        return 0;
 1287|      0|    }
 1288|       |
 1289|  86.9k|    memcpy(name, elem, len);
 1290|  86.9k|    name[len] = '\0';
 1291|       |
 1292|  86.9k|    cipher = ssl3_get_cipher_by_std_name(name);
 1293|  86.9k|    if (cipher == NULL) {
  ------------------
  |  Branch (1293:9): [True: 0, False: 86.9k]
  ------------------
 1294|      0|        SSLerr(SSL_F_CIPHERSUITE_CB, SSL_R_NO_CIPHER_MATCH);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 1295|      0|        return 0;
 1296|      0|    }
 1297|       |
 1298|  86.9k|    if (!sk_SSL_CIPHER_push(ciphersuites, cipher)) {
  ------------------
  |  Branch (1298:9): [True: 0, False: 86.9k]
  ------------------
 1299|      0|        SSLerr(SSL_F_CIPHERSUITE_CB, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 1300|      0|        return 0;
 1301|      0|    }
 1302|       |
 1303|  86.9k|    return 1;
 1304|  86.9k|}
ssl_ciph.c:check_suiteb_cipher_list:
 1224|  28.9k|{
 1225|  28.9k|    unsigned int suiteb_flags = 0, suiteb_comb2 = 0;
 1226|  28.9k|    if (strncmp(*prule_str, "SUITEB128ONLY", 13) == 0) {
  ------------------
  |  Branch (1226:9): [True: 0, False: 28.9k]
  ------------------
 1227|      0|        suiteb_flags = SSL_CERT_FLAG_SUITEB_128_LOS_ONLY;
  ------------------
  |  |  518|      0|# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY       0x10000
  ------------------
 1228|  28.9k|    } else if (strncmp(*prule_str, "SUITEB128C2", 11) == 0) {
  ------------------
  |  Branch (1228:16): [True: 0, False: 28.9k]
  ------------------
 1229|      0|        suiteb_comb2 = 1;
 1230|      0|        suiteb_flags = SSL_CERT_FLAG_SUITEB_128_LOS;
  ------------------
  |  |  522|      0|# define SSL_CERT_FLAG_SUITEB_128_LOS            0x30000
  ------------------
 1231|  28.9k|    } else if (strncmp(*prule_str, "SUITEB128", 9) == 0) {
  ------------------
  |  Branch (1231:16): [True: 0, False: 28.9k]
  ------------------
 1232|      0|        suiteb_flags = SSL_CERT_FLAG_SUITEB_128_LOS;
  ------------------
  |  |  522|      0|# define SSL_CERT_FLAG_SUITEB_128_LOS            0x30000
  ------------------
 1233|  28.9k|    } else if (strncmp(*prule_str, "SUITEB192", 9) == 0) {
  ------------------
  |  Branch (1233:16): [True: 0, False: 28.9k]
  ------------------
 1234|      0|        suiteb_flags = SSL_CERT_FLAG_SUITEB_192_LOS;
  ------------------
  |  |  520|      0|# define SSL_CERT_FLAG_SUITEB_192_LOS            0x20000
  ------------------
 1235|      0|    }
 1236|       |
 1237|  28.9k|    if (suiteb_flags) {
  ------------------
  |  Branch (1237:9): [True: 0, False: 28.9k]
  ------------------
 1238|      0|        c->cert_flags &= ~SSL_CERT_FLAG_SUITEB_128_LOS;
  ------------------
  |  |  522|      0|# define SSL_CERT_FLAG_SUITEB_128_LOS            0x30000
  ------------------
 1239|      0|        c->cert_flags |= suiteb_flags;
 1240|  28.9k|    } else {
 1241|  28.9k|        suiteb_flags = c->cert_flags & SSL_CERT_FLAG_SUITEB_128_LOS;
  ------------------
  |  |  522|  28.9k|# define SSL_CERT_FLAG_SUITEB_128_LOS            0x30000
  ------------------
 1242|  28.9k|    }
 1243|       |
 1244|  28.9k|    if (!suiteb_flags)
  ------------------
  |  Branch (1244:9): [True: 28.9k, False: 0]
  ------------------
 1245|  28.9k|        return 1;
 1246|       |    /* Check version: if TLS 1.2 ciphers allowed we can use Suite B */
 1247|       |
 1248|      0|    if (!(meth->ssl3_enc->enc_flags & SSL_ENC_FLAG_TLS1_2_CIPHERS)) {
  ------------------
  |  | 1999|      0|# define SSL_ENC_FLAG_TLS1_2_CIPHERS     0x10
  ------------------
  |  Branch (1248:9): [True: 0, False: 0]
  ------------------
 1249|      0|        SSLerr(SSL_F_CHECK_SUITEB_CIPHER_LIST,
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 1250|      0|               SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE);
 1251|      0|        return 0;
 1252|      0|    }
 1253|      0|# ifndef OPENSSL_NO_EC
 1254|      0|    switch (suiteb_flags) {
  ------------------
  |  Branch (1254:13): [True: 0, False: 0]
  ------------------
 1255|      0|    case SSL_CERT_FLAG_SUITEB_128_LOS:
  ------------------
  |  |  522|      0|# define SSL_CERT_FLAG_SUITEB_128_LOS            0x30000
  ------------------
  |  Branch (1255:5): [True: 0, False: 0]
  ------------------
 1256|      0|        if (suiteb_comb2)
  ------------------
  |  Branch (1256:13): [True: 0, False: 0]
  ------------------
 1257|      0|            *prule_str = "ECDHE-ECDSA-AES256-GCM-SHA384";
 1258|      0|        else
 1259|      0|            *prule_str =
 1260|      0|                "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384";
 1261|      0|        break;
 1262|      0|    case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
  ------------------
  |  |  518|      0|# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY       0x10000
  ------------------
  |  Branch (1262:5): [True: 0, False: 0]
  ------------------
 1263|      0|        *prule_str = "ECDHE-ECDSA-AES128-GCM-SHA256";
 1264|      0|        break;
 1265|      0|    case SSL_CERT_FLAG_SUITEB_192_LOS:
  ------------------
  |  |  520|      0|# define SSL_CERT_FLAG_SUITEB_192_LOS            0x20000
  ------------------
  |  Branch (1265:5): [True: 0, False: 0]
  ------------------
 1266|      0|        *prule_str = "ECDHE-ECDSA-AES256-GCM-SHA384";
 1267|      0|        break;
 1268|      0|    }
 1269|      0|    return 1;
 1270|       |# else
 1271|       |    SSLerr(SSL_F_CHECK_SUITEB_CIPHER_LIST, SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE);
 1272|       |    return 0;
 1273|       |# endif
 1274|      0|}
ssl_ciph.c:ssl_cipher_collect_ciphers:
  650|  28.9k|{
  651|  28.9k|    int i, co_list_num;
  652|  28.9k|    const SSL_CIPHER *c;
  653|       |
  654|       |    /*
  655|       |     * We have num_of_ciphers descriptions compiled in, depending on the
  656|       |     * method selected (SSLv3, TLSv1 etc).
  657|       |     * These will later be sorted in a linked list with at most num
  658|       |     * entries.
  659|       |     */
  660|       |
  661|       |    /* Get the initial list of ciphers */
  662|  28.9k|    co_list_num = 0;            /* actual count of ciphers */
  663|  4.78M|    for (i = 0; i < num_of_ciphers; i++) {
  ------------------
  |  Branch (663:17): [True: 4.75M, False: 28.9k]
  ------------------
  664|  4.75M|        c = ssl_method->get_cipher(i);
  665|       |        /* drop those that use any of that is not available */
  666|  4.75M|        if (c == NULL || !c->valid)
  ------------------
  |  Branch (666:13): [True: 0, False: 4.75M]
  |  Branch (666:26): [True: 0, False: 4.75M]
  ------------------
  667|      0|            continue;
  668|  4.75M|        if ((c->algorithm_mkey & disabled_mkey) ||
  ------------------
  |  Branch (668:13): [True: 115k, False: 4.63M]
  ------------------
  669|  4.63M|            (c->algorithm_auth & disabled_auth) ||
  ------------------
  |  Branch (669:13): [True: 0, False: 4.63M]
  ------------------
  670|  4.63M|            (c->algorithm_enc & disabled_enc) ||
  ------------------
  |  Branch (670:13): [True: 0, False: 4.63M]
  ------------------
  671|  4.63M|            (c->algorithm_mac & disabled_mac))
  ------------------
  |  Branch (671:13): [True: 0, False: 4.63M]
  ------------------
  672|   115k|            continue;
  673|  4.63M|        if (((ssl_method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS) == 0) &&
  ------------------
  |  | 1994|  4.63M|# define SSL_ENC_FLAG_DTLS               0x8
  ------------------
  |  Branch (673:13): [True: 4.63M, False: 0]
  ------------------
  674|  4.63M|            c->min_tls == 0)
  ------------------
  |  Branch (674:13): [True: 0, False: 4.63M]
  ------------------
  675|      0|            continue;
  676|  4.63M|        if (((ssl_method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS) != 0) &&
  ------------------
  |  | 1994|  4.63M|# define SSL_ENC_FLAG_DTLS               0x8
  ------------------
  |  Branch (676:13): [True: 0, False: 4.63M]
  ------------------
  677|      0|            c->min_dtls == 0)
  ------------------
  |  Branch (677:13): [True: 0, False: 0]
  ------------------
  678|      0|            continue;
  679|       |
  680|  4.63M|        co_list[co_list_num].cipher = c;
  681|  4.63M|        co_list[co_list_num].next = NULL;
  682|  4.63M|        co_list[co_list_num].prev = NULL;
  683|  4.63M|        co_list[co_list_num].active = 0;
  684|  4.63M|        co_list_num++;
  685|  4.63M|    }
  686|       |
  687|       |    /*
  688|       |     * Prepare linked list from list entries
  689|       |     */
  690|  28.9k|    if (co_list_num > 0) {
  ------------------
  |  Branch (690:9): [True: 28.9k, False: 0]
  ------------------
  691|  28.9k|        co_list[0].prev = NULL;
  692|       |
  693|  28.9k|        if (co_list_num > 1) {
  ------------------
  |  Branch (693:13): [True: 28.9k, False: 0]
  ------------------
  694|  28.9k|            co_list[0].next = &co_list[1];
  695|       |
  696|  4.60M|            for (i = 1; i < co_list_num - 1; i++) {
  ------------------
  |  Branch (696:25): [True: 4.58M, False: 28.9k]
  ------------------
  697|  4.58M|                co_list[i].prev = &co_list[i - 1];
  698|  4.58M|                co_list[i].next = &co_list[i + 1];
  699|  4.58M|            }
  700|       |
  701|  28.9k|            co_list[co_list_num - 1].prev = &co_list[co_list_num - 2];
  702|  28.9k|        }
  703|       |
  704|  28.9k|        co_list[co_list_num - 1].next = NULL;
  705|       |
  706|  28.9k|        *head_p = &co_list[0];
  707|  28.9k|        *tail_p = &co_list[co_list_num - 1];
  708|  28.9k|    }
  709|  28.9k|}
ssl_ciph.c:ssl_cipher_apply_rule:
  779|   666k|{
  780|   666k|    CIPHER_ORDER *head, *tail, *curr, *next, *last;
  781|   666k|    const SSL_CIPHER *cp;
  782|   666k|    int reverse = 0;
  783|       |
  784|       |#ifdef CIPHER_DEBUG
  785|       |    fprintf(stderr,
  786|       |            "Applying rule %d with %08x/%08x/%08x/%08x/%08x %08x (%d)\n",
  787|       |            rule, alg_mkey, alg_auth, alg_enc, alg_mac, min_tls,
  788|       |            algo_strength, strength_bits);
  789|       |#endif
  790|       |
  791|   666k|    if (rule == CIPHER_DEL || rule == CIPHER_BUMP)
  ------------------
  |  |  182|  1.33M|#define CIPHER_DEL      3
  ------------------
                  if (rule == CIPHER_DEL || rule == CIPHER_BUMP)
  ------------------
  |  |  189|   608k|#define CIPHER_BUMP     6
  ------------------
  |  Branch (791:9): [True: 57.9k, False: 608k]
  |  Branch (791:31): [True: 115k, False: 492k]
  ------------------
  792|   173k|        reverse = 1;            /* needed to maintain sorting between currently
  793|       |                                 * deleted ciphers */
  794|       |
  795|   666k|    head = *head_p;
  796|   666k|    tail = *tail_p;
  797|       |
  798|   666k|    if (reverse) {
  ------------------
  |  Branch (798:9): [True: 173k, False: 492k]
  ------------------
  799|   173k|        next = tail;
  800|   173k|        last = head;
  801|   492k|    } else {
  802|   492k|        next = head;
  803|   492k|        last = tail;
  804|   492k|    }
  805|       |
  806|   666k|    curr = NULL;
  807|   104M|    for (;;) {
  808|   104M|        if (curr == last)
  ------------------
  |  Branch (808:13): [True: 666k, False: 104M]
  ------------------
  809|   666k|            break;
  810|       |
  811|   104M|        curr = next;
  812|       |
  813|   104M|        if (curr == NULL)
  ------------------
  |  Branch (813:13): [True: 0, False: 104M]
  ------------------
  814|      0|            break;
  815|       |
  816|   104M|        next = reverse ? curr->prev : curr->next;
  ------------------
  |  Branch (816:16): [True: 27.8M, False: 76.3M]
  ------------------
  817|       |
  818|   104M|        cp = curr->cipher;
  819|       |
  820|       |        /*
  821|       |         * Selection criteria is either the value of strength_bits
  822|       |         * or the algorithms used.
  823|       |         */
  824|   104M|        if (strength_bits >= 0) {
  ------------------
  |  Branch (824:13): [True: 13.9M, False: 90.2M]
  ------------------
  825|  13.9M|            if (strength_bits != cp->strength_bits)
  ------------------
  |  Branch (825:17): [True: 9.27M, False: 4.63M]
  ------------------
  826|  9.27M|                continue;
  827|  90.2M|        } else {
  828|       |#ifdef CIPHER_DEBUG
  829|       |            fprintf(stderr,
  830|       |                    "\nName: %s:\nAlgo = %08x/%08x/%08x/%08x/%08x Algo_strength = %08x\n",
  831|       |                    cp->name, cp->algorithm_mkey, cp->algorithm_auth,
  832|       |                    cp->algorithm_enc, cp->algorithm_mac, cp->min_tls,
  833|       |                    cp->algo_strength);
  834|       |#endif
  835|  90.2M|            if (cipher_id != 0 && (cipher_id != cp->id))
  ------------------
  |  Branch (835:17): [True: 0, False: 90.2M]
  |  Branch (835:35): [True: 0, False: 0]
  ------------------
  836|      0|                continue;
  837|  90.2M|            if (alg_mkey && !(alg_mkey & cp->algorithm_mkey))
  ------------------
  |  Branch (837:17): [True: 32.4M, False: 57.8M]
  |  Branch (837:29): [True: 24.4M, False: 8.05M]
  ------------------
  838|  24.4M|                continue;
  839|  65.8M|            if (alg_auth && !(alg_auth & cp->algorithm_auth))
  ------------------
  |  Branch (839:17): [True: 5.53M, False: 60.3M]
  |  Branch (839:29): [True: 4.66M, False: 869k]
  ------------------
  840|  4.66M|                continue;
  841|  61.2M|            if (alg_enc && !(alg_enc & cp->algorithm_enc))
  ------------------
  |  Branch (841:17): [True: 25.3M, False: 35.8M]
  |  Branch (841:28): [True: 18.0M, False: 7.33M]
  ------------------
  842|  18.0M|                continue;
  843|  43.1M|            if (alg_mac && !(alg_mac & cp->algorithm_mac))
  ------------------
  |  Branch (843:17): [True: 11.3M, False: 31.7M]
  |  Branch (843:28): [True: 8.75M, False: 2.63M]
  ------------------
  844|  8.75M|                continue;
  845|  34.4M|            if (min_tls && (min_tls != cp->min_tls))
  ------------------
  |  Branch (845:17): [True: 4.63M, False: 29.7M]
  |  Branch (845:28): [True: 2.14M, False: 2.49M]
  ------------------
  846|  2.14M|                continue;
  847|  32.2M|            if ((algo_strength & SSL_STRONG_MASK)
  ------------------
  |  |  303|  32.2M|# define SSL_STRONG_MASK         0x0000001FU
  ------------------
  |  Branch (847:17): [True: 0, False: 32.2M]
  ------------------
  848|      0|                && !(algo_strength & SSL_STRONG_MASK & cp->algo_strength))
  ------------------
  |  |  303|      0|# define SSL_STRONG_MASK         0x0000001FU
  ------------------
  |  Branch (848:20): [True: 0, False: 0]
  ------------------
  849|      0|                continue;
  850|  32.2M|            if ((algo_strength & SSL_DEFAULT_MASK)
  ------------------
  |  |  304|  32.2M|# define SSL_DEFAULT_MASK        0X00000020U
  ------------------
  |  Branch (850:17): [True: 4.63M, False: 27.6M]
  ------------------
  851|  4.63M|                && !(algo_strength & SSL_DEFAULT_MASK & cp->algo_strength))
  ------------------
  |  |  304|  4.63M|# define SSL_DEFAULT_MASK        0X00000020U
  ------------------
  |  Branch (851:20): [True: 2.17M, False: 2.46M]
  ------------------
  852|  2.17M|                continue;
  853|  32.2M|        }
  854|       |
  855|       |#ifdef CIPHER_DEBUG
  856|       |        fprintf(stderr, "Action = %d\n", rule);
  857|       |#endif
  858|       |
  859|       |        /* add the cipher if it has not been added yet. */
  860|  34.7M|        if (rule == CIPHER_ADD) {
  ------------------
  |  |  180|  34.7M|#define CIPHER_ADD      1
  ------------------
  |  Branch (860:13): [True: 12.8M, False: 21.9M]
  ------------------
  861|       |            /* reverse == 0 */
  862|  12.8M|            if (!curr->active) {
  ------------------
  |  Branch (862:17): [True: 9.65M, False: 3.15M]
  ------------------
  863|  9.65M|                ll_append_tail(&head, curr, &tail);
  864|  9.65M|                curr->active = 1;
  865|  9.65M|            }
  866|  12.8M|        }
  867|       |        /* Move the added cipher to this location */
  868|  21.9M|        else if (rule == CIPHER_ORD) {
  ------------------
  |  |  183|  21.9M|#define CIPHER_ORD      4
  ------------------
  |  Branch (868:18): [True: 6.20M, False: 15.7M]
  ------------------
  869|       |            /* reverse == 0 */
  870|  6.20M|            if (curr->active) {
  ------------------
  |  Branch (870:17): [True: 6.20M, False: 0]
  ------------------
  871|  6.20M|                ll_append_tail(&head, curr, &tail);
  872|  6.20M|            }
  873|  15.7M|        } else if (rule == CIPHER_DEL) {
  ------------------
  |  |  182|  15.7M|#define CIPHER_DEL      3
  ------------------
  |  Branch (873:20): [True: 5.53M, False: 10.2M]
  ------------------
  874|       |            /* reverse == 1 */
  875|  5.53M|            if (curr->active) {
  ------------------
  |  Branch (875:17): [True: 5.53M, False: 0]
  ------------------
  876|       |                /*
  877|       |                 * most recently deleted ciphersuites get best positions for
  878|       |                 * any future CIPHER_ADD (note that the CIPHER_DEL loop works
  879|       |                 * in reverse to maintain the order)
  880|       |                 */
  881|  5.53M|                ll_append_head(&head, curr, &tail);
  882|  5.53M|                curr->active = 0;
  883|  5.53M|            }
  884|  10.2M|        } else if (rule == CIPHER_BUMP) {
  ------------------
  |  |  189|  10.2M|#define CIPHER_BUMP     6
  ------------------
  |  Branch (884:20): [True: 7.21M, False: 2.98M]
  ------------------
  885|  7.21M|            if (curr->active)
  ------------------
  |  Branch (885:17): [True: 7.21M, False: 0]
  ------------------
  886|  7.21M|                ll_append_head(&head, curr, &tail);
  887|  7.21M|        } else if (rule == CIPHER_KILL) {
  ------------------
  |  |  181|  2.98M|#define CIPHER_KILL     2
  ------------------
  |  Branch (887:20): [True: 2.98M, False: 0]
  ------------------
  888|       |            /* reverse == 0 */
  889|  2.98M|            if (head == curr)
  ------------------
  |  Branch (889:17): [True: 521k, False: 2.46M]
  ------------------
  890|   521k|                head = curr->next;
  891|  2.46M|            else
  892|  2.46M|                curr->prev->next = curr->next;
  893|  2.98M|            if (tail == curr)
  ------------------
  |  Branch (893:17): [True: 28.9k, False: 2.95M]
  ------------------
  894|  28.9k|                tail = curr->prev;
  895|  2.98M|            curr->active = 0;
  896|  2.98M|            if (curr->next != NULL)
  ------------------
  |  Branch (896:17): [True: 2.95M, False: 28.9k]
  ------------------
  897|  2.95M|                curr->next->prev = curr->prev;
  898|  2.98M|            if (curr->prev != NULL)
  ------------------
  |  Branch (898:17): [True: 2.46M, False: 521k]
  ------------------
  899|  2.46M|                curr->prev->next = curr->next;
  900|  2.98M|            curr->next = NULL;
  901|  2.98M|            curr->prev = NULL;
  902|  2.98M|        }
  903|  34.7M|    }
  904|       |
  905|   666k|    *head_p = head;
  906|   666k|    *tail_p = tail;
  907|   666k|}
ssl_ciph.c:ll_append_tail:
  609|  15.8M|{
  610|  15.8M|    if (curr == *tail)
  ------------------
  |  Branch (610:9): [True: 28.9k, False: 15.8M]
  ------------------
  611|  28.9k|        return;
  612|  15.8M|    if (curr == *head)
  ------------------
  |  Branch (612:9): [True: 5.56M, False: 10.2M]
  ------------------
  613|  5.56M|        *head = curr->next;
  614|  15.8M|    if (curr->prev != NULL)
  ------------------
  |  Branch (614:9): [True: 10.2M, False: 5.56M]
  ------------------
  615|  10.2M|        curr->prev->next = curr->next;
  616|  15.8M|    if (curr->next != NULL)
  ------------------
  |  Branch (616:9): [True: 15.8M, False: 0]
  ------------------
  617|  15.8M|        curr->next->prev = curr->prev;
  618|  15.8M|    (*tail)->next = curr;
  619|  15.8M|    curr->prev = *tail;
  620|       |    curr->next = NULL;
  621|  15.8M|    *tail = curr;
  622|  15.8M|}
ssl_ciph.c:ll_append_head:
  626|  12.7M|{
  627|  12.7M|    if (curr == *head)
  ------------------
  |  Branch (627:9): [True: 0, False: 12.7M]
  ------------------
  628|      0|        return;
  629|  12.7M|    if (curr == *tail)
  ------------------
  |  Branch (629:9): [True: 5.53M, False: 7.21M]
  ------------------
  630|  5.53M|        *tail = curr->prev;
  631|  12.7M|    if (curr->next != NULL)
  ------------------
  |  Branch (631:9): [True: 7.21M, False: 5.53M]
  ------------------
  632|  7.21M|        curr->next->prev = curr->prev;
  633|  12.7M|    if (curr->prev != NULL)
  ------------------
  |  Branch (633:9): [True: 12.7M, False: 0]
  ------------------
  634|  12.7M|        curr->prev->next = curr->next;
  635|  12.7M|    (*head)->prev = curr;
  636|  12.7M|    curr->next = *head;
  637|       |    curr->prev = NULL;
  638|  12.7M|    *head = curr;
  639|  12.7M|}
ssl_ciph.c:ssl_cipher_strength_sort:
  911|  28.9k|{
  912|  28.9k|    int32_t max_strength_bits;
  913|  28.9k|    int i, *number_uses;
  914|  28.9k|    CIPHER_ORDER *curr;
  915|       |
  916|       |    /*
  917|       |     * This routine sorts the ciphers with descending strength. The sorting
  918|       |     * must keep the pre-sorted sequence, so we apply the normal sorting
  919|       |     * routine as '+' movement to the end of the list.
  920|       |     */
  921|  28.9k|    max_strength_bits = 0;
  922|  28.9k|    curr = *head_p;
  923|  4.66M|    while (curr != NULL) {
  ------------------
  |  Branch (923:12): [True: 4.63M, False: 28.9k]
  ------------------
  924|  4.63M|        if (curr->active && (curr->cipher->strength_bits > max_strength_bits))
  ------------------
  |  Branch (924:13): [True: 4.63M, False: 0]
  |  Branch (924:29): [True: 28.9k, False: 4.60M]
  ------------------
  925|  28.9k|            max_strength_bits = curr->cipher->strength_bits;
  926|  4.63M|        curr = curr->next;
  927|  4.63M|    }
  928|       |
  929|  28.9k|    number_uses = OPENSSL_zalloc(sizeof(int) * (max_strength_bits + 1));
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  930|  28.9k|    if (number_uses == NULL) {
  ------------------
  |  Branch (930:9): [True: 0, False: 28.9k]
  ------------------
  931|      0|        SSLerr(SSL_F_SSL_CIPHER_STRENGTH_SORT, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  932|      0|        return 0;
  933|      0|    }
  934|       |
  935|       |    /*
  936|       |     * Now find the strength_bits values actually used
  937|       |     */
  938|  28.9k|    curr = *head_p;
  939|  4.66M|    while (curr != NULL) {
  ------------------
  |  Branch (939:12): [True: 4.63M, False: 28.9k]
  ------------------
  940|  4.63M|        if (curr->active)
  ------------------
  |  Branch (940:13): [True: 4.63M, False: 0]
  ------------------
  941|  4.63M|            number_uses[curr->cipher->strength_bits]++;
  942|  4.63M|        curr = curr->next;
  943|  4.63M|    }
  944|       |    /*
  945|       |     * Go through the list of used strength_bits values in descending
  946|       |     * order.
  947|       |     */
  948|  7.47M|    for (i = max_strength_bits; i >= 0; i--)
  ------------------
  |  Branch (948:33): [True: 7.44M, False: 28.9k]
  ------------------
  949|  7.44M|        if (number_uses[i] > 0)
  ------------------
  |  Branch (949:13): [True: 86.9k, False: 7.36M]
  ------------------
  950|  86.9k|            ssl_cipher_apply_rule(0, 0, 0, 0, 0, 0, 0, CIPHER_ORD, i, head_p,
  ------------------
  |  |  183|  86.9k|#define CIPHER_ORD      4
  ------------------
  951|  86.9k|                                  tail_p);
  952|       |
  953|  28.9k|    OPENSSL_free(number_uses);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  954|  28.9k|    return 1;
  955|  28.9k|}
ssl_ciph.c:ssl_cipher_collect_aliases:
  718|  28.9k|{
  719|  28.9k|    CIPHER_ORDER *ciph_curr;
  720|  28.9k|    const SSL_CIPHER **ca_curr;
  721|  28.9k|    int i;
  722|  28.9k|    uint32_t mask_mkey = ~disabled_mkey;
  723|  28.9k|    uint32_t mask_auth = ~disabled_auth;
  724|  28.9k|    uint32_t mask_enc = ~disabled_enc;
  725|  28.9k|    uint32_t mask_mac = ~disabled_mac;
  726|       |
  727|       |    /*
  728|       |     * First, add the real ciphers as already collected
  729|       |     */
  730|  28.9k|    ciph_curr = head;
  731|  28.9k|    ca_curr = ca_list;
  732|  4.66M|    while (ciph_curr != NULL) {
  ------------------
  |  Branch (732:12): [True: 4.63M, False: 28.9k]
  ------------------
  733|  4.63M|        *ca_curr = ciph_curr->cipher;
  734|  4.63M|        ca_curr++;
  735|  4.63M|        ciph_curr = ciph_curr->next;
  736|  4.63M|    }
  737|       |
  738|       |    /*
  739|       |     * Now we add the available ones from the cipher_aliases[] table.
  740|       |     * They represent either one or more algorithms, some of which
  741|       |     * in any affected category must be supported (set in enabled_mask),
  742|       |     * or represent a cipher strength value (will be added in any case because algorithms=0).
  743|       |     */
  744|  2.23M|    for (i = 0; i < num_of_group_aliases; i++) {
  ------------------
  |  Branch (744:17): [True: 2.20M, False: 28.9k]
  ------------------
  745|  2.20M|        uint32_t algorithm_mkey = cipher_aliases[i].algorithm_mkey;
  746|  2.20M|        uint32_t algorithm_auth = cipher_aliases[i].algorithm_auth;
  747|  2.20M|        uint32_t algorithm_enc = cipher_aliases[i].algorithm_enc;
  748|  2.20M|        uint32_t algorithm_mac = cipher_aliases[i].algorithm_mac;
  749|       |
  750|  2.20M|        if (algorithm_mkey)
  ------------------
  |  Branch (750:13): [True: 695k, False: 1.50M]
  ------------------
  751|   695k|            if ((algorithm_mkey & mask_mkey) == 0)
  ------------------
  |  Branch (751:17): [True: 28.9k, False: 666k]
  ------------------
  752|  28.9k|                continue;
  753|       |
  754|  2.17M|        if (algorithm_auth)
  ------------------
  |  Branch (754:13): [True: 579k, False: 1.59M]
  ------------------
  755|   579k|            if ((algorithm_auth & mask_auth) == 0)
  ------------------
  |  Branch (755:17): [True: 86.9k, False: 492k]
  ------------------
  756|  86.9k|                continue;
  757|       |
  758|  2.08M|        if (algorithm_enc)
  ------------------
  |  Branch (758:13): [True: 782k, False: 1.30M]
  ------------------
  759|   782k|            if ((algorithm_enc & mask_enc) == 0)
  ------------------
  |  Branch (759:17): [True: 28.9k, False: 753k]
  ------------------
  760|  28.9k|                continue;
  761|       |
  762|  2.05M|        if (algorithm_mac)
  ------------------
  |  Branch (762:13): [True: 289k, False: 1.76M]
  ------------------
  763|   289k|            if ((algorithm_mac & mask_mac) == 0)
  ------------------
  |  Branch (763:17): [True: 86.9k, False: 202k]
  ------------------
  764|  86.9k|                continue;
  765|       |
  766|  1.97M|        *ca_curr = (SSL_CIPHER *)(cipher_aliases + i);
  767|  1.97M|        ca_curr++;
  768|  1.97M|    }
  769|       |
  770|       |    *ca_curr = NULL;            /* end of list */
  771|  28.9k|}
ssl_ciph.c:ssl_cipher_process_rulestr:
  961|  28.9k|{
  962|  28.9k|    uint32_t alg_mkey, alg_auth, alg_enc, alg_mac, algo_strength;
  963|  28.9k|    int min_tls;
  964|  28.9k|    const char *l, *buf;
  965|  28.9k|    int j, multi, found, rule, retval, ok, buflen;
  966|  28.9k|    uint32_t cipher_id = 0;
  967|  28.9k|    char ch;
  968|       |
  969|  28.9k|    retval = 1;
  970|  28.9k|    l = rule_str;
  971|   144k|    for ( ; ; ) {
  972|   144k|        ch = *l;
  973|       |
  974|   144k|        if (ch == '\0')
  ------------------
  |  Branch (974:13): [True: 0, False: 144k]
  ------------------
  975|      0|            break;              /* done */
  976|   144k|        if (ch == '-') {
  ------------------
  |  Branch (976:13): [True: 0, False: 144k]
  ------------------
  977|      0|            rule = CIPHER_DEL;
  ------------------
  |  |  182|      0|#define CIPHER_DEL      3
  ------------------
  978|      0|            l++;
  979|   144k|        } else if (ch == '+') {
  ------------------
  |  Branch (979:20): [True: 0, False: 144k]
  ------------------
  980|      0|            rule = CIPHER_ORD;
  ------------------
  |  |  183|      0|#define CIPHER_ORD      4
  ------------------
  981|      0|            l++;
  982|   144k|        } else if (ch == '!') {
  ------------------
  |  Branch (982:20): [True: 57.9k, False: 86.9k]
  ------------------
  983|  57.9k|            rule = CIPHER_KILL;
  ------------------
  |  |  181|  57.9k|#define CIPHER_KILL     2
  ------------------
  984|  57.9k|            l++;
  985|  86.9k|        } else if (ch == '@') {
  ------------------
  |  Branch (985:20): [True: 0, False: 86.9k]
  ------------------
  986|      0|            rule = CIPHER_SPECIAL;
  ------------------
  |  |  184|      0|#define CIPHER_SPECIAL  5
  ------------------
  987|      0|            l++;
  988|  86.9k|        } else {
  989|  86.9k|            rule = CIPHER_ADD;
  ------------------
  |  |  180|  86.9k|#define CIPHER_ADD      1
  ------------------
  990|  86.9k|        }
  991|       |
  992|   144k|        if (ITEM_SEP(ch)) {
  ------------------
  |  |  605|   144k|        (((a) == ':') || ((a) == ' ') || ((a) == ';') || ((a) == ','))
  |  |  ------------------
  |  |  |  Branch (605:10): [True: 57.9k, False: 86.9k]
  |  |  |  Branch (605:26): [True: 0, False: 86.9k]
  |  |  |  Branch (605:42): [True: 0, False: 86.9k]
  |  |  |  Branch (605:58): [True: 0, False: 86.9k]
  |  |  ------------------
  ------------------
  993|  57.9k|            l++;
  994|  57.9k|            continue;
  995|  57.9k|        }
  996|       |
  997|  86.9k|        alg_mkey = 0;
  998|  86.9k|        alg_auth = 0;
  999|  86.9k|        alg_enc = 0;
 1000|  86.9k|        alg_mac = 0;
 1001|  86.9k|        min_tls = 0;
 1002|  86.9k|        algo_strength = 0;
 1003|       |
 1004|  86.9k|        for (;;) {
 1005|  86.9k|            ch = *l;
 1006|  86.9k|            buf = l;
 1007|  86.9k|            buflen = 0;
 1008|  86.9k|#ifndef CHARSET_EBCDIC
 1009|   869k|            while (((ch >= 'A') && (ch <= 'Z')) ||
  ------------------
  |  Branch (1009:21): [True: 782k, False: 86.9k]
  |  Branch (1009:36): [True: 753k, False: 28.9k]
  ------------------
 1010|   115k|                   ((ch >= '0') && (ch <= '9')) ||
  ------------------
  |  Branch (1010:21): [True: 86.9k, False: 28.9k]
  |  Branch (1010:36): [True: 0, False: 86.9k]
  ------------------
 1011|   115k|                   ((ch >= 'a') && (ch <= 'z')) ||
  ------------------
  |  Branch (1011:21): [True: 28.9k, False: 86.9k]
  |  Branch (1011:36): [True: 28.9k, False: 0]
  ------------------
 1012|  86.9k|                   (ch == '-') || (ch == '.') || (ch == '='))
  ------------------
  |  Branch (1012:20): [True: 0, False: 86.9k]
  |  Branch (1012:35): [True: 0, False: 86.9k]
  |  Branch (1012:50): [True: 0, False: 86.9k]
  ------------------
 1013|       |#else
 1014|       |            while (isalnum((unsigned char)ch) || (ch == '-') || (ch == '.')
 1015|       |                   || (ch == '='))
 1016|       |#endif
 1017|   782k|            {
 1018|   782k|                ch = *(++l);
 1019|   782k|                buflen++;
 1020|   782k|            }
 1021|       |
 1022|  86.9k|            if (buflen == 0) {
  ------------------
  |  Branch (1022:17): [True: 0, False: 86.9k]
  ------------------
 1023|       |                /*
 1024|       |                 * We hit something we cannot deal with,
 1025|       |                 * it is no command or separator nor
 1026|       |                 * alphanumeric, so we call this an error.
 1027|       |                 */
 1028|      0|                SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR, SSL_R_INVALID_COMMAND);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 1029|      0|                retval = found = 0;
 1030|      0|                l++;
 1031|      0|                break;
 1032|      0|            }
 1033|       |
 1034|  86.9k|            if (rule == CIPHER_SPECIAL) {
  ------------------
  |  |  184|  86.9k|#define CIPHER_SPECIAL  5
  ------------------
  |  Branch (1034:17): [True: 0, False: 86.9k]
  ------------------
 1035|      0|                found = 0;      /* unused -- avoid compiler warning */
 1036|      0|                break;          /* special treatment */
 1037|      0|            }
 1038|       |
 1039|       |            /* check for multi-part specification */
 1040|  86.9k|            if (ch == '+') {
  ------------------
  |  Branch (1040:17): [True: 0, False: 86.9k]
  ------------------
 1041|      0|                multi = 1;
 1042|      0|                l++;
 1043|  86.9k|            } else {
 1044|  86.9k|                multi = 0;
 1045|  86.9k|            }
 1046|       |
 1047|       |            /*
 1048|       |             * Now search for the cipher alias in the ca_list. Be careful
 1049|       |             * with the strncmp, because the "buflen" limitation
 1050|       |             * will make the rule "ADH:SOME" and the cipher
 1051|       |             * "ADH-MY-CIPHER" look like a match for buflen=3.
 1052|       |             * So additionally check whether the cipher name found
 1053|       |             * has the correct length. We can save a strlen() call:
 1054|       |             * just checking for the '\0' at the right place is
 1055|       |             * sufficient, we have to strncmp() anyway. (We cannot
 1056|       |             * use strcmp(), because buf is not '\0' terminated.)
 1057|       |             */
 1058|  86.9k|            j = found = 0;
 1059|  86.9k|            cipher_id = 0;
 1060|  15.1M|            while (ca_list[j]) {
  ------------------
  |  Branch (1060:20): [True: 15.1M, False: 0]
  ------------------
 1061|  15.1M|                if (strncmp(buf, ca_list[j]->name, buflen) == 0
  ------------------
  |  Branch (1061:21): [True: 86.9k, False: 15.0M]
  ------------------
 1062|  86.9k|                    && (ca_list[j]->name[buflen] == '\0')) {
  ------------------
  |  Branch (1062:24): [True: 86.9k, False: 0]
  ------------------
 1063|  86.9k|                    found = 1;
 1064|  86.9k|                    break;
 1065|  86.9k|                } else
 1066|  15.0M|                    j++;
 1067|  15.1M|            }
 1068|       |
 1069|  86.9k|            if (!found)
  ------------------
  |  Branch (1069:17): [True: 0, False: 86.9k]
  ------------------
 1070|      0|                break;          /* ignore this entry */
 1071|       |
 1072|  86.9k|            if (ca_list[j]->algorithm_mkey) {
  ------------------
  |  Branch (1072:17): [True: 0, False: 86.9k]
  ------------------
 1073|      0|                if (alg_mkey) {
  ------------------
  |  Branch (1073:21): [True: 0, False: 0]
  ------------------
 1074|      0|                    alg_mkey &= ca_list[j]->algorithm_mkey;
 1075|      0|                    if (!alg_mkey) {
  ------------------
  |  Branch (1075:25): [True: 0, False: 0]
  ------------------
 1076|      0|                        found = 0;
 1077|      0|                        break;
 1078|      0|                    }
 1079|      0|                } else {
 1080|      0|                    alg_mkey = ca_list[j]->algorithm_mkey;
 1081|      0|                }
 1082|      0|            }
 1083|       |
 1084|  86.9k|            if (ca_list[j]->algorithm_auth) {
  ------------------
  |  Branch (1084:17): [True: 0, False: 86.9k]
  ------------------
 1085|      0|                if (alg_auth) {
  ------------------
  |  Branch (1085:21): [True: 0, False: 0]
  ------------------
 1086|      0|                    alg_auth &= ca_list[j]->algorithm_auth;
 1087|      0|                    if (!alg_auth) {
  ------------------
  |  Branch (1087:25): [True: 0, False: 0]
  ------------------
 1088|      0|                        found = 0;
 1089|      0|                        break;
 1090|      0|                    }
 1091|      0|                } else {
 1092|      0|                    alg_auth = ca_list[j]->algorithm_auth;
 1093|      0|                }
 1094|      0|            }
 1095|       |
 1096|  86.9k|            if (ca_list[j]->algorithm_enc) {
  ------------------
  |  Branch (1096:17): [True: 57.9k, False: 28.9k]
  ------------------
 1097|  57.9k|                if (alg_enc) {
  ------------------
  |  Branch (1097:21): [True: 0, False: 57.9k]
  ------------------
 1098|      0|                    alg_enc &= ca_list[j]->algorithm_enc;
 1099|      0|                    if (!alg_enc) {
  ------------------
  |  Branch (1099:25): [True: 0, False: 0]
  ------------------
 1100|      0|                        found = 0;
 1101|      0|                        break;
 1102|      0|                    }
 1103|  57.9k|                } else {
 1104|  57.9k|                    alg_enc = ca_list[j]->algorithm_enc;
 1105|  57.9k|                }
 1106|  57.9k|            }
 1107|       |
 1108|  86.9k|            if (ca_list[j]->algorithm_mac) {
  ------------------
  |  Branch (1108:17): [True: 0, False: 86.9k]
  ------------------
 1109|      0|                if (alg_mac) {
  ------------------
  |  Branch (1109:21): [True: 0, False: 0]
  ------------------
 1110|      0|                    alg_mac &= ca_list[j]->algorithm_mac;
 1111|      0|                    if (!alg_mac) {
  ------------------
  |  Branch (1111:25): [True: 0, False: 0]
  ------------------
 1112|      0|                        found = 0;
 1113|      0|                        break;
 1114|      0|                    }
 1115|      0|                } else {
 1116|      0|                    alg_mac = ca_list[j]->algorithm_mac;
 1117|      0|                }
 1118|      0|            }
 1119|       |
 1120|  86.9k|            if (ca_list[j]->algo_strength & SSL_STRONG_MASK) {
  ------------------
  |  |  303|  86.9k|# define SSL_STRONG_MASK         0x0000001FU
  ------------------
  |  Branch (1120:17): [True: 0, False: 86.9k]
  ------------------
 1121|      0|                if (algo_strength & SSL_STRONG_MASK) {
  ------------------
  |  |  303|      0|# define SSL_STRONG_MASK         0x0000001FU
  ------------------
  |  Branch (1121:21): [True: 0, False: 0]
  ------------------
 1122|      0|                    algo_strength &=
 1123|      0|                        (ca_list[j]->algo_strength & SSL_STRONG_MASK) |
  ------------------
  |  |  303|      0|# define SSL_STRONG_MASK         0x0000001FU
  ------------------
 1124|      0|                        ~SSL_STRONG_MASK;
  ------------------
  |  |  303|      0|# define SSL_STRONG_MASK         0x0000001FU
  ------------------
 1125|      0|                    if (!(algo_strength & SSL_STRONG_MASK)) {
  ------------------
  |  |  303|      0|# define SSL_STRONG_MASK         0x0000001FU
  ------------------
  |  Branch (1125:25): [True: 0, False: 0]
  ------------------
 1126|      0|                        found = 0;
 1127|      0|                        break;
 1128|      0|                    }
 1129|      0|                } else {
 1130|      0|                    algo_strength = ca_list[j]->algo_strength & SSL_STRONG_MASK;
  ------------------
  |  |  303|      0|# define SSL_STRONG_MASK         0x0000001FU
  ------------------
 1131|      0|                }
 1132|      0|            }
 1133|       |
 1134|  86.9k|            if (ca_list[j]->algo_strength & SSL_DEFAULT_MASK) {
  ------------------
  |  |  304|  86.9k|# define SSL_DEFAULT_MASK        0X00000020U
  ------------------
  |  Branch (1134:17): [True: 28.9k, False: 57.9k]
  ------------------
 1135|  28.9k|                if (algo_strength & SSL_DEFAULT_MASK) {
  ------------------
  |  |  304|  28.9k|# define SSL_DEFAULT_MASK        0X00000020U
  ------------------
  |  Branch (1135:21): [True: 0, False: 28.9k]
  ------------------
 1136|      0|                    algo_strength &=
 1137|      0|                        (ca_list[j]->algo_strength & SSL_DEFAULT_MASK) |
  ------------------
  |  |  304|      0|# define SSL_DEFAULT_MASK        0X00000020U
  ------------------
 1138|      0|                        ~SSL_DEFAULT_MASK;
  ------------------
  |  |  304|      0|# define SSL_DEFAULT_MASK        0X00000020U
  ------------------
 1139|      0|                    if (!(algo_strength & SSL_DEFAULT_MASK)) {
  ------------------
  |  |  304|      0|# define SSL_DEFAULT_MASK        0X00000020U
  ------------------
  |  Branch (1139:25): [True: 0, False: 0]
  ------------------
 1140|      0|                        found = 0;
 1141|      0|                        break;
 1142|      0|                    }
 1143|  28.9k|                } else {
 1144|  28.9k|                    algo_strength |=
 1145|  28.9k|                        ca_list[j]->algo_strength & SSL_DEFAULT_MASK;
  ------------------
  |  |  304|  28.9k|# define SSL_DEFAULT_MASK        0X00000020U
  ------------------
 1146|  28.9k|                }
 1147|  28.9k|            }
 1148|       |
 1149|  86.9k|            if (ca_list[j]->valid) {
  ------------------
  |  Branch (1149:17): [True: 0, False: 86.9k]
  ------------------
 1150|       |                /*
 1151|       |                 * explicit ciphersuite found; its protocol version does not
 1152|       |                 * become part of the search pattern!
 1153|       |                 */
 1154|       |
 1155|      0|                cipher_id = ca_list[j]->id;
 1156|  86.9k|            } else {
 1157|       |                /*
 1158|       |                 * not an explicit ciphersuite; only in this case, the
 1159|       |                 * protocol version is considered part of the search pattern
 1160|       |                 */
 1161|       |
 1162|  86.9k|                if (ca_list[j]->min_tls) {
  ------------------
  |  Branch (1162:21): [True: 0, False: 86.9k]
  ------------------
 1163|      0|                    if (min_tls != 0 && min_tls != ca_list[j]->min_tls) {
  ------------------
  |  Branch (1163:25): [True: 0, False: 0]
  |  Branch (1163:41): [True: 0, False: 0]
  ------------------
 1164|      0|                        found = 0;
 1165|      0|                        break;
 1166|      0|                    } else {
 1167|      0|                        min_tls = ca_list[j]->min_tls;
 1168|      0|                    }
 1169|      0|                }
 1170|  86.9k|            }
 1171|       |
 1172|  86.9k|            if (!multi)
  ------------------
  |  Branch (1172:17): [True: 86.9k, False: 0]
  ------------------
 1173|  86.9k|                break;
 1174|  86.9k|        }
 1175|       |
 1176|       |        /*
 1177|       |         * Ok, we have the rule, now apply it
 1178|       |         */
 1179|  86.9k|        if (rule == CIPHER_SPECIAL) { /* special command */
  ------------------
  |  |  184|  86.9k|#define CIPHER_SPECIAL  5
  ------------------
  |  Branch (1179:13): [True: 0, False: 86.9k]
  ------------------
 1180|      0|            ok = 0;
 1181|      0|            if ((buflen == 8) && strncmp(buf, "STRENGTH", 8) == 0) {
  ------------------
  |  Branch (1181:17): [True: 0, False: 0]
  |  Branch (1181:34): [True: 0, False: 0]
  ------------------
 1182|      0|                ok = ssl_cipher_strength_sort(head_p, tail_p);
 1183|      0|            } else if (buflen == 10 && strncmp(buf, "SECLEVEL=", 9) == 0) {
  ------------------
  |  Branch (1183:24): [True: 0, False: 0]
  |  Branch (1183:40): [True: 0, False: 0]
  ------------------
 1184|      0|                int level = buf[9] - '0';
 1185|      0|                if (level < 0 || level > 5) {
  ------------------
  |  Branch (1185:21): [True: 0, False: 0]
  |  Branch (1185:34): [True: 0, False: 0]
  ------------------
 1186|      0|                    SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR,
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 1187|      0|                           SSL_R_INVALID_COMMAND);
 1188|      0|                } else {
 1189|      0|                    c->sec_level = level;
 1190|      0|                    ok = 1;
 1191|      0|                }
 1192|      0|            } else {
 1193|      0|                SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR, SSL_R_INVALID_COMMAND);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 1194|      0|            }
 1195|      0|            if (ok == 0)
  ------------------
  |  Branch (1195:17): [True: 0, False: 0]
  ------------------
 1196|      0|                retval = 0;
 1197|       |            /*
 1198|       |             * We do not support any "multi" options
 1199|       |             * together with "@", so throw away the
 1200|       |             * rest of the command, if any left, until
 1201|       |             * end or ':' is found.
 1202|       |             */
 1203|      0|            while ((*l != '\0') && !ITEM_SEP(*l))
  ------------------
  |  |  605|      0|        (((a) == ':') || ((a) == ' ') || ((a) == ';') || ((a) == ','))
  |  |  ------------------
  |  |  |  Branch (605:10): [True: 0, False: 0]
  |  |  |  Branch (605:26): [True: 0, False: 0]
  |  |  |  Branch (605:42): [True: 0, False: 0]
  |  |  |  Branch (605:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1203:20): [True: 0, False: 0]
  ------------------
 1204|      0|                l++;
 1205|  86.9k|        } else if (found) {
  ------------------
  |  Branch (1205:20): [True: 86.9k, False: 0]
  ------------------
 1206|  86.9k|            ssl_cipher_apply_rule(cipher_id,
 1207|  86.9k|                                  alg_mkey, alg_auth, alg_enc, alg_mac,
 1208|  86.9k|                                  min_tls, algo_strength, rule, -1, head_p,
 1209|  86.9k|                                  tail_p);
 1210|  86.9k|        } else {
 1211|      0|            while ((*l != '\0') && !ITEM_SEP(*l))
  ------------------
  |  |  605|      0|        (((a) == ':') || ((a) == ' ') || ((a) == ';') || ((a) == ','))
  |  |  ------------------
  |  |  |  Branch (605:10): [True: 0, False: 0]
  |  |  |  Branch (605:26): [True: 0, False: 0]
  |  |  |  Branch (605:42): [True: 0, False: 0]
  |  |  |  Branch (605:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1211:20): [True: 0, False: 0]
  ------------------
 1212|      0|                l++;
 1213|      0|        }
 1214|  86.9k|        if (*l == '\0')
  ------------------
  |  Branch (1214:13): [True: 28.9k, False: 57.9k]
  ------------------
 1215|  28.9k|            break;              /* done */
 1216|  86.9k|    }
 1217|       |
 1218|  28.9k|    return retval;
 1219|  28.9k|}
ssl_ciph.c:update_cipher_list_by_id:
 1327|  28.9k|{
 1328|  28.9k|    STACK_OF(SSL_CIPHER) *tmp_cipher_list = sk_SSL_CIPHER_dup(cipherstack);
  ------------------
  |  |   20|  28.9k|# define STACK_OF(type) struct stack_st_##type
  ------------------
 1329|       |
 1330|  28.9k|    if (tmp_cipher_list == NULL) {
  ------------------
  |  Branch (1330:9): [True: 0, False: 28.9k]
  ------------------
 1331|      0|        return 0;
 1332|      0|    }
 1333|       |
 1334|  28.9k|    sk_SSL_CIPHER_free(*cipher_list_by_id);
 1335|  28.9k|    *cipher_list_by_id = tmp_cipher_list;
 1336|       |
 1337|  28.9k|    (void)sk_SSL_CIPHER_set_cmp_func(*cipher_list_by_id, ssl_cipher_ptr_id_cmp);
 1338|  28.9k|    sk_SSL_CIPHER_sort(*cipher_list_by_id);
 1339|       |
 1340|  28.9k|    return 1;
 1341|  28.9k|}

SSL_CONF_CTX_free:
  924|  28.9k|{
  925|  28.9k|    if (cctx) {
  ------------------
  |  Branch (925:9): [True: 0, False: 28.9k]
  ------------------
  926|      0|        size_t i;
  927|      0|        for (i = 0; i < SSL_PKEY_NUM; i++)
  ------------------
  |  |  386|      0|# define SSL_PKEY_NUM            9
  ------------------
  |  Branch (927:21): [True: 0, False: 0]
  ------------------
  928|      0|            OPENSSL_free(cctx->cert_filename[i]);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  929|      0|        OPENSSL_free(cctx->prefix);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  930|      0|        sk_X509_NAME_pop_free(cctx->canames, X509_NAME_free);
  931|      0|        OPENSSL_free(cctx);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  932|      0|    }
  933|  28.9k|}

ERR_load_SSL_strings:
 1274|      2|{
 1275|      2|#ifndef OPENSSL_NO_ERR
 1276|      2|    if (ERR_func_error_string(SSL_str_functs[0].error) == NULL) {
  ------------------
  |  Branch (1276:9): [True: 2, False: 0]
  ------------------
 1277|      2|        ERR_load_strings_const(SSL_str_functs);
 1278|      2|        ERR_load_strings_const(SSL_str_reasons);
 1279|      2|    }
 1280|      2|#endif
 1281|      2|    return 1;
 1282|      2|}

OPENSSL_init_ssl:
  182|  57.9k|{
  183|  57.9k|    static int stoperrset = 0;
  184|       |
  185|  57.9k|    if (stopped) {
  ------------------
  |  Branch (185:9): [True: 0, False: 57.9k]
  ------------------
  186|      0|        if (!stoperrset) {
  ------------------
  |  Branch (186:13): [True: 0, False: 0]
  ------------------
  187|       |            /*
  188|       |             * We only ever set this once to avoid getting into an infinite
  189|       |             * loop where the error system keeps trying to init and fails so
  190|       |             * sets an error etc
  191|       |             */
  192|      0|            stoperrset = 1;
  193|      0|            SSLerr(SSL_F_OPENSSL_INIT_SSL, ERR_R_INIT_FAIL);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  194|      0|        }
  195|      0|        return 0;
  196|      0|    }
  197|       |
  198|  57.9k|    opts |= OPENSSL_INIT_ADD_ALL_CIPHERS
  ------------------
  |  |  358|  57.9k|# define OPENSSL_INIT_ADD_ALL_CIPHERS        0x00000004L
  ------------------
  199|  57.9k|         |  OPENSSL_INIT_ADD_ALL_DIGESTS;
  ------------------
  |  |  359|  57.9k|# define OPENSSL_INIT_ADD_ALL_DIGESTS        0x00000008L
  ------------------
  200|  57.9k|#ifndef OPENSSL_NO_AUTOLOAD_CONFIG
  201|  57.9k|    if ((opts & OPENSSL_INIT_NO_LOAD_CONFIG) == 0)
  ------------------
  |  |  363|  57.9k|# define OPENSSL_INIT_NO_LOAD_CONFIG         0x00000080L
  ------------------
  |  Branch (201:9): [True: 57.9k, False: 0]
  ------------------
  202|  57.9k|        opts |= OPENSSL_INIT_LOAD_CONFIG;
  ------------------
  |  |  362|  57.9k|# define OPENSSL_INIT_LOAD_CONFIG            0x00000040L
  ------------------
  203|  57.9k|#endif
  204|       |
  205|  57.9k|    if (!OPENSSL_init_crypto(opts, settings))
  ------------------
  |  Branch (205:9): [True: 0, False: 57.9k]
  ------------------
  206|      0|        return 0;
  207|       |
  208|  57.9k|    if (!RUN_ONCE(&ssl_base, ossl_init_ssl_base))
  ------------------
  |  |  119|  57.9k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 57.9k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (208:9): [True: 0, False: 57.9k]
  ------------------
  209|      0|        return 0;
  210|       |
  211|  57.9k|    if ((opts & OPENSSL_INIT_NO_LOAD_SSL_STRINGS)
  ------------------
  |  | 2358|  57.9k|# define OPENSSL_INIT_NO_LOAD_SSL_STRINGS    0x00100000L
  ------------------
  |  Branch (211:9): [True: 0, False: 57.9k]
  ------------------
  212|      0|        && !RUN_ONCE_ALT(&ssl_strings, ossl_init_no_load_ssl_strings,
  ------------------
  |  |  137|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (137:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (212:12): [True: 0, False: 0]
  ------------------
  213|  57.9k|                         ossl_init_load_ssl_strings))
  214|      0|        return 0;
  215|       |
  216|  57.9k|    if ((opts & OPENSSL_INIT_LOAD_SSL_STRINGS)
  ------------------
  |  | 2359|  57.9k|# define OPENSSL_INIT_LOAD_SSL_STRINGS       0x00200000L
  ------------------
  |  Branch (216:9): [True: 57.9k, False: 0]
  ------------------
  217|  57.9k|        && !RUN_ONCE(&ssl_strings, ossl_init_load_ssl_strings))
  ------------------
  |  |  119|  57.9k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (119:6): [True: 57.9k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (217:12): [True: 0, False: 57.9k]
  ------------------
  218|      0|        return 0;
  219|       |
  220|  57.9k|    return 1;
  221|  57.9k|}
ssl_init.c:ossl_init_ssl_base:
   25|      2|{
   26|       |#ifdef OPENSSL_INIT_DEBUG
   27|       |    fprintf(stderr, "OPENSSL_INIT: ossl_init_ssl_base: "
   28|       |            "Adding SSL ciphers and digests\n");
   29|       |#endif
   30|      2|#ifndef OPENSSL_NO_DES
   31|      2|    EVP_add_cipher(EVP_des_cbc());
   32|      2|    EVP_add_cipher(EVP_des_ede3_cbc());
   33|      2|#endif
   34|      2|#ifndef OPENSSL_NO_IDEA
   35|      2|    EVP_add_cipher(EVP_idea_cbc());
   36|      2|#endif
   37|      2|#ifndef OPENSSL_NO_RC4
   38|      2|    EVP_add_cipher(EVP_rc4());
   39|      2|# ifndef OPENSSL_NO_MD5
   40|      2|    EVP_add_cipher(EVP_rc4_hmac_md5());
   41|      2|# endif
   42|      2|#endif
   43|      2|#ifndef OPENSSL_NO_RC2
   44|      2|    EVP_add_cipher(EVP_rc2_cbc());
   45|       |    /*
   46|       |     * Not actually used for SSL/TLS but this makes PKCS#12 work if an
   47|       |     * application only calls SSL_library_init().
   48|       |     */
   49|      2|    EVP_add_cipher(EVP_rc2_40_cbc());
   50|      2|#endif
   51|      2|    EVP_add_cipher(EVP_aes_128_cbc());
   52|      2|    EVP_add_cipher(EVP_aes_192_cbc());
   53|      2|    EVP_add_cipher(EVP_aes_256_cbc());
   54|      2|    EVP_add_cipher(EVP_aes_128_gcm());
   55|      2|    EVP_add_cipher(EVP_aes_256_gcm());
   56|      2|    EVP_add_cipher(EVP_aes_128_ccm());
   57|      2|    EVP_add_cipher(EVP_aes_256_ccm());
   58|      2|    EVP_add_cipher(EVP_aes_128_cbc_hmac_sha1());
   59|      2|    EVP_add_cipher(EVP_aes_256_cbc_hmac_sha1());
   60|      2|    EVP_add_cipher(EVP_aes_128_cbc_hmac_sha256());
   61|      2|    EVP_add_cipher(EVP_aes_256_cbc_hmac_sha256());
   62|      2|#ifndef OPENSSL_NO_ARIA
   63|      2|    EVP_add_cipher(EVP_aria_128_gcm());
   64|      2|    EVP_add_cipher(EVP_aria_256_gcm());
   65|      2|#endif
   66|      2|#ifndef OPENSSL_NO_CAMELLIA
   67|      2|    EVP_add_cipher(EVP_camellia_128_cbc());
   68|      2|    EVP_add_cipher(EVP_camellia_256_cbc());
   69|      2|#endif
   70|      2|#if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
   71|      2|    EVP_add_cipher(EVP_chacha20_poly1305());
   72|      2|#endif
   73|       |
   74|      2|#ifndef OPENSSL_NO_SEED
   75|      2|    EVP_add_cipher(EVP_seed_cbc());
   76|      2|#endif
   77|       |
   78|      2|#ifndef OPENSSL_NO_MD5
   79|      2|    EVP_add_digest(EVP_md5());
   80|      2|    EVP_add_digest_alias(SN_md5, "ssl3-md5");
  ------------------
  |  |  531|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   19|      2|# define OBJ_NAME_TYPE_MD_METH           0x01
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   81|      2|    EVP_add_digest(EVP_md5_sha1());
   82|      2|#endif
   83|      2|    EVP_add_digest(EVP_sha1()); /* RSA with sha1 */
   84|      2|    EVP_add_digest_alias(SN_sha1, "ssl3-sha1");
  ------------------
  |  |  531|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   19|      2|# define OBJ_NAME_TYPE_MD_METH           0x01
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   85|      2|    EVP_add_digest_alias(SN_sha1WithRSAEncryption, SN_sha1WithRSA);
  ------------------
  |  |  531|      2|        OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   19|      2|# define OBJ_NAME_TYPE_MD_METH           0x01
  |  |  ------------------
  |  |                       OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
  |  |  ------------------
  |  |  |  |   25|      2|# define OBJ_NAME_ALIAS                  0x8000
  |  |  ------------------
  ------------------
   86|      2|    EVP_add_digest(EVP_sha224());
   87|      2|    EVP_add_digest(EVP_sha256());
   88|      2|    EVP_add_digest(EVP_sha384());
   89|      2|    EVP_add_digest(EVP_sha512());
   90|       |#ifndef OPENSSL_NO_COMP
   91|       |# ifdef OPENSSL_INIT_DEBUG
   92|       |    fprintf(stderr, "OPENSSL_INIT: ossl_init_ssl_base: "
   93|       |            "SSL_COMP_get_compression_methods()\n");
   94|       |# endif
   95|       |    /*
   96|       |     * This will initialise the built-in compression algorithms. The value
   97|       |     * returned is a STACK_OF(SSL_COMP), but that can be discarded safely
   98|       |     */
   99|       |    SSL_COMP_get_compression_methods();
  100|       |#endif
  101|       |    /* initialize cipher/digest methods table */
  102|      2|    if (!ssl_load_ciphers())
  ------------------
  |  Branch (102:9): [True: 0, False: 2]
  ------------------
  103|      0|        return 0;
  104|       |
  105|       |#ifdef OPENSSL_INIT_DEBUG
  106|       |    fprintf(stderr, "OPENSSL_INIT: ossl_init_ssl_base: "
  107|       |            "SSL_add_ssl_module()\n");
  108|       |#endif
  109|       |    /*
  110|       |     * We ignore an error return here. Not much we can do - but not that bad
  111|       |     * either. We can still safely continue.
  112|       |     */
  113|      2|    OPENSSL_atexit(ssl_library_stop);
  114|      2|    ssl_base_inited = 1;
  115|      2|    return 1;
  116|      2|}
ssl_init.c:ssl_library_stop:
  145|      2|{
  146|       |    /* Might be explicitly called and also by atexit */
  147|      2|    if (stopped)
  ------------------
  |  Branch (147:9): [True: 0, False: 2]
  ------------------
  148|      0|        return;
  149|      2|    stopped = 1;
  150|       |
  151|      2|    if (ssl_base_inited) {
  ------------------
  |  Branch (151:9): [True: 2, False: 0]
  ------------------
  152|       |#ifndef OPENSSL_NO_COMP
  153|       |# ifdef OPENSSL_INIT_DEBUG
  154|       |        fprintf(stderr, "OPENSSL_INIT: ssl_library_stop: "
  155|       |                "ssl_comp_free_compression_methods_int()\n");
  156|       |# endif
  157|       |        ssl_comp_free_compression_methods_int();
  158|       |#endif
  159|      2|    }
  160|       |
  161|      2|    if (ssl_strings_inited) {
  ------------------
  |  Branch (161:9): [True: 2, False: 0]
  ------------------
  162|       |#ifdef OPENSSL_INIT_DEBUG
  163|       |        fprintf(stderr, "OPENSSL_INIT: ssl_library_stop: "
  164|       |                "err_free_strings_int()\n");
  165|       |#endif
  166|       |        /*
  167|       |         * If both crypto and ssl error strings are inited we will end up
  168|       |         * calling err_free_strings_int() twice - but that's ok. The second
  169|       |         * time will be a no-op. It's easier to do that than to try and track
  170|       |         * between the two libraries whether they have both been inited.
  171|       |         */
  172|      2|        err_free_strings_int();
  173|      2|    }
  174|      2|}
ssl_init.c:ossl_init_load_ssl_strings:
  121|      2|{
  122|       |    /*
  123|       |     * OPENSSL_NO_AUTOERRINIT is provided here to prevent at compile time
  124|       |     * pulling in all the error strings during static linking
  125|       |     */
  126|      2|#if !defined(OPENSSL_NO_ERR) && !defined(OPENSSL_NO_AUTOERRINIT)
  127|       |# ifdef OPENSSL_INIT_DEBUG
  128|       |    fprintf(stderr, "OPENSSL_INIT: ossl_init_load_ssl_strings: "
  129|       |            "ERR_load_SSL_strings()\n");
  130|       |# endif
  131|      2|    ERR_load_SSL_strings();
  132|      2|    ssl_strings_inited = 1;
  133|      2|#endif
  134|      2|    return 1;
  135|      2|}

SSL_clear:
  578|  57.9k|{
  579|  57.9k|    if (s->method == NULL) {
  ------------------
  |  Branch (579:9): [True: 0, False: 57.9k]
  ------------------
  580|      0|        SSLerr(SSL_F_SSL_CLEAR, SSL_R_NO_METHOD_SPECIFIED);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  581|      0|        return 0;
  582|      0|    }
  583|       |
  584|  57.9k|    if (ssl_clear_bad_session(s)) {
  ------------------
  |  Branch (584:9): [True: 0, False: 57.9k]
  ------------------
  585|      0|        SSL_SESSION_free(s->session);
  586|      0|        s->session = NULL;
  587|      0|    }
  588|  57.9k|    SSL_SESSION_free(s->psksession);
  589|  57.9k|    s->psksession = NULL;
  590|  57.9k|    OPENSSL_free(s->psksession_id);
  ------------------
  |  |  128|  57.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  591|  57.9k|    s->psksession_id = NULL;
  592|  57.9k|    s->psksession_id_len = 0;
  593|  57.9k|    s->hello_retry_request = 0;
  594|  57.9k|    s->sent_tickets = 0;
  595|       |
  596|  57.9k|    s->error = 0;
  597|  57.9k|    s->hit = 0;
  598|  57.9k|    s->shutdown = 0;
  599|       |
  600|  57.9k|    if (s->renegotiate) {
  ------------------
  |  Branch (600:9): [True: 0, False: 57.9k]
  ------------------
  601|      0|        SSLerr(SSL_F_SSL_CLEAR, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  602|      0|        return 0;
  603|      0|    }
  604|       |
  605|  57.9k|    ossl_statem_clear(s);
  606|       |
  607|  57.9k|    s->version = s->method->version;
  608|  57.9k|    s->client_version = s->version;
  609|  57.9k|    s->rwstate = SSL_NOTHING;
  ------------------
  |  |  892|  57.9k|# define SSL_NOTHING            1
  ------------------
  610|       |
  611|  57.9k|    BUF_MEM_free(s->init_buf);
  612|  57.9k|    s->init_buf = NULL;
  613|  57.9k|    clear_ciphers(s);
  614|  57.9k|    s->first_packet = 0;
  615|       |
  616|  57.9k|    s->key_update = SSL_KEY_UPDATE_NONE;
  ------------------
  |  |  974|  57.9k|#define SSL_KEY_UPDATE_NONE             -1
  ------------------
  617|       |
  618|  57.9k|    EVP_MD_CTX_free(s->pha_dgst);
  619|  57.9k|    s->pha_dgst = NULL;
  620|       |
  621|       |    /* Reset DANE verification result state */
  622|  57.9k|    s->dane.mdpth = -1;
  623|  57.9k|    s->dane.pdpth = -1;
  624|  57.9k|    X509_free(s->dane.mcert);
  625|  57.9k|    s->dane.mcert = NULL;
  626|  57.9k|    s->dane.mtlsa = NULL;
  627|       |
  628|       |    /* Clear the verification result peername */
  629|  57.9k|    X509_VERIFY_PARAM_move_peername(s->param, NULL);
  630|       |
  631|       |    /* Clear any shared connection state */
  632|  57.9k|    OPENSSL_free(s->shared_sigalgs);
  ------------------
  |  |  128|  57.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  633|  57.9k|    s->shared_sigalgs = NULL;
  634|  57.9k|    s->shared_sigalgslen = 0;
  635|       |
  636|       |    /*
  637|       |     * Check to see if we were changed into a different method, if so, revert
  638|       |     * back.
  639|       |     */
  640|  57.9k|    if (s->method != s->ctx->method) {
  ------------------
  |  Branch (640:9): [True: 0, False: 57.9k]
  ------------------
  641|      0|        s->method->ssl_free(s);
  642|      0|        s->method = s->ctx->method;
  643|      0|        if (!s->method->ssl_new(s))
  ------------------
  |  Branch (643:13): [True: 0, False: 0]
  ------------------
  644|      0|            return 0;
  645|  57.9k|    } else {
  646|  57.9k|        if (!s->method->ssl_clear(s))
  ------------------
  |  Branch (646:13): [True: 0, False: 57.9k]
  ------------------
  647|      0|            return 0;
  648|  57.9k|    }
  649|       |
  650|  57.9k|    RECORD_LAYER_clear(&s->rlayer);
  651|       |
  652|  57.9k|    return 1;
  653|  57.9k|}
SSL_new:
  679|  28.9k|{
  680|  28.9k|    SSL *s;
  681|       |
  682|  28.9k|    if (ctx == NULL) {
  ------------------
  |  Branch (682:9): [True: 0, False: 28.9k]
  ------------------
  683|      0|        SSLerr(SSL_F_SSL_NEW, SSL_R_NULL_SSL_CTX);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  684|      0|        return NULL;
  685|      0|    }
  686|  28.9k|    if (ctx->method == NULL) {
  ------------------
  |  Branch (686:9): [True: 0, False: 28.9k]
  ------------------
  687|      0|        SSLerr(SSL_F_SSL_NEW, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  688|      0|        return NULL;
  689|      0|    }
  690|       |
  691|  28.9k|    s = OPENSSL_zalloc(sizeof(*s));
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  692|  28.9k|    if (s == NULL)
  ------------------
  |  Branch (692:9): [True: 0, False: 28.9k]
  ------------------
  693|      0|        goto err;
  694|       |
  695|  28.9k|    s->references = 1;
  696|  28.9k|    s->lock = CRYPTO_THREAD_lock_new();
  697|  28.9k|    if (s->lock == NULL) {
  ------------------
  |  Branch (697:9): [True: 0, False: 28.9k]
  ------------------
  698|      0|        OPENSSL_free(s);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  699|      0|        s = NULL;
  700|      0|        goto err;
  701|      0|    }
  702|       |
  703|  28.9k|    RECORD_LAYER_init(&s->rlayer, s);
  704|       |
  705|  28.9k|    s->options = ctx->options;
  706|  28.9k|    s->dane.flags = ctx->dane.flags;
  707|  28.9k|    s->min_proto_version = ctx->min_proto_version;
  708|  28.9k|    s->max_proto_version = ctx->max_proto_version;
  709|  28.9k|    s->mode = ctx->mode;
  710|  28.9k|    s->max_cert_list = ctx->max_cert_list;
  711|  28.9k|    s->max_early_data = ctx->max_early_data;
  712|  28.9k|    s->recv_max_early_data = ctx->recv_max_early_data;
  713|  28.9k|    s->num_tickets = ctx->num_tickets;
  714|  28.9k|    s->pha_enabled = ctx->pha_enabled;
  715|       |
  716|       |    /* Shallow copy of the ciphersuites stack */
  717|  28.9k|    s->tls13_ciphersuites = sk_SSL_CIPHER_dup(ctx->tls13_ciphersuites);
  718|  28.9k|    if (s->tls13_ciphersuites == NULL)
  ------------------
  |  Branch (718:9): [True: 0, False: 28.9k]
  ------------------
  719|      0|        goto err;
  720|       |
  721|       |    /*
  722|       |     * Earlier library versions used to copy the pointer to the CERT, not
  723|       |     * its contents; only when setting new parameters for the per-SSL
  724|       |     * copy, ssl_cert_new would be called (and the direct reference to
  725|       |     * the per-SSL_CTX settings would be lost, but those still were
  726|       |     * indirectly accessed for various purposes, and for that reason they
  727|       |     * used to be known as s->ctx->default_cert). Now we don't look at the
  728|       |     * SSL_CTX's CERT after having duplicated it once.
  729|       |     */
  730|  28.9k|    s->cert = ssl_cert_dup(ctx->cert);
  731|  28.9k|    if (s->cert == NULL)
  ------------------
  |  Branch (731:9): [True: 0, False: 28.9k]
  ------------------
  732|      0|        goto err;
  733|       |
  734|  28.9k|    RECORD_LAYER_set_read_ahead(&s->rlayer, ctx->read_ahead);
  ------------------
  |  |  181|  28.9k|#define RECORD_LAYER_set_read_ahead(rl, ra)     ((rl)->read_ahead = (ra))
  ------------------
  735|  28.9k|    s->msg_callback = ctx->msg_callback;
  736|  28.9k|    s->msg_callback_arg = ctx->msg_callback_arg;
  737|  28.9k|    s->verify_mode = ctx->verify_mode;
  738|  28.9k|    s->not_resumable_session_cb = ctx->not_resumable_session_cb;
  739|  28.9k|    s->record_padding_cb = ctx->record_padding_cb;
  740|  28.9k|    s->record_padding_arg = ctx->record_padding_arg;
  741|  28.9k|    s->block_padding = ctx->block_padding;
  742|  28.9k|    s->sid_ctx_length = ctx->sid_ctx_length;
  743|  28.9k|    if (!ossl_assert(s->sid_ctx_length <= sizeof(s->sid_ctx)))
  ------------------
  |  |   40|  28.9k|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|  28.9k|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (743:9): [True: 0, False: 28.9k]
  ------------------
  744|      0|        goto err;
  745|  28.9k|    memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx));
  746|  28.9k|    s->verify_callback = ctx->default_verify_callback;
  747|  28.9k|    s->generate_session_id = ctx->generate_session_id;
  748|       |
  749|  28.9k|    s->param = X509_VERIFY_PARAM_new();
  750|  28.9k|    if (s->param == NULL)
  ------------------
  |  Branch (750:9): [True: 0, False: 28.9k]
  ------------------
  751|      0|        goto err;
  752|  28.9k|    X509_VERIFY_PARAM_inherit(s->param, ctx->param);
  753|  28.9k|    s->quiet_shutdown = ctx->quiet_shutdown;
  754|       |
  755|  28.9k|    s->ext.max_fragment_len_mode = ctx->ext.max_fragment_len_mode;
  756|  28.9k|    s->max_send_fragment = ctx->max_send_fragment;
  757|  28.9k|    s->split_send_fragment = ctx->split_send_fragment;
  758|  28.9k|    s->max_pipelines = ctx->max_pipelines;
  759|  28.9k|    if (s->max_pipelines > 1)
  ------------------
  |  Branch (759:9): [True: 0, False: 28.9k]
  ------------------
  760|      0|        RECORD_LAYER_set_read_ahead(&s->rlayer, 1);
  ------------------
  |  |  181|      0|#define RECORD_LAYER_set_read_ahead(rl, ra)     ((rl)->read_ahead = (ra))
  ------------------
  761|  28.9k|    if (ctx->default_read_buf_len > 0)
  ------------------
  |  Branch (761:9): [True: 0, False: 28.9k]
  ------------------
  762|      0|        SSL_set_default_read_buffer_len(s, ctx->default_read_buf_len);
  763|       |
  764|  28.9k|    SSL_CTX_up_ref(ctx);
  765|  28.9k|    s->ctx = ctx;
  766|  28.9k|    s->ext.debug_cb = 0;
  767|  28.9k|    s->ext.debug_arg = NULL;
  768|  28.9k|    s->ext.ticket_expected = 0;
  769|  28.9k|    s->ext.status_type = ctx->ext.status_type;
  770|  28.9k|    s->ext.status_expected = 0;
  771|  28.9k|    s->ext.ocsp.ids = NULL;
  772|  28.9k|    s->ext.ocsp.exts = NULL;
  773|  28.9k|    s->ext.ocsp.resp = NULL;
  774|  28.9k|    s->ext.ocsp.resp_len = 0;
  775|  28.9k|    SSL_CTX_up_ref(ctx);
  776|  28.9k|    s->session_ctx = ctx;
  777|  28.9k|#ifndef OPENSSL_NO_EC
  778|  28.9k|    if (ctx->ext.ecpointformats) {
  ------------------
  |  Branch (778:9): [True: 0, False: 28.9k]
  ------------------
  779|      0|        s->ext.ecpointformats =
  780|      0|            OPENSSL_memdup(ctx->ext.ecpointformats,
  ------------------
  |  |  130|      0|        CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  781|      0|                           ctx->ext.ecpointformats_len);
  782|      0|        if (!s->ext.ecpointformats) {
  ------------------
  |  Branch (782:13): [True: 0, False: 0]
  ------------------
  783|      0|            s->ext.ecpointformats_len = 0;
  784|      0|            goto err;
  785|      0|        }
  786|      0|        s->ext.ecpointformats_len =
  787|      0|            ctx->ext.ecpointformats_len;
  788|      0|    }
  789|  28.9k|    if (ctx->ext.supportedgroups) {
  ------------------
  |  Branch (789:9): [True: 0, False: 28.9k]
  ------------------
  790|      0|        s->ext.supportedgroups =
  791|      0|            OPENSSL_memdup(ctx->ext.supportedgroups,
  ------------------
  |  |  130|      0|        CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  792|      0|                           ctx->ext.supportedgroups_len
  793|      0|                                * sizeof(*ctx->ext.supportedgroups));
  794|      0|        if (!s->ext.supportedgroups) {
  ------------------
  |  Branch (794:13): [True: 0, False: 0]
  ------------------
  795|      0|            s->ext.supportedgroups_len = 0;
  796|      0|            goto err;
  797|      0|        }
  798|      0|        s->ext.supportedgroups_len = ctx->ext.supportedgroups_len;
  799|      0|    }
  800|  28.9k|#endif
  801|  28.9k|#ifndef OPENSSL_NO_NEXTPROTONEG
  802|  28.9k|    s->ext.npn = NULL;
  803|  28.9k|#endif
  804|       |
  805|  28.9k|    if (s->ctx->ext.alpn) {
  ------------------
  |  Branch (805:9): [True: 0, False: 28.9k]
  ------------------
  806|      0|        s->ext.alpn = OPENSSL_malloc(s->ctx->ext.alpn_len);
  ------------------
  |  |  118|      0|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  807|      0|        if (s->ext.alpn == NULL) {
  ------------------
  |  Branch (807:13): [True: 0, False: 0]
  ------------------
  808|      0|            s->ext.alpn_len = 0;
  809|      0|            goto err;
  810|      0|        }
  811|      0|        memcpy(s->ext.alpn, s->ctx->ext.alpn, s->ctx->ext.alpn_len);
  812|      0|        s->ext.alpn_len = s->ctx->ext.alpn_len;
  813|      0|    }
  814|       |
  815|  28.9k|    s->verified_chain = NULL;
  816|  28.9k|    s->verify_result = X509_V_OK;
  ------------------
  |  |   99|  28.9k|# define         X509_V_OK                                       0
  ------------------
  817|       |
  818|  28.9k|    s->default_passwd_callback = ctx->default_passwd_callback;
  819|  28.9k|    s->default_passwd_callback_userdata = ctx->default_passwd_callback_userdata;
  820|       |
  821|  28.9k|    s->method = ctx->method;
  822|       |
  823|  28.9k|    s->key_update = SSL_KEY_UPDATE_NONE;
  ------------------
  |  |  974|  28.9k|#define SSL_KEY_UPDATE_NONE             -1
  ------------------
  824|       |
  825|  28.9k|    s->allow_early_data_cb = ctx->allow_early_data_cb;
  826|  28.9k|    s->allow_early_data_cb_data = ctx->allow_early_data_cb_data;
  827|       |
  828|  28.9k|    if (!s->method->ssl_new(s))
  ------------------
  |  Branch (828:9): [True: 0, False: 28.9k]
  ------------------
  829|      0|        goto err;
  830|       |
  831|  28.9k|    s->server = (ctx->method->ssl_accept == ssl_undefined_function) ? 0 : 1;
  ------------------
  |  Branch (831:17): [True: 28.9k, False: 0]
  ------------------
  832|       |
  833|  28.9k|    if (!SSL_clear(s))
  ------------------
  |  Branch (833:9): [True: 0, False: 28.9k]
  ------------------
  834|      0|        goto err;
  835|       |
  836|  28.9k|    if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data))
  ------------------
  |  |   94|  28.9k|# define CRYPTO_EX_INDEX_SSL              0
  ------------------
  |  Branch (836:9): [True: 0, False: 28.9k]
  ------------------
  837|      0|        goto err;
  838|       |
  839|  28.9k|#ifndef OPENSSL_NO_PSK
  840|  28.9k|    s->psk_client_callback = ctx->psk_client_callback;
  841|  28.9k|    s->psk_server_callback = ctx->psk_server_callback;
  842|  28.9k|#endif
  843|  28.9k|    s->psk_find_session_cb = ctx->psk_find_session_cb;
  844|  28.9k|    s->psk_use_session_cb = ctx->psk_use_session_cb;
  845|       |
  846|  28.9k|    s->job = NULL;
  847|       |
  848|  28.9k|#ifndef OPENSSL_NO_CT
  849|  28.9k|    if (!SSL_set_ct_validation_callback(s, ctx->ct_validation_callback,
  ------------------
  |  Branch (849:9): [True: 0, False: 28.9k]
  ------------------
  850|  28.9k|                                        ctx->ct_validation_callback_arg))
  851|      0|        goto err;
  852|  28.9k|#endif
  853|       |
  854|  28.9k|    return s;
  855|      0| err:
  856|      0|    SSL_free(s);
  857|      0|    SSLerr(SSL_F_SSL_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  858|       |    return NULL;
  859|  28.9k|}
SSL_free:
 1147|  28.9k|{
 1148|  28.9k|    int i;
 1149|       |
 1150|  28.9k|    if (s == NULL)
  ------------------
  |  Branch (1150:9): [True: 0, False: 28.9k]
  ------------------
 1151|      0|        return;
 1152|  28.9k|    CRYPTO_DOWN_REF(&s->references, &i, s->lock);
 1153|  28.9k|    REF_PRINT_COUNT("SSL", s);
 1154|  28.9k|    if (i > 0)
  ------------------
  |  Branch (1154:9): [True: 0, False: 28.9k]
  ------------------
 1155|      0|        return;
 1156|  28.9k|    REF_ASSERT_ISNT(i < 0);
  ------------------
  |  |  138|  28.9k|    (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0)
  |  |  ------------------
  |  |  |  Branch (138:12): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
 1157|       |
 1158|  28.9k|    X509_VERIFY_PARAM_free(s->param);
 1159|  28.9k|    dane_final(&s->dane);
 1160|  28.9k|    CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data);
  ------------------
  |  |   94|  28.9k|# define CRYPTO_EX_INDEX_SSL              0
  ------------------
 1161|       |
 1162|       |    /* Ignore return value */
 1163|  28.9k|    ssl_free_wbio_buffer(s);
 1164|       |
 1165|  28.9k|    BIO_free_all(s->wbio);
 1166|  28.9k|    BIO_free_all(s->rbio);
 1167|       |
 1168|  28.9k|    BUF_MEM_free(s->init_buf);
 1169|       |
 1170|       |    /* add extra stuff */
 1171|  28.9k|    sk_SSL_CIPHER_free(s->cipher_list);
 1172|  28.9k|    sk_SSL_CIPHER_free(s->cipher_list_by_id);
 1173|  28.9k|    sk_SSL_CIPHER_free(s->tls13_ciphersuites);
 1174|  28.9k|    sk_SSL_CIPHER_free(s->peer_ciphers);
 1175|       |
 1176|       |    /* Make the next call work :-) */
 1177|  28.9k|    if (s->session != NULL) {
  ------------------
  |  Branch (1177:9): [True: 28.9k, False: 0]
  ------------------
 1178|  28.9k|        ssl_clear_bad_session(s);
 1179|  28.9k|        SSL_SESSION_free(s->session);
 1180|  28.9k|    }
 1181|  28.9k|    SSL_SESSION_free(s->psksession);
 1182|  28.9k|    OPENSSL_free(s->psksession_id);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1183|       |
 1184|  28.9k|    clear_ciphers(s);
 1185|       |
 1186|  28.9k|    ssl_cert_free(s->cert);
 1187|  28.9k|    OPENSSL_free(s->shared_sigalgs);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1188|       |    /* Free up if allocated */
 1189|       |
 1190|  28.9k|    OPENSSL_free(s->ext.hostname);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1191|  28.9k|    SSL_CTX_free(s->session_ctx);
 1192|  28.9k|#ifndef OPENSSL_NO_EC
 1193|  28.9k|    OPENSSL_free(s->ext.ecpointformats);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1194|  28.9k|    OPENSSL_free(s->ext.peer_ecpointformats);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1195|  28.9k|    OPENSSL_free(s->ext.supportedgroups);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1196|  28.9k|    OPENSSL_free(s->ext.peer_supportedgroups);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1197|  28.9k|#endif                          /* OPENSSL_NO_EC */
 1198|  28.9k|    sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts, X509_EXTENSION_free);
 1199|  28.9k|#ifndef OPENSSL_NO_OCSP
 1200|  28.9k|    sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
 1201|  28.9k|#endif
 1202|  28.9k|#ifndef OPENSSL_NO_CT
 1203|  28.9k|    SCT_LIST_free(s->scts);
 1204|  28.9k|    OPENSSL_free(s->ext.scts);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1205|  28.9k|#endif
 1206|  28.9k|    OPENSSL_free(s->ext.ocsp.resp);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1207|  28.9k|    OPENSSL_free(s->ext.alpn);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1208|  28.9k|    OPENSSL_free(s->ext.tls13_cookie);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1209|  28.9k|    if (s->clienthello != NULL)
  ------------------
  |  Branch (1209:9): [True: 0, False: 28.9k]
  ------------------
 1210|      0|        OPENSSL_free(s->clienthello->pre_proc_exts);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1211|  28.9k|    OPENSSL_free(s->clienthello);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1212|  28.9k|    OPENSSL_free(s->pha_context);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1213|  28.9k|    EVP_MD_CTX_free(s->pha_dgst);
 1214|       |
 1215|  28.9k|    sk_X509_NAME_pop_free(s->ca_names, X509_NAME_free);
 1216|  28.9k|    sk_X509_NAME_pop_free(s->client_ca_names, X509_NAME_free);
 1217|       |
 1218|  28.9k|    sk_X509_pop_free(s->verified_chain, X509_free);
 1219|       |
 1220|  28.9k|    if (s->method != NULL)
  ------------------
  |  Branch (1220:9): [True: 28.9k, False: 0]
  ------------------
 1221|  28.9k|        s->method->ssl_free(s);
 1222|       |
 1223|  28.9k|    RECORD_LAYER_release(&s->rlayer);
 1224|       |
 1225|  28.9k|    SSL_CTX_free(s->ctx);
 1226|       |
 1227|  28.9k|    ASYNC_WAIT_CTX_free(s->waitctx);
 1228|       |
 1229|  28.9k|#if !defined(OPENSSL_NO_NEXTPROTONEG)
 1230|  28.9k|    OPENSSL_free(s->ext.npn);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1231|  28.9k|#endif
 1232|       |
 1233|  28.9k|#ifndef OPENSSL_NO_SRTP
 1234|  28.9k|    sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles);
 1235|  28.9k|#endif
 1236|       |
 1237|  28.9k|    CRYPTO_THREAD_lock_free(s->lock);
 1238|       |
 1239|  28.9k|    OPENSSL_free(s);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1240|  28.9k|}
SSL_set0_rbio:
 1243|  28.9k|{
 1244|  28.9k|    BIO_free_all(s->rbio);
 1245|  28.9k|    s->rbio = rbio;
 1246|  28.9k|}
SSL_set0_wbio:
 1249|  28.9k|{
 1250|       |    /*
 1251|       |     * If the output buffering BIO is still in place, remove it
 1252|       |     */
 1253|  28.9k|    if (s->bbio != NULL)
  ------------------
  |  Branch (1253:9): [True: 0, False: 28.9k]
  ------------------
 1254|      0|        s->wbio = BIO_pop(s->wbio);
 1255|       |
 1256|  28.9k|    BIO_free_all(s->wbio);
 1257|  28.9k|    s->wbio = wbio;
 1258|       |
 1259|       |    /* Re-attach |bbio| to the new |wbio|. */
 1260|  28.9k|    if (s->bbio != NULL)
  ------------------
  |  Branch (1260:9): [True: 0, False: 28.9k]
  ------------------
 1261|      0|        s->wbio = BIO_push(s->bbio, s->wbio);
 1262|  28.9k|}
SSL_set_bio:
 1265|  28.9k|{
 1266|       |    /*
 1267|       |     * For historical reasons, this function has many different cases in
 1268|       |     * ownership handling.
 1269|       |     */
 1270|       |
 1271|       |    /* If nothing has changed, do nothing */
 1272|  28.9k|    if (rbio == SSL_get_rbio(s) && wbio == SSL_get_wbio(s))
  ------------------
  |  Branch (1272:9): [True: 0, False: 28.9k]
  |  Branch (1272:36): [True: 0, False: 0]
  ------------------
 1273|      0|        return;
 1274|       |
 1275|       |    /*
 1276|       |     * If the two arguments are equal then one fewer reference is granted by the
 1277|       |     * caller than we want to take
 1278|       |     */
 1279|  28.9k|    if (rbio != NULL && rbio == wbio)
  ------------------
  |  Branch (1279:9): [True: 28.9k, False: 0]
  |  Branch (1279:25): [True: 28.9k, False: 0]
  ------------------
 1280|  28.9k|        BIO_up_ref(rbio);
 1281|       |
 1282|       |    /*
 1283|       |     * If only the wbio is changed only adopt one reference.
 1284|       |     */
 1285|  28.9k|    if (rbio == SSL_get_rbio(s)) {
  ------------------
  |  Branch (1285:9): [True: 0, False: 28.9k]
  ------------------
 1286|      0|        SSL_set0_wbio(s, wbio);
 1287|      0|        return;
 1288|      0|    }
 1289|       |    /*
 1290|       |     * There is an asymmetry here for historical reasons. If only the rbio is
 1291|       |     * changed AND the rbio and wbio were originally different, then we only
 1292|       |     * adopt one reference.
 1293|       |     */
 1294|  28.9k|    if (wbio == SSL_get_wbio(s) && SSL_get_rbio(s) != SSL_get_wbio(s)) {
  ------------------
  |  Branch (1294:9): [True: 0, False: 28.9k]
  |  Branch (1294:36): [True: 0, False: 0]
  ------------------
 1295|      0|        SSL_set0_rbio(s, rbio);
 1296|      0|        return;
 1297|      0|    }
 1298|       |
 1299|       |    /* Otherwise, adopt both references. */
 1300|  28.9k|    SSL_set0_rbio(s, rbio);
 1301|  28.9k|    SSL_set0_wbio(s, wbio);
 1302|  28.9k|}
SSL_get_rbio:
 1305|  86.9k|{
 1306|  86.9k|    return s->rbio;
 1307|  86.9k|}
SSL_get_wbio:
 1310|  28.9k|{
 1311|  28.9k|    if (s->bbio != NULL) {
  ------------------
  |  Branch (1311:9): [True: 0, False: 28.9k]
  ------------------
 1312|       |        /*
 1313|       |         * If |bbio| is active, the true caller-configured BIO is its
 1314|       |         * |next_bio|.
 1315|       |         */
 1316|      0|        return BIO_next(s->bbio);
 1317|      0|    }
 1318|  28.9k|    return s->wbio;
 1319|  28.9k|}
SSL_set_fd:
 1352|  28.9k|{
 1353|  28.9k|    int ret = 0;
 1354|  28.9k|    BIO *bio = NULL;
 1355|       |
 1356|  28.9k|    bio = BIO_new(BIO_s_socket());
 1357|       |
 1358|  28.9k|    if (bio == NULL) {
  ------------------
  |  Branch (1358:9): [True: 0, False: 28.9k]
  ------------------
 1359|      0|        SSLerr(SSL_F_SSL_SET_FD, ERR_R_BUF_LIB);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 1360|      0|        goto err;
 1361|      0|    }
 1362|  28.9k|    BIO_set_fd(bio, fd, BIO_NOCLOSE);
  ------------------
  |  |  412|  28.9k|# define BIO_set_fd(b,fd,c)      BIO_int_ctrl(b,BIO_C_SET_FD,c,fd)
  |  |  ------------------
  |  |  |  |  297|  28.9k|# define BIO_C_SET_FD                            104
  |  |  ------------------
  ------------------
 1363|  28.9k|    SSL_set_bio(s, bio, bio);
 1364|  28.9k|    ret = 1;
 1365|  28.9k| err:
 1366|  28.9k|    return ret;
 1367|  28.9k|}
SSL_connect:
 1664|  28.9k|{
 1665|  28.9k|    if (s->handshake_func == NULL) {
  ------------------
  |  Branch (1665:9): [True: 28.9k, False: 0]
  ------------------
 1666|       |        /* Not properly initialized yet */
 1667|  28.9k|        SSL_set_connect_state(s);
 1668|  28.9k|    }
 1669|       |
 1670|  28.9k|    return SSL_do_handshake(s);
 1671|  28.9k|}
SSL_ctrl:
 2183|  57.9k|{
 2184|  57.9k|    long l;
 2185|       |
 2186|  57.9k|    switch (cmd) {
 2187|      0|    case SSL_CTRL_GET_READ_AHEAD:
  ------------------
  |  | 1220|      0|# define SSL_CTRL_GET_READ_AHEAD                 40
  ------------------
  |  Branch (2187:5): [True: 0, False: 57.9k]
  ------------------
 2188|      0|        return RECORD_LAYER_get_read_ahead(&s->rlayer);
  ------------------
  |  |  182|      0|#define RECORD_LAYER_get_read_ahead(rl)         ((rl)->read_ahead)
  ------------------
 2189|      0|    case SSL_CTRL_SET_READ_AHEAD:
  ------------------
  |  | 1221|      0|# define SSL_CTRL_SET_READ_AHEAD                 41
  ------------------
  |  Branch (2189:5): [True: 0, False: 57.9k]
  ------------------
 2190|      0|        l = RECORD_LAYER_get_read_ahead(&s->rlayer);
  ------------------
  |  |  182|      0|#define RECORD_LAYER_get_read_ahead(rl)         ((rl)->read_ahead)
  ------------------
 2191|      0|        RECORD_LAYER_set_read_ahead(&s->rlayer, larg);
  ------------------
  |  |  181|      0|#define RECORD_LAYER_set_read_ahead(rl, ra)     ((rl)->read_ahead = (ra))
  ------------------
 2192|      0|        return l;
 2193|       |
 2194|      0|    case SSL_CTRL_SET_MSG_CALLBACK_ARG:
  ------------------
  |  | 1203|      0|# define SSL_CTRL_SET_MSG_CALLBACK_ARG           16
  ------------------
  |  Branch (2194:5): [True: 0, False: 57.9k]
  ------------------
 2195|      0|        s->msg_callback_arg = parg;
 2196|      0|        return 1;
 2197|       |
 2198|  28.9k|    case SSL_CTRL_MODE:
  ------------------
  |  | 1219|  28.9k|# define SSL_CTRL_MODE                           33
  ------------------
  |  Branch (2198:5): [True: 28.9k, False: 28.9k]
  ------------------
 2199|  28.9k|        return (s->mode |= larg);
 2200|      0|    case SSL_CTRL_CLEAR_MODE:
  ------------------
  |  | 1265|      0|# define SSL_CTRL_CLEAR_MODE                     78
  ------------------
  |  Branch (2200:5): [True: 0, False: 57.9k]
  ------------------
 2201|      0|        return (s->mode &= ~larg);
 2202|      0|    case SSL_CTRL_GET_MAX_CERT_LIST:
  ------------------
  |  | 1226|      0|# define SSL_CTRL_GET_MAX_CERT_LIST              50
  ------------------
  |  Branch (2202:5): [True: 0, False: 57.9k]
  ------------------
 2203|      0|        return (long)s->max_cert_list;
 2204|      0|    case SSL_CTRL_SET_MAX_CERT_LIST:
  ------------------
  |  | 1227|      0|# define SSL_CTRL_SET_MAX_CERT_LIST              51
  ------------------
  |  Branch (2204:5): [True: 0, False: 57.9k]
  ------------------
 2205|      0|        if (larg < 0)
  ------------------
  |  Branch (2205:13): [True: 0, False: 0]
  ------------------
 2206|      0|            return 0;
 2207|      0|        l = (long)s->max_cert_list;
 2208|      0|        s->max_cert_list = (size_t)larg;
 2209|      0|        return l;
 2210|      0|    case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
  ------------------
  |  | 1228|      0|# define SSL_CTRL_SET_MAX_SEND_FRAGMENT          52
  ------------------
  |  Branch (2210:5): [True: 0, False: 57.9k]
  ------------------
 2211|      0|        if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
  ------------------
  |  |  171|      0|# define SSL3_RT_MAX_PLAIN_LENGTH                16384
  ------------------
  |  Branch (2211:13): [True: 0, False: 0]
  |  Branch (2211:27): [True: 0, False: 0]
  ------------------
 2212|      0|            return 0;
 2213|      0|        s->max_send_fragment = larg;
 2214|      0|        if (s->max_send_fragment < s->split_send_fragment)
  ------------------
  |  Branch (2214:13): [True: 0, False: 0]
  ------------------
 2215|      0|            s->split_send_fragment = s->max_send_fragment;
 2216|      0|        return 1;
 2217|      0|    case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
  ------------------
  |  | 1299|      0|# define SSL_CTRL_SET_SPLIT_SEND_FRAGMENT        125
  ------------------
  |  Branch (2217:5): [True: 0, False: 57.9k]
  ------------------
 2218|      0|        if ((size_t)larg > s->max_send_fragment || larg == 0)
  ------------------
  |  Branch (2218:13): [True: 0, False: 0]
  |  Branch (2218:52): [True: 0, False: 0]
  ------------------
 2219|      0|            return 0;
 2220|      0|        s->split_send_fragment = larg;
 2221|      0|        return 1;
 2222|      0|    case SSL_CTRL_SET_MAX_PIPELINES:
  ------------------
  |  | 1300|      0|# define SSL_CTRL_SET_MAX_PIPELINES              126
  ------------------
  |  Branch (2222:5): [True: 0, False: 57.9k]
  ------------------
 2223|      0|        if (larg < 1 || larg > SSL_MAX_PIPELINES)
  ------------------
  |  |   53|      0|# define SSL_MAX_PIPELINES  32
  ------------------
  |  Branch (2223:13): [True: 0, False: 0]
  |  Branch (2223:25): [True: 0, False: 0]
  ------------------
 2224|      0|            return 0;
 2225|      0|        s->max_pipelines = larg;
 2226|      0|        if (larg > 1)
  ------------------
  |  Branch (2226:13): [True: 0, False: 0]
  ------------------
 2227|      0|            RECORD_LAYER_set_read_ahead(&s->rlayer, 1);
  ------------------
  |  |  181|      0|#define RECORD_LAYER_set_read_ahead(rl, ra)     ((rl)->read_ahead = (ra))
  ------------------
 2228|      0|        return 1;
 2229|      0|    case SSL_CTRL_GET_RI_SUPPORT:
  ------------------
  |  | 1264|      0|# define SSL_CTRL_GET_RI_SUPPORT                 76
  ------------------
  |  Branch (2229:5): [True: 0, False: 57.9k]
  ------------------
 2230|      0|        if (s->s3)
  ------------------
  |  Branch (2230:13): [True: 0, False: 0]
  ------------------
 2231|      0|            return s->s3->send_connection_binding;
 2232|      0|        else
 2233|      0|            return 0;
 2234|      0|    case SSL_CTRL_CERT_FLAGS:
  ------------------
  |  | 1277|      0|# define SSL_CTRL_CERT_FLAGS                     99
  ------------------
  |  Branch (2234:5): [True: 0, False: 57.9k]
  ------------------
 2235|      0|        return (s->cert->cert_flags |= larg);
 2236|      0|    case SSL_CTRL_CLEAR_CERT_FLAGS:
  ------------------
  |  | 1278|      0|# define SSL_CTRL_CLEAR_CERT_FLAGS               100
  ------------------
  |  Branch (2236:5): [True: 0, False: 57.9k]
  ------------------
 2237|      0|        return (s->cert->cert_flags &= ~larg);
 2238|       |
 2239|      0|    case SSL_CTRL_GET_RAW_CIPHERLIST:
  ------------------
  |  | 1288|      0|# define SSL_CTRL_GET_RAW_CIPHERLIST             110
  ------------------
  |  Branch (2239:5): [True: 0, False: 57.9k]
  ------------------
 2240|      0|        if (parg) {
  ------------------
  |  Branch (2240:13): [True: 0, False: 0]
  ------------------
 2241|      0|            if (s->s3->tmp.ciphers_raw == NULL)
  ------------------
  |  Branch (2241:17): [True: 0, False: 0]
  ------------------
 2242|      0|                return 0;
 2243|      0|            *(unsigned char **)parg = s->s3->tmp.ciphers_raw;
 2244|      0|            return (int)s->s3->tmp.ciphers_rawlen;
 2245|      0|        } else {
 2246|      0|            return TLS_CIPHER_LEN;
  ------------------
  |  |  412|      0|# define TLS_CIPHER_LEN 2
  ------------------
 2247|      0|        }
 2248|      0|    case SSL_CTRL_GET_EXTMS_SUPPORT:
  ------------------
  |  | 1296|      0|# define SSL_CTRL_GET_EXTMS_SUPPORT              122
  ------------------
  |  Branch (2248:5): [True: 0, False: 57.9k]
  ------------------
 2249|      0|        if (!s->session || SSL_in_init(s) || ossl_statem_get_in_handshake(s))
  ------------------
  |  Branch (2249:13): [True: 0, False: 0]
  |  Branch (2249:28): [True: 0, False: 0]
  |  Branch (2249:46): [True: 0, False: 0]
  ------------------
 2250|      0|            return -1;
 2251|      0|        if (s->session->flags & SSL_SESS_FLAG_EXTMS)
  ------------------
  |  |  592|      0|# define SSL_SESS_FLAG_EXTMS             0x1
  ------------------
  |  Branch (2251:13): [True: 0, False: 0]
  ------------------
 2252|      0|            return 1;
 2253|      0|        else
 2254|      0|            return 0;
 2255|      0|    case SSL_CTRL_SET_MIN_PROTO_VERSION:
  ------------------
  |  | 1297|      0|# define SSL_CTRL_SET_MIN_PROTO_VERSION          123
  ------------------
  |  Branch (2255:5): [True: 0, False: 57.9k]
  ------------------
 2256|      0|        return ssl_check_allowed_versions(larg, s->max_proto_version)
  ------------------
  |  Branch (2256:16): [True: 0, False: 0]
  ------------------
 2257|      0|               && ssl_set_version_bound(s->ctx->method->version, (int)larg,
  ------------------
  |  Branch (2257:19): [True: 0, False: 0]
  ------------------
 2258|      0|                                        &s->min_proto_version);
 2259|      0|    case SSL_CTRL_GET_MIN_PROTO_VERSION:
  ------------------
  |  | 1304|      0|# define SSL_CTRL_GET_MIN_PROTO_VERSION          130
  ------------------
  |  Branch (2259:5): [True: 0, False: 57.9k]
  ------------------
 2260|      0|        return s->min_proto_version;
 2261|      0|    case SSL_CTRL_SET_MAX_PROTO_VERSION:
  ------------------
  |  | 1298|      0|# define SSL_CTRL_SET_MAX_PROTO_VERSION          124
  ------------------
  |  Branch (2261:5): [True: 0, False: 57.9k]
  ------------------
 2262|      0|        return ssl_check_allowed_versions(s->min_proto_version, larg)
  ------------------
  |  Branch (2262:16): [True: 0, False: 0]
  ------------------
 2263|      0|               && ssl_set_version_bound(s->ctx->method->version, (int)larg,
  ------------------
  |  Branch (2263:19): [True: 0, False: 0]
  ------------------
 2264|      0|                                        &s->max_proto_version);
 2265|      0|    case SSL_CTRL_GET_MAX_PROTO_VERSION:
  ------------------
  |  | 1305|      0|# define SSL_CTRL_GET_MAX_PROTO_VERSION          131
  ------------------
  |  Branch (2265:5): [True: 0, False: 57.9k]
  ------------------
 2266|      0|        return s->max_proto_version;
 2267|  28.9k|    default:
  ------------------
  |  Branch (2267:5): [True: 28.9k, False: 28.9k]
  ------------------
 2268|  28.9k|        return s->method->ssl_ctrl(s, cmd, larg, parg);
 2269|  57.9k|    }
 2270|  57.9k|}
ssl_cipher_ptr_id_cmp:
 2438|  7.73M|{
 2439|  7.73M|    if ((*ap)->id > (*bp)->id)
  ------------------
  |  Branch (2439:9): [True: 4.34M, False: 3.39M]
  ------------------
 2440|  4.34M|        return 1;
 2441|  3.39M|    if ((*ap)->id < (*bp)->id)
  ------------------
  |  Branch (2441:9): [True: 3.39M, False: 0]
  ------------------
 2442|  3.39M|        return -1;
 2443|      0|    return 0;
 2444|  3.39M|}
SSL_get_ciphers:
 2449|  86.9k|{
 2450|  86.9k|    if (s != NULL) {
  ------------------
  |  Branch (2450:9): [True: 86.9k, False: 0]
  ------------------
 2451|  86.9k|        if (s->cipher_list != NULL) {
  ------------------
  |  Branch (2451:13): [True: 0, False: 86.9k]
  ------------------
 2452|      0|            return s->cipher_list;
 2453|  86.9k|        } else if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL)) {
  ------------------
  |  Branch (2453:20): [True: 86.9k, False: 0]
  |  Branch (2453:40): [True: 86.9k, False: 0]
  ------------------
 2454|  86.9k|            return s->ctx->cipher_list;
 2455|  86.9k|        }
 2456|  86.9k|    }
 2457|      0|    return NULL;
 2458|  86.9k|}
SSL_get1_supported_ciphers:
 2468|  57.9k|{
 2469|  57.9k|    STACK_OF(SSL_CIPHER) *sk = NULL, *ciphers;
  ------------------
  |  |   20|  57.9k|# define STACK_OF(type) struct stack_st_##type
  ------------------
 2470|  57.9k|    int i;
 2471|       |
 2472|  57.9k|    ciphers = SSL_get_ciphers(s);
 2473|  57.9k|    if (!ciphers)
  ------------------
  |  Branch (2473:9): [True: 0, False: 57.9k]
  ------------------
 2474|      0|        return NULL;
 2475|  57.9k|    if (!ssl_set_client_disabled(s))
  ------------------
  |  Branch (2475:9): [True: 0, False: 57.9k]
  ------------------
 2476|      0|        return NULL;
 2477|  3.53M|    for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
  ------------------
  |  Branch (2477:17): [True: 3.47M, False: 57.9k]
  ------------------
 2478|  3.47M|        const SSL_CIPHER *c = sk_SSL_CIPHER_value(ciphers, i);
 2479|  3.47M|        if (!ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_SUPPORTED, 0)) {
  ------------------
  |  | 2289|  3.47M|# define SSL_SECOP_CIPHER_SUPPORTED      (1 | SSL_SECOP_OTHER_CIPHER)
  |  |  ------------------
  |  |  |  | 2275|  3.47M|# define SSL_SECOP_OTHER_CIPHER  (1 << 16)
  |  |  ------------------
  ------------------
  |  Branch (2479:13): [True: 1.73M, False: 1.73M]
  ------------------
 2480|  1.73M|            if (!sk)
  ------------------
  |  Branch (2480:17): [True: 57.9k, False: 1.68M]
  ------------------
 2481|  57.9k|                sk = sk_SSL_CIPHER_new_null();
 2482|  1.73M|            if (!sk)
  ------------------
  |  Branch (2482:17): [True: 0, False: 1.73M]
  ------------------
 2483|      0|                return NULL;
 2484|  1.73M|            if (!sk_SSL_CIPHER_push(sk, c)) {
  ------------------
  |  Branch (2484:17): [True: 0, False: 1.73M]
  ------------------
 2485|      0|                sk_SSL_CIPHER_free(sk);
 2486|      0|                return NULL;
 2487|      0|            }
 2488|  1.73M|        }
 2489|  3.47M|    }
 2490|  57.9k|    return sk;
 2491|  57.9k|}
SSL_CTX_new:
 3015|  28.9k|{
 3016|  28.9k|    SSL_CTX *ret = NULL;
 3017|       |
 3018|  28.9k|    if (meth == NULL) {
  ------------------
  |  Branch (3018:9): [True: 0, False: 28.9k]
  ------------------
 3019|      0|        SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_NULL_SSL_METHOD_PASSED);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3020|      0|        return NULL;
 3021|      0|    }
 3022|       |
 3023|  28.9k|    if (!OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL))
  ------------------
  |  | 2359|  28.9k|# define OPENSSL_INIT_LOAD_SSL_STRINGS       0x00200000L
  ------------------
  |  Branch (3023:9): [True: 0, False: 28.9k]
  ------------------
 3024|      0|        return NULL;
 3025|       |
 3026|  28.9k|    if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) {
  ------------------
  |  Branch (3026:9): [True: 0, False: 28.9k]
  ------------------
 3027|      0|        SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3028|      0|        goto err;
 3029|      0|    }
 3030|  28.9k|    ret = OPENSSL_zalloc(sizeof(*ret));
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3031|  28.9k|    if (ret == NULL)
  ------------------
  |  Branch (3031:9): [True: 0, False: 28.9k]
  ------------------
 3032|      0|        goto err;
 3033|       |
 3034|  28.9k|    ret->method = meth;
 3035|  28.9k|    ret->min_proto_version = 0;
 3036|  28.9k|    ret->max_proto_version = 0;
 3037|  28.9k|    ret->mode = SSL_MODE_AUTO_RETRY;
  ------------------
  |  |  468|  28.9k|# define SSL_MODE_AUTO_RETRY 0x00000004U
  ------------------
 3038|  28.9k|    ret->session_cache_mode = SSL_SESS_CACHE_SERVER;
  ------------------
  |  |  674|  28.9k|# define SSL_SESS_CACHE_SERVER                   0x0002
  ------------------
 3039|  28.9k|    ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT;
  ------------------
  |  |  655|  28.9k|# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT      (1024*20)
  ------------------
 3040|       |    /* We take the system default. */
 3041|  28.9k|    ret->session_timeout = meth->get_timeout();
 3042|  28.9k|    ret->references = 1;
 3043|  28.9k|    ret->lock = CRYPTO_THREAD_lock_new();
 3044|  28.9k|    if (ret->lock == NULL) {
  ------------------
  |  Branch (3044:9): [True: 0, False: 28.9k]
  ------------------
 3045|      0|        SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3046|      0|        OPENSSL_free(ret);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3047|      0|        return NULL;
 3048|      0|    }
 3049|  28.9k|    ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT;
  ------------------
  |  |  653|  28.9k|# define SSL_MAX_CERT_LIST_DEFAULT 1024*100
  ------------------
 3050|  28.9k|    ret->verify_mode = SSL_VERIFY_NONE;
  ------------------
  |  | 1099|  28.9k|# define SSL_VERIFY_NONE                 0x00
  ------------------
 3051|  28.9k|    if ((ret->cert = ssl_cert_new()) == NULL)
  ------------------
  |  Branch (3051:9): [True: 0, False: 28.9k]
  ------------------
 3052|      0|        goto err;
 3053|       |
 3054|  28.9k|    ret->sessions = lh_SSL_SESSION_new(ssl_session_hash, ssl_session_cmp);
 3055|  28.9k|    if (ret->sessions == NULL)
  ------------------
  |  Branch (3055:9): [True: 0, False: 28.9k]
  ------------------
 3056|      0|        goto err;
 3057|  28.9k|    ret->cert_store = X509_STORE_new();
 3058|  28.9k|    if (ret->cert_store == NULL)
  ------------------
  |  Branch (3058:9): [True: 0, False: 28.9k]
  ------------------
 3059|      0|        goto err;
 3060|  28.9k|#ifndef OPENSSL_NO_CT
 3061|  28.9k|    ret->ctlog_store = CTLOG_STORE_new();
 3062|  28.9k|    if (ret->ctlog_store == NULL)
  ------------------
  |  Branch (3062:9): [True: 0, False: 28.9k]
  ------------------
 3063|      0|        goto err;
 3064|  28.9k|#endif
 3065|       |
 3066|  28.9k|    if (!SSL_CTX_set_ciphersuites(ret, TLS_DEFAULT_CIPHERSUITES))
  ------------------
  |  |  176|  28.9k|#  define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \
  |  |  177|  28.9k|                                   "TLS_CHACHA20_POLY1305_SHA256:" \
  |  |  178|  28.9k|                                   "TLS_AES_128_GCM_SHA256"
  ------------------
  |  Branch (3066:9): [True: 0, False: 28.9k]
  ------------------
 3067|      0|        goto err;
 3068|       |
 3069|  28.9k|    if (!ssl_create_cipher_list(ret->method,
  ------------------
  |  Branch (3069:9): [True: 0, False: 28.9k]
  ------------------
 3070|  28.9k|                                ret->tls13_ciphersuites,
 3071|  28.9k|                                &ret->cipher_list, &ret->cipher_list_by_id,
 3072|  28.9k|                                SSL_DEFAULT_CIPHER_LIST, ret->cert)
  ------------------
  |  |  173|  28.9k|# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL"
  ------------------
 3073|  28.9k|        || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) {
  ------------------
  |  Branch (3073:12): [True: 0, False: 28.9k]
  ------------------
 3074|      0|        SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_LIBRARY_HAS_NO_CIPHERS);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3075|      0|        goto err2;
 3076|      0|    }
 3077|       |
 3078|  28.9k|    ret->param = X509_VERIFY_PARAM_new();
 3079|  28.9k|    if (ret->param == NULL)
  ------------------
  |  Branch (3079:9): [True: 0, False: 28.9k]
  ------------------
 3080|      0|        goto err;
 3081|       |
 3082|  28.9k|    if ((ret->md5 = EVP_get_digestbyname("ssl3-md5")) == NULL) {
  ------------------
  |  Branch (3082:9): [True: 0, False: 28.9k]
  ------------------
 3083|      0|        SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3084|      0|        goto err2;
 3085|      0|    }
 3086|  28.9k|    if ((ret->sha1 = EVP_get_digestbyname("ssl3-sha1")) == NULL) {
  ------------------
  |  Branch (3086:9): [True: 0, False: 28.9k]
  ------------------
 3087|      0|        SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3088|      0|        goto err2;
 3089|      0|    }
 3090|       |
 3091|  28.9k|    if ((ret->ca_names = sk_X509_NAME_new_null()) == NULL)
  ------------------
  |  Branch (3091:9): [True: 0, False: 28.9k]
  ------------------
 3092|      0|        goto err;
 3093|       |
 3094|  28.9k|    if ((ret->client_ca_names = sk_X509_NAME_new_null()) == NULL)
  ------------------
  |  Branch (3094:9): [True: 0, False: 28.9k]
  ------------------
 3095|      0|        goto err;
 3096|       |
 3097|  28.9k|    if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data))
  ------------------
  |  |   95|  28.9k|# define CRYPTO_EX_INDEX_SSL_CTX          1
  ------------------
  |  Branch (3097:9): [True: 0, False: 28.9k]
  ------------------
 3098|      0|        goto err;
 3099|       |
 3100|  28.9k|    if ((ret->ext.secure = OPENSSL_secure_zalloc(sizeof(*ret->ext.secure))) == NULL)
  ------------------
  |  |  138|  28.9k|        CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (3100:9): [True: 0, False: 28.9k]
  ------------------
 3101|      0|        goto err;
 3102|       |
 3103|       |    /* No compression for DTLS */
 3104|  28.9k|    if (!(meth->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS))
  ------------------
  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  ------------------
  |  Branch (3104:9): [True: 28.9k, False: 0]
  ------------------
 3105|  28.9k|        ret->comp_methods = SSL_COMP_get_compression_methods();
 3106|       |
 3107|  28.9k|    ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
  ------------------
  |  |  171|  28.9k|# define SSL3_RT_MAX_PLAIN_LENGTH                16384
  ------------------
 3108|  28.9k|    ret->split_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
  ------------------
  |  |  171|  28.9k|# define SSL3_RT_MAX_PLAIN_LENGTH                16384
  ------------------
 3109|       |
 3110|       |    /* Setup RFC5077 ticket keys */
 3111|  28.9k|    if ((RAND_bytes(ret->ext.tick_key_name,
  ------------------
  |  Branch (3111:9): [True: 0, False: 28.9k]
  ------------------
 3112|  28.9k|                    sizeof(ret->ext.tick_key_name)) <= 0)
 3113|  28.9k|        || (RAND_priv_bytes(ret->ext.secure->tick_hmac_key,
  ------------------
  |  Branch (3113:12): [True: 0, False: 28.9k]
  ------------------
 3114|  28.9k|                       sizeof(ret->ext.secure->tick_hmac_key)) <= 0)
 3115|  28.9k|        || (RAND_priv_bytes(ret->ext.secure->tick_aes_key,
  ------------------
  |  Branch (3115:12): [True: 0, False: 28.9k]
  ------------------
 3116|  28.9k|                       sizeof(ret->ext.secure->tick_aes_key)) <= 0))
 3117|      0|        ret->options |= SSL_OP_NO_TICKET;
  ------------------
  |  |  333|      0|# define SSL_OP_NO_TICKET                                0x00004000U
  ------------------
 3118|       |
 3119|  28.9k|    if (RAND_priv_bytes(ret->ext.cookie_hmac_key,
  ------------------
  |  Branch (3119:9): [True: 0, False: 28.9k]
  ------------------
 3120|  28.9k|                   sizeof(ret->ext.cookie_hmac_key)) <= 0)
 3121|      0|        goto err;
 3122|       |
 3123|  28.9k|#ifndef OPENSSL_NO_SRP
 3124|  28.9k|    if (!SSL_CTX_SRP_CTX_init(ret))
  ------------------
  |  Branch (3124:9): [True: 0, False: 28.9k]
  ------------------
 3125|      0|        goto err;
 3126|  28.9k|#endif
 3127|  28.9k|#ifndef OPENSSL_NO_ENGINE
 3128|       |# ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO
 3129|       |#  define eng_strx(x)     #x
 3130|       |#  define eng_str(x)      eng_strx(x)
 3131|       |    /* Use specific client engine automatically... ignore errors */
 3132|       |    {
 3133|       |        ENGINE *eng;
 3134|       |        eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
 3135|       |        if (!eng) {
 3136|       |            ERR_clear_error();
 3137|       |            ENGINE_load_builtin_engines();
 3138|       |            eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
 3139|       |        }
 3140|       |        if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng))
 3141|       |            ERR_clear_error();
 3142|       |    }
 3143|       |# endif
 3144|  28.9k|#endif
 3145|       |    /*
 3146|       |     * Default is to connect to non-RI servers. When RI is more widely
 3147|       |     * deployed might change this.
 3148|       |     */
 3149|  28.9k|    ret->options |= SSL_OP_LEGACY_SERVER_CONNECT;
  ------------------
  |  |  304|  28.9k|# define SSL_OP_LEGACY_SERVER_CONNECT                    0x00000004U
  ------------------
 3150|       |    /*
 3151|       |     * Disable compression by default to prevent CRIME. Applications can
 3152|       |     * re-enable compression by configuring
 3153|       |     * SSL_CTX_clear_options(ctx, SSL_OP_NO_COMPRESSION);
 3154|       |     * or by using the SSL_CONF library. Similarly we also enable TLSv1.3
 3155|       |     * middlebox compatibility by default. This may be disabled by default in
 3156|       |     * a later OpenSSL version.
 3157|       |     */
 3158|  28.9k|    ret->options |= SSL_OP_NO_COMPRESSION | SSL_OP_ENABLE_MIDDLEBOX_COMPAT;
  ------------------
  |  |  343|  28.9k|# define SSL_OP_NO_COMPRESSION                           0x00020000U
  ------------------
                  ret->options |= SSL_OP_NO_COMPRESSION | SSL_OP_ENABLE_MIDDLEBOX_COMPAT;
  ------------------
  |  |  353|  28.9k|# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT                  0x00100000U
  ------------------
 3159|       |
 3160|  28.9k|    ret->ext.status_type = TLSEXT_STATUSTYPE_nothing;
  ------------------
  |  | 2021|  28.9k|#define TLSEXT_STATUSTYPE_nothing  -1
  ------------------
 3161|       |
 3162|       |    /*
 3163|       |     * We cannot usefully set a default max_early_data here (which gets
 3164|       |     * propagated in SSL_new(), for the following reason: setting the
 3165|       |     * SSL field causes tls_construct_stoc_early_data() to tell the
 3166|       |     * client that early data will be accepted when constructing a TLS 1.3
 3167|       |     * session ticket, and the client will accordingly send us early data
 3168|       |     * when using that ticket (if the client has early data to send).
 3169|       |     * However, in order for the early data to actually be consumed by
 3170|       |     * the application, the application must also have calls to
 3171|       |     * SSL_read_early_data(); otherwise we'll just skip past the early data
 3172|       |     * and ignore it.  So, since the application must add calls to
 3173|       |     * SSL_read_early_data(), we also require them to add
 3174|       |     * calls to SSL_CTX_set_max_early_data() in order to use early data,
 3175|       |     * eliminating the bandwidth-wasting early data in the case described
 3176|       |     * above.
 3177|       |     */
 3178|  28.9k|    ret->max_early_data = 0;
 3179|       |
 3180|       |    /*
 3181|       |     * Default recv_max_early_data is a fully loaded single record. Could be
 3182|       |     * split across multiple records in practice. We set this differently to
 3183|       |     * max_early_data so that, in the default case, we do not advertise any
 3184|       |     * support for early_data, but if a client were to send us some (e.g.
 3185|       |     * because of an old, stale ticket) then we will tolerate it and skip over
 3186|       |     * it.
 3187|       |     */
 3188|  28.9k|    ret->recv_max_early_data = SSL3_RT_MAX_PLAIN_LENGTH;
  ------------------
  |  |  171|  28.9k|# define SSL3_RT_MAX_PLAIN_LENGTH                16384
  ------------------
 3189|       |
 3190|       |    /* By default we send two session tickets automatically in TLSv1.3 */
 3191|  28.9k|    ret->num_tickets = 2;
 3192|       |
 3193|  28.9k|    ssl_ctx_system_config(ret);
 3194|       |
 3195|  28.9k|    return ret;
 3196|      0| err:
 3197|      0|    SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3198|      0| err2:
 3199|      0|    SSL_CTX_free(ret);
 3200|       |    return NULL;
 3201|      0|}
SSL_CTX_up_ref:
 3204|  57.9k|{
 3205|  57.9k|    int i;
 3206|       |
 3207|  57.9k|    if (CRYPTO_UP_REF(&ctx->references, &i, ctx->lock) <= 0)
  ------------------
  |  Branch (3207:9): [True: 0, False: 57.9k]
  ------------------
 3208|      0|        return 0;
 3209|       |
 3210|  57.9k|    REF_PRINT_COUNT("SSL_CTX", ctx);
 3211|  57.9k|    REF_ASSERT_ISNT(i < 2);
  ------------------
  |  |  138|  57.9k|    (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0)
  |  |  ------------------
  |  |  |  Branch (138:12): [True: 0, False: 57.9k]
  |  |  ------------------
  ------------------
 3212|  57.9k|    return ((i > 1) ? 1 : 0);
  ------------------
  |  Branch (3212:13): [True: 57.9k, False: 0]
  ------------------
 3213|  57.9k|}
SSL_CTX_free:
 3216|  86.9k|{
 3217|  86.9k|    int i;
 3218|       |
 3219|  86.9k|    if (a == NULL)
  ------------------
  |  Branch (3219:9): [True: 0, False: 86.9k]
  ------------------
 3220|      0|        return;
 3221|       |
 3222|  86.9k|    CRYPTO_DOWN_REF(&a->references, &i, a->lock);
 3223|  86.9k|    REF_PRINT_COUNT("SSL_CTX", a);
 3224|  86.9k|    if (i > 0)
  ------------------
  |  Branch (3224:9): [True: 57.9k, False: 28.9k]
  ------------------
 3225|  57.9k|        return;
 3226|  28.9k|    REF_ASSERT_ISNT(i < 0);
  ------------------
  |  |  138|  28.9k|    (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0)
  |  |  ------------------
  |  |  |  Branch (138:12): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
 3227|       |
 3228|  28.9k|    X509_VERIFY_PARAM_free(a->param);
 3229|  28.9k|    dane_ctx_final(&a->dane);
 3230|       |
 3231|       |    /*
 3232|       |     * Free internal session cache. However: the remove_cb() may reference
 3233|       |     * the ex_data of SSL_CTX, thus the ex_data store can only be removed
 3234|       |     * after the sessions were flushed.
 3235|       |     * As the ex_data handling routines might also touch the session cache,
 3236|       |     * the most secure solution seems to be: empty (flush) the cache, then
 3237|       |     * free ex_data, then finally free the cache.
 3238|       |     * (See ticket [openssl.org #212].)
 3239|       |     */
 3240|  28.9k|    if (a->sessions != NULL)
  ------------------
  |  Branch (3240:9): [True: 28.9k, False: 0]
  ------------------
 3241|  28.9k|        SSL_CTX_flush_sessions(a, 0);
 3242|       |
 3243|  28.9k|    CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data);
  ------------------
  |  |   95|  28.9k|# define CRYPTO_EX_INDEX_SSL_CTX          1
  ------------------
 3244|  28.9k|    lh_SSL_SESSION_free(a->sessions);
 3245|  28.9k|    X509_STORE_free(a->cert_store);
 3246|  28.9k|#ifndef OPENSSL_NO_CT
 3247|  28.9k|    CTLOG_STORE_free(a->ctlog_store);
 3248|  28.9k|#endif
 3249|  28.9k|    sk_SSL_CIPHER_free(a->cipher_list);
 3250|  28.9k|    sk_SSL_CIPHER_free(a->cipher_list_by_id);
 3251|  28.9k|    sk_SSL_CIPHER_free(a->tls13_ciphersuites);
 3252|  28.9k|    ssl_cert_free(a->cert);
 3253|  28.9k|    sk_X509_NAME_pop_free(a->ca_names, X509_NAME_free);
 3254|  28.9k|    sk_X509_NAME_pop_free(a->client_ca_names, X509_NAME_free);
 3255|  28.9k|    sk_X509_pop_free(a->extra_certs, X509_free);
 3256|  28.9k|    a->comp_methods = NULL;
 3257|  28.9k|#ifndef OPENSSL_NO_SRTP
 3258|  28.9k|    sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);
 3259|  28.9k|#endif
 3260|  28.9k|#ifndef OPENSSL_NO_SRP
 3261|  28.9k|    SSL_CTX_SRP_CTX_free(a);
 3262|  28.9k|#endif
 3263|  28.9k|#ifndef OPENSSL_NO_ENGINE
 3264|  28.9k|    ENGINE_finish(a->client_cert_engine);
 3265|  28.9k|#endif
 3266|       |
 3267|  28.9k|#ifndef OPENSSL_NO_EC
 3268|  28.9k|    OPENSSL_free(a->ext.ecpointformats);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3269|  28.9k|    OPENSSL_free(a->ext.supportedgroups);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3270|  28.9k|#endif
 3271|  28.9k|    OPENSSL_free(a->ext.alpn);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3272|  28.9k|    OPENSSL_secure_free(a->ext.secure);
  ------------------
  |  |  140|  28.9k|        CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3273|       |
 3274|  28.9k|    CRYPTO_THREAD_lock_free(a->lock);
 3275|       |
 3276|  28.9k|    OPENSSL_free(a);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3277|  28.9k|}
SSL_CTX_set_default_passwd_cb:
 3280|  28.9k|{
 3281|  28.9k|    ctx->default_passwd_callback = cb;
 3282|  28.9k|}
SSL_CTX_set_default_passwd_cb_userdata:
 3285|  28.9k|{
 3286|  28.9k|    ctx->default_passwd_callback_userdata = u;
 3287|  28.9k|}
SSL_get_error:
 3601|  28.9k|{
 3602|  28.9k|    int reason;
 3603|  28.9k|    unsigned long l;
 3604|  28.9k|    BIO *bio;
 3605|       |
 3606|  28.9k|    if (i > 0)
  ------------------
  |  Branch (3606:9): [True: 0, False: 28.9k]
  ------------------
 3607|      0|        return SSL_ERROR_NONE;
  ------------------
  |  | 1180|      0|# define SSL_ERROR_NONE                  0
  ------------------
 3608|       |
 3609|       |    /*
 3610|       |     * Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake etc,
 3611|       |     * where we do encode the error
 3612|       |     */
 3613|  28.9k|    if ((l = ERR_peek_error()) != 0) {
  ------------------
  |  Branch (3613:9): [True: 0, False: 28.9k]
  ------------------
 3614|      0|        if (ERR_GET_LIB(l) == ERR_LIB_SYS)
  ------------------
  |  |  142|      0|# define ERR_GET_LIB(l)          (int)(((l) >> 24L) & 0x0FFL)
  ------------------
                      if (ERR_GET_LIB(l) == ERR_LIB_SYS)
  ------------------
  |  |   55|      0|# define ERR_LIB_SYS             2
  ------------------
  |  Branch (3614:13): [True: 0, False: 0]
  ------------------
 3615|      0|            return SSL_ERROR_SYSCALL;
  ------------------
  |  | 1185|      0|# define SSL_ERROR_SYSCALL               5/* look at error stack/return
  ------------------
 3616|      0|        else
 3617|      0|            return SSL_ERROR_SSL;
  ------------------
  |  | 1181|      0|# define SSL_ERROR_SSL                   1
  ------------------
 3618|      0|    }
 3619|       |
 3620|  28.9k|    if (SSL_want_read(s)) {
  ------------------
  |  |  902|  28.9k|# define SSL_want_read(s)            (SSL_want(s) == SSL_READING)
  |  |  ------------------
  |  |  |  |  894|  28.9k|# define SSL_READING            3
  |  |  ------------------
  |  |  |  Branch (902:38): [True: 28.9k, False: 0]
  |  |  ------------------
  ------------------
 3621|  28.9k|        bio = SSL_get_rbio(s);
 3622|  28.9k|        if (BIO_should_read(bio))
  ------------------
  |  |  197|  28.9k|# define BIO_should_read(a)              BIO_test_flags(a, BIO_FLAGS_READ)
  |  |  ------------------
  |  |  |  |  150|  28.9k|# define BIO_FLAGS_READ          0x01
  |  |  ------------------
  |  |  |  Branch (197:42): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
 3623|      0|            return SSL_ERROR_WANT_READ;
  ------------------
  |  | 1182|      0|# define SSL_ERROR_WANT_READ             2
  ------------------
 3624|  28.9k|        else if (BIO_should_write(bio))
  ------------------
  |  |  198|  28.9k|# define BIO_should_write(a)             BIO_test_flags(a, BIO_FLAGS_WRITE)
  |  |  ------------------
  |  |  |  |  151|  28.9k|# define BIO_FLAGS_WRITE         0x02
  |  |  ------------------
  |  |  |  Branch (198:42): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
 3625|       |            /*
 3626|       |             * This one doesn't make too much sense ... We never try to write
 3627|       |             * to the rbio, and an application program where rbio and wbio
 3628|       |             * are separate couldn't even know what it should wait for.
 3629|       |             * However if we ever set s->rwstate incorrectly (so that we have
 3630|       |             * SSL_want_read(s) instead of SSL_want_write(s)) and rbio and
 3631|       |             * wbio *are* the same, this test works around that bug; so it
 3632|       |             * might be safer to keep it.
 3633|       |             */
 3634|      0|            return SSL_ERROR_WANT_WRITE;
  ------------------
  |  | 1183|      0|# define SSL_ERROR_WANT_WRITE            3
  ------------------
 3635|  28.9k|        else if (BIO_should_io_special(bio)) {
  ------------------
  |  |  199|  28.9k|# define BIO_should_io_special(a)        BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL)
  |  |  ------------------
  |  |  |  |  152|  28.9k|# define BIO_FLAGS_IO_SPECIAL    0x04
  |  |  ------------------
  |  |  |  Branch (199:42): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
 3636|      0|            reason = BIO_get_retry_reason(bio);
 3637|      0|            if (reason == BIO_RR_CONNECT)
  ------------------
  |  |  215|      0|# define BIO_RR_CONNECT                  0x02
  ------------------
  |  Branch (3637:17): [True: 0, False: 0]
  ------------------
 3638|      0|                return SSL_ERROR_WANT_CONNECT;
  ------------------
  |  | 1188|      0|# define SSL_ERROR_WANT_CONNECT          7
  ------------------
 3639|      0|            else if (reason == BIO_RR_ACCEPT)
  ------------------
  |  |  217|      0|# define BIO_RR_ACCEPT                   0x03
  ------------------
  |  Branch (3639:22): [True: 0, False: 0]
  ------------------
 3640|      0|                return SSL_ERROR_WANT_ACCEPT;
  ------------------
  |  | 1189|      0|# define SSL_ERROR_WANT_ACCEPT           8
  ------------------
 3641|      0|            else
 3642|      0|                return SSL_ERROR_SYSCALL; /* unknown */
  ------------------
  |  | 1185|      0|# define SSL_ERROR_SYSCALL               5/* look at error stack/return
  ------------------
 3643|      0|        }
 3644|  28.9k|    }
 3645|       |
 3646|  28.9k|    if (SSL_want_write(s)) {
  ------------------
  |  |  903|  28.9k|# define SSL_want_write(s)           (SSL_want(s) == SSL_WRITING)
  |  |  ------------------
  |  |  |  |  893|  28.9k|# define SSL_WRITING            2
  |  |  ------------------
  |  |  |  Branch (903:38): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
 3647|       |        /* Access wbio directly - in order to use the buffered bio if present */
 3648|      0|        bio = s->wbio;
 3649|      0|        if (BIO_should_write(bio))
  ------------------
  |  |  198|      0|# define BIO_should_write(a)             BIO_test_flags(a, BIO_FLAGS_WRITE)
  |  |  ------------------
  |  |  |  |  151|      0|# define BIO_FLAGS_WRITE         0x02
  |  |  ------------------
  |  |  |  Branch (198:42): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3650|      0|            return SSL_ERROR_WANT_WRITE;
  ------------------
  |  | 1183|      0|# define SSL_ERROR_WANT_WRITE            3
  ------------------
 3651|      0|        else if (BIO_should_read(bio))
  ------------------
  |  |  197|      0|# define BIO_should_read(a)              BIO_test_flags(a, BIO_FLAGS_READ)
  |  |  ------------------
  |  |  |  |  150|      0|# define BIO_FLAGS_READ          0x01
  |  |  ------------------
  |  |  |  Branch (197:42): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3652|       |            /*
 3653|       |             * See above (SSL_want_read(s) with BIO_should_write(bio))
 3654|       |             */
 3655|      0|            return SSL_ERROR_WANT_READ;
  ------------------
  |  | 1182|      0|# define SSL_ERROR_WANT_READ             2
  ------------------
 3656|      0|        else if (BIO_should_io_special(bio)) {
  ------------------
  |  |  199|      0|# define BIO_should_io_special(a)        BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL)
  |  |  ------------------
  |  |  |  |  152|      0|# define BIO_FLAGS_IO_SPECIAL    0x04
  |  |  ------------------
  |  |  |  Branch (199:42): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3657|      0|            reason = BIO_get_retry_reason(bio);
 3658|      0|            if (reason == BIO_RR_CONNECT)
  ------------------
  |  |  215|      0|# define BIO_RR_CONNECT                  0x02
  ------------------
  |  Branch (3658:17): [True: 0, False: 0]
  ------------------
 3659|      0|                return SSL_ERROR_WANT_CONNECT;
  ------------------
  |  | 1188|      0|# define SSL_ERROR_WANT_CONNECT          7
  ------------------
 3660|      0|            else if (reason == BIO_RR_ACCEPT)
  ------------------
  |  |  217|      0|# define BIO_RR_ACCEPT                   0x03
  ------------------
  |  Branch (3660:22): [True: 0, False: 0]
  ------------------
 3661|      0|                return SSL_ERROR_WANT_ACCEPT;
  ------------------
  |  | 1189|      0|# define SSL_ERROR_WANT_ACCEPT           8
  ------------------
 3662|      0|            else
 3663|      0|                return SSL_ERROR_SYSCALL;
  ------------------
  |  | 1185|      0|# define SSL_ERROR_SYSCALL               5/* look at error stack/return
  ------------------
 3664|      0|        }
 3665|      0|    }
 3666|  28.9k|    if (SSL_want_x509_lookup(s))
  ------------------
  |  |  904|  28.9k|# define SSL_want_x509_lookup(s)     (SSL_want(s) == SSL_X509_LOOKUP)
  |  |  ------------------
  |  |  |  |  895|  28.9k|# define SSL_X509_LOOKUP        4
  |  |  ------------------
  |  |  |  Branch (904:38): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
 3667|      0|        return SSL_ERROR_WANT_X509_LOOKUP;
  ------------------
  |  | 1184|      0|# define SSL_ERROR_WANT_X509_LOOKUP      4
  ------------------
 3668|  28.9k|    if (SSL_want_async(s))
  ------------------
  |  |  905|  28.9k|# define SSL_want_async(s)           (SSL_want(s) == SSL_ASYNC_PAUSED)
  |  |  ------------------
  |  |  |  |  896|  28.9k|# define SSL_ASYNC_PAUSED       5
  |  |  ------------------
  |  |  |  Branch (905:38): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
 3669|      0|        return SSL_ERROR_WANT_ASYNC;
  ------------------
  |  | 1190|      0|# define SSL_ERROR_WANT_ASYNC            9
  ------------------
 3670|  28.9k|    if (SSL_want_async_job(s))
  ------------------
  |  |  906|  28.9k|# define SSL_want_async_job(s)       (SSL_want(s) == SSL_ASYNC_NO_JOBS)
  |  |  ------------------
  |  |  |  |  897|  28.9k|# define SSL_ASYNC_NO_JOBS      6
  |  |  ------------------
  |  |  |  Branch (906:38): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
 3671|      0|        return SSL_ERROR_WANT_ASYNC_JOB;
  ------------------
  |  | 1191|      0|# define SSL_ERROR_WANT_ASYNC_JOB       10
  ------------------
 3672|  28.9k|    if (SSL_want_client_hello_cb(s))
  ------------------
  |  |  907|  28.9k|# define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB)
  |  |  ------------------
  |  |  |  |  898|  28.9k|# define SSL_CLIENT_HELLO_CB    7
  |  |  ------------------
  |  |  |  Branch (907:38): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
 3673|      0|        return SSL_ERROR_WANT_CLIENT_HELLO_CB;
  ------------------
  |  | 1192|      0|# define SSL_ERROR_WANT_CLIENT_HELLO_CB 11
  ------------------
 3674|       |
 3675|  28.9k|    if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) &&
  ------------------
  |  |  192|  28.9k|# define SSL_RECEIVED_SHUTDOWN   2
  ------------------
  |  Branch (3675:9): [True: 0, False: 28.9k]
  ------------------
 3676|      0|        (s->s3->warn_alert == SSL_AD_CLOSE_NOTIFY))
  ------------------
  |  | 1131|      0|# define SSL_AD_CLOSE_NOTIFY             SSL3_AD_CLOSE_NOTIFY
  |  |  ------------------
  |  |  |  |  240|      0|# define SSL3_AD_CLOSE_NOTIFY             0
  |  |  ------------------
  ------------------
  |  Branch (3676:9): [True: 0, False: 0]
  ------------------
 3677|      0|        return SSL_ERROR_ZERO_RETURN;
  ------------------
  |  | 1187|      0|# define SSL_ERROR_ZERO_RETURN           6
  ------------------
 3678|       |
 3679|  28.9k|    return SSL_ERROR_SYSCALL;
  ------------------
  |  | 1185|  28.9k|# define SSL_ERROR_SYSCALL               5/* look at error stack/return
  ------------------
 3680|  28.9k|}
SSL_do_handshake:
 3694|  28.9k|{
 3695|  28.9k|    int ret = 1;
 3696|       |
 3697|  28.9k|    if (s->handshake_func == NULL) {
  ------------------
  |  Branch (3697:9): [True: 0, False: 28.9k]
  ------------------
 3698|      0|        SSLerr(SSL_F_SSL_DO_HANDSHAKE, SSL_R_CONNECTION_TYPE_NOT_SET);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 3699|      0|        return -1;
 3700|      0|    }
 3701|       |
 3702|  28.9k|    ossl_statem_check_finish_init(s, -1);
 3703|       |
 3704|  28.9k|    s->method->ssl_renegotiate_check(s, 0);
 3705|       |
 3706|  28.9k|    if (SSL_in_init(s) || SSL_in_before(s)) {
  ------------------
  |  Branch (3706:9): [True: 28.9k, False: 0]
  |  Branch (3706:27): [True: 0, False: 0]
  ------------------
 3707|  28.9k|        if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
  ------------------
  |  |  495|  28.9k|# define SSL_MODE_ASYNC 0x00000100U
  ------------------
  |  Branch (3707:13): [True: 0, False: 28.9k]
  |  Branch (3707:43): [True: 0, False: 0]
  ------------------
 3708|      0|            struct ssl_async_args args;
 3709|       |
 3710|      0|            args.s = s;
 3711|       |
 3712|      0|            ret = ssl_start_async_job(s, &args, ssl_do_handshake_intern);
 3713|  28.9k|        } else {
 3714|  28.9k|            ret = s->handshake_func(s);
 3715|  28.9k|        }
 3716|  28.9k|    }
 3717|  28.9k|    return ret;
 3718|  28.9k|}
SSL_set_connect_state:
 3730|  28.9k|{
 3731|  28.9k|    s->server = 0;
 3732|  28.9k|    s->shutdown = 0;
 3733|  28.9k|    ossl_statem_clear(s);
 3734|  28.9k|    s->handshake_func = s->method->ssl_connect;
 3735|  28.9k|    clear_ciphers(s);
 3736|  28.9k|}
ssl_clear_cipher_ctx:
 3935|   115k|{
 3936|   115k|    if (s->enc_read_ctx != NULL) {
  ------------------
  |  Branch (3936:9): [True: 0, False: 115k]
  ------------------
 3937|      0|        EVP_CIPHER_CTX_free(s->enc_read_ctx);
 3938|      0|        s->enc_read_ctx = NULL;
 3939|      0|    }
 3940|   115k|    if (s->enc_write_ctx != NULL) {
  ------------------
  |  Branch (3940:9): [True: 0, False: 115k]
  ------------------
 3941|      0|        EVP_CIPHER_CTX_free(s->enc_write_ctx);
 3942|      0|        s->enc_write_ctx = NULL;
 3943|      0|    }
 3944|       |#ifndef OPENSSL_NO_COMP
 3945|       |    COMP_CTX_free(s->expand);
 3946|       |    s->expand = NULL;
 3947|       |    COMP_CTX_free(s->compress);
 3948|       |    s->compress = NULL;
 3949|       |#endif
 3950|   115k|}
ssl_init_wbio_buffer:
 4015|  28.9k|{
 4016|  28.9k|    BIO *bbio;
 4017|       |
 4018|  28.9k|    if (s->bbio != NULL) {
  ------------------
  |  Branch (4018:9): [True: 0, False: 28.9k]
  ------------------
 4019|       |        /* Already buffered. */
 4020|      0|        return 1;
 4021|      0|    }
 4022|       |
 4023|  28.9k|    bbio = BIO_new(BIO_f_buffer());
 4024|  28.9k|    if (bbio == NULL || !BIO_set_read_buffer_size(bbio, 1)) {
  ------------------
  |  |  473|  28.9k|# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0)
  |  |  ------------------
  |  |  |  |  310|  28.9k|# define BIO_C_SET_BUFF_SIZE                     117
  |  |  ------------------
  ------------------
  |  Branch (4024:9): [True: 0, False: 28.9k]
  |  Branch (4024:25): [True: 0, False: 28.9k]
  ------------------
 4025|      0|        BIO_free(bbio);
 4026|      0|        SSLerr(SSL_F_SSL_INIT_WBIO_BUFFER, ERR_R_BUF_LIB);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 4027|      0|        return 0;
 4028|      0|    }
 4029|  28.9k|    s->bbio = bbio;
 4030|  28.9k|    s->wbio = BIO_push(bbio, s->wbio);
 4031|       |
 4032|  28.9k|    return 1;
 4033|  28.9k|}
ssl_free_wbio_buffer:
 4036|   144k|{
 4037|       |    /* callers ensure s is never null */
 4038|   144k|    if (s->bbio == NULL)
  ------------------
  |  Branch (4038:9): [True: 115k, False: 28.9k]
  ------------------
 4039|   115k|        return 1;
 4040|       |
 4041|  28.9k|    s->wbio = BIO_pop(s->wbio);
 4042|  28.9k|    BIO_free(s->bbio);
 4043|  28.9k|    s->bbio = NULL;
 4044|       |
 4045|  28.9k|    return 1;
 4046|   144k|}
SSL_version:
 4079|  57.9k|{
 4080|  57.9k|    return s->version;
 4081|  57.9k|}
SSL_CTX_set_cert_store:
 4277|  28.9k|{
 4278|  28.9k|    X509_STORE_free(ctx->cert_store);
 4279|  28.9k|    ctx->cert_store = store;
 4280|  28.9k|}
SSL_want:
 4290|   173k|{
 4291|   173k|    return s->rwstate;
 4292|   173k|}
ssl_clear_hash_ctx:
 4543|   231k|{
 4544|       |
 4545|   231k|    EVP_MD_CTX_free(*hash);
 4546|       |    *hash = NULL;
 4547|   231k|}
SSL_get_security_level:
 4611|  4.46M|{
 4612|  4.46M|    return s->cert->sec_level;
 4613|  4.46M|}
SSL_CTX_set_options:
 4693|  28.9k|{
 4694|  28.9k|    return ctx->options |= op;
 4695|  28.9k|}
SSL_set_ct_validation_callback:
 4900|  28.9k|{
 4901|       |    /*
 4902|       |     * Since code exists that uses the custom extension handler for CT, look
 4903|       |     * for this and throw an error if they have already registered to use CT.
 4904|       |     */
 4905|  28.9k|    if (callback != NULL && SSL_CTX_has_client_custom_ext(s->ctx,
  ------------------
  |  Branch (4905:9): [True: 0, False: 28.9k]
  |  Branch (4905:29): [True: 0, False: 0]
  ------------------
 4906|      0|                                                          TLSEXT_TYPE_signed_certificate_timestamp))
  ------------------
  |  |  120|      0|# define TLSEXT_TYPE_signed_certificate_timestamp    18
  ------------------
 4907|      0|    {
 4908|      0|        SSLerr(SSL_F_SSL_SET_CT_VALIDATION_CALLBACK,
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 4909|      0|               SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
 4910|      0|        return 0;
 4911|      0|    }
 4912|       |
 4913|  28.9k|    if (callback != NULL) {
  ------------------
  |  Branch (4913:9): [True: 0, False: 28.9k]
  ------------------
 4914|       |        /*
 4915|       |         * If we are validating CT, then we MUST accept SCTs served via OCSP
 4916|       |         */
 4917|      0|        if (!SSL_set_tlsext_status_type(s, TLSEXT_STATUSTYPE_ocsp))
  ------------------
  |  |  271|      0|        SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type,NULL)
  |  |  ------------------
  |  |  |  | 1242|      0|# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE     65
  |  |  ------------------
  ------------------
  |  Branch (4917:13): [True: 0, False: 0]
  ------------------
 4918|      0|            return 0;
 4919|      0|    }
 4920|       |
 4921|  28.9k|    s->ct_validation_callback = callback;
 4922|  28.9k|    s->ct_validation_callback_arg = arg;
 4923|       |
 4924|  28.9k|    return 1;
 4925|  28.9k|}
ssl_get_max_send_fragment:
 5562|  57.9k|{
 5563|       |    /* Return any active Max Fragment Len extension */
 5564|  57.9k|    if (ssl->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(ssl->session))
  ------------------
  |  |  369|  28.9k|    IS_MAX_FRAGMENT_LENGTH_EXT_VALID(session->ext.max_fragment_len_mode)
  |  |  ------------------
  |  |  |  |  366|  28.9k|    (((value) >= TLSEXT_max_fragment_length_512) && \
  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  28.9k|# define TLSEXT_max_fragment_length_512         1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (366:6): [True: 0, False: 28.9k]
  |  |  |  |  ------------------
  |  |  |  |  367|  28.9k|     ((value) <= TLSEXT_max_fragment_length_4096))
  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|# define TLSEXT_max_fragment_length_4096        4
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (367:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5564:9): [True: 28.9k, False: 28.9k]
  ------------------
 5565|      0|        return GET_MAX_FRAGMENT_LENGTH(ssl->session);
  ------------------
  |  |  371|      0|    (512U << (session->ext.max_fragment_len_mode - 1))
  ------------------
 5566|       |
 5567|       |    /* return current SSL connection setting */
 5568|  57.9k|    return ssl->max_send_fragment;
 5569|  57.9k|}
ssl_get_split_send_fragment:
 5572|  28.9k|{
 5573|       |    /* Return a value regarding an active Max Fragment Len extension */
 5574|  28.9k|    if (ssl->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(ssl->session)
  ------------------
  |  |  369|  28.9k|    IS_MAX_FRAGMENT_LENGTH_EXT_VALID(session->ext.max_fragment_len_mode)
  |  |  ------------------
  |  |  |  |  366|  57.9k|    (((value) >= TLSEXT_max_fragment_length_512) && \
  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  28.9k|# define TLSEXT_max_fragment_length_512         1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (366:6): [True: 0, False: 28.9k]
  |  |  |  |  ------------------
  |  |  |  |  367|  57.9k|     ((value) <= TLSEXT_max_fragment_length_4096))
  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|# define TLSEXT_max_fragment_length_4096        4
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (367:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5574:9): [True: 28.9k, False: 0]
  ------------------
 5575|      0|        && ssl->split_send_fragment > GET_MAX_FRAGMENT_LENGTH(ssl->session))
  ------------------
  |  |  371|      0|    (512U << (session->ext.max_fragment_len_mode - 1))
  ------------------
  |  Branch (5575:12): [True: 0, False: 0]
  ------------------
 5576|      0|        return GET_MAX_FRAGMENT_LENGTH(ssl->session);
  ------------------
  |  |  371|      0|    (512U << (session->ext.max_fragment_len_mode - 1))
  ------------------
 5577|       |
 5578|       |    /* else limit |split_send_fragment| to current |max_send_fragment| */
 5579|  28.9k|    if (ssl->split_send_fragment > ssl->max_send_fragment)
  ------------------
  |  Branch (5579:9): [True: 0, False: 28.9k]
  ------------------
 5580|      0|        return ssl->max_send_fragment;
 5581|       |
 5582|       |    /* return current SSL connection setting */
 5583|  28.9k|    return ssl->split_send_fragment;
 5584|  28.9k|}
ssl_lib.c:clear_ciphers:
  570|   115k|{
  571|       |    /* clear the current cipher */
  572|   115k|    ssl_clear_cipher_ctx(s);
  573|   115k|    ssl_clear_hash_ctx(&s->read_hash);
  574|   115k|    ssl_clear_hash_ctx(&s->write_hash);
  575|   115k|}
ssl_lib.c:dane_final:
  192|  28.9k|{
  193|  28.9k|    sk_danetls_record_pop_free(dane->trecs, tlsa_free);
  194|  28.9k|    dane->trecs = NULL;
  195|       |
  196|  28.9k|    sk_X509_pop_free(dane->certs, X509_free);
  197|  28.9k|    dane->certs = NULL;
  198|       |
  199|  28.9k|    X509_free(dane->mcert);
  200|  28.9k|    dane->mcert = NULL;
  201|       |    dane->mtlsa = NULL;
  202|  28.9k|    dane->mdpth = -1;
  203|  28.9k|    dane->pdpth = -1;
  204|  28.9k|}
ssl_lib.c:dane_ctx_final:
  173|  28.9k|{
  174|  28.9k|    OPENSSL_free(dctx->mdevp);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  175|  28.9k|    dctx->mdevp = NULL;
  176|       |
  177|  28.9k|    OPENSSL_free(dctx->mdord);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  178|       |    dctx->mdord = NULL;
  179|  28.9k|    dctx->mdmax = 0;
  180|  28.9k|}

TLS_client_method:
 2116|  28.9k|        { \
 2117|  28.9k|        static const SSL_METHOD func_name##_data= { \
 2118|  28.9k|                version, \
 2119|  28.9k|                flags, \
 2120|  28.9k|                mask, \
 2121|  28.9k|                tls1_new, \
 2122|  28.9k|                tls1_clear, \
 2123|  28.9k|                tls1_free, \
 2124|  28.9k|                s_accept, \
 2125|  28.9k|                s_connect, \
 2126|  28.9k|                ssl3_read, \
 2127|  28.9k|                ssl3_peek, \
 2128|  28.9k|                ssl3_write, \
 2129|  28.9k|                ssl3_shutdown, \
 2130|  28.9k|                ssl3_renegotiate, \
 2131|  28.9k|                ssl3_renegotiate_check, \
 2132|  28.9k|                ssl3_read_bytes, \
 2133|  28.9k|                ssl3_write_bytes, \
 2134|  28.9k|                ssl3_dispatch_alert, \
 2135|  28.9k|                ssl3_ctrl, \
 2136|  28.9k|                ssl3_ctx_ctrl, \
 2137|  28.9k|                ssl3_get_cipher_by_char, \
 2138|  28.9k|                ssl3_put_cipher_by_char, \
 2139|  28.9k|                ssl3_pending, \
 2140|  28.9k|                ssl3_num_ciphers, \
 2141|  28.9k|                ssl3_get_cipher, \
 2142|  28.9k|                tls1_default_timeout, \
 2143|  28.9k|                &enc_data, \
 2144|  28.9k|                ssl_undefined_void_function, \
 2145|  28.9k|                ssl3_callback_ctrl, \
 2146|  28.9k|                ssl3_ctx_callback_ctrl, \
 2147|  28.9k|        }; \
 2148|  28.9k|        return &func_name##_data; \
 2149|  28.9k|        }
tlsv1_3_client_method:
 2116|   173k|        { \
 2117|   173k|        static const SSL_METHOD func_name##_data= { \
 2118|   173k|                version, \
 2119|   173k|                flags, \
 2120|   173k|                mask, \
 2121|   173k|                tls1_new, \
 2122|   173k|                tls1_clear, \
 2123|   173k|                tls1_free, \
 2124|   173k|                s_accept, \
 2125|   173k|                s_connect, \
 2126|   173k|                ssl3_read, \
 2127|   173k|                ssl3_peek, \
 2128|   173k|                ssl3_write, \
 2129|   173k|                ssl3_shutdown, \
 2130|   173k|                ssl3_renegotiate, \
 2131|   173k|                ssl3_renegotiate_check, \
 2132|   173k|                ssl3_read_bytes, \
 2133|   173k|                ssl3_write_bytes, \
 2134|   173k|                ssl3_dispatch_alert, \
 2135|   173k|                ssl3_ctrl, \
 2136|   173k|                ssl3_ctx_ctrl, \
 2137|   173k|                ssl3_get_cipher_by_char, \
 2138|   173k|                ssl3_put_cipher_by_char, \
 2139|   173k|                ssl3_pending, \
 2140|   173k|                ssl3_num_ciphers, \
 2141|   173k|                ssl3_get_cipher, \
 2142|   173k|                tls1_default_timeout, \
 2143|   173k|                &enc_data, \
 2144|   173k|                ssl_undefined_void_function, \
 2145|   173k|                ssl3_callback_ctrl, \
 2146|   173k|                ssl3_ctx_callback_ctrl, \
 2147|   173k|        }; \
 2148|   173k|        return &func_name##_data; \
 2149|   173k|        }
tlsv1_2_client_method:
 2116|   173k|        { \
 2117|   173k|        static const SSL_METHOD func_name##_data= { \
 2118|   173k|                version, \
 2119|   173k|                flags, \
 2120|   173k|                mask, \
 2121|   173k|                tls1_new, \
 2122|   173k|                tls1_clear, \
 2123|   173k|                tls1_free, \
 2124|   173k|                s_accept, \
 2125|   173k|                s_connect, \
 2126|   173k|                ssl3_read, \
 2127|   173k|                ssl3_peek, \
 2128|   173k|                ssl3_write, \
 2129|   173k|                ssl3_shutdown, \
 2130|   173k|                ssl3_renegotiate, \
 2131|   173k|                ssl3_renegotiate_check, \
 2132|   173k|                ssl3_read_bytes, \
 2133|   173k|                ssl3_write_bytes, \
 2134|   173k|                ssl3_dispatch_alert, \
 2135|   173k|                ssl3_ctrl, \
 2136|   173k|                ssl3_ctx_ctrl, \
 2137|   173k|                ssl3_get_cipher_by_char, \
 2138|   173k|                ssl3_put_cipher_by_char, \
 2139|   173k|                ssl3_pending, \
 2140|   173k|                ssl3_num_ciphers, \
 2141|   173k|                ssl3_get_cipher, \
 2142|   173k|                tls1_default_timeout, \
 2143|   173k|                &enc_data, \
 2144|   173k|                ssl_undefined_void_function, \
 2145|   173k|                ssl3_callback_ctrl, \
 2146|   173k|                ssl3_ctx_callback_ctrl, \
 2147|   173k|        }; \
 2148|   173k|        return &func_name##_data; \
 2149|   173k|        }
tlsv1_1_client_method:
 2116|   173k|        { \
 2117|   173k|        static const SSL_METHOD func_name##_data= { \
 2118|   173k|                version, \
 2119|   173k|                flags, \
 2120|   173k|                mask, \
 2121|   173k|                tls1_new, \
 2122|   173k|                tls1_clear, \
 2123|   173k|                tls1_free, \
 2124|   173k|                s_accept, \
 2125|   173k|                s_connect, \
 2126|   173k|                ssl3_read, \
 2127|   173k|                ssl3_peek, \
 2128|   173k|                ssl3_write, \
 2129|   173k|                ssl3_shutdown, \
 2130|   173k|                ssl3_renegotiate, \
 2131|   173k|                ssl3_renegotiate_check, \
 2132|   173k|                ssl3_read_bytes, \
 2133|   173k|                ssl3_write_bytes, \
 2134|   173k|                ssl3_dispatch_alert, \
 2135|   173k|                ssl3_ctrl, \
 2136|   173k|                ssl3_ctx_ctrl, \
 2137|   173k|                ssl3_get_cipher_by_char, \
 2138|   173k|                ssl3_put_cipher_by_char, \
 2139|   173k|                ssl3_pending, \
 2140|   173k|                ssl3_num_ciphers, \
 2141|   173k|                ssl3_get_cipher, \
 2142|   173k|                tls1_default_timeout, \
 2143|   173k|                &enc_data, \
 2144|   173k|                ssl_undefined_void_function, \
 2145|   173k|                ssl3_callback_ctrl, \
 2146|   173k|                ssl3_ctx_callback_ctrl, \
 2147|   173k|        }; \
 2148|   173k|        return &func_name##_data; \
 2149|   173k|        }
tlsv1_client_method:
 2116|   173k|        { \
 2117|   173k|        static const SSL_METHOD func_name##_data= { \
 2118|   173k|                version, \
 2119|   173k|                flags, \
 2120|   173k|                mask, \
 2121|   173k|                tls1_new, \
 2122|   173k|                tls1_clear, \
 2123|   173k|                tls1_free, \
 2124|   173k|                s_accept, \
 2125|   173k|                s_connect, \
 2126|   173k|                ssl3_read, \
 2127|   173k|                ssl3_peek, \
 2128|   173k|                ssl3_write, \
 2129|   173k|                ssl3_shutdown, \
 2130|   173k|                ssl3_renegotiate, \
 2131|   173k|                ssl3_renegotiate_check, \
 2132|   173k|                ssl3_read_bytes, \
 2133|   173k|                ssl3_write_bytes, \
 2134|   173k|                ssl3_dispatch_alert, \
 2135|   173k|                ssl3_ctrl, \
 2136|   173k|                ssl3_ctx_ctrl, \
 2137|   173k|                ssl3_get_cipher_by_char, \
 2138|   173k|                ssl3_put_cipher_by_char, \
 2139|   173k|                ssl3_pending, \
 2140|   173k|                ssl3_num_ciphers, \
 2141|   173k|                ssl3_get_cipher, \
 2142|   173k|                tls1_default_timeout, \
 2143|   173k|                &enc_data, \
 2144|   173k|                ssl_undefined_void_function, \
 2145|   173k|                ssl3_callback_ctrl, \
 2146|   173k|                ssl3_ctx_callback_ctrl, \
 2147|   173k|        }; \
 2148|   173k|        return &func_name##_data; \
 2149|   173k|        }

ssl_ctx_system_config:
   97|  28.9k|{
   98|  28.9k|    ssl_do_config(NULL, ctx, NULL, 1);
   99|  28.9k|}
ssl_mcnf.c:ssl_do_config:
   24|  28.9k|{
   25|  28.9k|    SSL_CONF_CTX *cctx = NULL;
   26|  28.9k|    size_t i, idx, cmd_count;
   27|  28.9k|    int rv = 0;
   28|  28.9k|    unsigned int flags;
   29|  28.9k|    const SSL_METHOD *meth;
   30|  28.9k|    const SSL_CONF_CMD *cmds;
   31|       |
   32|  28.9k|    if (s == NULL && ctx == NULL) {
  ------------------
  |  Branch (32:9): [True: 28.9k, False: 0]
  |  Branch (32:22): [True: 0, False: 28.9k]
  ------------------
   33|      0|        SSLerr(SSL_F_SSL_DO_CONFIG, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   34|      0|        goto err;
   35|      0|    }
   36|       |
   37|  28.9k|    if (name == NULL && system)
  ------------------
  |  Branch (37:9): [True: 28.9k, False: 0]
  |  Branch (37:25): [True: 28.9k, False: 0]
  ------------------
   38|  28.9k|        name = "system_default";
   39|  28.9k|    if (!conf_ssl_name_find(name, &idx)) {
  ------------------
  |  Branch (39:9): [True: 28.9k, False: 0]
  ------------------
   40|  28.9k|        if (!system) {
  ------------------
  |  Branch (40:13): [True: 0, False: 28.9k]
  ------------------
   41|      0|            SSLerr(SSL_F_SSL_DO_CONFIG, SSL_R_INVALID_CONFIGURATION_NAME);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   42|      0|            ERR_add_error_data(2, "name=", name);
   43|      0|        }
   44|  28.9k|        goto err;
   45|  28.9k|    }
   46|      0|    cmds = conf_ssl_get(idx, &name, &cmd_count);
   47|      0|    cctx = SSL_CONF_CTX_new();
   48|      0|    if (cctx == NULL)
  ------------------
  |  Branch (48:9): [True: 0, False: 0]
  ------------------
   49|      0|        goto err;
   50|      0|    flags = SSL_CONF_FLAG_FILE;
  ------------------
  |  |  562|      0|# define SSL_CONF_FLAG_FILE              0x2
  ------------------
   51|      0|    if (!system)
  ------------------
  |  Branch (51:9): [True: 0, False: 0]
  ------------------
   52|      0|        flags |= SSL_CONF_FLAG_CERTIFICATE | SSL_CONF_FLAG_REQUIRE_PRIVATE;
  ------------------
  |  |  566|      0|# define SSL_CONF_FLAG_CERTIFICATE       0x20
  ------------------
                      flags |= SSL_CONF_FLAG_CERTIFICATE | SSL_CONF_FLAG_REQUIRE_PRIVATE;
  ------------------
  |  |  567|      0|# define SSL_CONF_FLAG_REQUIRE_PRIVATE   0x40
  ------------------
   53|      0|    if (s != NULL) {
  ------------------
  |  Branch (53:9): [True: 0, False: 0]
  ------------------
   54|      0|        meth = s->method;
   55|      0|        SSL_CONF_CTX_set_ssl(cctx, s);
   56|      0|    } else {
   57|      0|        meth = ctx->method;
   58|      0|        SSL_CONF_CTX_set_ssl_ctx(cctx, ctx);
   59|      0|    }
   60|      0|    if (meth->ssl_accept != ssl_undefined_function)
  ------------------
  |  Branch (60:9): [True: 0, False: 0]
  ------------------
   61|      0|        flags |= SSL_CONF_FLAG_SERVER;
  ------------------
  |  |  564|      0|# define SSL_CONF_FLAG_SERVER            0x8
  ------------------
   62|      0|    if (meth->ssl_connect != ssl_undefined_function)
  ------------------
  |  Branch (62:9): [True: 0, False: 0]
  ------------------
   63|      0|        flags |= SSL_CONF_FLAG_CLIENT;
  ------------------
  |  |  563|      0|# define SSL_CONF_FLAG_CLIENT            0x4
  ------------------
   64|      0|    SSL_CONF_CTX_set_flags(cctx, flags);
   65|      0|    for (i = 0; i < cmd_count; i++) {
  ------------------
  |  Branch (65:17): [True: 0, False: 0]
  ------------------
   66|      0|        char *cmdstr, *arg;
   67|       |
   68|      0|        conf_ssl_get_cmd(cmds, i, &cmdstr, &arg);
   69|      0|        rv = SSL_CONF_cmd(cctx, cmdstr, arg);
   70|      0|        if (rv <= 0) {
  ------------------
  |  Branch (70:13): [True: 0, False: 0]
  ------------------
   71|      0|            if (rv == -2)
  ------------------
  |  Branch (71:17): [True: 0, False: 0]
  ------------------
   72|      0|                SSLerr(SSL_F_SSL_DO_CONFIG, SSL_R_UNKNOWN_COMMAND);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   73|      0|            else
   74|      0|                SSLerr(SSL_F_SSL_DO_CONFIG, SSL_R_BAD_VALUE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   75|      0|            ERR_add_error_data(6, "section=", name, ", cmd=", cmdstr,
   76|      0|                               ", arg=", arg);
   77|      0|            goto err;
   78|      0|        }
   79|      0|    }
   80|      0|    rv = SSL_CONF_CTX_finish(cctx);
   81|  28.9k| err:
   82|  28.9k|    SSL_CONF_CTX_free(cctx);
   83|  28.9k|    return rv <= 0 ? 0 : 1;
  ------------------
  |  Branch (83:12): [True: 28.9k, False: 0]
  ------------------
   84|      0|}

SSL_SESSION_new:
   66|  28.9k|{
   67|  28.9k|    SSL_SESSION *ss;
   68|       |
   69|  28.9k|    if (!OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL))
  ------------------
  |  | 2359|  28.9k|# define OPENSSL_INIT_LOAD_SSL_STRINGS       0x00200000L
  ------------------
  |  Branch (69:9): [True: 0, False: 28.9k]
  ------------------
   70|      0|        return NULL;
   71|       |
   72|  28.9k|    ss = OPENSSL_zalloc(sizeof(*ss));
  ------------------
  |  |  120|  28.9k|        CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   73|  28.9k|    if (ss == NULL) {
  ------------------
  |  Branch (73:9): [True: 0, False: 28.9k]
  ------------------
   74|      0|        SSLerr(SSL_F_SSL_SESSION_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   75|      0|        return NULL;
   76|      0|    }
   77|       |
   78|  28.9k|    ss->verify_result = 1;      /* avoid 0 (= X509_V_OK) just in case */
   79|  28.9k|    ss->references = 1;
   80|  28.9k|    ss->timeout = 60 * 5 + 4;   /* 5 minute timeout by default */
   81|  28.9k|    ss->time = (unsigned long)time(NULL);
   82|  28.9k|    ss->lock = CRYPTO_THREAD_lock_new();
   83|  28.9k|    if (ss->lock == NULL) {
  ------------------
  |  Branch (83:9): [True: 0, False: 28.9k]
  ------------------
   84|      0|        SSLerr(SSL_F_SSL_SESSION_NEW, ERR_R_MALLOC_FAILURE);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   85|      0|        OPENSSL_free(ss);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   86|      0|        return NULL;
   87|      0|    }
   88|       |
   89|  28.9k|    if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data)) {
  ------------------
  |  |   96|  28.9k|# define CRYPTO_EX_INDEX_SSL_SESSION      2
  ------------------
  |  Branch (89:9): [True: 0, False: 28.9k]
  ------------------
   90|      0|        CRYPTO_THREAD_lock_free(ss->lock);
   91|      0|        OPENSSL_free(ss);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   92|      0|        return NULL;
   93|      0|    }
   94|  28.9k|    return ss;
   95|  28.9k|}
ssl_get_new_session:
  363|  28.9k|{
  364|       |    /* This gets used by clients and servers. */
  365|       |
  366|  28.9k|    SSL_SESSION *ss = NULL;
  367|       |
  368|  28.9k|    if ((ss = SSL_SESSION_new()) == NULL) {
  ------------------
  |  Branch (368:9): [True: 0, False: 28.9k]
  ------------------
  369|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GET_NEW_SESSION,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  370|      0|                 ERR_R_MALLOC_FAILURE);
  371|      0|        return 0;
  372|      0|    }
  373|       |
  374|       |    /* If the context has a default timeout, use it */
  375|  28.9k|    if (s->session_ctx->session_timeout == 0)
  ------------------
  |  Branch (375:9): [True: 0, False: 28.9k]
  ------------------
  376|      0|        ss->timeout = SSL_get_default_timeout(s);
  377|  28.9k|    else
  378|  28.9k|        ss->timeout = s->session_ctx->session_timeout;
  379|       |
  380|  28.9k|    SSL_SESSION_free(s->session);
  381|  28.9k|    s->session = NULL;
  382|       |
  383|  28.9k|    if (session) {
  ------------------
  |  Branch (383:9): [True: 0, False: 28.9k]
  ------------------
  384|      0|        if (SSL_IS_TLS13(s)) {
  ------------------
  |  |  322|      0|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 0, False: 0]
  |  |  ------------------
  |  |  324|      0|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  385|       |            /*
  386|       |             * We generate the session id while constructing the
  387|       |             * NewSessionTicket in TLSv1.3.
  388|       |             */
  389|      0|            ss->session_id_length = 0;
  390|      0|        } else if (!ssl_generate_session_id(s, ss)) {
  ------------------
  |  Branch (390:20): [True: 0, False: 0]
  ------------------
  391|       |            /* SSLfatal() already called */
  392|      0|            SSL_SESSION_free(ss);
  393|      0|            return 0;
  394|      0|        }
  395|       |
  396|  28.9k|    } else {
  397|  28.9k|        ss->session_id_length = 0;
  398|  28.9k|    }
  399|       |
  400|  28.9k|    if (s->sid_ctx_length > sizeof(ss->sid_ctx)) {
  ------------------
  |  Branch (400:9): [True: 0, False: 28.9k]
  ------------------
  401|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GET_NEW_SESSION,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  402|      0|                 ERR_R_INTERNAL_ERROR);
  403|      0|        SSL_SESSION_free(ss);
  404|      0|        return 0;
  405|      0|    }
  406|  28.9k|    memcpy(ss->sid_ctx, s->sid_ctx, s->sid_ctx_length);
  407|  28.9k|    ss->sid_ctx_length = s->sid_ctx_length;
  408|  28.9k|    s->session = ss;
  409|  28.9k|    ss->ssl_version = s->version;
  410|  28.9k|    ss->verify_result = X509_V_OK;
  ------------------
  |  |   99|  28.9k|# define         X509_V_OK                                       0
  ------------------
  411|       |
  412|       |    /* If client supports extended master secret set it in session */
  413|  28.9k|    if (s->s3->flags & TLS1_FLAGS_RECEIVED_EXTMS)
  ------------------
  |  |  289|  28.9k|# define TLS1_FLAGS_RECEIVED_EXTMS               0x0200
  ------------------
  |  Branch (413:9): [True: 0, False: 28.9k]
  ------------------
  414|      0|        ss->flags |= SSL_SESS_FLAG_EXTMS;
  ------------------
  |  |  592|      0|# define SSL_SESS_FLAG_EXTMS             0x1
  ------------------
  415|       |
  416|  28.9k|    return 1;
  417|  28.9k|}
SSL_SESSION_free:
  748|   173k|{
  749|   173k|    int i;
  750|       |
  751|   173k|    if (ss == NULL)
  ------------------
  |  Branch (751:9): [True: 144k, False: 28.9k]
  ------------------
  752|   144k|        return;
  753|  28.9k|    CRYPTO_DOWN_REF(&ss->references, &i, ss->lock);
  754|  28.9k|    REF_PRINT_COUNT("SSL_SESSION", ss);
  755|  28.9k|    if (i > 0)
  ------------------
  |  Branch (755:9): [True: 0, False: 28.9k]
  ------------------
  756|      0|        return;
  757|  28.9k|    REF_ASSERT_ISNT(i < 0);
  ------------------
  |  |  138|  28.9k|    (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0)
  |  |  ------------------
  |  |  |  Branch (138:12): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  758|       |
  759|  28.9k|    CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data);
  ------------------
  |  |   96|  28.9k|# define CRYPTO_EX_INDEX_SSL_SESSION      2
  ------------------
  760|       |
  761|  28.9k|    OPENSSL_cleanse(ss->master_key, sizeof(ss->master_key));
  762|  28.9k|    OPENSSL_cleanse(ss->session_id, sizeof(ss->session_id));
  763|  28.9k|    X509_free(ss->peer);
  764|  28.9k|    sk_X509_pop_free(ss->peer_chain, X509_free);
  765|  28.9k|    OPENSSL_free(ss->ext.hostname);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  766|  28.9k|    OPENSSL_free(ss->ext.tick);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  767|  28.9k|#ifndef OPENSSL_NO_PSK
  768|  28.9k|    OPENSSL_free(ss->psk_identity_hint);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  769|  28.9k|    OPENSSL_free(ss->psk_identity);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  770|  28.9k|#endif
  771|  28.9k|#ifndef OPENSSL_NO_SRP
  772|  28.9k|    OPENSSL_free(ss->srp_username);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  773|  28.9k|#endif
  774|  28.9k|    OPENSSL_free(ss->ext.alpn_selected);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  775|  28.9k|    OPENSSL_free(ss->ticket_appdata);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  776|  28.9k|    CRYPTO_THREAD_lock_free(ss->lock);
  777|  28.9k|    OPENSSL_clear_free(ss, sizeof(*ss));
  ------------------
  |  |  126|  28.9k|        CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  778|  28.9k|}
SSL_CTX_flush_sessions:
 1070|  28.9k|{
 1071|  28.9k|    unsigned long i;
 1072|  28.9k|    TIMEOUT_PARAM tp;
 1073|       |
 1074|  28.9k|    tp.ctx = s;
 1075|  28.9k|    tp.cache = s->sessions;
 1076|  28.9k|    if (tp.cache == NULL)
  ------------------
  |  Branch (1076:9): [True: 0, False: 28.9k]
  ------------------
 1077|      0|        return;
 1078|  28.9k|    tp.time = t;
 1079|  28.9k|    CRYPTO_THREAD_write_lock(s->lock);
 1080|  28.9k|    i = lh_SSL_SESSION_get_down_load(s->sessions);
 1081|  28.9k|    lh_SSL_SESSION_set_down_load(s->sessions, 0);
 1082|  28.9k|    lh_SSL_SESSION_doall_TIMEOUT_PARAM(tp.cache, timeout_cb, &tp);
 1083|  28.9k|    lh_SSL_SESSION_set_down_load(s->sessions, i);
 1084|  28.9k|    CRYPTO_THREAD_unlock(s->lock);
 1085|  28.9k|}
ssl_clear_bad_session:
 1088|  86.9k|{
 1089|  86.9k|    if ((s->session != NULL) &&
  ------------------
  |  Branch (1089:9): [True: 28.9k, False: 57.9k]
  ------------------
 1090|  28.9k|        !(s->shutdown & SSL_SENT_SHUTDOWN) &&
  ------------------
  |  |  191|  28.9k|# define SSL_SENT_SHUTDOWN       1
  ------------------
  |  Branch (1090:9): [True: 28.9k, False: 0]
  ------------------
 1091|  28.9k|        !(SSL_in_init(s) || SSL_in_before(s))) {
  ------------------
  |  Branch (1091:11): [True: 28.9k, False: 0]
  |  Branch (1091:29): [True: 0, False: 0]
  ------------------
 1092|      0|        SSL_CTX_remove_session(s->session_ctx, s->session);
 1093|      0|        return 1;
 1094|      0|    } else
 1095|  86.9k|        return 0;
 1096|  86.9k|}

extension_is_relevant:
  508|   753k|{
  509|   753k|    int is_tls13;
  510|       |
  511|       |    /*
  512|       |     * For HRR we haven't selected the version yet but we know it will be
  513|       |     * TLSv1.3
  514|       |     */
  515|   753k|    if ((thisctx & SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST) != 0)
  ------------------
  |  |  255|   753k|#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST      0x0800
  ------------------
  |  Branch (515:9): [True: 0, False: 753k]
  ------------------
  516|      0|        is_tls13 = 1;
  517|   753k|    else
  518|   753k|        is_tls13 = SSL_IS_TLS13(s);
  ------------------
  |  |  322|   753k|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|  1.50M|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|   753k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 753k, False: 0]
  |  |  ------------------
  |  |  323|   753k|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|  1.50M|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 753k, False: 0]
  |  |  ------------------
  |  |  324|   753k|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|   753k|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 753k]
  |  |  ------------------
  ------------------
  519|       |
  520|   753k|    if ((SSL_IS_DTLS(s)
  ------------------
  |  |  319|  1.50M|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|   753k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 753k]
  |  |  ------------------
  ------------------
  521|      0|                && (extctx & SSL_EXT_TLS_IMPLEMENTATION_ONLY) != 0)
  ------------------
  |  |  241|      0|#define SSL_EXT_TLS_IMPLEMENTATION_ONLY         0x0004
  ------------------
  |  Branch (521:20): [True: 0, False: 0]
  ------------------
  522|   753k|            || (s->version == SSL3_VERSION
  ------------------
  |  |  209|  1.50M|# define SSL3_VERSION                    0x0300
  ------------------
  |  Branch (522:17): [True: 0, False: 753k]
  ------------------
  523|      0|                    && (extctx & SSL_EXT_SSL3_ALLOWED) == 0)
  ------------------
  |  |  243|      0|#define SSL_EXT_SSL3_ALLOWED                    0x0008
  ------------------
  |  Branch (523:24): [True: 0, False: 0]
  ------------------
  524|       |            /*
  525|       |             * Note that SSL_IS_TLS13() means "TLS 1.3 has been negotiated",
  526|       |             * which is never true when generating the ClientHello.
  527|       |             * However, version negotiation *has* occurred by the time the
  528|       |             * ClientHello extensions are being parsed.
  529|       |             * Be careful to allow TLS 1.3-only extensions when generating
  530|       |             * the ClientHello.
  531|       |             */
  532|   753k|            || (is_tls13 && (extctx & SSL_EXT_TLS1_2_AND_BELOW_ONLY) != 0)
  ------------------
  |  |  245|      0|#define SSL_EXT_TLS1_2_AND_BELOW_ONLY           0x0010
  ------------------
  |  Branch (532:17): [True: 0, False: 753k]
  |  Branch (532:29): [True: 0, False: 0]
  ------------------
  533|   753k|            || (!is_tls13 && (extctx & SSL_EXT_TLS1_3_ONLY) != 0
  ------------------
  |  |  247|   753k|#define SSL_EXT_TLS1_3_ONLY                     0x0020
  ------------------
  |  Branch (533:17): [True: 753k, False: 0]
  |  Branch (533:30): [True: 202k, False: 550k]
  ------------------
  534|   202k|                && (thisctx & SSL_EXT_CLIENT_HELLO) == 0)
  ------------------
  |  |  250|   202k|#define SSL_EXT_CLIENT_HELLO                    0x0080
  ------------------
  |  Branch (534:20): [True: 0, False: 202k]
  ------------------
  535|   753k|            || (s->server && !is_tls13 && (extctx & SSL_EXT_TLS1_3_ONLY) != 0)
  ------------------
  |  |  247|      0|#define SSL_EXT_TLS1_3_ONLY                     0x0020
  ------------------
  |  Branch (535:17): [True: 0, False: 753k]
  |  Branch (535:30): [True: 0, False: 0]
  |  Branch (535:43): [True: 0, False: 0]
  ------------------
  536|   753k|            || (s->hit && (extctx & SSL_EXT_IGNORE_ON_RESUMPTION) != 0))
  ------------------
  |  |  249|      0|#define SSL_EXT_IGNORE_ON_RESUMPTION            0x0040
  ------------------
  |  Branch (536:17): [True: 0, False: 753k]
  |  Branch (536:27): [True: 0, False: 0]
  ------------------
  537|      0|        return 0;
  538|   753k|    return 1;
  539|   753k|}
should_add_extension:
  778|   753k|{
  779|       |    /* Skip if not relevant for our context */
  780|   753k|    if ((extctx & thisctx) == 0)
  ------------------
  |  Branch (780:9): [True: 0, False: 753k]
  ------------------
  781|      0|        return 0;
  782|       |
  783|       |    /* Check if this extension is defined for our protocol. If not, skip */
  784|   753k|    if (!extension_is_relevant(s, extctx, thisctx)
  ------------------
  |  Branch (784:9): [True: 0, False: 753k]
  ------------------
  785|   753k|            || ((extctx & SSL_EXT_TLS1_3_ONLY) != 0
  ------------------
  |  |  247|   753k|#define SSL_EXT_TLS1_3_ONLY                     0x0020
  ------------------
  |  Branch (785:17): [True: 202k, False: 550k]
  ------------------
  786|   202k|                && (thisctx & SSL_EXT_CLIENT_HELLO) != 0
  ------------------
  |  |  250|   202k|#define SSL_EXT_CLIENT_HELLO                    0x0080
  ------------------
  |  Branch (786:20): [True: 202k, False: 0]
  ------------------
  787|   202k|                && (SSL_IS_DTLS(s) || max_version < TLS1_3_VERSION)))
  ------------------
  |  |  319|   405k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|   202k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 202k]
  |  |  ------------------
  ------------------
                              && (SSL_IS_DTLS(s) || max_version < TLS1_3_VERSION)))
  ------------------
  |  |   30|   202k|# define TLS1_3_VERSION                  0x0304
  ------------------
  |  Branch (787:39): [True: 0, False: 202k]
  ------------------
  788|      0|        return 0;
  789|       |
  790|   753k|    return 1;
  791|   753k|}
tls_construct_extensions:
  803|  28.9k|{
  804|  28.9k|    size_t i;
  805|  28.9k|    int min_version, max_version = 0, reason;
  806|  28.9k|    const EXTENSION_DEFINITION *thisexd;
  807|       |
  808|  28.9k|    if (!WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|  57.9k|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (808:9): [True: 0, False: 28.9k]
  ------------------
  809|       |               /*
  810|       |                * If extensions are of zero length then we don't even add the
  811|       |                * extensions length bytes to a ClientHello/ServerHello
  812|       |                * (for non-TLSv1.3).
  813|       |                */
  814|  28.9k|            || ((context &
  ------------------
  |  Branch (814:17): [True: 28.9k, False: 0]
  ------------------
  815|  28.9k|                 (SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO)) != 0
  ------------------
  |  |  250|  28.9k|#define SSL_EXT_CLIENT_HELLO                    0x0080
  ------------------
                               (SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO)) != 0
  ------------------
  |  |  252|  28.9k|#define SSL_EXT_TLS1_2_SERVER_HELLO             0x0100
  ------------------
  816|  28.9k|                && !WPACKET_set_flags(pkt,
  ------------------
  |  Branch (816:20): [True: 0, False: 28.9k]
  ------------------
  817|  28.9k|                                     WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH))) {
  ------------------
  |  |  655|  28.9k|#define WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH    2
  ------------------
  818|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_EXTENSIONS,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  819|      0|                 ERR_R_INTERNAL_ERROR);
  820|      0|        return 0;
  821|      0|    }
  822|       |
  823|  28.9k|    if ((context & SSL_EXT_CLIENT_HELLO) != 0) {
  ------------------
  |  |  250|  28.9k|#define SSL_EXT_CLIENT_HELLO                    0x0080
  ------------------
  |  Branch (823:9): [True: 28.9k, False: 0]
  ------------------
  824|  28.9k|        reason = ssl_get_min_max_version(s, &min_version, &max_version, NULL);
  825|  28.9k|        if (reason != 0) {
  ------------------
  |  Branch (825:13): [True: 0, False: 28.9k]
  ------------------
  826|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_EXTENSIONS,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  827|      0|                     reason);
  828|      0|            return 0;
  829|      0|        }
  830|  28.9k|    }
  831|       |
  832|       |    /* Add custom extensions first */
  833|  28.9k|    if ((context & SSL_EXT_CLIENT_HELLO) != 0) {
  ------------------
  |  |  250|  28.9k|#define SSL_EXT_CLIENT_HELLO                    0x0080
  ------------------
  |  Branch (833:9): [True: 28.9k, False: 0]
  ------------------
  834|       |        /* On the server side with initialise during ClientHello parsing */
  835|  28.9k|        custom_ext_init(&s->cert->custext);
  836|  28.9k|    }
  837|  28.9k|    if (!custom_ext_add(s, context, pkt, x, chainidx, max_version)) {
  ------------------
  |  Branch (837:9): [True: 0, False: 28.9k]
  ------------------
  838|       |        /* SSLfatal() already called */
  839|      0|        return 0;
  840|      0|    }
  841|       |
  842|   782k|    for (i = 0, thisexd = ext_defs; i < OSSL_NELEM(ext_defs); i++, thisexd++) {
  ------------------
  |  |   13|   782k|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
  |  Branch (842:37): [True: 753k, False: 28.9k]
  ------------------
  843|   753k|        EXT_RETURN (*construct)(SSL *s, WPACKET *pkt, unsigned int context,
  844|   753k|                                X509 *x, size_t chainidx);
  845|   753k|        EXT_RETURN ret;
  846|       |
  847|       |        /* Skip if not relevant for our context */
  848|   753k|        if (!should_add_extension(s, thisexd->context, context, max_version))
  ------------------
  |  Branch (848:13): [True: 0, False: 753k]
  ------------------
  849|      0|            continue;
  850|       |
  851|   753k|        construct = s->server ? thisexd->construct_stoc
  ------------------
  |  Branch (851:21): [True: 0, False: 753k]
  ------------------
  852|   753k|                              : thisexd->construct_ctos;
  853|       |
  854|   753k|        if (construct == NULL)
  ------------------
  |  Branch (854:13): [True: 57.9k, False: 695k]
  ------------------
  855|  57.9k|            continue;
  856|       |
  857|   695k|        ret = construct(s, pkt, context, x, chainidx);
  858|   695k|        if (ret == EXT_RETURN_FAIL) {
  ------------------
  |  Branch (858:13): [True: 0, False: 695k]
  ------------------
  859|       |            /* SSLfatal() already called */
  860|      0|            return 0;
  861|      0|        }
  862|   695k|        if (ret == EXT_RETURN_SENT
  ------------------
  |  Branch (862:13): [True: 289k, False: 405k]
  ------------------
  863|   289k|                && (context & (SSL_EXT_CLIENT_HELLO
  ------------------
  |  |  250|   289k|#define SSL_EXT_CLIENT_HELLO                    0x0080
  ------------------
  |  Branch (863:20): [True: 289k, False: 0]
  ------------------
  864|   289k|                               | SSL_EXT_TLS1_3_CERTIFICATE_REQUEST
  ------------------
  |  |  258|   289k|#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST      0x4000
  ------------------
  865|   289k|                               | SSL_EXT_TLS1_3_NEW_SESSION_TICKET)) != 0)
  ------------------
  |  |  257|   289k|#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET       0x2000
  ------------------
  866|   289k|            s->ext.extflags[i] |= SSL_EXT_FLAG_SENT;
  ------------------
  |  | 1871|   289k|# define SSL_EXT_FLAG_SENT       0x2
  ------------------
  867|   695k|    }
  868|       |
  869|  28.9k|    if (!WPACKET_close(pkt)) {
  ------------------
  |  Branch (869:9): [True: 0, False: 28.9k]
  ------------------
  870|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_EXTENSIONS,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  871|      0|                 ERR_R_INTERNAL_ERROR);
  872|      0|        return 0;
  873|      0|    }
  874|       |
  875|  28.9k|    return 1;
  876|  28.9k|}
extensions.c:tls_construct_certificate_authorities:
 1234|  28.9k|{
 1235|  28.9k|    const STACK_OF(X509_NAME) *ca_sk = get_ca_names(s);
 1236|       |
 1237|  28.9k|    if (ca_sk == NULL || sk_X509_NAME_num(ca_sk) == 0)
  ------------------
  |  Branch (1237:9): [True: 0, False: 28.9k]
  |  Branch (1237:26): [True: 28.9k, False: 0]
  ------------------
 1238|  28.9k|        return EXT_RETURN_NOT_SENT;
 1239|       |
 1240|      0|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_certificate_authorities)
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (1240:9): [True: 0, False: 0]
  ------------------
 1241|      0|        || !WPACKET_start_sub_packet_u16(pkt)) {
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (1241:12): [True: 0, False: 0]
  ------------------
 1242|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1243|      0|                 SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES,
 1244|      0|               ERR_R_INTERNAL_ERROR);
 1245|      0|        return EXT_RETURN_FAIL;
 1246|      0|    }
 1247|       |
 1248|      0|    if (!construct_ca_names(s, ca_sk, pkt)) {
  ------------------
  |  Branch (1248:9): [True: 0, False: 0]
  ------------------
 1249|       |        /* SSLfatal() already called */
 1250|      0|        return EXT_RETURN_FAIL;
 1251|      0|    }
 1252|       |
 1253|      0|    if (!WPACKET_close(pkt)) {
  ------------------
  |  Branch (1253:9): [True: 0, False: 0]
  ------------------
 1254|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1255|      0|                 SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES,
 1256|      0|                 ERR_R_INTERNAL_ERROR);
 1257|      0|        return EXT_RETURN_FAIL;
 1258|      0|    }
 1259|       |
 1260|      0|    return EXT_RETURN_SENT;
 1261|      0|}

tls_construct_ctos_renegotiate:
   18|  28.9k|{
   19|       |    /* Add RI if renegotiating */
   20|  28.9k|    if (!s->renegotiate)
  ------------------
  |  Branch (20:9): [True: 28.9k, False: 0]
  ------------------
   21|  28.9k|        return EXT_RETURN_NOT_SENT;
   22|       |
   23|      0|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_renegotiate)
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (23:9): [True: 0, False: 0]
  ------------------
   24|      0|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (24:16): [True: 0, False: 0]
  ------------------
   25|      0|            || !WPACKET_sub_memcpy_u8(pkt, s->s3->previous_client_finished,
  ------------------
  |  |  845|      0|    WPACKET_sub_memcpy__((pkt), (src), (len), 1)
  ------------------
  |  Branch (25:16): [True: 0, False: 0]
  ------------------
   26|      0|                               s->s3->previous_client_finished_len)
   27|      0|            || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (27:16): [True: 0, False: 0]
  ------------------
   28|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   29|      0|                 ERR_R_INTERNAL_ERROR);
   30|      0|        return EXT_RETURN_FAIL;
   31|      0|    }
   32|       |
   33|      0|    return EXT_RETURN_SENT;
   34|      0|}
tls_construct_ctos_server_name:
   39|  28.9k|{
   40|  28.9k|    if (s->ext.hostname == NULL)
  ------------------
  |  Branch (40:9): [True: 0, False: 28.9k]
  ------------------
   41|      0|        return EXT_RETURN_NOT_SENT;
   42|       |
   43|       |    /* Add TLS extension servername to the Client Hello message */
   44|  28.9k|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_server_name)
  ------------------
  |  |  820|  57.9k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (44:9): [True: 0, False: 28.9k]
  ------------------
   45|       |               /* Sub-packet for server_name extension */
   46|  28.9k|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|  57.9k|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (46:16): [True: 0, False: 28.9k]
  ------------------
   47|       |               /* Sub-packet for servername list (always 1 hostname)*/
   48|  28.9k|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|  57.9k|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (48:16): [True: 0, False: 28.9k]
  ------------------
   49|  28.9k|            || !WPACKET_put_bytes_u8(pkt, TLSEXT_NAMETYPE_host_name)
  ------------------
  |  |  818|  57.9k|    WPACKET_put_bytes__((pkt), (val), 1)
  ------------------
  |  Branch (49:16): [True: 0, False: 28.9k]
  ------------------
   50|  28.9k|            || !WPACKET_sub_memcpy_u16(pkt, s->ext.hostname,
  ------------------
  |  |  847|  57.9k|    WPACKET_sub_memcpy__((pkt), (src), (len), 2)
  ------------------
  |  Branch (50:16): [True: 0, False: 28.9k]
  ------------------
   51|  28.9k|                                       strlen(s->ext.hostname))
   52|  28.9k|            || !WPACKET_close(pkt)
  ------------------
  |  Branch (52:16): [True: 0, False: 28.9k]
  ------------------
   53|  28.9k|            || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (53:16): [True: 0, False: 28.9k]
  ------------------
   54|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   55|      0|                 ERR_R_INTERNAL_ERROR);
   56|      0|        return EXT_RETURN_FAIL;
   57|      0|    }
   58|       |
   59|  28.9k|    return EXT_RETURN_SENT;
   60|  28.9k|}
tls_construct_ctos_maxfragmentlen:
   66|  28.9k|{
   67|  28.9k|    if (s->ext.max_fragment_len_mode == TLSEXT_max_fragment_length_DISABLED)
  ------------------
  |  |  204|  28.9k|# define TLSEXT_max_fragment_length_DISABLED    0
  ------------------
  |  Branch (67:9): [True: 28.9k, False: 0]
  ------------------
   68|  28.9k|        return EXT_RETURN_NOT_SENT;
   69|       |
   70|       |    /* Add Max Fragment Length extension if client enabled it. */
   71|       |    /*-
   72|       |     * 4 bytes for this extension type and extension length
   73|       |     * 1 byte for the Max Fragment Length code value.
   74|       |     */
   75|      0|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_max_fragment_length)
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (75:9): [True: 0, False: 0]
  ------------------
   76|       |            /* Sub-packet for Max Fragment Length extension (1 byte) */
   77|      0|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (77:16): [True: 0, False: 0]
  ------------------
   78|      0|            || !WPACKET_put_bytes_u8(pkt, s->ext.max_fragment_len_mode)
  ------------------
  |  |  818|      0|    WPACKET_put_bytes__((pkt), (val), 1)
  ------------------
  |  Branch (78:16): [True: 0, False: 0]
  ------------------
   79|      0|            || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (79:16): [True: 0, False: 0]
  ------------------
   80|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   81|      0|                 SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN, ERR_R_INTERNAL_ERROR);
   82|      0|        return EXT_RETURN_FAIL;
   83|      0|    }
   84|       |
   85|      0|    return EXT_RETURN_SENT;
   86|      0|}
tls_construct_ctos_srp:
   91|  28.9k|{
   92|       |    /* Add SRP username if there is one */
   93|  28.9k|    if (s->srp_ctx.login == NULL)
  ------------------
  |  Branch (93:9): [True: 28.9k, False: 0]
  ------------------
   94|  28.9k|        return EXT_RETURN_NOT_SENT;
   95|       |
   96|      0|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_srp)
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (96:9): [True: 0, False: 0]
  ------------------
   97|       |               /* Sub-packet for SRP extension */
   98|      0|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (98:16): [True: 0, False: 0]
  ------------------
   99|      0|            || !WPACKET_start_sub_packet_u8(pkt)
  ------------------
  |  |  719|      0|    WPACKET_start_sub_packet_len__((pkt), 1)
  ------------------
  |  Branch (99:16): [True: 0, False: 0]
  ------------------
  100|       |               /* login must not be zero...internal error if so */
  101|      0|            || !WPACKET_set_flags(pkt, WPACKET_FLAGS_NON_ZERO_LENGTH)
  ------------------
  |  |  649|      0|#define WPACKET_FLAGS_NON_ZERO_LENGTH           1
  ------------------
  |  Branch (101:16): [True: 0, False: 0]
  ------------------
  102|      0|            || !WPACKET_memcpy(pkt, s->srp_ctx.login,
  ------------------
  |  Branch (102:16): [True: 0, False: 0]
  ------------------
  103|      0|                               strlen(s->srp_ctx.login))
  104|      0|            || !WPACKET_close(pkt)
  ------------------
  |  Branch (104:16): [True: 0, False: 0]
  ------------------
  105|      0|            || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (105:16): [True: 0, False: 0]
  ------------------
  106|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_SRP,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  107|      0|                 ERR_R_INTERNAL_ERROR);
  108|      0|        return EXT_RETURN_FAIL;
  109|      0|    }
  110|       |
  111|      0|    return EXT_RETURN_SENT;
  112|      0|}
tls_construct_ctos_ec_pt_formats:
  148|  28.9k|{
  149|  28.9k|    const unsigned char *pformats;
  150|  28.9k|    size_t num_formats;
  151|       |
  152|  28.9k|    if (!use_ecc(s))
  ------------------
  |  Branch (152:9): [True: 0, False: 28.9k]
  ------------------
  153|      0|        return EXT_RETURN_NOT_SENT;
  154|       |
  155|       |    /* Add TLS extension ECPointFormats to the ClientHello message */
  156|  28.9k|    tls1_get_formatlist(s, &pformats, &num_formats);
  157|       |
  158|  28.9k|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_ec_point_formats)
  ------------------
  |  |  820|  57.9k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (158:9): [True: 0, False: 28.9k]
  ------------------
  159|       |               /* Sub-packet for formats extension */
  160|  28.9k|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|  57.9k|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (160:16): [True: 0, False: 28.9k]
  ------------------
  161|  28.9k|            || !WPACKET_sub_memcpy_u8(pkt, pformats, num_formats)
  ------------------
  |  |  845|  57.9k|    WPACKET_sub_memcpy__((pkt), (src), (len), 1)
  ------------------
  |  Branch (161:16): [True: 0, False: 28.9k]
  ------------------
  162|  28.9k|            || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (162:16): [True: 0, False: 28.9k]
  ------------------
  163|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  164|      0|                 SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS, ERR_R_INTERNAL_ERROR);
  165|      0|        return EXT_RETURN_FAIL;
  166|      0|    }
  167|       |
  168|  28.9k|    return EXT_RETURN_SENT;
  169|  28.9k|}
tls_construct_ctos_supported_groups:
  174|  28.9k|{
  175|  28.9k|    const uint16_t *pgroups = NULL;
  176|  28.9k|    size_t num_groups = 0, i;
  177|       |
  178|  28.9k|    if (!use_ecc(s))
  ------------------
  |  Branch (178:9): [True: 0, False: 28.9k]
  ------------------
  179|      0|        return EXT_RETURN_NOT_SENT;
  180|       |
  181|       |    /*
  182|       |     * Add TLS extension supported_groups to the ClientHello message
  183|       |     */
  184|       |    /* TODO(TLS1.3): Add support for DHE groups */
  185|  28.9k|    tls1_get_supported_groups(s, &pgroups, &num_groups);
  186|       |
  187|  28.9k|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_groups)
  ------------------
  |  |  820|  57.9k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (187:9): [True: 0, False: 28.9k]
  ------------------
  188|       |               /* Sub-packet for supported_groups extension */
  189|  28.9k|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|  57.9k|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (189:16): [True: 0, False: 28.9k]
  ------------------
  190|  28.9k|            || !WPACKET_start_sub_packet_u16(pkt)) {
  ------------------
  |  |  721|  28.9k|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (190:16): [True: 0, False: 28.9k]
  ------------------
  191|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  192|      0|                 SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS,
  193|      0|                 ERR_R_INTERNAL_ERROR);
  194|      0|        return EXT_RETURN_FAIL;
  195|      0|    }
  196|       |    /* Copy curve ID if supported */
  197|   173k|    for (i = 0; i < num_groups; i++) {
  ------------------
  |  Branch (197:17): [True: 144k, False: 28.9k]
  ------------------
  198|   144k|        uint16_t ctmp = pgroups[i];
  199|       |
  200|   144k|        if (tls_curve_allowed(s, ctmp, SSL_SECOP_CURVE_SUPPORTED)) {
  ------------------
  |  | 2295|   144k|# define SSL_SECOP_CURVE_SUPPORTED       (4 | SSL_SECOP_OTHER_CURVE)
  |  |  ------------------
  |  |  |  | 2276|   144k|# define SSL_SECOP_OTHER_CURVE   (2 << 16)
  |  |  ------------------
  ------------------
  |  Branch (200:13): [True: 144k, False: 0]
  ------------------
  201|   144k|            if (!WPACKET_put_bytes_u16(pkt, ctmp)) {
  ------------------
  |  |  820|   144k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (201:17): [True: 0, False: 144k]
  ------------------
  202|      0|                    SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  203|      0|                             SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS,
  204|      0|                             ERR_R_INTERNAL_ERROR);
  205|      0|                    return EXT_RETURN_FAIL;
  206|      0|                }
  207|   144k|        }
  208|   144k|    }
  209|  28.9k|    if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (209:9): [True: 0, False: 28.9k]
  |  Branch (209:32): [True: 0, False: 28.9k]
  ------------------
  210|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  211|      0|                 SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS,
  212|      0|                 ERR_R_INTERNAL_ERROR);
  213|      0|        return EXT_RETURN_FAIL;
  214|      0|    }
  215|       |
  216|  28.9k|    return EXT_RETURN_SENT;
  217|  28.9k|}
tls_construct_ctos_session_ticket:
  223|  28.9k|{
  224|  28.9k|    size_t ticklen;
  225|       |
  226|  28.9k|    if (!tls_use_ticket(s))
  ------------------
  |  Branch (226:9): [True: 0, False: 28.9k]
  ------------------
  227|      0|        return EXT_RETURN_NOT_SENT;
  228|       |
  229|  28.9k|    if (!s->new_session && s->session != NULL
  ------------------
  |  Branch (229:9): [True: 28.9k, False: 0]
  |  Branch (229:28): [True: 28.9k, False: 0]
  ------------------
  230|  28.9k|            && s->session->ext.tick != NULL
  ------------------
  |  Branch (230:16): [True: 0, False: 28.9k]
  ------------------
  231|      0|            && s->session->ssl_version != TLS1_3_VERSION) {
  ------------------
  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  ------------------
  |  Branch (231:16): [True: 0, False: 0]
  ------------------
  232|      0|        ticklen = s->session->ext.ticklen;
  233|  28.9k|    } else if (s->session && s->ext.session_ticket != NULL
  ------------------
  |  Branch (233:16): [True: 28.9k, False: 0]
  |  Branch (233:30): [True: 0, False: 28.9k]
  ------------------
  234|      0|               && s->ext.session_ticket->data != NULL) {
  ------------------
  |  Branch (234:19): [True: 0, False: 0]
  ------------------
  235|      0|        ticklen = s->ext.session_ticket->length;
  236|      0|        s->session->ext.tick = OPENSSL_malloc(ticklen);
  ------------------
  |  |  118|      0|        CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  237|      0|        if (s->session->ext.tick == NULL) {
  ------------------
  |  Branch (237:13): [True: 0, False: 0]
  ------------------
  238|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  239|      0|                     SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET,
  240|      0|                     ERR_R_INTERNAL_ERROR);
  241|      0|            return EXT_RETURN_FAIL;
  242|      0|        }
  243|      0|        memcpy(s->session->ext.tick,
  244|      0|               s->ext.session_ticket->data, ticklen);
  245|      0|        s->session->ext.ticklen = ticklen;
  246|  28.9k|    } else {
  247|  28.9k|        ticklen = 0;
  248|  28.9k|    }
  249|       |
  250|  28.9k|    if (ticklen == 0 && s->ext.session_ticket != NULL &&
  ------------------
  |  Branch (250:9): [True: 28.9k, False: 0]
  |  Branch (250:25): [True: 0, False: 28.9k]
  ------------------
  251|      0|            s->ext.session_ticket->data == NULL)
  ------------------
  |  Branch (251:13): [True: 0, False: 0]
  ------------------
  252|      0|        return EXT_RETURN_NOT_SENT;
  253|       |
  254|  28.9k|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_session_ticket)
  ------------------
  |  |  820|  57.9k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (254:9): [True: 0, False: 28.9k]
  ------------------
  255|  28.9k|            || !WPACKET_sub_memcpy_u16(pkt, s->session->ext.tick, ticklen)) {
  ------------------
  |  |  847|  28.9k|    WPACKET_sub_memcpy__((pkt), (src), (len), 2)
  ------------------
  |  Branch (255:16): [True: 0, False: 28.9k]
  ------------------
  256|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  257|      0|                 SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET, ERR_R_INTERNAL_ERROR);
  258|      0|        return EXT_RETURN_FAIL;
  259|      0|    }
  260|       |
  261|  28.9k|    return EXT_RETURN_SENT;
  262|  28.9k|}
tls_construct_ctos_sig_algs:
  267|  28.9k|{
  268|  28.9k|    size_t salglen;
  269|  28.9k|    const uint16_t *salg;
  270|       |
  271|  28.9k|    if (!SSL_CLIENT_USE_SIGALGS(s))
  ------------------
  |  |  363|  28.9k|    SSL_CLIENT_USE_TLS1_2_CIPHERS(s)
  |  |  ------------------
  |  |  |  |  356|  28.9k|    ((!SSL_IS_DTLS(s) && s->client_version >= TLS1_2_VERSION) || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  319|  57.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   ((!SSL_IS_DTLS(s) && s->client_version >= TLS1_2_VERSION) || \
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|  57.9k|# define TLS1_2_VERSION                  0x0303
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (356:7): [True: 28.9k, False: 0]
  |  |  |  |  |  Branch (356:26): [True: 28.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  357|  28.9k|     (SSL_IS_DTLS(s) && DTLS_VERSION_GE(s->client_version, DTLS1_2_VERSION)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (319:26): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                    (SSL_IS_DTLS(s) && DTLS_VERSION_GE(s->client_version, DTLS1_2_VERSION)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  139|      0|# define DTLS_VERSION_GE(v1, v2) (dtls_ver_ordinal(v1) <= dtls_ver_ordinal(v2))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (137:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               # define DTLS_VERSION_GE(v1, v2) (dtls_ver_ordinal(v1) <= dtls_ver_ordinal(v2))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (137:32): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (139:34): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  272|      0|        return EXT_RETURN_NOT_SENT;
  273|       |
  274|  28.9k|    salglen = tls12_get_psigalgs(s, 1, &salg);
  275|  28.9k|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_signature_algorithms)
  ------------------
  |  |  820|  57.9k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (275:9): [True: 0, False: 28.9k]
  ------------------
  276|       |               /* Sub-packet for sig-algs extension */
  277|  28.9k|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|  57.9k|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (277:16): [True: 0, False: 28.9k]
  ------------------
  278|       |               /* Sub-packet for the actual list */
  279|  28.9k|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|  57.9k|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (279:16): [True: 0, False: 28.9k]
  ------------------
  280|  28.9k|            || !tls12_copy_sigalgs(s, pkt, salg, salglen)
  ------------------
  |  Branch (280:16): [True: 0, False: 28.9k]
  ------------------
  281|  28.9k|            || !WPACKET_close(pkt)
  ------------------
  |  Branch (281:16): [True: 0, False: 28.9k]
  ------------------
  282|  28.9k|            || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (282:16): [True: 0, False: 28.9k]
  ------------------
  283|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  284|      0|                 ERR_R_INTERNAL_ERROR);
  285|      0|        return EXT_RETURN_FAIL;
  286|      0|    }
  287|       |
  288|  28.9k|    return EXT_RETURN_SENT;
  289|  28.9k|}
tls_construct_ctos_status_request:
  295|  28.9k|{
  296|  28.9k|    int i;
  297|       |
  298|       |    /* This extension isn't defined for client Certificates */
  299|  28.9k|    if (x != NULL)
  ------------------
  |  Branch (299:9): [True: 0, False: 28.9k]
  ------------------
  300|      0|        return EXT_RETURN_NOT_SENT;
  301|       |
  302|  28.9k|    if (s->ext.status_type != TLSEXT_STATUSTYPE_ocsp)
  ------------------
  |  |  159|  28.9k|# define TLSEXT_STATUSTYPE_ocsp 1
  ------------------
  |  Branch (302:9): [True: 28.9k, False: 0]
  ------------------
  303|  28.9k|        return EXT_RETURN_NOT_SENT;
  304|       |
  305|      0|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_status_request)
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (305:9): [True: 0, False: 0]
  ------------------
  306|       |               /* Sub-packet for status request extension */
  307|      0|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (307:16): [True: 0, False: 0]
  ------------------
  308|      0|            || !WPACKET_put_bytes_u8(pkt, TLSEXT_STATUSTYPE_ocsp)
  ------------------
  |  |  818|      0|    WPACKET_put_bytes__((pkt), (val), 1)
  ------------------
  |  Branch (308:16): [True: 0, False: 0]
  ------------------
  309|       |               /* Sub-packet for the ids */
  310|      0|            || !WPACKET_start_sub_packet_u16(pkt)) {
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (310:16): [True: 0, False: 0]
  ------------------
  311|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  312|      0|                 SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST, ERR_R_INTERNAL_ERROR);
  313|      0|        return EXT_RETURN_FAIL;
  314|      0|    }
  315|      0|    for (i = 0; i < sk_OCSP_RESPID_num(s->ext.ocsp.ids); i++) {
  ------------------
  |  Branch (315:17): [True: 0, False: 0]
  ------------------
  316|      0|        unsigned char *idbytes;
  317|      0|        OCSP_RESPID *id = sk_OCSP_RESPID_value(s->ext.ocsp.ids, i);
  318|      0|        int idlen = i2d_OCSP_RESPID(id, NULL);
  319|       |
  320|      0|        if (idlen <= 0
  ------------------
  |  Branch (320:13): [True: 0, False: 0]
  ------------------
  321|       |                   /* Sub-packet for an individual id */
  322|      0|                || !WPACKET_sub_allocate_bytes_u16(pkt, idlen, &idbytes)
  ------------------
  |  |  760|      0|    WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 2)
  ------------------
  |  Branch (322:20): [True: 0, False: 0]
  ------------------
  323|      0|                || i2d_OCSP_RESPID(id, &idbytes) != idlen) {
  ------------------
  |  Branch (323:20): [True: 0, False: 0]
  ------------------
  324|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  325|      0|                     SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST,
  326|      0|                     ERR_R_INTERNAL_ERROR);
  327|      0|            return EXT_RETURN_FAIL;
  328|      0|        }
  329|      0|    }
  330|      0|    if (!WPACKET_close(pkt)
  ------------------
  |  Branch (330:9): [True: 0, False: 0]
  ------------------
  331|      0|            || !WPACKET_start_sub_packet_u16(pkt)) {
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (331:16): [True: 0, False: 0]
  ------------------
  332|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  333|      0|                 SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST, ERR_R_INTERNAL_ERROR);
  334|      0|        return EXT_RETURN_FAIL;
  335|      0|    }
  336|      0|    if (s->ext.ocsp.exts) {
  ------------------
  |  Branch (336:9): [True: 0, False: 0]
  ------------------
  337|      0|        unsigned char *extbytes;
  338|      0|        int extlen = i2d_X509_EXTENSIONS(s->ext.ocsp.exts, NULL);
  339|       |
  340|      0|        if (extlen < 0) {
  ------------------
  |  Branch (340:13): [True: 0, False: 0]
  ------------------
  341|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  342|      0|                     SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST,
  343|      0|                     ERR_R_INTERNAL_ERROR);
  344|      0|            return EXT_RETURN_FAIL;
  345|      0|        }
  346|      0|        if (!WPACKET_allocate_bytes(pkt, extlen, &extbytes)
  ------------------
  |  Branch (346:13): [True: 0, False: 0]
  ------------------
  347|      0|                || i2d_X509_EXTENSIONS(s->ext.ocsp.exts, &extbytes)
  ------------------
  |  Branch (347:20): [True: 0, False: 0]
  ------------------
  348|      0|                   != extlen) {
  349|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  350|      0|                     SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST,
  351|      0|                     ERR_R_INTERNAL_ERROR);
  352|      0|            return EXT_RETURN_FAIL;
  353|      0|       }
  354|      0|    }
  355|      0|    if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (355:9): [True: 0, False: 0]
  |  Branch (355:32): [True: 0, False: 0]
  ------------------
  356|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  357|      0|                 SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST, ERR_R_INTERNAL_ERROR);
  358|      0|        return EXT_RETURN_FAIL;
  359|      0|    }
  360|       |
  361|      0|    return EXT_RETURN_SENT;
  362|      0|}
tls_construct_ctos_npn:
  368|  28.9k|{
  369|  28.9k|    if (s->ctx->ext.npn_select_cb == NULL || !SSL_IS_FIRST_HANDSHAKE(s))
  ------------------
  |  |  333|      0|# define SSL_IS_FIRST_HANDSHAKE(S) ((s)->s3->tmp.finish_md_len == 0 \
  |  |  ------------------
  |  |  |  Branch (333:37): [True: 0, False: 0]
  |  |  ------------------
  |  |  334|      0|                                    || (s)->s3->tmp.peer_finish_md_len == 0)
  |  |  ------------------
  |  |  |  Branch (334:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (369:9): [True: 28.9k, False: 0]
  ------------------
  370|  28.9k|        return EXT_RETURN_NOT_SENT;
  371|       |
  372|       |    /*
  373|       |     * The client advertises an empty extension to indicate its support
  374|       |     * for Next Protocol Negotiation
  375|       |     */
  376|      0|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_next_proto_neg)
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (376:9): [True: 0, False: 0]
  ------------------
  377|      0|            || !WPACKET_put_bytes_u16(pkt, 0)) {
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (377:16): [True: 0, False: 0]
  ------------------
  378|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_NPN,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  379|      0|                 ERR_R_INTERNAL_ERROR);
  380|      0|        return EXT_RETURN_FAIL;
  381|      0|    }
  382|       |
  383|      0|    return EXT_RETURN_SENT;
  384|      0|}
tls_construct_ctos_alpn:
  389|  28.9k|{
  390|  28.9k|    s->s3->alpn_sent = 0;
  391|       |
  392|  28.9k|    if (s->ext.alpn == NULL || !SSL_IS_FIRST_HANDSHAKE(s))
  ------------------
  |  |  333|      0|# define SSL_IS_FIRST_HANDSHAKE(S) ((s)->s3->tmp.finish_md_len == 0 \
  |  |  ------------------
  |  |  |  Branch (333:37): [True: 0, False: 0]
  |  |  ------------------
  |  |  334|      0|                                    || (s)->s3->tmp.peer_finish_md_len == 0)
  |  |  ------------------
  |  |  |  Branch (334:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (392:9): [True: 28.9k, False: 0]
  ------------------
  393|  28.9k|        return EXT_RETURN_NOT_SENT;
  394|       |
  395|      0|    if (!WPACKET_put_bytes_u16(pkt,
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (395:9): [True: 0, False: 0]
  ------------------
  396|      0|                TLSEXT_TYPE_application_layer_protocol_negotiation)
  397|       |               /* Sub-packet ALPN extension */
  398|      0|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (398:16): [True: 0, False: 0]
  ------------------
  399|      0|            || !WPACKET_sub_memcpy_u16(pkt, s->ext.alpn, s->ext.alpn_len)
  ------------------
  |  |  847|      0|    WPACKET_sub_memcpy__((pkt), (src), (len), 2)
  ------------------
  |  Branch (399:16): [True: 0, False: 0]
  ------------------
  400|      0|            || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (400:16): [True: 0, False: 0]
  ------------------
  401|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_ALPN,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  402|      0|                 ERR_R_INTERNAL_ERROR);
  403|      0|        return EXT_RETURN_FAIL;
  404|      0|    }
  405|      0|    s->s3->alpn_sent = 1;
  406|       |
  407|      0|    return EXT_RETURN_SENT;
  408|      0|}
tls_construct_ctos_use_srtp:
  415|  28.9k|{
  416|  28.9k|    STACK_OF(SRTP_PROTECTION_PROFILE) *clnt = SSL_get_srtp_profiles(s);
  ------------------
  |  |   20|  28.9k|# define STACK_OF(type) struct stack_st_##type
  ------------------
  417|  28.9k|    int i, end;
  418|       |
  419|  28.9k|    if (clnt == NULL)
  ------------------
  |  Branch (419:9): [True: 28.9k, False: 0]
  ------------------
  420|  28.9k|        return EXT_RETURN_NOT_SENT;
  421|       |
  422|      0|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_use_srtp)
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (422:9): [True: 0, False: 0]
  ------------------
  423|       |               /* Sub-packet for SRTP extension */
  424|      0|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (424:16): [True: 0, False: 0]
  ------------------
  425|       |               /* Sub-packet for the protection profile list */
  426|      0|            || !WPACKET_start_sub_packet_u16(pkt)) {
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (426:16): [True: 0, False: 0]
  ------------------
  427|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  428|      0|                 ERR_R_INTERNAL_ERROR);
  429|      0|        return EXT_RETURN_FAIL;
  430|      0|    }
  431|       |
  432|      0|    end = sk_SRTP_PROTECTION_PROFILE_num(clnt);
  433|      0|    for (i = 0; i < end; i++) {
  ------------------
  |  Branch (433:17): [True: 0, False: 0]
  ------------------
  434|      0|        const SRTP_PROTECTION_PROFILE *prof =
  435|      0|            sk_SRTP_PROTECTION_PROFILE_value(clnt, i);
  436|       |
  437|      0|        if (prof == NULL || !WPACKET_put_bytes_u16(pkt, prof->id)) {
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (437:13): [True: 0, False: 0]
  |  Branch (437:29): [True: 0, False: 0]
  ------------------
  438|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  439|      0|                     SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP, ERR_R_INTERNAL_ERROR);
  440|      0|            return EXT_RETURN_FAIL;
  441|      0|        }
  442|      0|    }
  443|      0|    if (!WPACKET_close(pkt)
  ------------------
  |  Branch (443:9): [True: 0, False: 0]
  ------------------
  444|       |               /* Add an empty use_mki value */
  445|      0|            || !WPACKET_put_bytes_u8(pkt, 0)
  ------------------
  |  |  818|      0|    WPACKET_put_bytes__((pkt), (val), 1)
  ------------------
  |  Branch (445:16): [True: 0, False: 0]
  ------------------
  446|      0|            || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (446:16): [True: 0, False: 0]
  ------------------
  447|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  448|      0|                 ERR_R_INTERNAL_ERROR);
  449|      0|        return EXT_RETURN_FAIL;
  450|      0|    }
  451|       |
  452|      0|    return EXT_RETURN_SENT;
  453|      0|}
tls_construct_ctos_etm:
  458|  28.9k|{
  459|  28.9k|    if (s->options & SSL_OP_NO_ENCRYPT_THEN_MAC)
  ------------------
  |  |  347|  28.9k|# define SSL_OP_NO_ENCRYPT_THEN_MAC                      0x00080000U
  ------------------
  |  Branch (459:9): [True: 0, False: 28.9k]
  ------------------
  460|      0|        return EXT_RETURN_NOT_SENT;
  461|       |
  462|  28.9k|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_encrypt_then_mac)
  ------------------
  |  |  820|  57.9k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (462:9): [True: 0, False: 28.9k]
  ------------------
  463|  28.9k|            || !WPACKET_put_bytes_u16(pkt, 0)) {
  ------------------
  |  |  820|  28.9k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (463:16): [True: 0, False: 28.9k]
  ------------------
  464|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_ETM,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  465|      0|                 ERR_R_INTERNAL_ERROR);
  466|      0|        return EXT_RETURN_FAIL;
  467|      0|    }
  468|       |
  469|  28.9k|    return EXT_RETURN_SENT;
  470|  28.9k|}
tls_construct_ctos_sct:
  475|  28.9k|{
  476|  28.9k|    if (s->ct_validation_callback == NULL)
  ------------------
  |  Branch (476:9): [True: 28.9k, False: 0]
  ------------------
  477|  28.9k|        return EXT_RETURN_NOT_SENT;
  478|       |
  479|       |    /* Not defined for client Certificates */
  480|      0|    if (x != NULL)
  ------------------
  |  Branch (480:9): [True: 0, False: 0]
  ------------------
  481|      0|        return EXT_RETURN_NOT_SENT;
  482|       |
  483|      0|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_signed_certificate_timestamp)
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (483:9): [True: 0, False: 0]
  ------------------
  484|      0|            || !WPACKET_put_bytes_u16(pkt, 0)) {
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (484:16): [True: 0, False: 0]
  ------------------
  485|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_SCT,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  486|      0|                 ERR_R_INTERNAL_ERROR);
  487|      0|        return EXT_RETURN_FAIL;
  488|      0|    }
  489|       |
  490|      0|    return EXT_RETURN_SENT;
  491|      0|}
tls_construct_ctos_ems:
  496|  28.9k|{
  497|  28.9k|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
  ------------------
  |  |  820|  57.9k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (497:9): [True: 0, False: 28.9k]
  ------------------
  498|  28.9k|            || !WPACKET_put_bytes_u16(pkt, 0)) {
  ------------------
  |  |  820|  28.9k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (498:16): [True: 0, False: 28.9k]
  ------------------
  499|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_EMS,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  500|      0|                 ERR_R_INTERNAL_ERROR);
  501|      0|        return EXT_RETURN_FAIL;
  502|      0|    }
  503|       |
  504|  28.9k|    return EXT_RETURN_SENT;
  505|  28.9k|}
tls_construct_ctos_supported_versions:
  510|  28.9k|{
  511|  28.9k|    int currv, min_version, max_version, reason;
  512|       |
  513|  28.9k|    reason = ssl_get_min_max_version(s, &min_version, &max_version, NULL);
  514|  28.9k|    if (reason != 0) {
  ------------------
  |  Branch (514:9): [True: 0, False: 28.9k]
  ------------------
  515|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  516|      0|                 SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS, reason);
  517|      0|        return EXT_RETURN_FAIL;
  518|      0|    }
  519|       |
  520|       |    /*
  521|       |     * Don't include this if we can't negotiate TLSv1.3. We can do a straight
  522|       |     * comparison here because we will never be called in DTLS.
  523|       |     */
  524|  28.9k|    if (max_version < TLS1_3_VERSION)
  ------------------
  |  |   30|  28.9k|# define TLS1_3_VERSION                  0x0304
  ------------------
  |  Branch (524:9): [True: 0, False: 28.9k]
  ------------------
  525|      0|        return EXT_RETURN_NOT_SENT;
  526|       |
  527|  28.9k|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
  ------------------
  |  |  820|  57.9k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (527:9): [True: 0, False: 28.9k]
  ------------------
  528|  28.9k|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|  57.9k|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (528:16): [True: 0, False: 28.9k]
  ------------------
  529|  28.9k|            || !WPACKET_start_sub_packet_u8(pkt)) {
  ------------------
  |  |  719|  28.9k|    WPACKET_start_sub_packet_len__((pkt), 1)
  ------------------
  |  Branch (529:16): [True: 0, False: 28.9k]
  ------------------
  530|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  531|      0|                 SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS,
  532|      0|                 ERR_R_INTERNAL_ERROR);
  533|      0|        return EXT_RETURN_FAIL;
  534|      0|    }
  535|       |
  536|   144k|    for (currv = max_version; currv >= min_version; currv--) {
  ------------------
  |  Branch (536:31): [True: 115k, False: 28.9k]
  ------------------
  537|   115k|        if (!WPACKET_put_bytes_u16(pkt, currv)) {
  ------------------
  |  |  820|   115k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (537:13): [True: 0, False: 115k]
  ------------------
  538|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  539|      0|                     SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS,
  540|      0|                     ERR_R_INTERNAL_ERROR);
  541|      0|            return EXT_RETURN_FAIL;
  542|      0|        }
  543|   115k|    }
  544|  28.9k|    if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (544:9): [True: 0, False: 28.9k]
  |  Branch (544:32): [True: 0, False: 28.9k]
  ------------------
  545|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  546|      0|                 SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS,
  547|      0|                 ERR_R_INTERNAL_ERROR);
  548|      0|        return EXT_RETURN_FAIL;
  549|      0|    }
  550|       |
  551|  28.9k|    return EXT_RETURN_SENT;
  552|  28.9k|}
tls_construct_ctos_psk_kex_modes:
  560|  28.9k|{
  561|  28.9k|#ifndef OPENSSL_NO_TLS1_3
  562|  28.9k|    int nodhe = s->options & SSL_OP_ALLOW_NO_DHE_KEX;
  ------------------
  |  |  317|  28.9k|# define SSL_OP_ALLOW_NO_DHE_KEX                         0x00000400U
  ------------------
  563|       |
  564|  28.9k|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_psk_kex_modes)
  ------------------
  |  |  820|  57.9k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (564:9): [True: 0, False: 28.9k]
  ------------------
  565|  28.9k|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|  57.9k|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (565:16): [True: 0, False: 28.9k]
  ------------------
  566|  28.9k|            || !WPACKET_start_sub_packet_u8(pkt)
  ------------------
  |  |  719|  57.9k|    WPACKET_start_sub_packet_len__((pkt), 1)
  ------------------
  |  Branch (566:16): [True: 0, False: 28.9k]
  ------------------
  567|  28.9k|            || !WPACKET_put_bytes_u8(pkt, TLSEXT_KEX_MODE_KE_DHE)
  ------------------
  |  |  818|  57.9k|    WPACKET_put_bytes__((pkt), (val), 1)
  ------------------
  |  Branch (567:16): [True: 0, False: 28.9k]
  ------------------
  568|  28.9k|            || (nodhe && !WPACKET_put_bytes_u8(pkt, TLSEXT_KEX_MODE_KE))
  ------------------
  |  |  818|      0|    WPACKET_put_bytes__((pkt), (val), 1)
  ------------------
  |  Branch (568:17): [True: 0, False: 28.9k]
  |  Branch (568:26): [True: 0, False: 0]
  ------------------
  569|  28.9k|            || !WPACKET_close(pkt)
  ------------------
  |  Branch (569:16): [True: 0, False: 28.9k]
  ------------------
  570|  28.9k|            || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (570:16): [True: 0, False: 28.9k]
  ------------------
  571|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  572|      0|                 SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES, ERR_R_INTERNAL_ERROR);
  573|      0|        return EXT_RETURN_FAIL;
  574|      0|    }
  575|       |
  576|  28.9k|    s->ext.psk_kex_mode = TLSEXT_KEX_MODE_FLAG_KE_DHE;
  ------------------
  |  | 2061|  28.9k|#define TLSEXT_KEX_MODE_FLAG_KE_DHE                             2
  ------------------
  577|  28.9k|    if (nodhe)
  ------------------
  |  Branch (577:9): [True: 0, False: 28.9k]
  ------------------
  578|      0|        s->ext.psk_kex_mode |= TLSEXT_KEX_MODE_FLAG_KE;
  ------------------
  |  | 2060|      0|#define TLSEXT_KEX_MODE_FLAG_KE                                 1
  ------------------
  579|  28.9k|#endif
  580|       |
  581|  28.9k|    return EXT_RETURN_SENT;
  582|  28.9k|}
tls_construct_ctos_key_share:
  646|  28.9k|{
  647|  28.9k|#ifndef OPENSSL_NO_TLS1_3
  648|  28.9k|    size_t i, num_groups = 0;
  649|  28.9k|    const uint16_t *pgroups = NULL;
  650|  28.9k|    uint16_t curve_id = 0;
  651|       |
  652|       |    /* key_share extension */
  653|  28.9k|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share)
  ------------------
  |  |  820|  57.9k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (653:9): [True: 0, False: 28.9k]
  ------------------
  654|       |               /* Extension data sub-packet */
  655|  28.9k|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|  57.9k|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (655:16): [True: 0, False: 28.9k]
  ------------------
  656|       |               /* KeyShare list sub-packet */
  657|  28.9k|            || !WPACKET_start_sub_packet_u16(pkt)) {
  ------------------
  |  |  721|  28.9k|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (657:16): [True: 0, False: 28.9k]
  ------------------
  658|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  659|      0|                 ERR_R_INTERNAL_ERROR);
  660|      0|        return EXT_RETURN_FAIL;
  661|      0|    }
  662|       |
  663|  28.9k|    tls1_get_supported_groups(s, &pgroups, &num_groups);
  664|       |
  665|       |    /*
  666|       |     * TODO(TLS1.3): Make the number of key_shares sent configurable. For
  667|       |     * now, just send one
  668|       |     */
  669|  28.9k|    if (s->s3->group_id != 0) {
  ------------------
  |  Branch (669:9): [True: 0, False: 28.9k]
  ------------------
  670|      0|        curve_id = s->s3->group_id;
  671|  28.9k|    } else {
  672|  28.9k|        for (i = 0; i < num_groups; i++) {
  ------------------
  |  Branch (672:21): [True: 28.9k, False: 0]
  ------------------
  673|       |
  674|  28.9k|            if (!tls_curve_allowed(s, pgroups[i], SSL_SECOP_CURVE_SUPPORTED))
  ------------------
  |  | 2295|  28.9k|# define SSL_SECOP_CURVE_SUPPORTED       (4 | SSL_SECOP_OTHER_CURVE)
  |  |  ------------------
  |  |  |  | 2276|  28.9k|# define SSL_SECOP_OTHER_CURVE   (2 << 16)
  |  |  ------------------
  ------------------
  |  Branch (674:17): [True: 0, False: 28.9k]
  ------------------
  675|      0|                continue;
  676|       |
  677|  28.9k|            curve_id = pgroups[i];
  678|  28.9k|            break;
  679|  28.9k|        }
  680|  28.9k|    }
  681|       |
  682|  28.9k|    if (curve_id == 0) {
  ------------------
  |  Branch (682:9): [True: 0, False: 28.9k]
  ------------------
  683|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  684|      0|                 SSL_R_NO_SUITABLE_KEY_SHARE);
  685|      0|        return EXT_RETURN_FAIL;
  686|      0|    }
  687|       |
  688|  28.9k|    if (!add_key_share(s, pkt, curve_id)) {
  ------------------
  |  Branch (688:9): [True: 0, False: 28.9k]
  ------------------
  689|       |        /* SSLfatal() already called */
  690|      0|        return EXT_RETURN_FAIL;
  691|      0|    }
  692|       |
  693|  28.9k|    if (!WPACKET_close(pkt) || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (693:9): [True: 0, False: 28.9k]
  |  Branch (693:32): [True: 0, False: 28.9k]
  ------------------
  694|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  695|      0|                 ERR_R_INTERNAL_ERROR);
  696|      0|        return EXT_RETURN_FAIL;
  697|      0|    }
  698|  28.9k|    return EXT_RETURN_SENT;
  699|       |#else
  700|       |    return EXT_RETURN_NOT_SENT;
  701|       |#endif
  702|  28.9k|}
tls_construct_ctos_cookie:
  706|  28.9k|{
  707|  28.9k|    EXT_RETURN ret = EXT_RETURN_FAIL;
  708|       |
  709|       |    /* Should only be set if we've had an HRR */
  710|  28.9k|    if (s->ext.tls13_cookie_len == 0)
  ------------------
  |  Branch (710:9): [True: 28.9k, False: 0]
  ------------------
  711|  28.9k|        return EXT_RETURN_NOT_SENT;
  712|       |
  713|      0|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_cookie)
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (713:9): [True: 0, False: 0]
  ------------------
  714|       |               /* Extension data sub-packet */
  715|      0|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (715:16): [True: 0, False: 0]
  ------------------
  716|      0|            || !WPACKET_sub_memcpy_u16(pkt, s->ext.tls13_cookie,
  ------------------
  |  |  847|      0|    WPACKET_sub_memcpy__((pkt), (src), (len), 2)
  ------------------
  |  Branch (716:16): [True: 0, False: 0]
  ------------------
  717|      0|                                       s->ext.tls13_cookie_len)
  718|      0|            || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (718:16): [True: 0, False: 0]
  ------------------
  719|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_COOKIE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  720|      0|                 ERR_R_INTERNAL_ERROR);
  721|      0|        goto end;
  722|      0|    }
  723|       |
  724|      0|    ret = EXT_RETURN_SENT;
  725|      0| end:
  726|      0|    OPENSSL_free(s->ext.tls13_cookie);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  727|      0|    s->ext.tls13_cookie = NULL;
  728|      0|    s->ext.tls13_cookie_len = 0;
  729|       |
  730|      0|    return ret;
  731|      0|}
tls_construct_ctos_early_data:
  736|  28.9k|{
  737|  28.9k|#ifndef OPENSSL_NO_PSK
  738|  28.9k|    char identity[PSK_MAX_IDENTITY_LEN + 1];
  739|  28.9k|#endif  /* OPENSSL_NO_PSK */
  740|  28.9k|    const unsigned char *id = NULL;
  741|  28.9k|    size_t idlen = 0;
  742|  28.9k|    SSL_SESSION *psksess = NULL;
  743|  28.9k|    SSL_SESSION *edsess = NULL;
  744|  28.9k|    const EVP_MD *handmd = NULL;
  745|       |
  746|  28.9k|    if (s->hello_retry_request == SSL_HRR_PENDING)
  ------------------
  |  Branch (746:9): [True: 0, False: 28.9k]
  ------------------
  747|      0|        handmd = ssl_handshake_md(s);
  748|       |
  749|  28.9k|    if (s->psk_use_session_cb != NULL
  ------------------
  |  Branch (749:9): [True: 0, False: 28.9k]
  ------------------
  750|      0|            && (!s->psk_use_session_cb(s, handmd, &id, &idlen, &psksess)
  ------------------
  |  Branch (750:17): [True: 0, False: 0]
  ------------------
  751|      0|                || (psksess != NULL
  ------------------
  |  Branch (751:21): [True: 0, False: 0]
  ------------------
  752|      0|                    && psksess->ssl_version != TLS1_3_VERSION))) {
  ------------------
  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  ------------------
  |  Branch (752:24): [True: 0, False: 0]
  ------------------
  753|      0|        SSL_SESSION_free(psksess);
  754|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  755|      0|                 SSL_R_BAD_PSK);
  756|      0|        return EXT_RETURN_FAIL;
  757|      0|    }
  758|       |
  759|  28.9k|#ifndef OPENSSL_NO_PSK
  760|  28.9k|    if (psksess == NULL && s->psk_client_callback != NULL) {
  ------------------
  |  Branch (760:9): [True: 28.9k, False: 0]
  |  Branch (760:28): [True: 0, False: 28.9k]
  ------------------
  761|      0|        unsigned char psk[PSK_MAX_PSK_LEN];
  762|      0|        size_t psklen = 0;
  763|       |
  764|      0|        memset(identity, 0, sizeof(identity));
  765|      0|        psklen = s->psk_client_callback(s, NULL, identity, sizeof(identity) - 1,
  766|      0|                                        psk, sizeof(psk));
  767|       |
  768|      0|        if (psklen > PSK_MAX_PSK_LEN) {
  ------------------
  |  |  822|      0|#  define PSK_MAX_PSK_LEN 256
  ------------------
  |  Branch (768:13): [True: 0, False: 0]
  ------------------
  769|      0|            SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  770|      0|                     SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA, ERR_R_INTERNAL_ERROR);
  771|      0|            return EXT_RETURN_FAIL;
  772|      0|        } else if (psklen > 0) {
  ------------------
  |  Branch (772:20): [True: 0, False: 0]
  ------------------
  773|      0|            const unsigned char tls13_aes128gcmsha256_id[] = { 0x13, 0x01 };
  774|      0|            const SSL_CIPHER *cipher;
  775|       |
  776|      0|            idlen = strlen(identity);
  777|      0|            if (idlen > PSK_MAX_IDENTITY_LEN) {
  ------------------
  |  |  821|      0|#  define PSK_MAX_IDENTITY_LEN 128
  ------------------
  |  Branch (777:17): [True: 0, False: 0]
  ------------------
  778|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  779|      0|                         SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA,
  780|      0|                         ERR_R_INTERNAL_ERROR);
  781|      0|                return EXT_RETURN_FAIL;
  782|      0|            }
  783|      0|            id = (unsigned char *)identity;
  784|       |
  785|       |            /*
  786|       |             * We found a PSK using an old style callback. We don't know
  787|       |             * the digest so we default to SHA256 as per the TLSv1.3 spec
  788|       |             */
  789|      0|            cipher = SSL_CIPHER_find(s, tls13_aes128gcmsha256_id);
  790|      0|            if (cipher == NULL) {
  ------------------
  |  Branch (790:17): [True: 0, False: 0]
  ------------------
  791|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  792|      0|                         SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA,
  793|      0|                         ERR_R_INTERNAL_ERROR);
  794|      0|                return EXT_RETURN_FAIL;
  795|      0|            }
  796|       |
  797|      0|            psksess = SSL_SESSION_new();
  798|      0|            if (psksess == NULL
  ------------------
  |  Branch (798:17): [True: 0, False: 0]
  ------------------
  799|      0|                    || !SSL_SESSION_set1_master_key(psksess, psk, psklen)
  ------------------
  |  Branch (799:24): [True: 0, False: 0]
  ------------------
  800|      0|                    || !SSL_SESSION_set_cipher(psksess, cipher)
  ------------------
  |  Branch (800:24): [True: 0, False: 0]
  ------------------
  801|      0|                    || !SSL_SESSION_set_protocol_version(psksess, TLS1_3_VERSION)) {
  ------------------
  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  ------------------
  |  Branch (801:24): [True: 0, False: 0]
  ------------------
  802|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  803|      0|                         SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA,
  804|      0|                         ERR_R_INTERNAL_ERROR);
  805|      0|                OPENSSL_cleanse(psk, psklen);
  806|      0|                return EXT_RETURN_FAIL;
  807|      0|            }
  808|      0|            OPENSSL_cleanse(psk, psklen);
  809|      0|        }
  810|      0|    }
  811|  28.9k|#endif  /* OPENSSL_NO_PSK */
  812|       |
  813|  28.9k|    SSL_SESSION_free(s->psksession);
  814|  28.9k|    s->psksession = psksess;
  815|  28.9k|    if (psksess != NULL) {
  ------------------
  |  Branch (815:9): [True: 0, False: 28.9k]
  ------------------
  816|      0|        OPENSSL_free(s->psksession_id);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  817|      0|        s->psksession_id = OPENSSL_memdup(id, idlen);
  ------------------
  |  |  130|      0|        CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  818|      0|        if (s->psksession_id == NULL) {
  ------------------
  |  Branch (818:13): [True: 0, False: 0]
  ------------------
  819|      0|            s->psksession_id_len = 0;
  820|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  821|      0|                     SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA, ERR_R_INTERNAL_ERROR);
  822|      0|            return EXT_RETURN_FAIL;
  823|      0|        }
  824|      0|        s->psksession_id_len = idlen;
  825|      0|    }
  826|       |
  827|  28.9k|    if (s->early_data_state != SSL_EARLY_DATA_CONNECTING
  ------------------
  |  Branch (827:9): [True: 28.9k, False: 0]
  ------------------
  828|      0|            || (s->session->ext.max_early_data == 0
  ------------------
  |  Branch (828:17): [True: 0, False: 0]
  ------------------
  829|  28.9k|                && (psksess == NULL || psksess->ext.max_early_data == 0))) {
  ------------------
  |  Branch (829:21): [True: 0, False: 0]
  |  Branch (829:40): [True: 0, False: 0]
  ------------------
  830|  28.9k|        s->max_early_data = 0;
  831|  28.9k|        return EXT_RETURN_NOT_SENT;
  832|  28.9k|    }
  833|      0|    edsess = s->session->ext.max_early_data != 0 ? s->session : psksess;
  ------------------
  |  Branch (833:14): [True: 0, False: 0]
  ------------------
  834|      0|    s->max_early_data = edsess->ext.max_early_data;
  835|       |
  836|      0|    if (edsess->ext.hostname != NULL) {
  ------------------
  |  Branch (836:9): [True: 0, False: 0]
  ------------------
  837|      0|        if (s->ext.hostname == NULL
  ------------------
  |  Branch (837:13): [True: 0, False: 0]
  ------------------
  838|      0|                || (s->ext.hostname != NULL
  ------------------
  |  Branch (838:21): [True: 0, False: 0]
  ------------------
  839|      0|                    && strcmp(s->ext.hostname, edsess->ext.hostname) != 0)) {
  ------------------
  |  Branch (839:24): [True: 0, False: 0]
  ------------------
  840|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  841|      0|                     SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA,
  842|      0|                     SSL_R_INCONSISTENT_EARLY_DATA_SNI);
  843|      0|            return EXT_RETURN_FAIL;
  844|      0|        }
  845|      0|    }
  846|       |
  847|      0|    if ((s->ext.alpn == NULL && edsess->ext.alpn_selected != NULL)) {
  ------------------
  |  Branch (847:10): [True: 0, False: 0]
  |  Branch (847:33): [True: 0, False: 0]
  ------------------
  848|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  849|      0|                 SSL_R_INCONSISTENT_EARLY_DATA_ALPN);
  850|      0|        return EXT_RETURN_FAIL;
  851|      0|    }
  852|       |
  853|       |    /*
  854|       |     * Verify that we are offering an ALPN protocol consistent with the early
  855|       |     * data.
  856|       |     */
  857|      0|    if (edsess->ext.alpn_selected != NULL) {
  ------------------
  |  Branch (857:9): [True: 0, False: 0]
  ------------------
  858|      0|        PACKET prots, alpnpkt;
  859|      0|        int found = 0;
  860|       |
  861|      0|        if (!PACKET_buf_init(&prots, s->ext.alpn, s->ext.alpn_len)) {
  ------------------
  |  Branch (861:13): [True: 0, False: 0]
  ------------------
  862|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  863|      0|                     SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA, ERR_R_INTERNAL_ERROR);
  864|      0|            return EXT_RETURN_FAIL;
  865|      0|        }
  866|      0|        while (PACKET_get_length_prefixed_1(&prots, &alpnpkt)) {
  ------------------
  |  Branch (866:16): [True: 0, False: 0]
  ------------------
  867|      0|            if (PACKET_equal(&alpnpkt, edsess->ext.alpn_selected,
  ------------------
  |  Branch (867:17): [True: 0, False: 0]
  ------------------
  868|      0|                             edsess->ext.alpn_selected_len)) {
  869|      0|                found = 1;
  870|      0|                break;
  871|      0|            }
  872|      0|        }
  873|      0|        if (!found) {
  ------------------
  |  Branch (873:13): [True: 0, False: 0]
  ------------------
  874|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  875|      0|                     SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA,
  876|      0|                     SSL_R_INCONSISTENT_EARLY_DATA_ALPN);
  877|      0|            return EXT_RETURN_FAIL;
  878|      0|        }
  879|      0|    }
  880|       |
  881|      0|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_early_data)
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (881:9): [True: 0, False: 0]
  ------------------
  882|      0|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (882:16): [True: 0, False: 0]
  ------------------
  883|      0|            || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (883:16): [True: 0, False: 0]
  ------------------
  884|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  885|      0|                 ERR_R_INTERNAL_ERROR);
  886|      0|        return EXT_RETURN_FAIL;
  887|      0|    }
  888|       |
  889|       |    /*
  890|       |     * We set this to rejected here. Later, if the server acknowledges the
  891|       |     * extension, we set it to accepted.
  892|       |     */
  893|      0|    s->ext.early_data = SSL_EARLY_DATA_REJECTED;
  ------------------
  |  | 1850|      0|# define SSL_EARLY_DATA_REJECTED    1
  ------------------
  894|      0|    s->ext.early_data_ok = 1;
  895|       |
  896|      0|    return EXT_RETURN_SENT;
  897|      0|}
tls_construct_ctos_padding:
  919|  28.9k|{
  920|  28.9k|    unsigned char *padbytes;
  921|  28.9k|    size_t hlen;
  922|       |
  923|  28.9k|    if ((s->options & SSL_OP_TLSEXT_PADDING) == 0)
  ------------------
  |  |  307|  28.9k|# define SSL_OP_TLSEXT_PADDING                           0x00000010U
  ------------------
  |  Branch (923:9): [True: 28.9k, False: 0]
  ------------------
  924|  28.9k|        return EXT_RETURN_NOT_SENT;
  925|       |
  926|       |    /*
  927|       |     * Add padding to workaround bugs in F5 terminators. See RFC7685.
  928|       |     * This code calculates the length of all extensions added so far but
  929|       |     * excludes the PSK extension (because that MUST be written last). Therefore
  930|       |     * this extension MUST always appear second to last.
  931|       |     */
  932|      0|    if (!WPACKET_get_total_written(pkt, &hlen)) {
  ------------------
  |  Branch (932:9): [True: 0, False: 0]
  ------------------
  933|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_PADDING,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  934|      0|                 ERR_R_INTERNAL_ERROR);
  935|      0|        return EXT_RETURN_FAIL;
  936|      0|    }
  937|       |
  938|       |    /*
  939|       |     * If we're going to send a PSK then that will be written out after this
  940|       |     * extension, so we need to calculate how long it is going to be.
  941|       |     */
  942|      0|    if (s->session->ssl_version == TLS1_3_VERSION
  ------------------
  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  ------------------
  |  Branch (942:9): [True: 0, False: 0]
  ------------------
  943|      0|            && s->session->ext.ticklen != 0
  ------------------
  |  Branch (943:16): [True: 0, False: 0]
  ------------------
  944|      0|            && s->session->cipher != NULL) {
  ------------------
  |  Branch (944:16): [True: 0, False: 0]
  ------------------
  945|      0|        const EVP_MD *md = ssl_md(s->session->cipher->algorithm2);
  946|       |
  947|      0|        if (md != NULL) {
  ------------------
  |  Branch (947:13): [True: 0, False: 0]
  ------------------
  948|       |            /*
  949|       |             * Add the fixed PSK overhead, the identity length and the binder
  950|       |             * length.
  951|       |             */
  952|      0|            hlen +=  PSK_PRE_BINDER_OVERHEAD + s->session->ext.ticklen
  ------------------
  |  |  914|      0|#define PSK_PRE_BINDER_OVERHEAD (2 + 2 + 2 + 2 + 4 + 2 + 1)
  ------------------
  953|      0|                     + EVP_MD_size(md);
  954|      0|        }
  955|      0|    }
  956|       |
  957|      0|    if (hlen > F5_WORKAROUND_MIN_MSG_LEN && hlen < F5_WORKAROUND_MAX_MSG_LEN) {
  ------------------
  |  |  899|      0|#define F5_WORKAROUND_MIN_MSG_LEN   0xff
  ------------------
                  if (hlen > F5_WORKAROUND_MIN_MSG_LEN && hlen < F5_WORKAROUND_MAX_MSG_LEN) {
  ------------------
  |  |  900|      0|#define F5_WORKAROUND_MAX_MSG_LEN   0x200
  ------------------
  |  Branch (957:9): [True: 0, False: 0]
  |  Branch (957:45): [True: 0, False: 0]
  ------------------
  958|       |        /* Calculate the amount of padding we need to add */
  959|      0|        hlen = F5_WORKAROUND_MAX_MSG_LEN - hlen;
  ------------------
  |  |  900|      0|#define F5_WORKAROUND_MAX_MSG_LEN   0x200
  ------------------
  960|       |
  961|       |        /*
  962|       |         * Take off the size of extension header itself (2 bytes for type and
  963|       |         * 2 bytes for length bytes), but ensure that the extension is at least
  964|       |         * 1 byte long so as not to have an empty extension last (WebSphere 7.x,
  965|       |         * 8.x are intolerant of that condition)
  966|       |         */
  967|      0|        if (hlen > 4)
  ------------------
  |  Branch (967:13): [True: 0, False: 0]
  ------------------
  968|      0|            hlen -= 4;
  969|      0|        else
  970|      0|            hlen = 1;
  971|       |
  972|      0|        if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_padding)
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (972:13): [True: 0, False: 0]
  ------------------
  973|      0|                || !WPACKET_sub_allocate_bytes_u16(pkt, hlen, &padbytes)) {
  ------------------
  |  |  760|      0|    WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 2)
  ------------------
  |  Branch (973:20): [True: 0, False: 0]
  ------------------
  974|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_PADDING,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  975|      0|                     ERR_R_INTERNAL_ERROR);
  976|      0|            return EXT_RETURN_FAIL;
  977|      0|        }
  978|      0|        memset(padbytes, 0, hlen);
  979|      0|    }
  980|       |
  981|      0|    return EXT_RETURN_SENT;
  982|      0|}
tls_construct_ctos_psk:
  989|  28.9k|{
  990|  28.9k|#ifndef OPENSSL_NO_TLS1_3
  991|  28.9k|    uint32_t now, agesec, agems = 0;
  992|  28.9k|    size_t reshashsize = 0, pskhashsize = 0, binderoffset, msglen;
  993|  28.9k|    unsigned char *resbinder = NULL, *pskbinder = NULL, *msgstart = NULL;
  994|  28.9k|    const EVP_MD *handmd = NULL, *mdres = NULL, *mdpsk = NULL;
  995|  28.9k|    int dores = 0;
  996|       |
  997|  28.9k|    s->ext.tick_identity = 0;
  998|       |
  999|       |    /*
 1000|       |     * Note: At this stage of the code we only support adding a single
 1001|       |     * resumption PSK. If we add support for multiple PSKs then the length
 1002|       |     * calculations in the padding extension will need to be adjusted.
 1003|       |     */
 1004|       |
 1005|       |    /*
 1006|       |     * If this is an incompatible or new session then we have nothing to resume
 1007|       |     * so don't add this extension.
 1008|       |     */
 1009|  28.9k|    if (s->session->ssl_version != TLS1_3_VERSION
  ------------------
  |  |   30|  57.9k|# define TLS1_3_VERSION                  0x0304
  ------------------
  |  Branch (1009:9): [True: 0, False: 28.9k]
  ------------------
 1010|  28.9k|            || (s->session->ext.ticklen == 0 && s->psksession == NULL))
  ------------------
  |  Branch (1010:17): [True: 28.9k, False: 0]
  |  Branch (1010:49): [True: 28.9k, False: 0]
  ------------------
 1011|  28.9k|        return EXT_RETURN_NOT_SENT;
 1012|       |
 1013|      0|    if (s->hello_retry_request == SSL_HRR_PENDING)
  ------------------
  |  Branch (1013:9): [True: 0, False: 0]
  ------------------
 1014|      0|        handmd = ssl_handshake_md(s);
 1015|       |
 1016|      0|    if (s->session->ext.ticklen != 0) {
  ------------------
  |  Branch (1016:9): [True: 0, False: 0]
  ------------------
 1017|       |        /* Get the digest associated with the ciphersuite in the session */
 1018|      0|        if (s->session->cipher == NULL) {
  ------------------
  |  Branch (1018:13): [True: 0, False: 0]
  ------------------
 1019|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_PSK,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1020|      0|                     ERR_R_INTERNAL_ERROR);
 1021|      0|            return EXT_RETURN_FAIL;
 1022|      0|        }
 1023|      0|        mdres = ssl_md(s->session->cipher->algorithm2);
 1024|      0|        if (mdres == NULL) {
  ------------------
  |  Branch (1024:13): [True: 0, False: 0]
  ------------------
 1025|       |            /*
 1026|       |             * Don't recognize this cipher so we can't use the session.
 1027|       |             * Ignore it
 1028|       |             */
 1029|      0|            goto dopsksess;
 1030|      0|        }
 1031|       |
 1032|      0|        if (s->hello_retry_request == SSL_HRR_PENDING && mdres != handmd) {
  ------------------
  |  Branch (1032:13): [True: 0, False: 0]
  |  Branch (1032:58): [True: 0, False: 0]
  ------------------
 1033|       |            /*
 1034|       |             * Selected ciphersuite hash does not match the hash for the session
 1035|       |             * so we can't use it.
 1036|       |             */
 1037|      0|            goto dopsksess;
 1038|      0|        }
 1039|       |
 1040|       |        /*
 1041|       |         * Technically the C standard just says time() returns a time_t and says
 1042|       |         * nothing about the encoding of that type. In practice most
 1043|       |         * implementations follow POSIX which holds it as an integral type in
 1044|       |         * seconds since epoch. We've already made the assumption that we can do
 1045|       |         * this in multiple places in the code, so portability shouldn't be an
 1046|       |         * issue.
 1047|       |         */
 1048|      0|        now = (uint32_t)time(NULL);
 1049|      0|        agesec = now - (uint32_t)s->session->time;
 1050|       |        /*
 1051|       |         * We calculate the age in seconds but the server may work in ms. Due to
 1052|       |         * rounding errors we could overestimate the age by up to 1s. It is
 1053|       |         * better to underestimate it. Otherwise, if the RTT is very short, when
 1054|       |         * the server calculates the age reported by the client it could be
 1055|       |         * bigger than the age calculated on the server - which should never
 1056|       |         * happen.
 1057|       |         */
 1058|      0|        if (agesec > 0)
  ------------------
  |  Branch (1058:13): [True: 0, False: 0]
  ------------------
 1059|      0|            agesec--;
 1060|       |
 1061|      0|        if (s->session->ext.tick_lifetime_hint < agesec) {
  ------------------
  |  Branch (1061:13): [True: 0, False: 0]
  ------------------
 1062|       |            /* Ticket is too old. Ignore it. */
 1063|      0|            goto dopsksess;
 1064|      0|        }
 1065|       |
 1066|       |        /*
 1067|       |         * Calculate age in ms. We're just doing it to nearest second. Should be
 1068|       |         * good enough.
 1069|       |         */
 1070|      0|        agems = agesec * (uint32_t)1000;
 1071|       |
 1072|      0|        if (agesec != 0 && agems / (uint32_t)1000 != agesec) {
  ------------------
  |  Branch (1072:13): [True: 0, False: 0]
  |  Branch (1072:28): [True: 0, False: 0]
  ------------------
 1073|       |            /*
 1074|       |             * Overflow. Shouldn't happen unless this is a *really* old session.
 1075|       |             * If so we just ignore it.
 1076|       |             */
 1077|      0|            goto dopsksess;
 1078|      0|        }
 1079|       |
 1080|       |        /*
 1081|       |         * Obfuscate the age. Overflow here is fine, this addition is supposed
 1082|       |         * to be mod 2^32.
 1083|       |         */
 1084|      0|        agems += s->session->ext.tick_age_add;
 1085|       |
 1086|      0|        reshashsize = EVP_MD_size(mdres);
 1087|      0|        s->ext.tick_identity++;
 1088|      0|        dores = 1;
 1089|      0|    }
 1090|       |
 1091|      0| dopsksess:
 1092|      0|    if (!dores && s->psksession == NULL)
  ------------------
  |  Branch (1092:9): [True: 0, False: 0]
  |  Branch (1092:19): [True: 0, False: 0]
  ------------------
 1093|      0|        return EXT_RETURN_NOT_SENT;
 1094|       |
 1095|      0|    if (s->psksession != NULL) {
  ------------------
  |  Branch (1095:9): [True: 0, False: 0]
  ------------------
 1096|      0|        mdpsk = ssl_md(s->psksession->cipher->algorithm2);
 1097|      0|        if (mdpsk == NULL) {
  ------------------
  |  Branch (1097:13): [True: 0, False: 0]
  ------------------
 1098|       |            /*
 1099|       |             * Don't recognize this cipher so we can't use the session.
 1100|       |             * If this happens it's an application bug.
 1101|       |             */
 1102|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_PSK,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1103|      0|                     SSL_R_BAD_PSK);
 1104|      0|            return EXT_RETURN_FAIL;
 1105|      0|        }
 1106|       |
 1107|      0|        if (s->hello_retry_request == SSL_HRR_PENDING && mdpsk != handmd) {
  ------------------
  |  Branch (1107:13): [True: 0, False: 0]
  |  Branch (1107:58): [True: 0, False: 0]
  ------------------
 1108|       |            /*
 1109|       |             * Selected ciphersuite hash does not match the hash for the PSK
 1110|       |             * session. This is an application bug.
 1111|       |             */
 1112|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_PSK,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1113|      0|                     SSL_R_BAD_PSK);
 1114|      0|            return EXT_RETURN_FAIL;
 1115|      0|        }
 1116|       |
 1117|      0|        pskhashsize = EVP_MD_size(mdpsk);
 1118|      0|    }
 1119|       |
 1120|       |    /* Create the extension, but skip over the binder for now */
 1121|      0|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_psk)
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (1121:9): [True: 0, False: 0]
  ------------------
 1122|      0|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (1122:16): [True: 0, False: 0]
  ------------------
 1123|      0|            || !WPACKET_start_sub_packet_u16(pkt)) {
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (1123:16): [True: 0, False: 0]
  ------------------
 1124|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_PSK,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1125|      0|                 ERR_R_INTERNAL_ERROR);
 1126|      0|        return EXT_RETURN_FAIL;
 1127|      0|    }
 1128|       |
 1129|      0|    if (dores) {
  ------------------
  |  Branch (1129:9): [True: 0, False: 0]
  ------------------
 1130|      0|        if (!WPACKET_sub_memcpy_u16(pkt, s->session->ext.tick,
  ------------------
  |  |  847|      0|    WPACKET_sub_memcpy__((pkt), (src), (len), 2)
  ------------------
  |  Branch (1130:13): [True: 0, False: 0]
  ------------------
 1131|      0|                                           s->session->ext.ticklen)
 1132|      0|                || !WPACKET_put_bytes_u32(pkt, agems)) {
  ------------------
  |  |  824|      0|    WPACKET_put_bytes__((pkt), (val), 4)
  ------------------
  |  Branch (1132:20): [True: 0, False: 0]
  ------------------
 1133|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_PSK,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1134|      0|                     ERR_R_INTERNAL_ERROR);
 1135|      0|            return EXT_RETURN_FAIL;
 1136|      0|        }
 1137|      0|    }
 1138|       |
 1139|      0|    if (s->psksession != NULL) {
  ------------------
  |  Branch (1139:9): [True: 0, False: 0]
  ------------------
 1140|      0|        if (!WPACKET_sub_memcpy_u16(pkt, s->psksession_id,
  ------------------
  |  |  847|      0|    WPACKET_sub_memcpy__((pkt), (src), (len), 2)
  ------------------
  |  Branch (1140:13): [True: 0, False: 0]
  ------------------
 1141|      0|                                    s->psksession_id_len)
 1142|      0|                || !WPACKET_put_bytes_u32(pkt, 0)) {
  ------------------
  |  |  824|      0|    WPACKET_put_bytes__((pkt), (val), 4)
  ------------------
  |  Branch (1142:20): [True: 0, False: 0]
  ------------------
 1143|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_PSK,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1144|      0|                     ERR_R_INTERNAL_ERROR);
 1145|      0|            return EXT_RETURN_FAIL;
 1146|      0|        }
 1147|      0|        s->ext.tick_identity++;
 1148|      0|    }
 1149|       |
 1150|      0|    if (!WPACKET_close(pkt)
  ------------------
  |  Branch (1150:9): [True: 0, False: 0]
  ------------------
 1151|      0|            || !WPACKET_get_total_written(pkt, &binderoffset)
  ------------------
  |  Branch (1151:16): [True: 0, False: 0]
  ------------------
 1152|      0|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (1152:16): [True: 0, False: 0]
  ------------------
 1153|      0|            || (dores
  ------------------
  |  Branch (1153:17): [True: 0, False: 0]
  ------------------
 1154|      0|                && !WPACKET_sub_allocate_bytes_u8(pkt, reshashsize, &resbinder))
  ------------------
  |  |  758|      0|    WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 1)
  ------------------
  |  Branch (1154:20): [True: 0, False: 0]
  ------------------
 1155|      0|            || (s->psksession != NULL
  ------------------
  |  Branch (1155:17): [True: 0, False: 0]
  ------------------
 1156|      0|                && !WPACKET_sub_allocate_bytes_u8(pkt, pskhashsize, &pskbinder))
  ------------------
  |  |  758|      0|    WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 1)
  ------------------
  |  Branch (1156:20): [True: 0, False: 0]
  ------------------
 1157|      0|            || !WPACKET_close(pkt)
  ------------------
  |  Branch (1157:16): [True: 0, False: 0]
  ------------------
 1158|      0|            || !WPACKET_close(pkt)
  ------------------
  |  Branch (1158:16): [True: 0, False: 0]
  ------------------
 1159|      0|            || !WPACKET_get_total_written(pkt, &msglen)
  ------------------
  |  Branch (1159:16): [True: 0, False: 0]
  ------------------
 1160|       |               /*
 1161|       |                * We need to fill in all the sub-packet lengths now so we can
 1162|       |                * calculate the HMAC of the message up to the binders
 1163|       |                */
 1164|      0|            || !WPACKET_fill_lengths(pkt)) {
  ------------------
  |  Branch (1164:16): [True: 0, False: 0]
  ------------------
 1165|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_PSK,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1166|      0|                 ERR_R_INTERNAL_ERROR);
 1167|      0|        return EXT_RETURN_FAIL;
 1168|      0|    }
 1169|       |
 1170|      0|    msgstart = WPACKET_get_curr(pkt) - msglen;
 1171|       |
 1172|      0|    if (dores
  ------------------
  |  Branch (1172:9): [True: 0, False: 0]
  ------------------
 1173|      0|            && tls_psk_do_binder(s, mdres, msgstart, binderoffset, NULL,
  ------------------
  |  Branch (1173:16): [True: 0, False: 0]
  ------------------
 1174|      0|                                 resbinder, s->session, 1, 0) != 1) {
 1175|       |        /* SSLfatal() already called */
 1176|      0|        return EXT_RETURN_FAIL;
 1177|      0|    }
 1178|       |
 1179|      0|    if (s->psksession != NULL
  ------------------
  |  Branch (1179:9): [True: 0, False: 0]
  ------------------
 1180|      0|            && tls_psk_do_binder(s, mdpsk, msgstart, binderoffset, NULL,
  ------------------
  |  Branch (1180:16): [True: 0, False: 0]
  ------------------
 1181|      0|                                 pskbinder, s->psksession, 1, 1) != 1) {
 1182|       |        /* SSLfatal() already called */
 1183|      0|        return EXT_RETURN_FAIL;
 1184|      0|    }
 1185|       |
 1186|      0|    return EXT_RETURN_SENT;
 1187|       |#else
 1188|       |    return EXT_RETURN_NOT_SENT;
 1189|       |#endif
 1190|      0|}
tls_construct_ctos_post_handshake_auth:
 1195|  28.9k|{
 1196|  28.9k|#ifndef OPENSSL_NO_TLS1_3
 1197|  28.9k|    if (!s->pha_enabled)
  ------------------
  |  Branch (1197:9): [True: 28.9k, False: 0]
  ------------------
 1198|  28.9k|        return EXT_RETURN_NOT_SENT;
 1199|       |
 1200|       |    /* construct extension - 0 length, no contents */
 1201|      0|    if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_post_handshake_auth)
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (1201:9): [True: 0, False: 0]
  ------------------
 1202|      0|            || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (1202:16): [True: 0, False: 0]
  ------------------
 1203|      0|            || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (1203:16): [True: 0, False: 0]
  ------------------
 1204|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1205|      0|                 SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH,
 1206|      0|                 ERR_R_INTERNAL_ERROR);
 1207|      0|        return EXT_RETURN_FAIL;
 1208|      0|    }
 1209|       |
 1210|      0|    s->post_handshake_auth = SSL_PHA_EXT_SENT;
 1211|       |
 1212|      0|    return EXT_RETURN_SENT;
 1213|       |#else
 1214|       |    return EXT_RETURN_NOT_SENT;
 1215|       |#endif
 1216|      0|}
extensions_clnt.c:use_ecc:
  117|  57.9k|{
  118|  57.9k|    int i, end, ret = 0;
  119|  57.9k|    unsigned long alg_k, alg_a;
  120|  57.9k|    STACK_OF(SSL_CIPHER) *cipher_stack = NULL;
  ------------------
  |  |   20|  57.9k|# define STACK_OF(type) struct stack_st_##type
  ------------------
  121|       |
  122|       |    /* See if we support any ECC ciphersuites */
  123|  57.9k|    if (s->version == SSL3_VERSION)
  ------------------
  |  |  209|  57.9k|# define SSL3_VERSION                    0x0300
  ------------------
  |  Branch (123:9): [True: 0, False: 57.9k]
  ------------------
  124|      0|        return 0;
  125|       |
  126|  57.9k|    cipher_stack = SSL_get1_supported_ciphers(s);
  127|  57.9k|    end = sk_SSL_CIPHER_num(cipher_stack);
  128|  57.9k|    for (i = 0; i < end; i++) {
  ------------------
  |  Branch (128:17): [True: 57.9k, False: 0]
  ------------------
  129|  57.9k|        const SSL_CIPHER *c = sk_SSL_CIPHER_value(cipher_stack, i);
  130|       |
  131|  57.9k|        alg_k = c->algorithm_mkey;
  132|  57.9k|        alg_a = c->algorithm_auth;
  133|  57.9k|        if ((alg_k & (SSL_kECDHE | SSL_kECDHEPSK))
  ------------------
  |  |  166|  57.9k|# define SSL_kECDHE              0x00000004U
  ------------------
                      if ((alg_k & (SSL_kECDHE | SSL_kECDHEPSK))
  ------------------
  |  |  177|  57.9k|# define SSL_kECDHEPSK           0x00000080U
  ------------------
  |  Branch (133:13): [True: 0, False: 57.9k]
  ------------------
  134|  57.9k|                || (alg_a & SSL_aECDSA)
  ------------------
  |  |  195|  57.9k|# define SSL_aECDSA              0x00000008U
  ------------------
  |  Branch (134:20): [True: 0, False: 57.9k]
  ------------------
  135|  57.9k|                || c->min_tls >= TLS1_3_VERSION) {
  ------------------
  |  |   30|  57.9k|# define TLS1_3_VERSION                  0x0304
  ------------------
  |  Branch (135:20): [True: 57.9k, False: 0]
  ------------------
  136|  57.9k|            ret = 1;
  137|  57.9k|            break;
  138|  57.9k|        }
  139|  57.9k|    }
  140|       |
  141|  57.9k|    sk_SSL_CIPHER_free(cipher_stack);
  142|  57.9k|    return ret;
  143|  57.9k|}
extensions_clnt.c:add_key_share:
  586|  28.9k|{
  587|  28.9k|    unsigned char *encoded_point = NULL;
  588|  28.9k|    EVP_PKEY *key_share_key = NULL;
  589|  28.9k|    size_t encodedlen;
  590|       |
  591|  28.9k|    if (s->s3->tmp.pkey != NULL) {
  ------------------
  |  Branch (591:9): [True: 0, False: 28.9k]
  ------------------
  592|      0|        if (!ossl_assert(s->hello_retry_request == SSL_HRR_PENDING)) {
  ------------------
  |  |   40|      0|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|      0|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (592:13): [True: 0, False: 0]
  ------------------
  593|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_ADD_KEY_SHARE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  594|      0|                     ERR_R_INTERNAL_ERROR);
  595|      0|            return 0;
  596|      0|        }
  597|       |        /*
  598|       |         * Could happen if we got an HRR that wasn't requesting a new key_share
  599|       |         */
  600|      0|        key_share_key = s->s3->tmp.pkey;
  601|  28.9k|    } else {
  602|  28.9k|        key_share_key = ssl_generate_pkey_group(s, curve_id);
  603|  28.9k|        if (key_share_key == NULL) {
  ------------------
  |  Branch (603:13): [True: 0, False: 28.9k]
  ------------------
  604|       |            /* SSLfatal() already called */
  605|      0|            return 0;
  606|      0|        }
  607|  28.9k|    }
  608|       |
  609|       |    /* Encode the public key. */
  610|  28.9k|    encodedlen = EVP_PKEY_get1_tls_encodedpoint(key_share_key,
  611|  28.9k|                                                &encoded_point);
  612|  28.9k|    if (encodedlen == 0) {
  ------------------
  |  Branch (612:9): [True: 0, False: 28.9k]
  ------------------
  613|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_ADD_KEY_SHARE, ERR_R_EC_LIB);
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  614|      0|        goto err;
  615|      0|    }
  616|       |
  617|       |    /* Create KeyShareEntry */
  618|  28.9k|    if (!WPACKET_put_bytes_u16(pkt, curve_id)
  ------------------
  |  |  820|  57.9k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (618:9): [True: 0, False: 28.9k]
  ------------------
  619|  28.9k|            || !WPACKET_sub_memcpy_u16(pkt, encoded_point, encodedlen)) {
  ------------------
  |  |  847|  28.9k|    WPACKET_sub_memcpy__((pkt), (src), (len), 2)
  ------------------
  |  Branch (619:16): [True: 0, False: 28.9k]
  ------------------
  620|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_ADD_KEY_SHARE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  621|      0|                 ERR_R_INTERNAL_ERROR);
  622|      0|        goto err;
  623|      0|    }
  624|       |
  625|       |    /*
  626|       |     * TODO(TLS1.3): When changing to send more than one key_share we're
  627|       |     * going to need to be able to save more than one EVP_PKEY. For now
  628|       |     * we reuse the existing tmp.pkey
  629|       |     */
  630|  28.9k|    s->s3->tmp.pkey = key_share_key;
  631|  28.9k|    s->s3->group_id = curve_id;
  632|  28.9k|    OPENSSL_free(encoded_point);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  633|       |
  634|  28.9k|    return 1;
  635|      0| err:
  636|      0|    if (s->s3->tmp.pkey == NULL)
  ------------------
  |  Branch (636:9): [True: 0, False: 0]
  ------------------
  637|      0|        EVP_PKEY_free(key_share_key);
  638|      0|    OPENSSL_free(encoded_point);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  639|      0|    return 0;
  640|  28.9k|}

custom_ext_init:
  104|  28.9k|{
  105|  28.9k|    size_t i;
  106|  28.9k|    custom_ext_method *meth = exts->meths;
  107|       |
  108|  28.9k|    for (i = 0; i < exts->meths_count; i++, meth++)
  ------------------
  |  Branch (108:17): [True: 0, False: 28.9k]
  ------------------
  109|      0|        meth->ext_flags = 0;
  110|  28.9k|}
custom_ext_add:
  175|  28.9k|{
  176|  28.9k|    custom_ext_methods *exts = &s->cert->custext;
  177|  28.9k|    custom_ext_method *meth;
  178|  28.9k|    size_t i;
  179|  28.9k|    int al;
  180|       |
  181|  28.9k|    for (i = 0; i < exts->meths_count; i++) {
  ------------------
  |  Branch (181:17): [True: 0, False: 28.9k]
  ------------------
  182|      0|        const unsigned char *out = NULL;
  183|      0|        size_t outlen = 0;
  184|       |
  185|      0|        meth = exts->meths + i;
  186|       |
  187|      0|        if (!should_add_extension(s, meth->context, context, maxversion))
  ------------------
  |  Branch (187:13): [True: 0, False: 0]
  ------------------
  188|      0|            continue;
  189|       |
  190|      0|        if ((context & (SSL_EXT_TLS1_2_SERVER_HELLO
  ------------------
  |  |  252|      0|#define SSL_EXT_TLS1_2_SERVER_HELLO             0x0100
  ------------------
  |  Branch (190:13): [True: 0, False: 0]
  ------------------
  191|      0|                        | SSL_EXT_TLS1_3_SERVER_HELLO
  ------------------
  |  |  253|      0|#define SSL_EXT_TLS1_3_SERVER_HELLO             0x0200
  ------------------
  192|      0|                        | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS
  ------------------
  |  |  254|      0|#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS     0x0400
  ------------------
  193|      0|                        | SSL_EXT_TLS1_3_CERTIFICATE
  ------------------
  |  |  256|      0|#define SSL_EXT_TLS1_3_CERTIFICATE              0x1000
  ------------------
  194|      0|                        | SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST)) != 0) {
  ------------------
  |  |  255|      0|#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST      0x0800
  ------------------
  195|       |            /* Only send extensions present in ClientHello. */
  196|      0|            if (!(meth->ext_flags & SSL_EXT_FLAG_RECEIVED))
  ------------------
  |  | 1866|      0|# define SSL_EXT_FLAG_RECEIVED   0x1
  ------------------
  |  Branch (196:17): [True: 0, False: 0]
  ------------------
  197|      0|                continue;
  198|      0|        }
  199|       |        /*
  200|       |         * We skip it if the callback is absent - except for a ClientHello where
  201|       |         * we add an empty extension.
  202|       |         */
  203|      0|        if ((context & SSL_EXT_CLIENT_HELLO) == 0 && meth->add_cb == NULL)
  ------------------
  |  |  250|      0|#define SSL_EXT_CLIENT_HELLO                    0x0080
  ------------------
  |  Branch (203:13): [True: 0, False: 0]
  |  Branch (203:54): [True: 0, False: 0]
  ------------------
  204|      0|            continue;
  205|       |
  206|      0|        if (meth->add_cb != NULL) {
  ------------------
  |  Branch (206:13): [True: 0, False: 0]
  ------------------
  207|      0|            int cb_retval = meth->add_cb(s, meth->ext_type, context, &out,
  208|      0|                                         &outlen, x, chainidx, &al,
  209|      0|                                         meth->add_arg);
  210|       |
  211|      0|            if (cb_retval < 0) {
  ------------------
  |  Branch (211:17): [True: 0, False: 0]
  ------------------
  212|      0|                SSLfatal(s, al, SSL_F_CUSTOM_EXT_ADD, SSL_R_CALLBACK_FAILED);
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  213|      0|                return 0;       /* error */
  214|      0|            }
  215|      0|            if (cb_retval == 0)
  ------------------
  |  Branch (215:17): [True: 0, False: 0]
  ------------------
  216|      0|                continue;       /* skip this extension */
  217|      0|        }
  218|       |
  219|      0|        if (!WPACKET_put_bytes_u16(pkt, meth->ext_type)
  ------------------
  |  |  820|      0|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (219:13): [True: 0, False: 0]
  ------------------
  220|      0|                || !WPACKET_start_sub_packet_u16(pkt)
  ------------------
  |  |  721|      0|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (220:20): [True: 0, False: 0]
  ------------------
  221|      0|                || (outlen > 0 && !WPACKET_memcpy(pkt, out, outlen))
  ------------------
  |  Branch (221:21): [True: 0, False: 0]
  |  Branch (221:35): [True: 0, False: 0]
  ------------------
  222|      0|                || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (222:20): [True: 0, False: 0]
  ------------------
  223|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CUSTOM_EXT_ADD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  224|      0|                     ERR_R_INTERNAL_ERROR);
  225|      0|            return 0;
  226|      0|        }
  227|      0|        if ((context & SSL_EXT_CLIENT_HELLO) != 0) {
  ------------------
  |  |  250|      0|#define SSL_EXT_CLIENT_HELLO                    0x0080
  ------------------
  |  Branch (227:13): [True: 0, False: 0]
  ------------------
  228|       |            /*
  229|       |             * We can't send duplicates: code logic should prevent this.
  230|       |             */
  231|      0|            if (!ossl_assert((meth->ext_flags & SSL_EXT_FLAG_SENT) == 0)) {
  ------------------
  |  |   40|      0|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|      0|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (231:17): [True: 0, False: 0]
  ------------------
  232|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CUSTOM_EXT_ADD,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  233|      0|                         ERR_R_INTERNAL_ERROR);
  234|      0|                return 0;
  235|      0|            }
  236|       |            /*
  237|       |             * Indicate extension has been sent: this is both a sanity check to
  238|       |             * ensure we don't send duplicate extensions and indicates that it
  239|       |             * is not an error if the extension is present in ServerHello.
  240|       |             */
  241|      0|            meth->ext_flags |= SSL_EXT_FLAG_SENT;
  ------------------
  |  | 1871|      0|# define SSL_EXT_FLAG_SENT       0x2
  ------------------
  242|      0|        }
  243|      0|        if (meth->free_cb != NULL)
  ------------------
  |  Branch (243:13): [True: 0, False: 0]
  ------------------
  244|      0|            meth->free_cb(s, meth->ext_type, context, out, meth->add_arg);
  245|      0|    }
  246|  28.9k|    return 1;
  247|  28.9k|}
custom_exts_copy:
  271|  28.9k|{
  272|  28.9k|    size_t i;
  273|  28.9k|    int err = 0;
  274|       |
  275|  28.9k|    if (src->meths_count > 0) {
  ------------------
  |  Branch (275:9): [True: 0, False: 28.9k]
  ------------------
  276|      0|        dst->meths =
  277|      0|            OPENSSL_memdup(src->meths,
  ------------------
  |  |  130|      0|        CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  278|      0|                           sizeof(*src->meths) * src->meths_count);
  279|      0|        if (dst->meths == NULL)
  ------------------
  |  Branch (279:13): [True: 0, False: 0]
  ------------------
  280|      0|            return 0;
  281|      0|        dst->meths_count = src->meths_count;
  282|       |
  283|      0|        for (i = 0; i < src->meths_count; i++) {
  ------------------
  |  Branch (283:21): [True: 0, False: 0]
  ------------------
  284|      0|            custom_ext_method *methsrc = src->meths + i;
  285|      0|            custom_ext_method *methdst = dst->meths + i;
  286|       |
  287|      0|            if (methsrc->add_cb != custom_ext_add_old_cb_wrap)
  ------------------
  |  Branch (287:17): [True: 0, False: 0]
  ------------------
  288|      0|                continue;
  289|       |
  290|       |            /*
  291|       |             * We have found an old style API wrapper. We need to copy the
  292|       |             * arguments too.
  293|       |             */
  294|       |
  295|      0|            if (err) {
  ------------------
  |  Branch (295:17): [True: 0, False: 0]
  ------------------
  296|      0|                methdst->add_arg = NULL;
  297|      0|                methdst->parse_arg = NULL;
  298|      0|                continue;
  299|      0|            }
  300|       |
  301|      0|            methdst->add_arg = OPENSSL_memdup(methsrc->add_arg,
  ------------------
  |  |  130|      0|        CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  302|      0|                                              sizeof(custom_ext_add_cb_wrap));
  303|      0|            methdst->parse_arg = OPENSSL_memdup(methsrc->parse_arg,
  ------------------
  |  |  130|      0|        CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  304|      0|                                            sizeof(custom_ext_parse_cb_wrap));
  305|       |
  306|      0|            if (methdst->add_arg == NULL || methdst->parse_arg == NULL)
  ------------------
  |  Branch (306:17): [True: 0, False: 0]
  |  Branch (306:45): [True: 0, False: 0]
  ------------------
  307|      0|                err = 1;
  308|      0|        }
  309|      0|    }
  310|       |
  311|  28.9k|    if (err) {
  ------------------
  |  Branch (311:9): [True: 0, False: 28.9k]
  ------------------
  312|      0|        custom_exts_free(dst);
  313|      0|        return 0;
  314|      0|    }
  315|       |
  316|  28.9k|    return 1;
  317|  28.9k|}
custom_exts_free:
  320|  57.9k|{
  321|  57.9k|    size_t i;
  322|  57.9k|    custom_ext_method *meth;
  323|       |
  324|  57.9k|    for (i = 0, meth = exts->meths; i < exts->meths_count; i++, meth++) {
  ------------------
  |  Branch (324:37): [True: 0, False: 57.9k]
  ------------------
  325|      0|        if (meth->add_cb != custom_ext_add_old_cb_wrap)
  ------------------
  |  Branch (325:13): [True: 0, False: 0]
  ------------------
  326|      0|            continue;
  327|       |
  328|       |        /* Old style API wrapper. Need to free the arguments too */
  329|      0|        OPENSSL_free(meth->add_arg);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  330|      0|        OPENSSL_free(meth->parse_arg);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  331|      0|    }
  332|  57.9k|    OPENSSL_free(exts->meths);
  ------------------
  |  |  128|  57.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  333|  57.9k|}

SSL_get_state:
   67|  28.9k|{
   68|  28.9k|    return ssl->statem.hand_state;
   69|  28.9k|}
SSL_in_init:
   72|   115k|{
   73|   115k|    return s->statem.in_init;
   74|   115k|}
SSL_in_before:
   82|  57.9k|{
   83|       |    /*
   84|       |     * Historically being "in before" meant before anything had happened. In the
   85|       |     * current code though we remain in the "before" state for a while after we
   86|       |     * have started the handshake process (e.g. as a server waiting for the
   87|       |     * first message to arrive). There "in before" is taken to mean "in before"
   88|       |     * and not started any handshake process yet.
   89|       |     */
   90|  57.9k|    return (s->statem.hand_state == TLS_ST_BEFORE)
  ------------------
  |  Branch (90:12): [True: 57.9k, False: 0]
  ------------------
   91|  57.9k|        && (s->statem.state == MSG_FLOW_UNINITED);
  ------------------
  |  Branch (91:12): [True: 57.9k, False: 0]
  ------------------
   92|  57.9k|}
ossl_statem_clear:
   98|  86.9k|{
   99|  86.9k|    s->statem.state = MSG_FLOW_UNINITED;
  100|  86.9k|    s->statem.hand_state = TLS_ST_BEFORE;
  101|  86.9k|    s->statem.in_init = 1;
  102|  86.9k|    s->statem.no_cert_verify = 0;
  103|  86.9k|}
ossl_statem_get_in_handshake:
  166|  57.9k|{
  167|  57.9k|    return s->statem.in_handshake;
  168|  57.9k|}
ossl_statem_check_finish_init:
  201|  28.9k|{
  202|  28.9k|    if (sending == -1) {
  ------------------
  |  Branch (202:9): [True: 28.9k, False: 0]
  ------------------
  203|  28.9k|        if (s->statem.hand_state == TLS_ST_PENDING_EARLY_DATA_END
  ------------------
  |  Branch (203:13): [True: 0, False: 28.9k]
  ------------------
  204|  28.9k|                || s->statem.hand_state == TLS_ST_EARLY_DATA) {
  ------------------
  |  Branch (204:20): [True: 0, False: 28.9k]
  ------------------
  205|      0|            ossl_statem_set_in_init(s, 1);
  206|      0|            if (s->early_data_state == SSL_EARLY_DATA_WRITE_RETRY) {
  ------------------
  |  Branch (206:17): [True: 0, False: 0]
  ------------------
  207|       |                /*
  208|       |                 * SSL_connect() or SSL_do_handshake() has been called directly.
  209|       |                 * We don't allow any more writing of early data.
  210|       |                 */
  211|      0|                s->early_data_state = SSL_EARLY_DATA_FINISHED_WRITING;
  212|      0|            }
  213|      0|        }
  214|  28.9k|    } else if (!s->server) {
  ------------------
  |  Branch (214:16): [True: 0, False: 0]
  ------------------
  215|      0|        if ((sending && (s->statem.hand_state == TLS_ST_PENDING_EARLY_DATA_END
  ------------------
  |  Branch (215:14): [True: 0, False: 0]
  |  Branch (215:26): [True: 0, False: 0]
  ------------------
  216|      0|                      || s->statem.hand_state == TLS_ST_EARLY_DATA)
  ------------------
  |  Branch (216:26): [True: 0, False: 0]
  ------------------
  217|      0|                  && s->early_data_state != SSL_EARLY_DATA_WRITING)
  ------------------
  |  Branch (217:22): [True: 0, False: 0]
  ------------------
  218|      0|                || (!sending && s->statem.hand_state == TLS_ST_EARLY_DATA)) {
  ------------------
  |  Branch (218:21): [True: 0, False: 0]
  |  Branch (218:33): [True: 0, False: 0]
  ------------------
  219|      0|            ossl_statem_set_in_init(s, 1);
  220|       |            /*
  221|       |             * SSL_write() has been called directly. We don't allow any more
  222|       |             * writing of early data.
  223|       |             */
  224|      0|            if (sending && s->early_data_state == SSL_EARLY_DATA_WRITE_RETRY)
  ------------------
  |  Branch (224:17): [True: 0, False: 0]
  |  Branch (224:28): [True: 0, False: 0]
  ------------------
  225|      0|                s->early_data_state = SSL_EARLY_DATA_FINISHED_WRITING;
  226|      0|        }
  227|      0|    } else {
  228|      0|        if (s->early_data_state == SSL_EARLY_DATA_FINISHED_READING
  ------------------
  |  Branch (228:13): [True: 0, False: 0]
  ------------------
  229|      0|                && s->statem.hand_state == TLS_ST_EARLY_DATA)
  ------------------
  |  Branch (229:20): [True: 0, False: 0]
  ------------------
  230|      0|            ossl_statem_set_in_init(s, 1);
  231|      0|    }
  232|  28.9k|}
ossl_statem_connect:
  249|  28.9k|{
  250|  28.9k|    return state_machine(s, 0);
  251|  28.9k|}
statem_flush:
  901|  28.9k|{
  902|  28.9k|    s->rwstate = SSL_WRITING;
  ------------------
  |  |  893|  28.9k|# define SSL_WRITING            2
  ------------------
  903|  28.9k|    if (BIO_flush(s->wbio) <= 0) {
  ------------------
  |  |  489|  28.9k|# define BIO_flush(b)            (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL)
  |  |  ------------------
  |  |  |  |   81|  28.9k|# define BIO_CTRL_FLUSH          11/* opt - 'flush' buffered output */
  |  |  ------------------
  ------------------
  |  Branch (903:9): [True: 0, False: 28.9k]
  ------------------
  904|      0|        return 0;
  905|      0|    }
  906|  28.9k|    s->rwstate = SSL_NOTHING;
  ------------------
  |  |  892|  28.9k|# define SSL_NOTHING            1
  ------------------
  907|       |
  908|  28.9k|    return 1;
  909|  28.9k|}
statem.c:state_machine:
  299|  28.9k|{
  300|  28.9k|    BUF_MEM *buf = NULL;
  301|  28.9k|    void (*cb) (const SSL *ssl, int type, int val) = NULL;
  302|  28.9k|    OSSL_STATEM *st = &s->statem;
  303|  28.9k|    int ret = -1;
  304|  28.9k|    int ssret;
  305|       |
  306|  28.9k|    if (st->state == MSG_FLOW_ERROR) {
  ------------------
  |  Branch (306:9): [True: 0, False: 28.9k]
  ------------------
  307|       |        /* Shouldn't have been called if we're already in the error state */
  308|      0|        return -1;
  309|      0|    }
  310|       |
  311|  28.9k|    ERR_clear_error();
  312|  28.9k|    clear_sys_error();
  ------------------
  |  |   76|  28.9k|# define clear_sys_error()       errno=0
  ------------------
  313|       |
  314|  28.9k|    cb = get_callback(s);
  315|       |
  316|  28.9k|    st->in_handshake++;
  317|  28.9k|    if (!SSL_in_init(s) || SSL_in_before(s)) {
  ------------------
  |  Branch (317:9): [True: 0, False: 28.9k]
  |  Branch (317:28): [True: 28.9k, False: 0]
  ------------------
  318|       |        /*
  319|       |         * If we are stateless then we already called SSL_clear() - don't do
  320|       |         * it again and clear the STATELESS flag itself.
  321|       |         */
  322|  28.9k|        if ((s->s3->flags & TLS1_FLAGS_STATELESS) == 0 && !SSL_clear(s))
  ------------------
  |  |  293|  28.9k|# define TLS1_FLAGS_STATELESS                    0x0800
  ------------------
  |  Branch (322:13): [True: 28.9k, False: 0]
  |  Branch (322:59): [True: 0, False: 28.9k]
  ------------------
  323|      0|            return -1;
  324|  28.9k|    }
  325|       |#ifndef OPENSSL_NO_SCTP
  326|       |    if (SSL_IS_DTLS(s) && BIO_dgram_is_sctp(SSL_get_wbio(s))) {
  327|       |        /*
  328|       |         * Notify SCTP BIO socket to enter handshake mode and prevent stream
  329|       |         * identifier other than 0.
  330|       |         */
  331|       |        BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE,
  332|       |                 st->in_handshake, NULL);
  333|       |    }
  334|       |#endif
  335|       |
  336|       |    /* Initialise state machine */
  337|  28.9k|    if (st->state == MSG_FLOW_UNINITED
  ------------------
  |  Branch (337:9): [True: 28.9k, False: 0]
  ------------------
  338|  28.9k|            || st->state == MSG_FLOW_FINISHED) {
  ------------------
  |  Branch (338:16): [True: 0, False: 0]
  ------------------
  339|  28.9k|        if (st->state == MSG_FLOW_UNINITED) {
  ------------------
  |  Branch (339:13): [True: 28.9k, False: 0]
  ------------------
  340|  28.9k|            st->hand_state = TLS_ST_BEFORE;
  341|  28.9k|            st->request_state = TLS_ST_BEFORE;
  342|  28.9k|        }
  343|       |
  344|  28.9k|        s->server = server;
  345|  28.9k|        if (cb != NULL) {
  ------------------
  |  Branch (345:13): [True: 0, False: 28.9k]
  ------------------
  346|      0|            if (SSL_IS_FIRST_HANDSHAKE(s) || !SSL_IS_TLS13(s))
  ------------------
  |  |  333|      0|# define SSL_IS_FIRST_HANDSHAKE(S) ((s)->s3->tmp.finish_md_len == 0 \
  |  |  ------------------
  |  |  |  Branch (333:37): [True: 0, False: 0]
  |  |  ------------------
  |  |  334|      0|                                    || (s)->s3->tmp.peer_finish_md_len == 0)
  |  |  ------------------
  |  |  |  Branch (334:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                          if (SSL_IS_FIRST_HANDSHAKE(s) || !SSL_IS_TLS13(s))
  ------------------
  |  |  322|      0|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 0, False: 0]
  |  |  ------------------
  |  |  324|      0|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  347|      0|                cb(s, SSL_CB_HANDSHAKE_START, 1);
  ------------------
  |  | 1068|      0|# define SSL_CB_HANDSHAKE_START          0x10
  ------------------
  348|      0|        }
  349|       |
  350|       |        /*
  351|       |         * Fatal errors in this block don't send an alert because we have
  352|       |         * failed to even initialise properly. Sending an alert is probably
  353|       |         * doomed to failure.
  354|       |         */
  355|       |
  356|  28.9k|        if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|  28.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  357|      0|            if ((s->version & 0xff00) != (DTLS1_VERSION & 0xff00) &&
  ------------------
  |  |   17|      0|# define DTLS1_VERSION                   0xFEFF
  ------------------
  |  Branch (357:17): [True: 0, False: 0]
  ------------------
  358|      0|                (server || (s->version & 0xff00) != (DTLS1_BAD_VER & 0xff00))) {
  ------------------
  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  ------------------
  |  Branch (358:18): [True: 0, False: 0]
  |  Branch (358:28): [True: 0, False: 0]
  ------------------
  359|      0|                SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_STATE_MACHINE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  360|      0|                         ERR_R_INTERNAL_ERROR);
  361|      0|                goto end;
  362|      0|            }
  363|  28.9k|        } else {
  364|  28.9k|            if ((s->version >> 8) != SSL3_VERSION_MAJOR) {
  ------------------
  |  |  210|  28.9k|# define SSL3_VERSION_MAJOR              0x03
  ------------------
  |  Branch (364:17): [True: 0, False: 28.9k]
  ------------------
  365|      0|                SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_STATE_MACHINE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  366|      0|                         ERR_R_INTERNAL_ERROR);
  367|      0|                goto end;
  368|      0|            }
  369|  28.9k|        }
  370|       |
  371|  28.9k|        if (!ssl_security(s, SSL_SECOP_VERSION, 0, s->version, NULL)) {
  ------------------
  |  | 2303|  28.9k|# define SSL_SECOP_VERSION               (9 | SSL_SECOP_OTHER_NONE)
  |  |  ------------------
  |  |  |  | 2274|  28.9k|# define SSL_SECOP_OTHER_NONE    0
  |  |  ------------------
  ------------------
  |  Branch (371:13): [True: 0, False: 28.9k]
  ------------------
  372|      0|            SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_STATE_MACHINE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  373|      0|                     ERR_R_INTERNAL_ERROR);
  374|      0|            goto end;
  375|      0|        }
  376|       |
  377|  28.9k|        if (s->init_buf == NULL) {
  ------------------
  |  Branch (377:13): [True: 28.9k, False: 0]
  ------------------
  378|  28.9k|            if ((buf = BUF_MEM_new()) == NULL) {
  ------------------
  |  Branch (378:17): [True: 0, False: 28.9k]
  ------------------
  379|      0|                SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_STATE_MACHINE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  380|      0|                         ERR_R_INTERNAL_ERROR);
  381|      0|                goto end;
  382|      0|            }
  383|  28.9k|            if (!BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) {
  ------------------
  |  |  171|  28.9k|# define SSL3_RT_MAX_PLAIN_LENGTH                16384
  ------------------
  |  Branch (383:17): [True: 0, False: 28.9k]
  ------------------
  384|      0|                SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_STATE_MACHINE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  385|      0|                         ERR_R_INTERNAL_ERROR);
  386|      0|                goto end;
  387|      0|            }
  388|  28.9k|            s->init_buf = buf;
  389|  28.9k|            buf = NULL;
  390|  28.9k|        }
  391|       |
  392|  28.9k|        if (!ssl3_setup_buffers(s)) {
  ------------------
  |  Branch (392:13): [True: 0, False: 28.9k]
  ------------------
  393|      0|            SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_STATE_MACHINE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  394|      0|                     ERR_R_INTERNAL_ERROR);
  395|      0|            goto end;
  396|      0|        }
  397|  28.9k|        s->init_num = 0;
  398|       |
  399|       |        /*
  400|       |         * Should have been reset by tls_process_finished, too.
  401|       |         */
  402|  28.9k|        s->s3->change_cipher_spec = 0;
  403|       |
  404|       |        /*
  405|       |         * Ok, we now need to push on a buffering BIO ...but not with
  406|       |         * SCTP
  407|       |         */
  408|       |#ifndef OPENSSL_NO_SCTP
  409|       |        if (!SSL_IS_DTLS(s) || !BIO_dgram_is_sctp(SSL_get_wbio(s)))
  410|       |#endif
  411|  28.9k|            if (!ssl_init_wbio_buffer(s)) {
  ------------------
  |  Branch (411:17): [True: 0, False: 28.9k]
  ------------------
  412|      0|                SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_STATE_MACHINE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  413|      0|                         ERR_R_INTERNAL_ERROR);
  414|      0|                goto end;
  415|      0|            }
  416|       |
  417|  28.9k|        if ((SSL_in_before(s))
  ------------------
  |  Branch (417:13): [True: 28.9k, False: 0]
  ------------------
  418|  28.9k|                || s->renegotiate) {
  ------------------
  |  Branch (418:20): [True: 0, False: 0]
  ------------------
  419|  28.9k|            if (!tls_setup_handshake(s)) {
  ------------------
  |  Branch (419:17): [True: 0, False: 28.9k]
  ------------------
  420|       |                /* SSLfatal() already called */
  421|      0|                goto end;
  422|      0|            }
  423|       |
  424|  28.9k|            if (SSL_IS_FIRST_HANDSHAKE(s))
  ------------------
  |  |  333|  28.9k|# define SSL_IS_FIRST_HANDSHAKE(S) ((s)->s3->tmp.finish_md_len == 0 \
  |  |  ------------------
  |  |  |  Branch (333:37): [True: 28.9k, False: 0]
  |  |  ------------------
  |  |  334|  28.9k|                                    || (s)->s3->tmp.peer_finish_md_len == 0)
  |  |  ------------------
  |  |  |  Branch (334:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  425|  28.9k|                st->read_state_first_init = 1;
  426|  28.9k|        }
  427|       |
  428|  28.9k|        st->state = MSG_FLOW_WRITING;
  429|  28.9k|        init_write_state_machine(s);
  430|  28.9k|    }
  431|       |
  432|  57.9k|    while (st->state != MSG_FLOW_FINISHED) {
  ------------------
  |  Branch (432:12): [True: 57.9k, False: 0]
  ------------------
  433|  57.9k|        if (st->state == MSG_FLOW_READING) {
  ------------------
  |  Branch (433:13): [True: 28.9k, False: 28.9k]
  ------------------
  434|  28.9k|            ssret = read_state_machine(s);
  435|  28.9k|            if (ssret == SUB_STATE_FINISHED) {
  ------------------
  |  Branch (435:17): [True: 0, False: 28.9k]
  ------------------
  436|      0|                st->state = MSG_FLOW_WRITING;
  437|      0|                init_write_state_machine(s);
  438|  28.9k|            } else {
  439|       |                /* NBIO or error */
  440|  28.9k|                goto end;
  441|  28.9k|            }
  442|  28.9k|        } else if (st->state == MSG_FLOW_WRITING) {
  ------------------
  |  Branch (442:20): [True: 28.9k, False: 0]
  ------------------
  443|  28.9k|            ssret = write_state_machine(s);
  444|  28.9k|            if (ssret == SUB_STATE_FINISHED) {
  ------------------
  |  Branch (444:17): [True: 28.9k, False: 0]
  ------------------
  445|  28.9k|                st->state = MSG_FLOW_READING;
  446|  28.9k|                init_read_state_machine(s);
  447|  28.9k|            } else if (ssret == SUB_STATE_END_HANDSHAKE) {
  ------------------
  |  Branch (447:24): [True: 0, False: 0]
  ------------------
  448|      0|                st->state = MSG_FLOW_FINISHED;
  449|      0|            } else {
  450|       |                /* NBIO or error */
  451|      0|                goto end;
  452|      0|            }
  453|  28.9k|        } else {
  454|       |            /* Error */
  455|      0|            check_fatal(s, SSL_F_STATE_MACHINE);
  ------------------
  |  |  138|      0|    do { \
  |  |  139|      0|        if (!ossl_assert((s)->statem.in_init \
  |  |  ------------------
  |  |  |  |   40|      0|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   41|      0|                                         __FILE__, __LINE__)
  |  |  ------------------
  |  |  |  Branch (139:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  140|      0|                         && (s)->statem.state == MSG_FLOW_ERROR)) \
  |  |  141|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, (f), \
  |  |  ------------------
  |  |  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|      0|                     SSL_R_MISSING_FATAL); \
  |  |  143|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (143:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  456|      0|            SSLerr(SSL_F_STATE_MACHINE, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  457|      0|            goto end;
  458|      0|        }
  459|  57.9k|    }
  460|       |
  461|      0|    ret = 1;
  462|       |
  463|  28.9k| end:
  464|  28.9k|    st->in_handshake--;
  465|       |
  466|       |#ifndef OPENSSL_NO_SCTP
  467|       |    if (SSL_IS_DTLS(s) && BIO_dgram_is_sctp(SSL_get_wbio(s))) {
  468|       |        /*
  469|       |         * Notify SCTP BIO socket to leave handshake mode and allow stream
  470|       |         * identifier other than 0.
  471|       |         */
  472|       |        BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE,
  473|       |                 st->in_handshake, NULL);
  474|       |    }
  475|       |#endif
  476|       |
  477|  28.9k|    BUF_MEM_free(buf);
  478|  28.9k|    if (cb != NULL) {
  ------------------
  |  Branch (478:9): [True: 0, False: 28.9k]
  ------------------
  479|      0|        if (server)
  ------------------
  |  Branch (479:13): [True: 0, False: 0]
  ------------------
  480|      0|            cb(s, SSL_CB_ACCEPT_EXIT, ret);
  ------------------
  |  | 1065|      0|# define SSL_CB_ACCEPT_EXIT              (SSL_ST_ACCEPT|SSL_CB_EXIT)
  |  |  ------------------
  |  |  |  | 1053|      0|# define SSL_ST_ACCEPT                   0x2000
  |  |  ------------------
  |  |               # define SSL_CB_ACCEPT_EXIT              (SSL_ST_ACCEPT|SSL_CB_EXIT)
  |  |  ------------------
  |  |  |  | 1058|      0|# define SSL_CB_EXIT                     0x02
  |  |  ------------------
  ------------------
  481|      0|        else
  482|      0|            cb(s, SSL_CB_CONNECT_EXIT, ret);
  ------------------
  |  | 1067|      0|# define SSL_CB_CONNECT_EXIT             (SSL_ST_CONNECT|SSL_CB_EXIT)
  |  |  ------------------
  |  |  |  | 1052|      0|# define SSL_ST_CONNECT                  0x1000
  |  |  ------------------
  |  |               # define SSL_CB_CONNECT_EXIT             (SSL_ST_CONNECT|SSL_CB_EXIT)
  |  |  ------------------
  |  |  |  | 1058|      0|# define SSL_CB_EXIT                     0x02
  |  |  ------------------
  ------------------
  483|      0|    }
  484|  28.9k|    return ret;
  485|      0|}
statem.c:get_callback:
  261|  86.9k|{
  262|  86.9k|    if (s->info_callback != NULL)
  ------------------
  |  Branch (262:9): [True: 0, False: 86.9k]
  ------------------
  263|      0|        return s->info_callback;
  264|  86.9k|    else if (s->ctx->info_callback != NULL)
  ------------------
  |  Branch (264:14): [True: 0, False: 86.9k]
  ------------------
  265|      0|        return s->ctx->info_callback;
  266|       |
  267|  86.9k|    return NULL;
  268|  86.9k|}
statem.c:init_write_state_machine:
  717|  28.9k|{
  718|  28.9k|    OSSL_STATEM *st = &s->statem;
  719|       |
  720|  28.9k|    st->write_state = WRITE_STATE_TRANSITION;
  721|  28.9k|}
statem.c:read_state_machine:
  539|  28.9k|{
  540|  28.9k|    OSSL_STATEM *st = &s->statem;
  541|  28.9k|    int ret, mt;
  542|  28.9k|    size_t len = 0;
  543|  28.9k|    int (*transition) (SSL *s, int mt);
  544|  28.9k|    PACKET pkt;
  545|  28.9k|    MSG_PROCESS_RETURN(*process_message) (SSL *s, PACKET *pkt);
  546|  28.9k|    WORK_STATE(*post_process_message) (SSL *s, WORK_STATE wst);
  547|  28.9k|    size_t (*max_message_size) (SSL *s);
  548|  28.9k|    void (*cb) (const SSL *ssl, int type, int val) = NULL;
  549|       |
  550|  28.9k|    cb = get_callback(s);
  551|       |
  552|  28.9k|    if (s->server) {
  ------------------
  |  Branch (552:9): [True: 0, False: 28.9k]
  ------------------
  553|      0|        transition = ossl_statem_server_read_transition;
  554|      0|        process_message = ossl_statem_server_process_message;
  555|      0|        max_message_size = ossl_statem_server_max_message_size;
  556|      0|        post_process_message = ossl_statem_server_post_process_message;
  557|  28.9k|    } else {
  558|  28.9k|        transition = ossl_statem_client_read_transition;
  559|  28.9k|        process_message = ossl_statem_client_process_message;
  560|  28.9k|        max_message_size = ossl_statem_client_max_message_size;
  561|  28.9k|        post_process_message = ossl_statem_client_post_process_message;
  562|  28.9k|    }
  563|       |
  564|  28.9k|    if (st->read_state_first_init) {
  ------------------
  |  Branch (564:9): [True: 28.9k, False: 0]
  ------------------
  565|  28.9k|        s->first_packet = 1;
  566|  28.9k|        st->read_state_first_init = 0;
  567|  28.9k|    }
  568|       |
  569|  28.9k|    while (1) {
  ------------------
  |  Branch (569:12): [True: 28.9k, Folded]
  ------------------
  570|  28.9k|        switch (st->read_state) {
  571|  28.9k|        case READ_STATE_HEADER:
  ------------------
  |  Branch (571:9): [True: 28.9k, False: 0]
  ------------------
  572|       |            /* Get the state the peer wants to move to */
  573|  28.9k|            if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|  28.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  574|       |                /*
  575|       |                 * In DTLS we get the whole message in one go - header and body
  576|       |                 */
  577|      0|                ret = dtls_get_message(s, &mt, &len);
  578|  28.9k|            } else {
  579|  28.9k|                ret = tls_get_message_header(s, &mt);
  580|  28.9k|            }
  581|       |
  582|  28.9k|            if (ret == 0) {
  ------------------
  |  Branch (582:17): [True: 28.9k, False: 0]
  ------------------
  583|       |                /* Could be non-blocking IO */
  584|  28.9k|                return SUB_STATE_ERROR;
  585|  28.9k|            }
  586|       |
  587|      0|            if (cb != NULL) {
  ------------------
  |  Branch (587:17): [True: 0, False: 0]
  ------------------
  588|       |                /* Notify callback of an impending state change */
  589|      0|                if (s->server)
  ------------------
  |  Branch (589:21): [True: 0, False: 0]
  ------------------
  590|      0|                    cb(s, SSL_CB_ACCEPT_LOOP, 1);
  ------------------
  |  | 1064|      0|# define SSL_CB_ACCEPT_LOOP              (SSL_ST_ACCEPT|SSL_CB_LOOP)
  |  |  ------------------
  |  |  |  | 1053|      0|# define SSL_ST_ACCEPT                   0x2000
  |  |  ------------------
  |  |               # define SSL_CB_ACCEPT_LOOP              (SSL_ST_ACCEPT|SSL_CB_LOOP)
  |  |  ------------------
  |  |  |  | 1057|      0|# define SSL_CB_LOOP                     0x01
  |  |  ------------------
  ------------------
  591|      0|                else
  592|      0|                    cb(s, SSL_CB_CONNECT_LOOP, 1);
  ------------------
  |  | 1066|      0|# define SSL_CB_CONNECT_LOOP             (SSL_ST_CONNECT|SSL_CB_LOOP)
  |  |  ------------------
  |  |  |  | 1052|      0|# define SSL_ST_CONNECT                  0x1000
  |  |  ------------------
  |  |               # define SSL_CB_CONNECT_LOOP             (SSL_ST_CONNECT|SSL_CB_LOOP)
  |  |  ------------------
  |  |  |  | 1057|      0|# define SSL_CB_LOOP                     0x01
  |  |  ------------------
  ------------------
  593|      0|            }
  594|       |            /*
  595|       |             * Validate that we are allowed to move to the new state and move
  596|       |             * to that state if so
  597|       |             */
  598|      0|            if (!transition(s, mt))
  ------------------
  |  Branch (598:17): [True: 0, False: 0]
  ------------------
  599|      0|                return SUB_STATE_ERROR;
  600|       |
  601|      0|            if (s->s3->tmp.message_size > max_message_size(s)) {
  ------------------
  |  Branch (601:17): [True: 0, False: 0]
  ------------------
  602|      0|                SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_READ_STATE_MACHINE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  603|      0|                         SSL_R_EXCESSIVE_MESSAGE_SIZE);
  604|      0|                return SUB_STATE_ERROR;
  605|      0|            }
  606|       |
  607|       |            /* dtls_get_message already did this */
  608|      0|            if (!SSL_IS_DTLS(s)
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  ------------------
  |  Branch (608:17): [True: 0, False: 0]
  ------------------
  609|      0|                    && s->s3->tmp.message_size > 0
  ------------------
  |  Branch (609:24): [True: 0, False: 0]
  ------------------
  610|      0|                    && !grow_init_buf(s, s->s3->tmp.message_size
  ------------------
  |  Branch (610:24): [True: 0, False: 0]
  ------------------
  611|      0|                                         + SSL3_HM_HEADER_LENGTH)) {
  ------------------
  |  |  135|      0|# define SSL3_HM_HEADER_LENGTH                  4
  ------------------
  612|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_READ_STATE_MACHINE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  613|      0|                         ERR_R_BUF_LIB);
  614|      0|                return SUB_STATE_ERROR;
  615|      0|            }
  616|       |
  617|      0|            st->read_state = READ_STATE_BODY;
  618|       |            /* Fall through */
  619|       |
  620|      0|        case READ_STATE_BODY:
  ------------------
  |  Branch (620:9): [True: 0, False: 28.9k]
  ------------------
  621|      0|            if (!SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  ------------------
  |  Branch (621:17): [True: 0, False: 0]
  ------------------
  622|       |                /* We already got this above for DTLS */
  623|      0|                ret = tls_get_message_body(s, &len);
  624|      0|                if (ret == 0) {
  ------------------
  |  Branch (624:21): [True: 0, False: 0]
  ------------------
  625|       |                    /* Could be non-blocking IO */
  626|      0|                    return SUB_STATE_ERROR;
  627|      0|                }
  628|      0|            }
  629|       |
  630|      0|            s->first_packet = 0;
  631|      0|            if (!PACKET_buf_init(&pkt, s->init_msg, len)) {
  ------------------
  |  Branch (631:17): [True: 0, False: 0]
  ------------------
  632|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_READ_STATE_MACHINE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  633|      0|                         ERR_R_INTERNAL_ERROR);
  634|      0|                return SUB_STATE_ERROR;
  635|      0|            }
  636|      0|            ret = process_message(s, &pkt);
  637|       |
  638|       |            /* Discard the packet data */
  639|      0|            s->init_num = 0;
  640|       |
  641|      0|            switch (ret) {
  642|      0|            case MSG_PROCESS_ERROR:
  ------------------
  |  Branch (642:13): [True: 0, False: 0]
  ------------------
  643|      0|                check_fatal(s, SSL_F_READ_STATE_MACHINE);
  ------------------
  |  |  138|      0|    do { \
  |  |  139|      0|        if (!ossl_assert((s)->statem.in_init \
  |  |  ------------------
  |  |  |  |   40|      0|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   41|      0|                                         __FILE__, __LINE__)
  |  |  ------------------
  |  |  |  Branch (139:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  140|      0|                         && (s)->statem.state == MSG_FLOW_ERROR)) \
  |  |  141|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, (f), \
  |  |  ------------------
  |  |  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|      0|                     SSL_R_MISSING_FATAL); \
  |  |  143|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (143:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  644|      0|                return SUB_STATE_ERROR;
  645|       |
  646|      0|            case MSG_PROCESS_FINISHED_READING:
  ------------------
  |  Branch (646:13): [True: 0, False: 0]
  ------------------
  647|      0|                if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  648|      0|                    dtls1_stop_timer(s);
  649|      0|                }
  650|      0|                return SUB_STATE_FINISHED;
  651|       |
  652|      0|            case MSG_PROCESS_CONTINUE_PROCESSING:
  ------------------
  |  Branch (652:13): [True: 0, False: 0]
  ------------------
  653|      0|                st->read_state = READ_STATE_POST_PROCESS;
  654|      0|                st->read_state_work = WORK_MORE_A;
  655|      0|                break;
  656|       |
  657|      0|            default:
  ------------------
  |  Branch (657:13): [True: 0, False: 0]
  ------------------
  658|      0|                st->read_state = READ_STATE_HEADER;
  659|      0|                break;
  660|      0|            }
  661|      0|            break;
  662|       |
  663|      0|        case READ_STATE_POST_PROCESS:
  ------------------
  |  Branch (663:9): [True: 0, False: 28.9k]
  ------------------
  664|      0|            st->read_state_work = post_process_message(s, st->read_state_work);
  665|      0|            switch (st->read_state_work) {
  ------------------
  |  Branch (665:21): [True: 0, False: 0]
  ------------------
  666|      0|            case WORK_ERROR:
  ------------------
  |  Branch (666:13): [True: 0, False: 0]
  ------------------
  667|      0|                check_fatal(s, SSL_F_READ_STATE_MACHINE);
  ------------------
  |  |  138|      0|    do { \
  |  |  139|      0|        if (!ossl_assert((s)->statem.in_init \
  |  |  ------------------
  |  |  |  |   40|      0|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   41|      0|                                         __FILE__, __LINE__)
  |  |  ------------------
  |  |  |  Branch (139:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  140|      0|                         && (s)->statem.state == MSG_FLOW_ERROR)) \
  |  |  141|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, (f), \
  |  |  ------------------
  |  |  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|      0|                     SSL_R_MISSING_FATAL); \
  |  |  143|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (143:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  668|       |                /* Fall through */
  669|      0|            case WORK_MORE_A:
  ------------------
  |  Branch (669:13): [True: 0, False: 0]
  ------------------
  670|      0|            case WORK_MORE_B:
  ------------------
  |  Branch (670:13): [True: 0, False: 0]
  ------------------
  671|      0|            case WORK_MORE_C:
  ------------------
  |  Branch (671:13): [True: 0, False: 0]
  ------------------
  672|      0|                return SUB_STATE_ERROR;
  673|       |
  674|      0|            case WORK_FINISHED_CONTINUE:
  ------------------
  |  Branch (674:13): [True: 0, False: 0]
  ------------------
  675|      0|                st->read_state = READ_STATE_HEADER;
  676|      0|                break;
  677|       |
  678|      0|            case WORK_FINISHED_STOP:
  ------------------
  |  Branch (678:13): [True: 0, False: 0]
  ------------------
  679|      0|                if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  680|      0|                    dtls1_stop_timer(s);
  681|      0|                }
  682|      0|                return SUB_STATE_FINISHED;
  683|      0|            }
  684|      0|            break;
  685|       |
  686|      0|        default:
  ------------------
  |  Branch (686:9): [True: 0, False: 28.9k]
  ------------------
  687|       |            /* Shouldn't happen */
  688|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_READ_STATE_MACHINE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  689|      0|                     ERR_R_INTERNAL_ERROR);
  690|      0|            return SUB_STATE_ERROR;
  691|  28.9k|        }
  692|  28.9k|    }
  693|  28.9k|}
statem.c:write_state_machine:
  755|  28.9k|{
  756|  28.9k|    OSSL_STATEM *st = &s->statem;
  757|  28.9k|    int ret;
  758|  28.9k|    WRITE_TRAN(*transition) (SSL *s);
  759|  28.9k|    WORK_STATE(*pre_work) (SSL *s, WORK_STATE wst);
  760|  28.9k|    WORK_STATE(*post_work) (SSL *s, WORK_STATE wst);
  761|  28.9k|    int (*get_construct_message_f) (SSL *s, WPACKET *pkt,
  762|  28.9k|                                    int (**confunc) (SSL *s, WPACKET *pkt),
  763|  28.9k|                                    int *mt);
  764|  28.9k|    void (*cb) (const SSL *ssl, int type, int val) = NULL;
  765|  28.9k|    int (*confunc) (SSL *s, WPACKET *pkt);
  766|  28.9k|    int mt;
  767|  28.9k|    WPACKET pkt;
  768|       |
  769|  28.9k|    cb = get_callback(s);
  770|       |
  771|  28.9k|    if (s->server) {
  ------------------
  |  Branch (771:9): [True: 0, False: 28.9k]
  ------------------
  772|      0|        transition = ossl_statem_server_write_transition;
  773|      0|        pre_work = ossl_statem_server_pre_work;
  774|      0|        post_work = ossl_statem_server_post_work;
  775|      0|        get_construct_message_f = ossl_statem_server_construct_message;
  776|  28.9k|    } else {
  777|  28.9k|        transition = ossl_statem_client_write_transition;
  778|  28.9k|        pre_work = ossl_statem_client_pre_work;
  779|  28.9k|        post_work = ossl_statem_client_post_work;
  780|  28.9k|        get_construct_message_f = ossl_statem_client_construct_message;
  781|  28.9k|    }
  782|       |
  783|  86.9k|    while (1) {
  ------------------
  |  Branch (783:12): [True: 86.9k, Folded]
  ------------------
  784|  86.9k|        switch (st->write_state) {
  785|  57.9k|        case WRITE_STATE_TRANSITION:
  ------------------
  |  Branch (785:9): [True: 57.9k, False: 28.9k]
  ------------------
  786|  57.9k|            if (cb != NULL) {
  ------------------
  |  Branch (786:17): [True: 0, False: 57.9k]
  ------------------
  787|       |                /* Notify callback of an impending state change */
  788|      0|                if (s->server)
  ------------------
  |  Branch (788:21): [True: 0, False: 0]
  ------------------
  789|      0|                    cb(s, SSL_CB_ACCEPT_LOOP, 1);
  ------------------
  |  | 1064|      0|# define SSL_CB_ACCEPT_LOOP              (SSL_ST_ACCEPT|SSL_CB_LOOP)
  |  |  ------------------
  |  |  |  | 1053|      0|# define SSL_ST_ACCEPT                   0x2000
  |  |  ------------------
  |  |               # define SSL_CB_ACCEPT_LOOP              (SSL_ST_ACCEPT|SSL_CB_LOOP)
  |  |  ------------------
  |  |  |  | 1057|      0|# define SSL_CB_LOOP                     0x01
  |  |  ------------------
  ------------------
  790|      0|                else
  791|      0|                    cb(s, SSL_CB_CONNECT_LOOP, 1);
  ------------------
  |  | 1066|      0|# define SSL_CB_CONNECT_LOOP             (SSL_ST_CONNECT|SSL_CB_LOOP)
  |  |  ------------------
  |  |  |  | 1052|      0|# define SSL_ST_CONNECT                  0x1000
  |  |  ------------------
  |  |               # define SSL_CB_CONNECT_LOOP             (SSL_ST_CONNECT|SSL_CB_LOOP)
  |  |  ------------------
  |  |  |  | 1057|      0|# define SSL_CB_LOOP                     0x01
  |  |  ------------------
  ------------------
  792|      0|            }
  793|  57.9k|            switch (transition(s)) {
  ------------------
  |  Branch (793:21): [True: 57.9k, False: 0]
  ------------------
  794|  28.9k|            case WRITE_TRAN_CONTINUE:
  ------------------
  |  Branch (794:13): [True: 28.9k, False: 28.9k]
  ------------------
  795|  28.9k|                st->write_state = WRITE_STATE_PRE_WORK;
  796|  28.9k|                st->write_state_work = WORK_MORE_A;
  797|  28.9k|                break;
  798|       |
  799|  28.9k|            case WRITE_TRAN_FINISHED:
  ------------------
  |  Branch (799:13): [True: 28.9k, False: 28.9k]
  ------------------
  800|  28.9k|                return SUB_STATE_FINISHED;
  801|      0|                break;
  802|       |
  803|      0|            case WRITE_TRAN_ERROR:
  ------------------
  |  Branch (803:13): [True: 0, False: 57.9k]
  ------------------
  804|      0|                check_fatal(s, SSL_F_WRITE_STATE_MACHINE);
  ------------------
  |  |  138|      0|    do { \
  |  |  139|      0|        if (!ossl_assert((s)->statem.in_init \
  |  |  ------------------
  |  |  |  |   40|      0|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   41|      0|                                         __FILE__, __LINE__)
  |  |  ------------------
  |  |  |  Branch (139:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  140|      0|                         && (s)->statem.state == MSG_FLOW_ERROR)) \
  |  |  141|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, (f), \
  |  |  ------------------
  |  |  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|      0|                     SSL_R_MISSING_FATAL); \
  |  |  143|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (143:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  805|      0|                return SUB_STATE_ERROR;
  806|  57.9k|            }
  807|  28.9k|            break;
  808|       |
  809|  28.9k|        case WRITE_STATE_PRE_WORK:
  ------------------
  |  Branch (809:9): [True: 28.9k, False: 57.9k]
  ------------------
  810|  28.9k|            switch (st->write_state_work = pre_work(s, st->write_state_work)) {
  ------------------
  |  Branch (810:21): [True: 28.9k, False: 0]
  ------------------
  811|      0|            case WORK_ERROR:
  ------------------
  |  Branch (811:13): [True: 0, False: 28.9k]
  ------------------
  812|      0|                check_fatal(s, SSL_F_WRITE_STATE_MACHINE);
  ------------------
  |  |  138|      0|    do { \
  |  |  139|      0|        if (!ossl_assert((s)->statem.in_init \
  |  |  ------------------
  |  |  |  |   40|      0|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   41|      0|                                         __FILE__, __LINE__)
  |  |  ------------------
  |  |  |  Branch (139:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  140|      0|                         && (s)->statem.state == MSG_FLOW_ERROR)) \
  |  |  141|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, (f), \
  |  |  ------------------
  |  |  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|      0|                     SSL_R_MISSING_FATAL); \
  |  |  143|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (143:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  813|       |                /* Fall through */
  814|      0|            case WORK_MORE_A:
  ------------------
  |  Branch (814:13): [True: 0, False: 28.9k]
  ------------------
  815|      0|            case WORK_MORE_B:
  ------------------
  |  Branch (815:13): [True: 0, False: 28.9k]
  ------------------
  816|      0|            case WORK_MORE_C:
  ------------------
  |  Branch (816:13): [True: 0, False: 28.9k]
  ------------------
  817|      0|                return SUB_STATE_ERROR;
  818|       |
  819|  28.9k|            case WORK_FINISHED_CONTINUE:
  ------------------
  |  Branch (819:13): [True: 28.9k, False: 0]
  ------------------
  820|  28.9k|                st->write_state = WRITE_STATE_SEND;
  821|  28.9k|                break;
  822|       |
  823|      0|            case WORK_FINISHED_STOP:
  ------------------
  |  Branch (823:13): [True: 0, False: 28.9k]
  ------------------
  824|      0|                return SUB_STATE_END_HANDSHAKE;
  825|  28.9k|            }
  826|  28.9k|            if (!get_construct_message_f(s, &pkt, &confunc, &mt)) {
  ------------------
  |  Branch (826:17): [True: 0, False: 28.9k]
  ------------------
  827|       |                /* SSLfatal() already called */
  828|      0|                return SUB_STATE_ERROR;
  829|      0|            }
  830|  28.9k|            if (mt == SSL3_MT_DUMMY) {
  ------------------
  |  |   35|  28.9k|#define SSL3_MT_DUMMY   -1
  ------------------
  |  Branch (830:17): [True: 0, False: 28.9k]
  ------------------
  831|       |                /* Skip construction and sending. This isn't a "real" state */
  832|      0|                st->write_state = WRITE_STATE_POST_WORK;
  833|      0|                st->write_state_work = WORK_MORE_A;
  834|      0|                break;
  835|      0|            }
  836|  28.9k|            if (!WPACKET_init(&pkt, s->init_buf)
  ------------------
  |  Branch (836:17): [True: 0, False: 28.9k]
  ------------------
  837|  28.9k|                    || !ssl_set_handshake_header(s, &pkt, mt)) {
  ------------------
  |  | 1980|  28.9k|        s->method->ssl3_enc->set_handshake_header((s), (pkt), (htype))
  ------------------
  |  Branch (837:24): [True: 0, False: 28.9k]
  ------------------
  838|      0|                WPACKET_cleanup(&pkt);
  839|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_WRITE_STATE_MACHINE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  840|      0|                         ERR_R_INTERNAL_ERROR);
  841|      0|                return SUB_STATE_ERROR;
  842|      0|            }
  843|  28.9k|            if (confunc != NULL && !confunc(s, &pkt)) {
  ------------------
  |  Branch (843:17): [True: 28.9k, False: 0]
  |  Branch (843:36): [True: 0, False: 28.9k]
  ------------------
  844|      0|                WPACKET_cleanup(&pkt);
  845|      0|                check_fatal(s, SSL_F_WRITE_STATE_MACHINE);
  ------------------
  |  |  138|      0|    do { \
  |  |  139|      0|        if (!ossl_assert((s)->statem.in_init \
  |  |  ------------------
  |  |  |  |   40|      0|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   41|      0|                                         __FILE__, __LINE__)
  |  |  ------------------
  |  |  |  Branch (139:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  140|      0|                         && (s)->statem.state == MSG_FLOW_ERROR)) \
  |  |  141|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, (f), \
  |  |  ------------------
  |  |  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|      0|                     SSL_R_MISSING_FATAL); \
  |  |  143|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (143:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  846|      0|                return SUB_STATE_ERROR;
  847|      0|            }
  848|  28.9k|            if (!ssl_close_construct_packet(s, &pkt, mt)
  ------------------
  |  | 1982|  57.9k|        s->method->ssl3_enc->close_construct_packet((s), (pkt), (htype))
  ------------------
  |  Branch (848:17): [True: 0, False: 28.9k]
  ------------------
  849|  28.9k|                    || !WPACKET_finish(&pkt)) {
  ------------------
  |  Branch (849:24): [True: 0, False: 28.9k]
  ------------------
  850|      0|                WPACKET_cleanup(&pkt);
  851|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_WRITE_STATE_MACHINE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  852|      0|                         ERR_R_INTERNAL_ERROR);
  853|      0|                return SUB_STATE_ERROR;
  854|      0|            }
  855|       |
  856|       |            /* Fall through */
  857|       |
  858|  28.9k|        case WRITE_STATE_SEND:
  ------------------
  |  Branch (858:9): [True: 0, False: 86.9k]
  ------------------
  859|  28.9k|            if (SSL_IS_DTLS(s) && st->use_timer) {
  ------------------
  |  |  319|  57.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  |  Branch (859:35): [True: 0, False: 0]
  ------------------
  860|      0|                dtls1_start_timer(s);
  861|      0|            }
  862|  28.9k|            ret = statem_do_write(s);
  863|  28.9k|            if (ret <= 0) {
  ------------------
  |  Branch (863:17): [True: 0, False: 28.9k]
  ------------------
  864|      0|                return SUB_STATE_ERROR;
  865|      0|            }
  866|  28.9k|            st->write_state = WRITE_STATE_POST_WORK;
  867|  28.9k|            st->write_state_work = WORK_MORE_A;
  868|       |            /* Fall through */
  869|       |
  870|  28.9k|        case WRITE_STATE_POST_WORK:
  ------------------
  |  Branch (870:9): [True: 0, False: 86.9k]
  ------------------
  871|  28.9k|            switch (st->write_state_work = post_work(s, st->write_state_work)) {
  ------------------
  |  Branch (871:21): [True: 28.9k, False: 0]
  ------------------
  872|      0|            case WORK_ERROR:
  ------------------
  |  Branch (872:13): [True: 0, False: 28.9k]
  ------------------
  873|      0|                check_fatal(s, SSL_F_WRITE_STATE_MACHINE);
  ------------------
  |  |  138|      0|    do { \
  |  |  139|      0|        if (!ossl_assert((s)->statem.in_init \
  |  |  ------------------
  |  |  |  |   40|      0|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  |  |  |  Branch (40:42): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   41|      0|                                         __FILE__, __LINE__)
  |  |  ------------------
  |  |  |  Branch (139:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  140|      0|                         && (s)->statem.state == MSG_FLOW_ERROR)) \
  |  |  141|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, (f), \
  |  |  ------------------
  |  |  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|      0|                     SSL_R_MISSING_FATAL); \
  |  |  143|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (143:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  874|       |                /* Fall through */
  875|      0|            case WORK_MORE_A:
  ------------------
  |  Branch (875:13): [True: 0, False: 28.9k]
  ------------------
  876|      0|            case WORK_MORE_B:
  ------------------
  |  Branch (876:13): [True: 0, False: 28.9k]
  ------------------
  877|      0|            case WORK_MORE_C:
  ------------------
  |  Branch (877:13): [True: 0, False: 28.9k]
  ------------------
  878|      0|                return SUB_STATE_ERROR;
  879|       |
  880|  28.9k|            case WORK_FINISHED_CONTINUE:
  ------------------
  |  Branch (880:13): [True: 28.9k, False: 0]
  ------------------
  881|  28.9k|                st->write_state = WRITE_STATE_TRANSITION;
  882|  28.9k|                break;
  883|       |
  884|      0|            case WORK_FINISHED_STOP:
  ------------------
  |  Branch (884:13): [True: 0, False: 28.9k]
  ------------------
  885|      0|                return SUB_STATE_END_HANDSHAKE;
  886|  28.9k|            }
  887|  28.9k|            break;
  888|       |
  889|  28.9k|        default:
  ------------------
  |  Branch (889:9): [True: 0, False: 86.9k]
  ------------------
  890|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_WRITE_STATE_MACHINE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  891|      0|                     ERR_R_INTERNAL_ERROR);
  892|      0|            return SUB_STATE_ERROR;
  893|  86.9k|        }
  894|  86.9k|    }
  895|  28.9k|}
statem.c:statem_do_write:
  699|  28.9k|{
  700|  28.9k|    OSSL_STATEM *st = &s->statem;
  701|       |
  702|  28.9k|    if (st->hand_state == TLS_ST_CW_CHANGE
  ------------------
  |  Branch (702:9): [True: 0, False: 28.9k]
  ------------------
  703|  28.9k|        || st->hand_state == TLS_ST_SW_CHANGE) {
  ------------------
  |  Branch (703:12): [True: 0, False: 28.9k]
  ------------------
  704|      0|        if (SSL_IS_DTLS(s))
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  705|      0|            return dtls1_do_write(s, SSL3_RT_CHANGE_CIPHER_SPEC);
  ------------------
  |  |  213|      0|# define SSL3_RT_CHANGE_CIPHER_SPEC      20
  ------------------
  706|      0|        else
  707|      0|            return ssl3_do_write(s, SSL3_RT_CHANGE_CIPHER_SPEC);
  ------------------
  |  |  213|      0|# define SSL3_RT_CHANGE_CIPHER_SPEC      20
  ------------------
  708|  28.9k|    } else {
  709|  28.9k|        return ssl_do_write(s);
  ------------------
  |  | 1983|  28.9k|# define ssl_do_write(s)  s->method->ssl3_enc->do_write(s)
  ------------------
  710|  28.9k|    }
  711|  28.9k|}
statem.c:init_read_state_machine:
  491|  28.9k|{
  492|  28.9k|    OSSL_STATEM *st = &s->statem;
  493|       |
  494|  28.9k|    st->read_state = READ_STATE_HEADER;
  495|  28.9k|}

ossl_statem_client_write_transition:
  498|  57.9k|{
  499|  57.9k|    OSSL_STATEM *st = &s->statem;
  500|       |
  501|       |    /*
  502|       |     * Note that immediately before/after a ClientHello we don't know what
  503|       |     * version we are going to negotiate yet, so we don't take this branch until
  504|       |     * later
  505|       |     */
  506|  57.9k|    if (SSL_IS_TLS13(s))
  ------------------
  |  |  322|  57.9k|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|   115k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|  57.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 57.9k, False: 0]
  |  |  ------------------
  |  |  323|  57.9k|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|   115k|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 57.9k, False: 0]
  |  |  ------------------
  |  |  324|  57.9k|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|  57.9k|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 57.9k]
  |  |  ------------------
  ------------------
  507|      0|        return ossl_statem_client13_write_transition(s);
  508|       |
  509|  57.9k|    switch (st->hand_state) {
  510|      0|    default:
  ------------------
  |  Branch (510:5): [True: 0, False: 57.9k]
  ------------------
  511|       |        /* Shouldn't happen */
  512|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  513|      0|                 SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION,
  514|      0|                 ERR_R_INTERNAL_ERROR);
  515|      0|        return WRITE_TRAN_ERROR;
  516|       |
  517|      0|    case TLS_ST_OK:
  ------------------
  |  Branch (517:5): [True: 0, False: 57.9k]
  ------------------
  518|      0|        if (!s->renegotiate) {
  ------------------
  |  Branch (518:13): [True: 0, False: 0]
  ------------------
  519|       |            /*
  520|       |             * We haven't requested a renegotiation ourselves so we must have
  521|       |             * received a message from the server. Better read it.
  522|       |             */
  523|      0|            return WRITE_TRAN_FINISHED;
  524|      0|        }
  525|       |        /* Renegotiation */
  526|       |        /* fall thru */
  527|  28.9k|    case TLS_ST_BEFORE:
  ------------------
  |  Branch (527:5): [True: 28.9k, False: 28.9k]
  ------------------
  528|  28.9k|        st->hand_state = TLS_ST_CW_CLNT_HELLO;
  529|  28.9k|        return WRITE_TRAN_CONTINUE;
  530|       |
  531|  28.9k|    case TLS_ST_CW_CLNT_HELLO:
  ------------------
  |  Branch (531:5): [True: 28.9k, False: 28.9k]
  ------------------
  532|  28.9k|        if (s->early_data_state == SSL_EARLY_DATA_CONNECTING) {
  ------------------
  |  Branch (532:13): [True: 0, False: 28.9k]
  ------------------
  533|       |            /*
  534|       |             * We are assuming this is a TLSv1.3 connection, although we haven't
  535|       |             * actually selected a version yet.
  536|       |             */
  537|      0|            if ((s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) != 0)
  ------------------
  |  |  353|      0|# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT                  0x00100000U
  ------------------
  |  Branch (537:17): [True: 0, False: 0]
  ------------------
  538|      0|                st->hand_state = TLS_ST_CW_CHANGE;
  539|      0|            else
  540|      0|                st->hand_state = TLS_ST_EARLY_DATA;
  541|      0|            return WRITE_TRAN_CONTINUE;
  542|      0|        }
  543|       |        /*
  544|       |         * No transition at the end of writing because we don't know what
  545|       |         * we will be sent
  546|       |         */
  547|  28.9k|        return WRITE_TRAN_FINISHED;
  548|       |
  549|      0|    case TLS_ST_CR_SRVR_HELLO:
  ------------------
  |  Branch (549:5): [True: 0, False: 57.9k]
  ------------------
  550|       |        /*
  551|       |         * We only get here in TLSv1.3. We just received an HRR, so issue a
  552|       |         * CCS unless middlebox compat mode is off, or we already issued one
  553|       |         * because we did early data.
  554|       |         */
  555|      0|        if ((s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) != 0
  ------------------
  |  |  353|      0|# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT                  0x00100000U
  ------------------
  |  Branch (555:13): [True: 0, False: 0]
  ------------------
  556|      0|                && s->early_data_state != SSL_EARLY_DATA_FINISHED_WRITING)
  ------------------
  |  Branch (556:20): [True: 0, False: 0]
  ------------------
  557|      0|            st->hand_state = TLS_ST_CW_CHANGE;
  558|      0|        else
  559|      0|            st->hand_state = TLS_ST_CW_CLNT_HELLO;
  560|      0|        return WRITE_TRAN_CONTINUE;
  561|       |
  562|      0|    case TLS_ST_EARLY_DATA:
  ------------------
  |  Branch (562:5): [True: 0, False: 57.9k]
  ------------------
  563|      0|        return WRITE_TRAN_FINISHED;
  564|       |
  565|      0|    case DTLS_ST_CR_HELLO_VERIFY_REQUEST:
  ------------------
  |  Branch (565:5): [True: 0, False: 57.9k]
  ------------------
  566|      0|        st->hand_state = TLS_ST_CW_CLNT_HELLO;
  567|      0|        return WRITE_TRAN_CONTINUE;
  568|       |
  569|      0|    case TLS_ST_CR_SRVR_DONE:
  ------------------
  |  Branch (569:5): [True: 0, False: 57.9k]
  ------------------
  570|      0|        if (s->s3->tmp.cert_req)
  ------------------
  |  Branch (570:13): [True: 0, False: 0]
  ------------------
  571|      0|            st->hand_state = TLS_ST_CW_CERT;
  572|      0|        else
  573|      0|            st->hand_state = TLS_ST_CW_KEY_EXCH;
  574|      0|        return WRITE_TRAN_CONTINUE;
  575|       |
  576|      0|    case TLS_ST_CW_CERT:
  ------------------
  |  Branch (576:5): [True: 0, False: 57.9k]
  ------------------
  577|      0|        st->hand_state = TLS_ST_CW_KEY_EXCH;
  578|      0|        return WRITE_TRAN_CONTINUE;
  579|       |
  580|      0|    case TLS_ST_CW_KEY_EXCH:
  ------------------
  |  Branch (580:5): [True: 0, False: 57.9k]
  ------------------
  581|       |        /*
  582|       |         * For TLS, cert_req is set to 2, so a cert chain of nothing is
  583|       |         * sent, but no verify packet is sent
  584|       |         */
  585|       |        /*
  586|       |         * XXX: For now, we do not support client authentication in ECDH
  587|       |         * cipher suites with ECDH (rather than ECDSA) certificates. We
  588|       |         * need to skip the certificate verify message when client's
  589|       |         * ECDH public key is sent inside the client certificate.
  590|       |         */
  591|      0|        if (s->s3->tmp.cert_req == 1) {
  ------------------
  |  Branch (591:13): [True: 0, False: 0]
  ------------------
  592|      0|            st->hand_state = TLS_ST_CW_CERT_VRFY;
  593|      0|        } else {
  594|      0|            st->hand_state = TLS_ST_CW_CHANGE;
  595|      0|        }
  596|      0|        if (s->s3->flags & TLS1_FLAGS_SKIP_CERT_VERIFY) {
  ------------------
  |  |  282|      0|# define TLS1_FLAGS_SKIP_CERT_VERIFY             0x0010
  ------------------
  |  Branch (596:13): [True: 0, False: 0]
  ------------------
  597|      0|            st->hand_state = TLS_ST_CW_CHANGE;
  598|      0|        }
  599|      0|        return WRITE_TRAN_CONTINUE;
  600|       |
  601|      0|    case TLS_ST_CW_CERT_VRFY:
  ------------------
  |  Branch (601:5): [True: 0, False: 57.9k]
  ------------------
  602|      0|        st->hand_state = TLS_ST_CW_CHANGE;
  603|      0|        return WRITE_TRAN_CONTINUE;
  604|       |
  605|      0|    case TLS_ST_CW_CHANGE:
  ------------------
  |  Branch (605:5): [True: 0, False: 57.9k]
  ------------------
  606|      0|        if (s->hello_retry_request == SSL_HRR_PENDING) {
  ------------------
  |  Branch (606:13): [True: 0, False: 0]
  ------------------
  607|      0|            st->hand_state = TLS_ST_CW_CLNT_HELLO;
  608|      0|        } else if (s->early_data_state == SSL_EARLY_DATA_CONNECTING) {
  ------------------
  |  Branch (608:20): [True: 0, False: 0]
  ------------------
  609|      0|            st->hand_state = TLS_ST_EARLY_DATA;
  610|      0|        } else {
  611|       |#if defined(OPENSSL_NO_NEXTPROTONEG)
  612|       |            st->hand_state = TLS_ST_CW_FINISHED;
  613|       |#else
  614|      0|            if (!SSL_IS_DTLS(s) && s->s3->npn_seen)
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  ------------------
  |  Branch (614:17): [True: 0, False: 0]
  |  Branch (614:36): [True: 0, False: 0]
  ------------------
  615|      0|                st->hand_state = TLS_ST_CW_NEXT_PROTO;
  616|      0|            else
  617|      0|                st->hand_state = TLS_ST_CW_FINISHED;
  618|      0|#endif
  619|      0|        }
  620|      0|        return WRITE_TRAN_CONTINUE;
  621|       |
  622|      0|#if !defined(OPENSSL_NO_NEXTPROTONEG)
  623|      0|    case TLS_ST_CW_NEXT_PROTO:
  ------------------
  |  Branch (623:5): [True: 0, False: 57.9k]
  ------------------
  624|      0|        st->hand_state = TLS_ST_CW_FINISHED;
  625|      0|        return WRITE_TRAN_CONTINUE;
  626|      0|#endif
  627|       |
  628|      0|    case TLS_ST_CW_FINISHED:
  ------------------
  |  Branch (628:5): [True: 0, False: 57.9k]
  ------------------
  629|      0|        if (s->hit) {
  ------------------
  |  Branch (629:13): [True: 0, False: 0]
  ------------------
  630|      0|            st->hand_state = TLS_ST_OK;
  631|      0|            return WRITE_TRAN_CONTINUE;
  632|      0|        } else {
  633|      0|            return WRITE_TRAN_FINISHED;
  634|      0|        }
  635|       |
  636|      0|    case TLS_ST_CR_FINISHED:
  ------------------
  |  Branch (636:5): [True: 0, False: 57.9k]
  ------------------
  637|      0|        if (s->hit) {
  ------------------
  |  Branch (637:13): [True: 0, False: 0]
  ------------------
  638|      0|            st->hand_state = TLS_ST_CW_CHANGE;
  639|      0|            return WRITE_TRAN_CONTINUE;
  640|      0|        } else {
  641|      0|            st->hand_state = TLS_ST_OK;
  642|      0|            return WRITE_TRAN_CONTINUE;
  643|      0|        }
  644|       |
  645|      0|    case TLS_ST_CR_HELLO_REQ:
  ------------------
  |  Branch (645:5): [True: 0, False: 57.9k]
  ------------------
  646|       |        /*
  647|       |         * If we can renegotiate now then do so, otherwise wait for a more
  648|       |         * convenient time.
  649|       |         */
  650|      0|        if (ssl3_renegotiate_check(s, 1)) {
  ------------------
  |  Branch (650:13): [True: 0, False: 0]
  ------------------
  651|      0|            if (!tls_setup_handshake(s)) {
  ------------------
  |  Branch (651:17): [True: 0, False: 0]
  ------------------
  652|       |                /* SSLfatal() already called */
  653|      0|                return WRITE_TRAN_ERROR;
  654|      0|            }
  655|      0|            st->hand_state = TLS_ST_CW_CLNT_HELLO;
  656|      0|            return WRITE_TRAN_CONTINUE;
  657|      0|        }
  658|      0|        st->hand_state = TLS_ST_OK;
  659|      0|        return WRITE_TRAN_CONTINUE;
  660|  57.9k|    }
  661|  57.9k|}
ossl_statem_client_pre_work:
  668|  28.9k|{
  669|  28.9k|    OSSL_STATEM *st = &s->statem;
  670|       |
  671|  28.9k|    switch (st->hand_state) {
  672|      0|    default:
  ------------------
  |  Branch (672:5): [True: 0, False: 28.9k]
  ------------------
  673|       |        /* No pre work to be done */
  674|      0|        break;
  675|       |
  676|  28.9k|    case TLS_ST_CW_CLNT_HELLO:
  ------------------
  |  Branch (676:5): [True: 28.9k, False: 0]
  ------------------
  677|  28.9k|        s->shutdown = 0;
  678|  28.9k|        if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|  28.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  679|       |            /* every DTLS ClientHello resets Finished MAC */
  680|      0|            if (!ssl3_init_finished_mac(s)) {
  ------------------
  |  Branch (680:17): [True: 0, False: 0]
  ------------------
  681|       |                /* SSLfatal() already called */
  682|      0|                return WORK_ERROR;
  683|      0|            }
  684|      0|        }
  685|  28.9k|        break;
  686|       |
  687|  28.9k|    case TLS_ST_CW_CHANGE:
  ------------------
  |  Branch (687:5): [True: 0, False: 28.9k]
  ------------------
  688|      0|        if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  689|      0|            if (s->hit) {
  ------------------
  |  Branch (689:17): [True: 0, False: 0]
  ------------------
  690|       |                /*
  691|       |                 * We're into the last flight so we don't retransmit these
  692|       |                 * messages unless we need to.
  693|       |                 */
  694|      0|                st->use_timer = 0;
  695|      0|            }
  696|       |#ifndef OPENSSL_NO_SCTP
  697|       |            if (BIO_dgram_is_sctp(SSL_get_wbio(s))) {
  698|       |                /* Calls SSLfatal() as required */
  699|       |                return dtls_wait_for_dry(s);
  700|       |            }
  701|       |#endif
  702|      0|        }
  703|      0|        break;
  704|       |
  705|      0|    case TLS_ST_PENDING_EARLY_DATA_END:
  ------------------
  |  Branch (705:5): [True: 0, False: 28.9k]
  ------------------
  706|       |        /*
  707|       |         * If we've been called by SSL_do_handshake()/SSL_write(), or we did not
  708|       |         * attempt to write early data before calling SSL_read() then we press
  709|       |         * on with the handshake. Otherwise we pause here.
  710|       |         */
  711|      0|        if (s->early_data_state == SSL_EARLY_DATA_FINISHED_WRITING
  ------------------
  |  Branch (711:13): [True: 0, False: 0]
  ------------------
  712|      0|                || s->early_data_state == SSL_EARLY_DATA_NONE)
  ------------------
  |  Branch (712:20): [True: 0, False: 0]
  ------------------
  713|      0|            return WORK_FINISHED_CONTINUE;
  714|       |        /* Fall through */
  715|       |
  716|      0|    case TLS_ST_EARLY_DATA:
  ------------------
  |  Branch (716:5): [True: 0, False: 28.9k]
  ------------------
  717|      0|        return tls_finish_handshake(s, wst, 0, 1);
  718|       |
  719|      0|    case TLS_ST_OK:
  ------------------
  |  Branch (719:5): [True: 0, False: 28.9k]
  ------------------
  720|       |        /* Calls SSLfatal() as required */
  721|      0|        return tls_finish_handshake(s, wst, 1, 1);
  722|  28.9k|    }
  723|       |
  724|  28.9k|    return WORK_FINISHED_CONTINUE;
  725|  28.9k|}
ossl_statem_client_post_work:
  732|  28.9k|{
  733|  28.9k|    OSSL_STATEM *st = &s->statem;
  734|       |
  735|  28.9k|    s->init_num = 0;
  736|       |
  737|  28.9k|    switch (st->hand_state) {
  738|      0|    default:
  ------------------
  |  Branch (738:5): [True: 0, False: 28.9k]
  ------------------
  739|       |        /* No post work to be done */
  740|      0|        break;
  741|       |
  742|  28.9k|    case TLS_ST_CW_CLNT_HELLO:
  ------------------
  |  Branch (742:5): [True: 28.9k, False: 0]
  ------------------
  743|  28.9k|        if (s->early_data_state == SSL_EARLY_DATA_CONNECTING
  ------------------
  |  Branch (743:13): [True: 0, False: 28.9k]
  ------------------
  744|      0|                && s->max_early_data > 0) {
  ------------------
  |  Branch (744:20): [True: 0, False: 0]
  ------------------
  745|       |            /*
  746|       |             * We haven't selected TLSv1.3 yet so we don't call the change
  747|       |             * cipher state function associated with the SSL_METHOD. Instead
  748|       |             * we call tls13_change_cipher_state() directly.
  749|       |             */
  750|      0|            if ((s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) == 0) {
  ------------------
  |  |  353|      0|# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT                  0x00100000U
  ------------------
  |  Branch (750:17): [True: 0, False: 0]
  ------------------
  751|      0|                if (!tls13_change_cipher_state(s,
  ------------------
  |  Branch (751:21): [True: 0, False: 0]
  ------------------
  752|      0|                            SSL3_CC_EARLY | SSL3_CHANGE_CIPHER_CLIENT_WRITE)) {
  ------------------
  |  |  331|      0|# define SSL3_CC_EARLY           0x040
  ------------------
                                          SSL3_CC_EARLY | SSL3_CHANGE_CIPHER_CLIENT_WRITE)) {
  ------------------
  |  |  334|      0|# define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE)
  |  |  ------------------
  |  |  |  |  329|      0|# define SSL3_CC_CLIENT          0x010
  |  |  ------------------
  |  |               # define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE)
  |  |  ------------------
  |  |  |  |  328|      0|# define SSL3_CC_WRITE           0x002
  |  |  ------------------
  ------------------
  753|       |                    /* SSLfatal() already called */
  754|      0|                    return WORK_ERROR;
  755|      0|                }
  756|      0|            }
  757|       |            /* else we're in compat mode so we delay flushing until after CCS */
  758|  28.9k|        } else if (!statem_flush(s)) {
  ------------------
  |  Branch (758:20): [True: 0, False: 28.9k]
  ------------------
  759|      0|            return WORK_MORE_A;
  760|      0|        }
  761|       |
  762|  28.9k|        if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|  28.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  763|       |            /* Treat the next message as the first packet */
  764|      0|            s->first_packet = 1;
  765|      0|        }
  766|  28.9k|        break;
  767|       |
  768|      0|    case TLS_ST_CW_END_OF_EARLY_DATA:
  ------------------
  |  Branch (768:5): [True: 0, False: 28.9k]
  ------------------
  769|       |        /*
  770|       |         * We set the enc_write_ctx back to NULL because we may end up writing
  771|       |         * in cleartext again if we get a HelloRetryRequest from the server.
  772|       |         */
  773|      0|        EVP_CIPHER_CTX_free(s->enc_write_ctx);
  774|      0|        s->enc_write_ctx = NULL;
  775|      0|        break;
  776|       |
  777|      0|    case TLS_ST_CW_KEY_EXCH:
  ------------------
  |  Branch (777:5): [True: 0, False: 28.9k]
  ------------------
  778|      0|        if (tls_client_key_exchange_post_work(s) == 0) {
  ------------------
  |  Branch (778:13): [True: 0, False: 0]
  ------------------
  779|       |            /* SSLfatal() already called */
  780|      0|            return WORK_ERROR;
  781|      0|        }
  782|      0|        break;
  783|       |
  784|      0|    case TLS_ST_CW_CHANGE:
  ------------------
  |  Branch (784:5): [True: 0, False: 28.9k]
  ------------------
  785|      0|        if (SSL_IS_TLS13(s) || s->hello_retry_request == SSL_HRR_PENDING)
  ------------------
  |  |  322|      0|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 0, False: 0]
  |  |  ------------------
  |  |  324|      0|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (785:32): [True: 0, False: 0]
  ------------------
  786|      0|            break;
  787|      0|        if (s->early_data_state == SSL_EARLY_DATA_CONNECTING
  ------------------
  |  Branch (787:13): [True: 0, False: 0]
  ------------------
  788|      0|                    && s->max_early_data > 0) {
  ------------------
  |  Branch (788:24): [True: 0, False: 0]
  ------------------
  789|       |            /*
  790|       |             * We haven't selected TLSv1.3 yet so we don't call the change
  791|       |             * cipher state function associated with the SSL_METHOD. Instead
  792|       |             * we call tls13_change_cipher_state() directly.
  793|       |             */
  794|      0|            if (!tls13_change_cipher_state(s,
  ------------------
  |  Branch (794:17): [True: 0, False: 0]
  ------------------
  795|      0|                        SSL3_CC_EARLY | SSL3_CHANGE_CIPHER_CLIENT_WRITE))
  ------------------
  |  |  331|      0|# define SSL3_CC_EARLY           0x040
  ------------------
                                      SSL3_CC_EARLY | SSL3_CHANGE_CIPHER_CLIENT_WRITE))
  ------------------
  |  |  334|      0|# define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE)
  |  |  ------------------
  |  |  |  |  329|      0|# define SSL3_CC_CLIENT          0x010
  |  |  ------------------
  |  |               # define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE)
  |  |  ------------------
  |  |  |  |  328|      0|# define SSL3_CC_WRITE           0x002
  |  |  ------------------
  ------------------
  796|      0|                return WORK_ERROR;
  797|      0|            break;
  798|      0|        }
  799|      0|        s->session->cipher = s->s3->tmp.new_cipher;
  800|      0|#ifdef OPENSSL_NO_COMP
  801|      0|        s->session->compress_meth = 0;
  802|       |#else
  803|       |        if (s->s3->tmp.new_compression == NULL)
  804|       |            s->session->compress_meth = 0;
  805|       |        else
  806|       |            s->session->compress_meth = s->s3->tmp.new_compression->id;
  807|       |#endif
  808|      0|        if (!s->method->ssl3_enc->setup_key_block(s)) {
  ------------------
  |  Branch (808:13): [True: 0, False: 0]
  ------------------
  809|       |            /* SSLfatal() already called */
  810|      0|            return WORK_ERROR;
  811|      0|        }
  812|       |
  813|      0|        if (!s->method->ssl3_enc->change_cipher_state(s,
  ------------------
  |  Branch (813:13): [True: 0, False: 0]
  ------------------
  814|      0|                                          SSL3_CHANGE_CIPHER_CLIENT_WRITE)) {
  ------------------
  |  |  334|      0|# define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE)
  |  |  ------------------
  |  |  |  |  329|      0|# define SSL3_CC_CLIENT          0x010
  |  |  ------------------
  |  |               # define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE)
  |  |  ------------------
  |  |  |  |  328|      0|# define SSL3_CC_WRITE           0x002
  |  |  ------------------
  ------------------
  815|       |            /* SSLfatal() already called */
  816|      0|            return WORK_ERROR;
  817|      0|        }
  818|       |
  819|      0|        if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  820|       |#ifndef OPENSSL_NO_SCTP
  821|       |            if (s->hit) {
  822|       |                /*
  823|       |                 * Change to new shared key of SCTP-Auth, will be ignored if
  824|       |                 * no SCTP used.
  825|       |                 */
  826|       |                BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY,
  827|       |                         0, NULL);
  828|       |            }
  829|       |#endif
  830|       |
  831|      0|            dtls1_reset_seq_numbers(s, SSL3_CC_WRITE);
  ------------------
  |  |  328|      0|# define SSL3_CC_WRITE           0x002
  ------------------
  832|      0|        }
  833|      0|        break;
  834|       |
  835|      0|    case TLS_ST_CW_FINISHED:
  ------------------
  |  Branch (835:5): [True: 0, False: 28.9k]
  ------------------
  836|       |#ifndef OPENSSL_NO_SCTP
  837|       |        if (wst == WORK_MORE_A && SSL_IS_DTLS(s) && s->hit == 0) {
  838|       |            /*
  839|       |             * Change to new shared key of SCTP-Auth, will be ignored if
  840|       |             * no SCTP used.
  841|       |             */
  842|       |            BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY,
  843|       |                     0, NULL);
  844|       |        }
  845|       |#endif
  846|      0|        if (statem_flush(s) != 1)
  ------------------
  |  Branch (846:13): [True: 0, False: 0]
  ------------------
  847|      0|            return WORK_MORE_B;
  848|       |
  849|      0|        if (SSL_IS_TLS13(s)) {
  ------------------
  |  |  322|      0|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 0, False: 0]
  |  |  ------------------
  |  |  324|      0|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  850|      0|            if (!tls13_save_handshake_digest_for_pha(s)) {
  ------------------
  |  Branch (850:17): [True: 0, False: 0]
  ------------------
  851|       |                /* SSLfatal() already called */
  852|      0|                return WORK_ERROR;
  853|      0|            }
  854|      0|            if (s->post_handshake_auth != SSL_PHA_REQUESTED) {
  ------------------
  |  Branch (854:17): [True: 0, False: 0]
  ------------------
  855|      0|                if (!s->method->ssl3_enc->change_cipher_state(s,
  ------------------
  |  Branch (855:21): [True: 0, False: 0]
  ------------------
  856|      0|                        SSL3_CC_APPLICATION | SSL3_CHANGE_CIPHER_CLIENT_WRITE)) {
  ------------------
  |  |  333|      0|# define SSL3_CC_APPLICATION     0x100
  ------------------
                                      SSL3_CC_APPLICATION | SSL3_CHANGE_CIPHER_CLIENT_WRITE)) {
  ------------------
  |  |  334|      0|# define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE)
  |  |  ------------------
  |  |  |  |  329|      0|# define SSL3_CC_CLIENT          0x010
  |  |  ------------------
  |  |               # define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE)
  |  |  ------------------
  |  |  |  |  328|      0|# define SSL3_CC_WRITE           0x002
  |  |  ------------------
  ------------------
  857|       |                    /* SSLfatal() already called */
  858|      0|                    return WORK_ERROR;
  859|      0|                }
  860|      0|            }
  861|      0|        }
  862|      0|        break;
  863|       |
  864|      0|    case TLS_ST_CW_KEY_UPDATE:
  ------------------
  |  Branch (864:5): [True: 0, False: 28.9k]
  ------------------
  865|      0|        if (statem_flush(s) != 1)
  ------------------
  |  Branch (865:13): [True: 0, False: 0]
  ------------------
  866|      0|            return WORK_MORE_A;
  867|      0|        if (!tls13_update_key(s, 1)) {
  ------------------
  |  Branch (867:13): [True: 0, False: 0]
  ------------------
  868|       |            /* SSLfatal() already called */
  869|      0|            return WORK_ERROR;
  870|      0|        }
  871|      0|        break;
  872|  28.9k|    }
  873|       |
  874|  28.9k|    return WORK_FINISHED_CONTINUE;
  875|  28.9k|}
ossl_statem_client_construct_message:
  887|  28.9k|{
  888|  28.9k|    OSSL_STATEM *st = &s->statem;
  889|       |
  890|  28.9k|    switch (st->hand_state) {
  891|      0|    default:
  ------------------
  |  Branch (891:5): [True: 0, False: 28.9k]
  ------------------
  892|       |        /* Shouldn't happen */
  893|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  894|      0|                 SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE,
  895|      0|                 SSL_R_BAD_HANDSHAKE_STATE);
  896|      0|        return 0;
  897|       |
  898|      0|    case TLS_ST_CW_CHANGE:
  ------------------
  |  Branch (898:5): [True: 0, False: 28.9k]
  ------------------
  899|      0|        if (SSL_IS_DTLS(s))
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  900|      0|            *confunc = dtls_construct_change_cipher_spec;
  901|      0|        else
  902|      0|            *confunc = tls_construct_change_cipher_spec;
  903|      0|        *mt = SSL3_MT_CHANGE_CIPHER_SPEC;
  ------------------
  |  |  322|      0|# define SSL3_MT_CHANGE_CIPHER_SPEC              0x0101
  ------------------
  904|      0|        break;
  905|       |
  906|  28.9k|    case TLS_ST_CW_CLNT_HELLO:
  ------------------
  |  Branch (906:5): [True: 28.9k, False: 0]
  ------------------
  907|  28.9k|        *confunc = tls_construct_client_hello;
  908|  28.9k|        *mt = SSL3_MT_CLIENT_HELLO;
  ------------------
  |  |  299|  28.9k|# define SSL3_MT_CLIENT_HELLO                    1
  ------------------
  909|  28.9k|        break;
  910|       |
  911|      0|    case TLS_ST_CW_END_OF_EARLY_DATA:
  ------------------
  |  Branch (911:5): [True: 0, False: 28.9k]
  ------------------
  912|      0|        *confunc = tls_construct_end_of_early_data;
  913|      0|        *mt = SSL3_MT_END_OF_EARLY_DATA;
  ------------------
  |  |  302|      0|# define SSL3_MT_END_OF_EARLY_DATA               5
  ------------------
  914|      0|        break;
  915|       |
  916|      0|    case TLS_ST_PENDING_EARLY_DATA_END:
  ------------------
  |  Branch (916:5): [True: 0, False: 28.9k]
  ------------------
  917|      0|        *confunc = NULL;
  918|      0|        *mt = SSL3_MT_DUMMY;
  ------------------
  |  |   35|      0|#define SSL3_MT_DUMMY   -1
  ------------------
  919|      0|        break;
  920|       |
  921|      0|    case TLS_ST_CW_CERT:
  ------------------
  |  Branch (921:5): [True: 0, False: 28.9k]
  ------------------
  922|      0|        *confunc = tls_construct_client_certificate;
  923|      0|        *mt = SSL3_MT_CERTIFICATE;
  ------------------
  |  |  304|      0|# define SSL3_MT_CERTIFICATE                     11
  ------------------
  924|      0|        break;
  925|       |
  926|      0|    case TLS_ST_CW_KEY_EXCH:
  ------------------
  |  Branch (926:5): [True: 0, False: 28.9k]
  ------------------
  927|      0|        *confunc = tls_construct_client_key_exchange;
  928|      0|        *mt = SSL3_MT_CLIENT_KEY_EXCHANGE;
  ------------------
  |  |  309|      0|# define SSL3_MT_CLIENT_KEY_EXCHANGE             16
  ------------------
  929|      0|        break;
  930|       |
  931|      0|    case TLS_ST_CW_CERT_VRFY:
  ------------------
  |  Branch (931:5): [True: 0, False: 28.9k]
  ------------------
  932|      0|        *confunc = tls_construct_cert_verify;
  933|      0|        *mt = SSL3_MT_CERTIFICATE_VERIFY;
  ------------------
  |  |  308|      0|# define SSL3_MT_CERTIFICATE_VERIFY              15
  ------------------
  934|      0|        break;
  935|       |
  936|      0|#if !defined(OPENSSL_NO_NEXTPROTONEG)
  937|      0|    case TLS_ST_CW_NEXT_PROTO:
  ------------------
  |  Branch (937:5): [True: 0, False: 28.9k]
  ------------------
  938|      0|        *confunc = tls_construct_next_proto;
  939|      0|        *mt = SSL3_MT_NEXT_PROTO;
  ------------------
  |  |  316|      0|#  define SSL3_MT_NEXT_PROTO                     67
  ------------------
  940|      0|        break;
  941|      0|#endif
  942|      0|    case TLS_ST_CW_FINISHED:
  ------------------
  |  Branch (942:5): [True: 0, False: 28.9k]
  ------------------
  943|      0|        *confunc = tls_construct_finished;
  944|      0|        *mt = SSL3_MT_FINISHED;
  ------------------
  |  |  310|      0|# define SSL3_MT_FINISHED                        20
  ------------------
  945|      0|        break;
  946|       |
  947|      0|    case TLS_ST_CW_KEY_UPDATE:
  ------------------
  |  Branch (947:5): [True: 0, False: 28.9k]
  ------------------
  948|      0|        *confunc = tls_construct_key_update;
  949|      0|        *mt = SSL3_MT_KEY_UPDATE;
  ------------------
  |  |  314|      0|# define SSL3_MT_KEY_UPDATE                      24
  ------------------
  950|      0|        break;
  951|  28.9k|    }
  952|       |
  953|  28.9k|    return 1;
  954|  28.9k|}
tls_construct_client_hello:
 1100|  28.9k|{
 1101|  28.9k|    unsigned char *p;
 1102|  28.9k|    size_t sess_id_len;
 1103|  28.9k|    int i, protverr;
 1104|       |#ifndef OPENSSL_NO_COMP
 1105|       |    SSL_COMP *comp;
 1106|       |#endif
 1107|  28.9k|    SSL_SESSION *sess = s->session;
 1108|  28.9k|    unsigned char *session_id;
 1109|       |
 1110|       |    /* Work out what SSL/TLS/DTLS version to use */
 1111|  28.9k|    protverr = ssl_set_client_hello_version(s);
 1112|  28.9k|    if (protverr != 0) {
  ------------------
  |  Branch (1112:9): [True: 0, False: 28.9k]
  ------------------
 1113|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1114|      0|                 protverr);
 1115|      0|        return 0;
 1116|      0|    }
 1117|       |
 1118|  28.9k|    if (sess == NULL
  ------------------
  |  Branch (1118:9): [True: 28.9k, False: 0]
  ------------------
 1119|      0|            || !ssl_version_supported(s, sess->ssl_version, NULL)
  ------------------
  |  Branch (1119:16): [True: 0, False: 0]
  ------------------
 1120|  28.9k|            || !SSL_SESSION_is_resumable(sess)) {
  ------------------
  |  Branch (1120:16): [True: 0, False: 0]
  ------------------
 1121|  28.9k|        if (s->hello_retry_request == SSL_HRR_NONE
  ------------------
  |  Branch (1121:13): [True: 28.9k, False: 0]
  ------------------
 1122|  28.9k|                && !ssl_get_new_session(s, 0)) {
  ------------------
  |  Branch (1122:20): [True: 0, False: 28.9k]
  ------------------
 1123|       |            /* SSLfatal() already called */
 1124|      0|            return 0;
 1125|      0|        }
 1126|  28.9k|    }
 1127|       |    /* else use the pre-loaded session */
 1128|       |
 1129|  28.9k|    p = s->s3->client_random;
 1130|       |
 1131|       |    /*
 1132|       |     * for DTLS if client_random is initialized, reuse it, we are
 1133|       |     * required to use same upon reply to HelloVerify
 1134|       |     */
 1135|  28.9k|    if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|  28.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
 1136|      0|        size_t idx;
 1137|      0|        i = 1;
 1138|      0|        for (idx = 0; idx < sizeof(s->s3->client_random); idx++) {
  ------------------
  |  Branch (1138:23): [True: 0, False: 0]
  ------------------
 1139|      0|            if (p[idx]) {
  ------------------
  |  Branch (1139:17): [True: 0, False: 0]
  ------------------
 1140|      0|                i = 0;
 1141|      0|                break;
 1142|      0|            }
 1143|      0|        }
 1144|  28.9k|    } else {
 1145|  28.9k|        i = (s->hello_retry_request == SSL_HRR_NONE);
 1146|  28.9k|    }
 1147|       |
 1148|  28.9k|    if (i && ssl_fill_hello_random(s, 0, p, sizeof(s->s3->client_random),
  ------------------
  |  Branch (1148:9): [True: 28.9k, False: 0]
  |  Branch (1148:14): [True: 0, False: 28.9k]
  ------------------
 1149|  28.9k|                                   DOWNGRADE_NONE) <= 0) {
 1150|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1151|      0|                 ERR_R_INTERNAL_ERROR);
 1152|      0|        return 0;
 1153|      0|    }
 1154|       |
 1155|       |    /*-
 1156|       |     * version indicates the negotiated version: for example from
 1157|       |     * an SSLv2/v3 compatible client hello). The client_version
 1158|       |     * field is the maximum version we permit and it is also
 1159|       |     * used in RSA encrypted premaster secrets. Some servers can
 1160|       |     * choke if we initially report a higher version then
 1161|       |     * renegotiate to a lower one in the premaster secret. This
 1162|       |     * didn't happen with TLS 1.0 as most servers supported it
 1163|       |     * but it can with TLS 1.1 or later if the server only supports
 1164|       |     * 1.0.
 1165|       |     *
 1166|       |     * Possible scenario with previous logic:
 1167|       |     *      1. Client hello indicates TLS 1.2
 1168|       |     *      2. Server hello says TLS 1.0
 1169|       |     *      3. RSA encrypted premaster secret uses 1.2.
 1170|       |     *      4. Handshake proceeds using TLS 1.0.
 1171|       |     *      5. Server sends hello request to renegotiate.
 1172|       |     *      6. Client hello indicates TLS v1.0 as we now
 1173|       |     *         know that is maximum server supports.
 1174|       |     *      7. Server chokes on RSA encrypted premaster secret
 1175|       |     *         containing version 1.0.
 1176|       |     *
 1177|       |     * For interoperability it should be OK to always use the
 1178|       |     * maximum version we support in client hello and then rely
 1179|       |     * on the checking of version to ensure the servers isn't
 1180|       |     * being inconsistent: for example initially negotiating with
 1181|       |     * TLS 1.0 and renegotiating with TLS 1.2. We do this by using
 1182|       |     * client_version in client hello and not resetting it to
 1183|       |     * the negotiated version.
 1184|       |     *
 1185|       |     * For TLS 1.3 we always set the ClientHello version to 1.2 and rely on the
 1186|       |     * supported_versions extension for the real supported versions.
 1187|       |     */
 1188|  28.9k|    if (!WPACKET_put_bytes_u16(pkt, s->client_version)
  ------------------
  |  |  820|  57.9k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (1188:9): [True: 0, False: 28.9k]
  ------------------
 1189|  28.9k|            || !WPACKET_memcpy(pkt, s->s3->client_random, SSL3_RANDOM_SIZE)) {
  ------------------
  |  |  131|  28.9k|# define SSL3_RANDOM_SIZE                        32
  ------------------
  |  Branch (1189:16): [True: 0, False: 28.9k]
  ------------------
 1190|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1191|      0|                 ERR_R_INTERNAL_ERROR);
 1192|      0|        return 0;
 1193|      0|    }
 1194|       |
 1195|       |    /* Session ID */
 1196|  28.9k|    session_id = s->session->session_id;
 1197|  28.9k|    if (s->new_session || s->session->ssl_version == TLS1_3_VERSION) {
  ------------------
  |  |   30|  28.9k|# define TLS1_3_VERSION                  0x0304
  ------------------
  |  Branch (1197:9): [True: 0, False: 28.9k]
  |  Branch (1197:27): [True: 28.9k, False: 0]
  ------------------
 1198|  28.9k|        if (s->version == TLS1_3_VERSION
  ------------------
  |  |   30|  57.9k|# define TLS1_3_VERSION                  0x0304
  ------------------
  |  Branch (1198:13): [True: 28.9k, False: 0]
  ------------------
 1199|  28.9k|                && (s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) != 0) {
  ------------------
  |  |  353|  28.9k|# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT                  0x00100000U
  ------------------
  |  Branch (1199:20): [True: 28.9k, False: 0]
  ------------------
 1200|  28.9k|            sess_id_len = sizeof(s->tmp_session_id);
 1201|  28.9k|            s->tmp_session_id_len = sess_id_len;
 1202|  28.9k|            session_id = s->tmp_session_id;
 1203|  28.9k|            if (s->hello_retry_request == SSL_HRR_NONE
  ------------------
  |  Branch (1203:17): [True: 28.9k, False: 0]
  ------------------
 1204|  28.9k|                    && RAND_bytes(s->tmp_session_id, sess_id_len) <= 0) {
  ------------------
  |  Branch (1204:24): [True: 0, False: 28.9k]
  ------------------
 1205|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1206|      0|                         SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
 1207|      0|                         ERR_R_INTERNAL_ERROR);
 1208|      0|                return 0;
 1209|      0|            }
 1210|  28.9k|        } else {
 1211|      0|            sess_id_len = 0;
 1212|      0|        }
 1213|  28.9k|    } else {
 1214|      0|        assert(s->session->session_id_length <= sizeof(s->session->session_id));
  ------------------
  |  Branch (1214:9): [True: 0, False: 0]
  |  Branch (1214:9): [True: 0, False: 0]
  ------------------
 1215|      0|        sess_id_len = s->session->session_id_length;
 1216|      0|        if (s->version == TLS1_3_VERSION) {
  ------------------
  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  ------------------
  |  Branch (1216:13): [True: 0, False: 0]
  ------------------
 1217|      0|            s->tmp_session_id_len = sess_id_len;
 1218|      0|            memcpy(s->tmp_session_id, s->session->session_id, sess_id_len);
 1219|      0|        }
 1220|      0|    }
 1221|  28.9k|    if (!WPACKET_start_sub_packet_u8(pkt)
  ------------------
  |  |  719|  57.9k|    WPACKET_start_sub_packet_len__((pkt), 1)
  ------------------
  |  Branch (1221:9): [True: 0, False: 28.9k]
  ------------------
 1222|  28.9k|            || (sess_id_len != 0 && !WPACKET_memcpy(pkt, session_id,
  ------------------
  |  Branch (1222:17): [True: 28.9k, False: 0]
  |  Branch (1222:37): [True: 0, False: 28.9k]
  ------------------
 1223|  28.9k|                                                    sess_id_len))
 1224|  28.9k|            || !WPACKET_close(pkt)) {
  ------------------
  |  Branch (1224:16): [True: 0, False: 28.9k]
  ------------------
 1225|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1226|      0|                 ERR_R_INTERNAL_ERROR);
 1227|      0|        return 0;
 1228|      0|    }
 1229|       |
 1230|       |    /* cookie stuff for DTLS */
 1231|  28.9k|    if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|  28.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
 1232|      0|        if (s->d1->cookie_len > sizeof(s->d1->cookie)
  ------------------
  |  Branch (1232:13): [True: 0, False: 0]
  ------------------
 1233|      0|                || !WPACKET_sub_memcpy_u8(pkt, s->d1->cookie,
  ------------------
  |  |  845|      0|    WPACKET_sub_memcpy__((pkt), (src), (len), 1)
  ------------------
  |  Branch (1233:20): [True: 0, False: 0]
  ------------------
 1234|      0|                                          s->d1->cookie_len)) {
 1235|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1236|      0|                     ERR_R_INTERNAL_ERROR);
 1237|      0|            return 0;
 1238|      0|        }
 1239|      0|    }
 1240|       |
 1241|       |    /* Ciphers supported */
 1242|  28.9k|    if (!WPACKET_start_sub_packet_u16(pkt)) {
  ------------------
  |  |  721|  28.9k|    WPACKET_start_sub_packet_len__((pkt), 2)
  ------------------
  |  Branch (1242:9): [True: 0, False: 28.9k]
  ------------------
 1243|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1244|      0|                 ERR_R_INTERNAL_ERROR);
 1245|      0|        return 0;
 1246|      0|    }
 1247|       |
 1248|  28.9k|    if (!ssl_cipher_list_to_bytes(s, SSL_get_ciphers(s), pkt)) {
  ------------------
  |  Branch (1248:9): [True: 0, False: 28.9k]
  ------------------
 1249|       |        /* SSLfatal() already called */
 1250|      0|        return 0;
 1251|      0|    }
 1252|  28.9k|    if (!WPACKET_close(pkt)) {
  ------------------
  |  Branch (1252:9): [True: 0, False: 28.9k]
  ------------------
 1253|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1254|      0|                 ERR_R_INTERNAL_ERROR);
 1255|      0|        return 0;
 1256|      0|    }
 1257|       |
 1258|       |    /* COMPRESSION */
 1259|  28.9k|    if (!WPACKET_start_sub_packet_u8(pkt)) {
  ------------------
  |  |  719|  28.9k|    WPACKET_start_sub_packet_len__((pkt), 1)
  ------------------
  |  Branch (1259:9): [True: 0, False: 28.9k]
  ------------------
 1260|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1261|      0|                 ERR_R_INTERNAL_ERROR);
 1262|      0|        return 0;
 1263|      0|    }
 1264|       |#ifndef OPENSSL_NO_COMP
 1265|       |    if (ssl_allow_compression(s)
 1266|       |            && s->ctx->comp_methods
 1267|       |            && (SSL_IS_DTLS(s) || s->s3->tmp.max_ver < TLS1_3_VERSION)) {
 1268|       |        int compnum = sk_SSL_COMP_num(s->ctx->comp_methods);
 1269|       |        for (i = 0; i < compnum; i++) {
 1270|       |            comp = sk_SSL_COMP_value(s->ctx->comp_methods, i);
 1271|       |            if (!WPACKET_put_bytes_u8(pkt, comp->id)) {
 1272|       |                SSLfatal(s, SSL_AD_INTERNAL_ERROR,
 1273|       |                         SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
 1274|       |                         ERR_R_INTERNAL_ERROR);
 1275|       |                return 0;
 1276|       |            }
 1277|       |        }
 1278|       |    }
 1279|       |#endif
 1280|       |    /* Add the NULL method */
 1281|  28.9k|    if (!WPACKET_put_bytes_u8(pkt, 0) || !WPACKET_close(pkt)) {
  ------------------
  |  |  818|  57.9k|    WPACKET_put_bytes__((pkt), (val), 1)
  ------------------
  |  Branch (1281:9): [True: 0, False: 28.9k]
  |  Branch (1281:42): [True: 0, False: 28.9k]
  ------------------
 1282|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1283|      0|                 ERR_R_INTERNAL_ERROR);
 1284|      0|        return 0;
 1285|      0|    }
 1286|       |
 1287|       |    /* TLS extensions */
 1288|  28.9k|    if (!tls_construct_extensions(s, pkt, SSL_EXT_CLIENT_HELLO, NULL, 0)) {
  ------------------
  |  |  250|  28.9k|#define SSL_EXT_CLIENT_HELLO                    0x0080
  ------------------
  |  Branch (1288:9): [True: 0, False: 28.9k]
  ------------------
 1289|       |        /* SSLfatal() already called */
 1290|      0|        return 0;
 1291|      0|    }
 1292|       |
 1293|  28.9k|    return 1;
 1294|  28.9k|}
statem_clnt.c:ssl_cipher_list_to_bytes:
 3732|  28.9k|{
 3733|  28.9k|    int i;
 3734|  28.9k|    size_t totlen = 0, len, maxlen, maxverok = 0;
 3735|  28.9k|    int empty_reneg_info_scsv = !s->renegotiate;
 3736|       |
 3737|       |    /* Set disabled masks for this session */
 3738|  28.9k|    if (!ssl_set_client_disabled(s)) {
  ------------------
  |  Branch (3738:9): [True: 0, False: 28.9k]
  ------------------
 3739|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_CIPHER_LIST_TO_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3740|      0|                 SSL_R_NO_PROTOCOLS_AVAILABLE);
 3741|      0|        return 0;
 3742|      0|    }
 3743|       |
 3744|  28.9k|    if (sk == NULL) {
  ------------------
  |  Branch (3744:9): [True: 0, False: 28.9k]
  ------------------
 3745|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_CIPHER_LIST_TO_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3746|      0|                 ERR_R_INTERNAL_ERROR);
 3747|      0|        return 0;
 3748|      0|    }
 3749|       |
 3750|       |#ifdef OPENSSL_MAX_TLS1_2_CIPHER_LENGTH
 3751|       |# if OPENSSL_MAX_TLS1_2_CIPHER_LENGTH < 6
 3752|       |#  error Max cipher length too short
 3753|       |# endif
 3754|       |    /*
 3755|       |     * Some servers hang if client hello > 256 bytes as hack workaround
 3756|       |     * chop number of supported ciphers to keep it well below this if we
 3757|       |     * use TLS v1.2
 3758|       |     */
 3759|       |    if (TLS1_get_version(s) >= TLS1_2_VERSION)
 3760|       |        maxlen = OPENSSL_MAX_TLS1_2_CIPHER_LENGTH & ~1;
 3761|       |    else
 3762|       |#endif
 3763|       |        /* Maximum length that can be stored in 2 bytes. Length must be even */
 3764|  28.9k|        maxlen = 0xfffe;
 3765|       |
 3766|  28.9k|    if (empty_reneg_info_scsv)
  ------------------
  |  Branch (3766:9): [True: 28.9k, False: 0]
  ------------------
 3767|  28.9k|        maxlen -= 2;
 3768|  28.9k|    if (s->mode & SSL_MODE_SEND_FALLBACK_SCSV)
  ------------------
  |  |  491|  28.9k|# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080U
  ------------------
  |  Branch (3768:9): [True: 0, False: 28.9k]
  ------------------
 3769|      0|        maxlen -= 2;
 3770|       |
 3771|  1.76M|    for (i = 0; i < sk_SSL_CIPHER_num(sk) && totlen < maxlen; i++) {
  ------------------
  |  Branch (3771:17): [True: 1.73M, False: 28.9k]
  |  Branch (3771:46): [True: 1.73M, False: 0]
  ------------------
 3772|  1.73M|        const SSL_CIPHER *c;
 3773|       |
 3774|  1.73M|        c = sk_SSL_CIPHER_value(sk, i);
 3775|       |        /* Skip disabled ciphers */
 3776|  1.73M|        if (ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_SUPPORTED, 0))
  ------------------
  |  | 2289|  1.73M|# define SSL_SECOP_CIPHER_SUPPORTED      (1 | SSL_SECOP_OTHER_CIPHER)
  |  |  ------------------
  |  |  |  | 2275|  1.73M|# define SSL_SECOP_OTHER_CIPHER  (1 << 16)
  |  |  ------------------
  ------------------
  |  Branch (3776:13): [True: 869k, False: 869k]
  ------------------
 3777|   869k|            continue;
 3778|       |
 3779|   869k|        if (!s->method->put_cipher_by_char(c, pkt, &len)) {
  ------------------
  |  Branch (3779:13): [True: 0, False: 869k]
  ------------------
 3780|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_CIPHER_LIST_TO_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3781|      0|                     ERR_R_INTERNAL_ERROR);
 3782|      0|            return 0;
 3783|      0|        }
 3784|       |
 3785|       |        /* Sanity check that the maximum version we offer has ciphers enabled */
 3786|   869k|        if (!maxverok) {
  ------------------
  |  Branch (3786:13): [True: 28.9k, False: 840k]
  ------------------
 3787|  28.9k|            if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|  28.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
 3788|      0|                if (DTLS_VERSION_GE(c->max_dtls, s->s3->tmp.max_ver)
  ------------------
  |  |  139|      0|# define DTLS_VERSION_GE(v1, v2) (dtls_ver_ordinal(v1) <= dtls_ver_ordinal(v2))
  |  |  ------------------
  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               # define DTLS_VERSION_GE(v1, v2) (dtls_ver_ordinal(v1) <= dtls_ver_ordinal(v2))
  |  |  ------------------
  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (139:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3789|      0|                        && DTLS_VERSION_LE(c->min_dtls, s->s3->tmp.max_ver))
  ------------------
  |  |  141|      0|# define DTLS_VERSION_LE(v1, v2) (dtls_ver_ordinal(v1) >= dtls_ver_ordinal(v2))
  |  |  ------------------
  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               # define DTLS_VERSION_LE(v1, v2) (dtls_ver_ordinal(v1) >= dtls_ver_ordinal(v2))
  |  |  ------------------
  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (141:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3790|      0|                    maxverok = 1;
 3791|  28.9k|            } else {
 3792|  28.9k|                if (c->max_tls >= s->s3->tmp.max_ver
  ------------------
  |  Branch (3792:21): [True: 28.9k, False: 0]
  ------------------
 3793|  28.9k|                        && c->min_tls <= s->s3->tmp.max_ver)
  ------------------
  |  Branch (3793:28): [True: 28.9k, False: 0]
  ------------------
 3794|  28.9k|                    maxverok = 1;
 3795|  28.9k|            }
 3796|  28.9k|        }
 3797|       |
 3798|   869k|        totlen += len;
 3799|   869k|    }
 3800|       |
 3801|  28.9k|    if (totlen == 0 || !maxverok) {
  ------------------
  |  Branch (3801:9): [True: 0, False: 28.9k]
  |  Branch (3801:24): [True: 0, False: 28.9k]
  ------------------
 3802|      0|        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_CIPHER_LIST_TO_BYTES,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3803|      0|                 SSL_R_NO_CIPHERS_AVAILABLE);
 3804|       |
 3805|      0|        if (!maxverok)
  ------------------
  |  Branch (3805:13): [True: 0, False: 0]
  ------------------
 3806|      0|            ERR_add_error_data(1, "No ciphers enabled for max supported "
 3807|      0|                                  "SSL/TLS version");
 3808|       |
 3809|      0|        return 0;
 3810|      0|    }
 3811|       |
 3812|  28.9k|    if (totlen != 0) {
  ------------------
  |  Branch (3812:9): [True: 28.9k, False: 0]
  ------------------
 3813|  28.9k|        if (empty_reneg_info_scsv) {
  ------------------
  |  Branch (3813:13): [True: 28.9k, False: 0]
  ------------------
 3814|  28.9k|            static SSL_CIPHER scsv = {
 3815|  28.9k|                0, NULL, NULL, SSL3_CK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0
  ------------------
  |  |   27|  28.9k|# define SSL3_CK_SCSV                            0x030000FF
  ------------------
 3816|  28.9k|            };
 3817|  28.9k|            if (!s->method->put_cipher_by_char(&scsv, pkt, &len)) {
  ------------------
  |  Branch (3817:17): [True: 0, False: 28.9k]
  ------------------
 3818|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3819|      0|                         SSL_F_SSL_CIPHER_LIST_TO_BYTES, ERR_R_INTERNAL_ERROR);
 3820|      0|                return 0;
 3821|      0|            }
 3822|  28.9k|        }
 3823|  28.9k|        if (s->mode & SSL_MODE_SEND_FALLBACK_SCSV) {
  ------------------
  |  |  491|  28.9k|# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080U
  ------------------
  |  Branch (3823:13): [True: 0, False: 28.9k]
  ------------------
 3824|      0|            static SSL_CIPHER scsv = {
 3825|      0|                0, NULL, NULL, SSL3_CK_FALLBACK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0
  ------------------
  |  |   33|      0|# define SSL3_CK_FALLBACK_SCSV                   0x03005600
  ------------------
 3826|      0|            };
 3827|      0|            if (!s->method->put_cipher_by_char(&scsv, pkt, &len)) {
  ------------------
  |  Branch (3827:17): [True: 0, False: 0]
  ------------------
 3828|      0|                SSLfatal(s, SSL_AD_INTERNAL_ERROR,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 3829|      0|                         SSL_F_SSL_CIPHER_LIST_TO_BYTES, ERR_R_INTERNAL_ERROR);
 3830|      0|                return 0;
 3831|      0|            }
 3832|      0|        }
 3833|  28.9k|    }
 3834|       |
 3835|  28.9k|    return 1;
 3836|  28.9k|}

ssl3_do_write:
   42|  28.9k|{
   43|  28.9k|    int ret;
   44|  28.9k|    size_t written = 0;
   45|       |
   46|  28.9k|    ret = ssl3_write_bytes(s, type, &s->init_buf->data[s->init_off],
   47|  28.9k|                           s->init_num, &written);
   48|  28.9k|    if (ret < 0)
  ------------------
  |  Branch (48:9): [True: 0, False: 28.9k]
  ------------------
   49|      0|        return -1;
   50|  28.9k|    if (type == SSL3_RT_HANDSHAKE)
  ------------------
  |  |  215|  28.9k|# define SSL3_RT_HANDSHAKE               22
  ------------------
  |  Branch (50:9): [True: 28.9k, False: 0]
  ------------------
   51|       |        /*
   52|       |         * should not be done for 'Hello Request's, but in that case we'll
   53|       |         * ignore the result anyway
   54|       |         * TLS1.3 KeyUpdate and NewSessionTicket do not need to be added
   55|       |         */
   56|  28.9k|        if (!SSL_IS_TLS13(s) || (s->statem.hand_state != TLS_ST_SW_SESSION_TICKET
  ------------------
  |  |  322|  57.9k|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|  57.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 28.9k, False: 0]
  |  |  ------------------
  |  |  323|  28.9k|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|  57.9k|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 28.9k, False: 0]
  |  |  ------------------
  |  |  324|  57.9k|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|  28.9k|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  |  Branch (56:34): [True: 0, False: 0]
  ------------------
   57|      0|                                 && s->statem.hand_state != TLS_ST_CW_KEY_UPDATE
  ------------------
  |  Branch (57:37): [True: 0, False: 0]
  ------------------
   58|      0|                                 && s->statem.hand_state != TLS_ST_SW_KEY_UPDATE))
  ------------------
  |  Branch (58:37): [True: 0, False: 0]
  ------------------
   59|  28.9k|            if (!ssl3_finish_mac(s,
  ------------------
  |  Branch (59:17): [True: 0, False: 28.9k]
  ------------------
   60|  28.9k|                                 (unsigned char *)&s->init_buf->data[s->init_off],
   61|  28.9k|                                 written))
   62|      0|                return -1;
   63|  28.9k|    if (written == s->init_num) {
  ------------------
  |  Branch (63:9): [True: 28.9k, False: 0]
  ------------------
   64|  28.9k|        if (s->msg_callback)
  ------------------
  |  Branch (64:13): [True: 0, False: 28.9k]
  ------------------
   65|      0|            s->msg_callback(1, s->version, type, s->init_buf->data,
   66|      0|                            (size_t)(s->init_off + s->init_num), s,
   67|      0|                            s->msg_callback_arg);
   68|  28.9k|        return 1;
   69|  28.9k|    }
   70|      0|    s->init_off += written;
   71|      0|    s->init_num -= written;
   72|      0|    return 0;
   73|  28.9k|}
tls_close_construct_packet:
   76|  28.9k|{
   77|  28.9k|    size_t msglen;
   78|       |
   79|  28.9k|    if ((htype != SSL3_MT_CHANGE_CIPHER_SPEC && !WPACKET_close(pkt))
  ------------------
  |  |  322|  57.9k|# define SSL3_MT_CHANGE_CIPHER_SPEC              0x0101
  ------------------
  |  Branch (79:10): [True: 28.9k, False: 0]
  |  Branch (79:49): [True: 0, False: 28.9k]
  ------------------
   80|  28.9k|            || !WPACKET_get_length(pkt, &msglen)
  ------------------
  |  Branch (80:16): [True: 0, False: 28.9k]
  ------------------
   81|  28.9k|            || msglen > INT_MAX)
  ------------------
  |  Branch (81:16): [True: 0, False: 28.9k]
  ------------------
   82|      0|        return 0;
   83|  28.9k|    s->init_num = (int)msglen;
   84|  28.9k|    s->init_off = 0;
   85|       |
   86|  28.9k|    return 1;
   87|  28.9k|}
tls_setup_handshake:
   90|  28.9k|{
   91|  28.9k|    if (!ssl3_init_finished_mac(s)) {
  ------------------
  |  Branch (91:9): [True: 0, False: 28.9k]
  ------------------
   92|       |        /* SSLfatal() already called */
   93|      0|        return 0;
   94|      0|    }
   95|       |
   96|       |    /* Reset any extension flags */
   97|  28.9k|    memset(s->ext.extflags, 0, sizeof(s->ext.extflags));
   98|       |
   99|  28.9k|    if (s->server) {
  ------------------
  |  Branch (99:9): [True: 0, False: 28.9k]
  ------------------
  100|      0|        STACK_OF(SSL_CIPHER) *ciphers = SSL_get_ciphers(s);
  ------------------
  |  |   20|      0|# define STACK_OF(type) struct stack_st_##type
  ------------------
  101|      0|        int i, ver_min, ver_max, ok = 0;
  102|       |
  103|       |        /*
  104|       |         * Sanity check that the maximum version we accept has ciphers
  105|       |         * enabled. For clients we do this check during construction of the
  106|       |         * ClientHello.
  107|       |         */
  108|      0|        if (ssl_get_min_max_version(s, &ver_min, &ver_max, NULL) != 0) {
  ------------------
  |  Branch (108:13): [True: 0, False: 0]
  ------------------
  109|      0|            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_SETUP_HANDSHAKE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  110|      0|                     ERR_R_INTERNAL_ERROR);
  111|      0|            return 0;
  112|      0|        }
  113|      0|        for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
  ------------------
  |  Branch (113:21): [True: 0, False: 0]
  ------------------
  114|      0|            const SSL_CIPHER *c = sk_SSL_CIPHER_value(ciphers, i);
  115|       |
  116|      0|            if (SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  117|      0|                if (DTLS_VERSION_GE(ver_max, c->min_dtls) &&
  ------------------
  |  |  139|      0|# define DTLS_VERSION_GE(v1, v2) (dtls_ver_ordinal(v1) <= dtls_ver_ordinal(v2))
  |  |  ------------------
  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               # define DTLS_VERSION_GE(v1, v2) (dtls_ver_ordinal(v1) <= dtls_ver_ordinal(v2))
  |  |  ------------------
  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (139:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  118|      0|                        DTLS_VERSION_LE(ver_max, c->max_dtls))
  ------------------
  |  |  141|      0|# define DTLS_VERSION_LE(v1, v2) (dtls_ver_ordinal(v1) >= dtls_ver_ordinal(v2))
  |  |  ------------------
  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               # define DTLS_VERSION_LE(v1, v2) (dtls_ver_ordinal(v1) >= dtls_ver_ordinal(v2))
  |  |  ------------------
  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (141:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  119|      0|                    ok = 1;
  120|      0|            } else if (ver_max >= c->min_tls && ver_max <= c->max_tls) {
  ------------------
  |  Branch (120:24): [True: 0, False: 0]
  |  Branch (120:49): [True: 0, False: 0]
  ------------------
  121|      0|                ok = 1;
  122|      0|            }
  123|      0|            if (ok)
  ------------------
  |  Branch (123:17): [True: 0, False: 0]
  ------------------
  124|      0|                break;
  125|      0|        }
  126|      0|        if (!ok) {
  ------------------
  |  Branch (126:13): [True: 0, False: 0]
  ------------------
  127|      0|            SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS_SETUP_HANDSHAKE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  128|      0|                     SSL_R_NO_CIPHERS_AVAILABLE);
  129|      0|            ERR_add_error_data(1, "No ciphers enabled for max supported "
  130|      0|                                  "SSL/TLS version");
  131|      0|            return 0;
  132|      0|        }
  133|      0|        if (SSL_IS_FIRST_HANDSHAKE(s)) {
  ------------------
  |  |  333|      0|# define SSL_IS_FIRST_HANDSHAKE(S) ((s)->s3->tmp.finish_md_len == 0 \
  |  |  ------------------
  |  |  |  Branch (333:37): [True: 0, False: 0]
  |  |  ------------------
  |  |  334|      0|                                    || (s)->s3->tmp.peer_finish_md_len == 0)
  |  |  ------------------
  |  |  |  Branch (334:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  134|       |            /* N.B. s->session_ctx == s->ctx here */
  135|      0|            tsan_counter(&s->session_ctx->stats.sess_accept);
  ------------------
  |  |   59|      0|#  define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed)
  ------------------
  136|      0|        } else {
  137|       |            /* N.B. s->ctx may not equal s->session_ctx */
  138|      0|            tsan_counter(&s->ctx->stats.sess_accept_renegotiate);
  ------------------
  |  |   59|      0|#  define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed)
  ------------------
  139|       |
  140|      0|            s->s3->tmp.cert_request = 0;
  141|      0|        }
  142|  28.9k|    } else {
  143|  28.9k|        if (SSL_IS_FIRST_HANDSHAKE(s))
  ------------------
  |  |  333|  28.9k|# define SSL_IS_FIRST_HANDSHAKE(S) ((s)->s3->tmp.finish_md_len == 0 \
  |  |  ------------------
  |  |  |  Branch (333:37): [True: 28.9k, False: 0]
  |  |  ------------------
  |  |  334|  28.9k|                                    || (s)->s3->tmp.peer_finish_md_len == 0)
  |  |  ------------------
  |  |  |  Branch (334:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  144|  28.9k|            tsan_counter(&s->session_ctx->stats.sess_connect);
  ------------------
  |  |   59|  28.9k|#  define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed)
  ------------------
  145|      0|        else
  146|  28.9k|            tsan_counter(&s->session_ctx->stats.sess_connect_renegotiate);
  ------------------
  |  |   59|  28.9k|#  define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed)
  ------------------
  147|       |
  148|       |        /* mark client_random uninitialized */
  149|  28.9k|        memset(s->s3->client_random, 0, sizeof(s->s3->client_random));
  150|  28.9k|        s->hit = 0;
  151|       |
  152|  28.9k|        s->s3->tmp.cert_req = 0;
  153|       |
  154|  28.9k|        if (SSL_IS_DTLS(s))
  ------------------
  |  |  319|  28.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  155|      0|            s->statem.use_timer = 1;
  156|  28.9k|    }
  157|       |
  158|  28.9k|    return 1;
  159|  28.9k|}
tls_get_message_header:
 1150|  28.9k|{
 1151|       |    /* s->init_num < SSL3_HM_HEADER_LENGTH */
 1152|  28.9k|    int skip_message, i, recvd_type;
 1153|  28.9k|    unsigned char *p;
 1154|  28.9k|    size_t l, readbytes;
 1155|       |
 1156|  28.9k|    p = (unsigned char *)s->init_buf->data;
 1157|       |
 1158|  28.9k|    do {
 1159|  28.9k|        while (s->init_num < SSL3_HM_HEADER_LENGTH) {
  ------------------
  |  |  135|  28.9k|# define SSL3_HM_HEADER_LENGTH                  4
  ------------------
  |  Branch (1159:16): [True: 28.9k, False: 0]
  ------------------
 1160|  28.9k|            i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, &recvd_type,
  ------------------
  |  |  215|  28.9k|# define SSL3_RT_HANDSHAKE               22
  ------------------
 1161|  28.9k|                                          &p[s->init_num],
 1162|  28.9k|                                          SSL3_HM_HEADER_LENGTH - s->init_num,
  ------------------
  |  |  135|  28.9k|# define SSL3_HM_HEADER_LENGTH                  4
  ------------------
 1163|  28.9k|                                          0, &readbytes);
 1164|  28.9k|            if (i <= 0) {
  ------------------
  |  Branch (1164:17): [True: 28.9k, False: 0]
  ------------------
 1165|  28.9k|                s->rwstate = SSL_READING;
  ------------------
  |  |  894|  28.9k|# define SSL_READING            3
  ------------------
 1166|  28.9k|                return 0;
 1167|  28.9k|            }
 1168|      0|            if (recvd_type == SSL3_RT_CHANGE_CIPHER_SPEC) {
  ------------------
  |  |  213|      0|# define SSL3_RT_CHANGE_CIPHER_SPEC      20
  ------------------
  |  Branch (1168:17): [True: 0, False: 0]
  ------------------
 1169|       |                /*
 1170|       |                 * A ChangeCipherSpec must be a single byte and may not occur
 1171|       |                 * in the middle of a handshake message.
 1172|       |                 */
 1173|      0|                if (s->init_num != 0 || readbytes != 1 || p[0] != SSL3_MT_CCS) {
  ------------------
  |  |  324|      0|# define SSL3_MT_CCS                             1
  ------------------
  |  Branch (1173:21): [True: 0, False: 0]
  |  Branch (1173:41): [True: 0, False: 0]
  |  Branch (1173:59): [True: 0, False: 0]
  ------------------
 1174|      0|                    SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1175|      0|                             SSL_F_TLS_GET_MESSAGE_HEADER,
 1176|      0|                             SSL_R_BAD_CHANGE_CIPHER_SPEC);
 1177|      0|                    return 0;
 1178|      0|                }
 1179|      0|                if (s->statem.hand_state == TLS_ST_BEFORE
  ------------------
  |  Branch (1179:21): [True: 0, False: 0]
  ------------------
 1180|      0|                        && (s->s3->flags & TLS1_FLAGS_STATELESS) != 0) {
  ------------------
  |  |  293|      0|# define TLS1_FLAGS_STATELESS                    0x0800
  ------------------
  |  Branch (1180:28): [True: 0, False: 0]
  ------------------
 1181|       |                    /*
 1182|       |                     * We are stateless and we received a CCS. Probably this is
 1183|       |                     * from a client between the first and second ClientHellos.
 1184|       |                     * We should ignore this, but return an error because we do
 1185|       |                     * not return success until we see the second ClientHello
 1186|       |                     * with a valid cookie.
 1187|       |                     */
 1188|      0|                    return 0;
 1189|      0|                }
 1190|      0|                s->s3->tmp.message_type = *mt = SSL3_MT_CHANGE_CIPHER_SPEC;
  ------------------
  |  |  322|      0|# define SSL3_MT_CHANGE_CIPHER_SPEC              0x0101
  ------------------
 1191|      0|                s->init_num = readbytes - 1;
 1192|      0|                s->init_msg = s->init_buf->data;
 1193|      0|                s->s3->tmp.message_size = readbytes;
 1194|      0|                return 1;
 1195|      0|            } else if (recvd_type != SSL3_RT_HANDSHAKE) {
  ------------------
  |  |  215|      0|# define SSL3_RT_HANDSHAKE               22
  ------------------
  |  Branch (1195:24): [True: 0, False: 0]
  ------------------
 1196|      0|                SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1197|      0|                         SSL_F_TLS_GET_MESSAGE_HEADER,
 1198|      0|                         SSL_R_CCS_RECEIVED_EARLY);
 1199|      0|                return 0;
 1200|      0|            }
 1201|      0|            s->init_num += readbytes;
 1202|      0|        }
 1203|       |
 1204|      0|        skip_message = 0;
 1205|      0|        if (!s->server)
  ------------------
  |  Branch (1205:13): [True: 0, False: 0]
  ------------------
 1206|      0|            if (s->statem.hand_state != TLS_ST_OK
  ------------------
  |  Branch (1206:17): [True: 0, False: 0]
  ------------------
 1207|      0|                    && p[0] == SSL3_MT_HELLO_REQUEST)
  ------------------
  |  |  298|      0|# define SSL3_MT_HELLO_REQUEST                   0
  ------------------
  |  Branch (1207:24): [True: 0, False: 0]
  ------------------
 1208|       |                /*
 1209|       |                 * The server may always send 'Hello Request' messages --
 1210|       |                 * we are doing a handshake anyway now, so ignore them if
 1211|       |                 * their format is correct. Does not count for 'Finished'
 1212|       |                 * MAC.
 1213|       |                 */
 1214|      0|                if (p[1] == 0 && p[2] == 0 && p[3] == 0) {
  ------------------
  |  Branch (1214:21): [True: 0, False: 0]
  |  Branch (1214:34): [True: 0, False: 0]
  |  Branch (1214:47): [True: 0, False: 0]
  ------------------
 1215|      0|                    s->init_num = 0;
 1216|      0|                    skip_message = 1;
 1217|       |
 1218|      0|                    if (s->msg_callback)
  ------------------
  |  Branch (1218:25): [True: 0, False: 0]
  ------------------
 1219|      0|                        s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE,
  ------------------
  |  |  215|      0|# define SSL3_RT_HANDSHAKE               22
  ------------------
 1220|      0|                                        p, SSL3_HM_HEADER_LENGTH, s,
  ------------------
  |  |  135|      0|# define SSL3_HM_HEADER_LENGTH                  4
  ------------------
 1221|      0|                                        s->msg_callback_arg);
 1222|      0|                }
 1223|      0|    } while (skip_message);
  ------------------
  |  Branch (1223:14): [True: 0, False: 0]
  ------------------
 1224|       |    /* s->init_num == SSL3_HM_HEADER_LENGTH */
 1225|       |
 1226|      0|    *mt = *p;
 1227|      0|    s->s3->tmp.message_type = *(p++);
 1228|       |
 1229|      0|    if (RECORD_LAYER_is_sslv2_record(&s->rlayer)) {
  ------------------
  |  Branch (1229:9): [True: 0, False: 0]
  ------------------
 1230|       |        /*
 1231|       |         * Only happens with SSLv3+ in an SSLv2 backward compatible
 1232|       |         * ClientHello
 1233|       |         *
 1234|       |         * Total message size is the remaining record bytes to read
 1235|       |         * plus the SSL3_HM_HEADER_LENGTH bytes that we already read
 1236|       |         */
 1237|      0|        l = RECORD_LAYER_get_rrec_length(&s->rlayer)
 1238|      0|            + SSL3_HM_HEADER_LENGTH;
  ------------------
  |  |  135|      0|# define SSL3_HM_HEADER_LENGTH                  4
  ------------------
 1239|      0|        s->s3->tmp.message_size = l;
 1240|       |
 1241|      0|        s->init_msg = s->init_buf->data;
 1242|      0|        s->init_num = SSL3_HM_HEADER_LENGTH;
  ------------------
  |  |  135|      0|# define SSL3_HM_HEADER_LENGTH                  4
  ------------------
 1243|      0|    } else {
 1244|      0|        n2l3(p, l);
  ------------------
  |  |  125|      0|# define n2l3(c,l)       ((l =(((unsigned long)((c)[0]))<<16)| \
  |  |  126|      0|                              (((unsigned long)((c)[1]))<< 8)| \
  |  |  127|      0|                              (((unsigned long)((c)[2]))    )),(c)+=3)
  ------------------
 1245|       |        /* BUF_MEM_grow takes an 'int' parameter */
 1246|      0|        if (l > (INT_MAX - SSL3_HM_HEADER_LENGTH)) {
  ------------------
  |  |  135|      0|# define SSL3_HM_HEADER_LENGTH                  4
  ------------------
  |  Branch (1246:13): [True: 0, False: 0]
  ------------------
 1247|      0|            SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_GET_MESSAGE_HEADER,
  ------------------
  |  |  139|      0|#  define SSLfatal(s, al, f, r)  ossl_statem_fatal((s), (al), (f), (r), \
  |  |  140|      0|                                                   OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                                                                  OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1248|      0|                     SSL_R_EXCESSIVE_MESSAGE_SIZE);
 1249|      0|            return 0;
 1250|      0|        }
 1251|      0|        s->s3->tmp.message_size = l;
 1252|       |
 1253|      0|        s->init_msg = s->init_buf->data + SSL3_HM_HEADER_LENGTH;
  ------------------
  |  |  135|      0|# define SSL3_HM_HEADER_LENGTH                  4
  ------------------
 1254|      0|        s->init_num = 0;
 1255|      0|    }
 1256|       |
 1257|      0|    return 1;
 1258|      0|}
ssl_get_min_max_version:
 2036|   173k|{
 2037|   173k|    int version, tmp_real_max;
 2038|   173k|    int hole;
 2039|   173k|    const SSL_METHOD *single = NULL;
 2040|   173k|    const SSL_METHOD *method;
 2041|   173k|    const version_info *table;
 2042|   173k|    const version_info *vent;
 2043|       |
 2044|   173k|    switch (s->method->version) {
 2045|      0|    default:
  ------------------
  |  Branch (2045:5): [True: 0, False: 173k]
  ------------------
 2046|       |        /*
 2047|       |         * If this SSL handle is not from a version flexible method we don't
 2048|       |         * (and never did) check min/max FIPS or Suite B constraints.  Hope
 2049|       |         * that's OK.  It is up to the caller to not choose fixed protocol
 2050|       |         * versions they don't want.  If not, then easy to fix, just return
 2051|       |         * ssl_method_error(s, s->method)
 2052|       |         */
 2053|      0|        *min_version = *max_version = s->version;
 2054|       |        /*
 2055|       |         * Providing a real_max only makes sense where we're using a version
 2056|       |         * flexible method.
 2057|       |         */
 2058|      0|        if (!ossl_assert(real_max == NULL))
  ------------------
  |  |   40|      0|# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
  |  |   41|      0|                                         __FILE__, __LINE__)
  ------------------
  |  Branch (2058:13): [True: 0, False: 0]
  ------------------
 2059|      0|            return ERR_R_INTERNAL_ERROR;
  ------------------
  |  |  202|      0|# define ERR_R_INTERNAL_ERROR                    (4|ERR_R_FATAL)
  |  |  ------------------
  |  |  |  |  198|      0|# define ERR_R_FATAL                             64
  |  |  ------------------
  ------------------
 2060|      0|        return 0;
 2061|   173k|    case TLS_ANY_VERSION:
  ------------------
  |  |   34|   173k|# define TLS_ANY_VERSION                 0x10000
  ------------------
  |  Branch (2061:5): [True: 173k, False: 0]
  ------------------
 2062|   173k|        table = tls_version_table;
 2063|   173k|        break;
 2064|      0|    case DTLS_ANY_VERSION:
  ------------------
  |  |   26|      0|# define DTLS_ANY_VERSION                0x1FFFF
  ------------------
  |  Branch (2064:5): [True: 0, False: 173k]
  ------------------
 2065|      0|        table = dtls_version_table;
 2066|      0|        break;
 2067|   173k|    }
 2068|       |
 2069|       |    /*
 2070|       |     * SSL_OP_NO_X disables all protocols above X *if* there are some protocols
 2071|       |     * below X enabled. This is required in order to maintain the "version
 2072|       |     * capability" vector contiguous. Any versions with a NULL client method
 2073|       |     * (protocol version client is disabled at compile-time) is also a "hole".
 2074|       |     *
 2075|       |     * Our initial state is hole == 1, version == 0.  That is, versions above
 2076|       |     * the first version in the method table are disabled (a "hole" above
 2077|       |     * the valid protocol entries) and we don't have a selected version yet.
 2078|       |     *
 2079|       |     * Whenever "hole == 1", and we hit an enabled method, its version becomes
 2080|       |     * the selected version, and the method becomes a candidate "single"
 2081|       |     * method.  We're no longer in a hole, so "hole" becomes 0.
 2082|       |     *
 2083|       |     * If "hole == 0" and we hit an enabled method, then "single" is cleared,
 2084|       |     * as we support a contiguous range of at least two methods.  If we hit
 2085|       |     * a disabled method, then hole becomes true again, but nothing else
 2086|       |     * changes yet, because all the remaining methods may be disabled too.
 2087|       |     * If we again hit an enabled method after the new hole, it becomes
 2088|       |     * selected, as we start from scratch.
 2089|       |     */
 2090|   173k|    *min_version = version = 0;
 2091|   173k|    hole = 1;
 2092|   173k|    if (real_max != NULL)
  ------------------
  |  Branch (2092:9): [True: 0, False: 173k]
  ------------------
 2093|      0|        *real_max = 0;
 2094|   173k|    tmp_real_max = 0;
 2095|  1.04M|    for (vent = table; vent->version != 0; ++vent) {
  ------------------
  |  Branch (2095:24): [True: 869k, False: 173k]
  ------------------
 2096|       |        /*
 2097|       |         * A table entry with a NULL client method is still a hole in the
 2098|       |         * "version capability" vector.
 2099|       |         */
 2100|   869k|        if (vent->cmeth == NULL) {
  ------------------
  |  Branch (2100:13): [True: 173k, False: 695k]
  ------------------
 2101|   173k|            hole = 1;
 2102|   173k|            tmp_real_max = 0;
 2103|   173k|            continue;
 2104|   173k|        }
 2105|   695k|        method = vent->cmeth();
 2106|       |
 2107|   695k|        if (hole == 1 && tmp_real_max == 0)
  ------------------
  |  Branch (2107:13): [True: 173k, False: 521k]
  |  Branch (2107:26): [True: 173k, False: 0]
  ------------------
 2108|   173k|            tmp_real_max = vent->version;
 2109|       |
 2110|   695k|        if (ssl_method_error(s, method) != 0) {
  ------------------
  |  Branch (2110:13): [True: 0, False: 695k]
  ------------------
 2111|      0|            hole = 1;
 2112|   695k|        } else if (!hole) {
  ------------------
  |  Branch (2112:20): [True: 521k, False: 173k]
  ------------------
 2113|   521k|            single = NULL;
 2114|   521k|            *min_version = method->version;
 2115|   521k|        } else {
 2116|   173k|            if (real_max != NULL && tmp_real_max != 0)
  ------------------
  |  Branch (2116:17): [True: 0, False: 173k]
  |  Branch (2116:37): [True: 0, False: 0]
  ------------------
 2117|      0|                *real_max = tmp_real_max;
 2118|   173k|            version = (single = method)->version;
 2119|   173k|            *min_version = version;
 2120|   173k|            hole = 0;
 2121|   173k|        }
 2122|   695k|    }
 2123|       |
 2124|   173k|    *max_version = version;
 2125|       |
 2126|       |    /* Fail if everything is disabled */
 2127|   173k|    if (version == 0)
  ------------------
  |  Branch (2127:9): [True: 0, False: 173k]
  ------------------
 2128|      0|        return SSL_R_NO_PROTOCOLS_AVAILABLE;
  ------------------
  |  |  625|      0|# define SSL_R_NO_PROTOCOLS_AVAILABLE                     191
  ------------------
 2129|       |
 2130|   173k|    return 0;
 2131|   173k|}
ssl_set_client_hello_version:
 2142|  28.9k|{
 2143|  28.9k|    int ver_min, ver_max, ret;
 2144|       |
 2145|       |    /*
 2146|       |     * In a renegotiation we always send the same client_version that we sent
 2147|       |     * last time, regardless of which version we eventually negotiated.
 2148|       |     */
 2149|  28.9k|    if (!SSL_IS_FIRST_HANDSHAKE(s))
  ------------------
  |  |  333|  28.9k|# define SSL_IS_FIRST_HANDSHAKE(S) ((s)->s3->tmp.finish_md_len == 0 \
  |  |  ------------------
  |  |  |  Branch (333:37): [True: 28.9k, False: 0]
  |  |  ------------------
  |  |  334|  28.9k|                                    || (s)->s3->tmp.peer_finish_md_len == 0)
  |  |  ------------------
  |  |  |  Branch (334:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2150|      0|        return 0;
 2151|       |
 2152|  28.9k|    ret = ssl_get_min_max_version(s, &ver_min, &ver_max, NULL);
 2153|       |
 2154|  28.9k|    if (ret != 0)
  ------------------
  |  Branch (2154:9): [True: 0, False: 28.9k]
  ------------------
 2155|      0|        return ret;
 2156|       |
 2157|  28.9k|    s->version = ver_max;
 2158|       |
 2159|       |    /* TLS1.3 always uses TLS1.2 in the legacy_version field */
 2160|  28.9k|    if (!SSL_IS_DTLS(s) && ver_max > TLS1_2_VERSION)
  ------------------
  |  |  319|  57.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  ------------------
                  if (!SSL_IS_DTLS(s) && ver_max > TLS1_2_VERSION)
  ------------------
  |  |   29|  28.9k|# define TLS1_2_VERSION                  0x0303
  ------------------
  |  Branch (2160:9): [True: 28.9k, False: 0]
  |  Branch (2160:28): [True: 28.9k, False: 0]
  ------------------
 2161|  28.9k|        ver_max = TLS1_2_VERSION;
  ------------------
  |  |   29|  28.9k|# define TLS1_2_VERSION                  0x0303
  ------------------
 2162|       |
 2163|  28.9k|    s->client_version = ver_max;
 2164|  28.9k|    return 0;
 2165|  28.9k|}
get_ca_names:
 2316|  28.9k|{
 2317|  28.9k|    const STACK_OF(X509_NAME) *ca_sk = NULL;;
 2318|       |
 2319|  28.9k|    if (s->server) {
  ------------------
  |  Branch (2319:9): [True: 0, False: 28.9k]
  ------------------
 2320|      0|        ca_sk = SSL_get_client_CA_list(s);
 2321|      0|        if (ca_sk != NULL && sk_X509_NAME_num(ca_sk) == 0)
  ------------------
  |  Branch (2321:13): [True: 0, False: 0]
  |  Branch (2321:30): [True: 0, False: 0]
  ------------------
 2322|      0|            ca_sk = NULL;
 2323|      0|    }
 2324|       |
 2325|  28.9k|    if (ca_sk == NULL)
  ------------------
  |  Branch (2325:9): [True: 28.9k, False: 0]
  ------------------
 2326|  28.9k|        ca_sk = SSL_get0_CA_list(s);
 2327|       |
 2328|  28.9k|    return ca_sk;
 2329|  28.9k|}
statem_lib.c:ssl_method_error:
 1485|   695k|{
 1486|   695k|    int version = method->version;
 1487|       |
 1488|   695k|    if ((s->min_proto_version != 0 &&
  ------------------
  |  Branch (1488:10): [True: 0, False: 695k]
  ------------------
 1489|      0|         version_cmp(s, version, s->min_proto_version) < 0) ||
  ------------------
  |  Branch (1489:10): [True: 0, False: 0]
  ------------------
 1490|   695k|        ssl_security(s, SSL_SECOP_VERSION, 0, version, NULL) == 0)
  ------------------
  |  | 2303|   695k|# define SSL_SECOP_VERSION               (9 | SSL_SECOP_OTHER_NONE)
  |  |  ------------------
  |  |  |  | 2274|   695k|# define SSL_SECOP_OTHER_NONE    0
  |  |  ------------------
  ------------------
  |  Branch (1490:9): [True: 0, False: 695k]
  ------------------
 1491|      0|        return SSL_R_VERSION_TOO_LOW;
  ------------------
  |  |  764|      0|# define SSL_R_VERSION_TOO_LOW                            396
  ------------------
 1492|       |
 1493|   695k|    if (s->max_proto_version != 0 &&
  ------------------
  |  Branch (1493:9): [True: 0, False: 695k]
  ------------------
 1494|      0|        version_cmp(s, version, s->max_proto_version) > 0)
  ------------------
  |  Branch (1494:9): [True: 0, False: 0]
  ------------------
 1495|      0|        return SSL_R_VERSION_TOO_HIGH;
  ------------------
  |  |  763|      0|# define SSL_R_VERSION_TOO_HIGH                           166
  ------------------
 1496|       |
 1497|   695k|    if ((s->options & method->mask) != 0)
  ------------------
  |  Branch (1497:9): [True: 0, False: 695k]
  ------------------
 1498|      0|        return SSL_R_UNSUPPORTED_PROTOCOL;
  ------------------
  |  |  759|      0|# define SSL_R_UNSUPPORTED_PROTOCOL                       258
  ------------------
 1499|   695k|    if ((method->flags & SSL_METHOD_NO_SUITEB) != 0 && tls1_suiteb(s))
  ------------------
  |  | 2111|   695k|# define SSL_METHOD_NO_SUITEB    (1U<<1)
  ------------------
                  if ((method->flags & SSL_METHOD_NO_SUITEB) != 0 && tls1_suiteb(s))
  ------------------
  |  | 1831|   347k|# define tls1_suiteb(s)  (s->cert->cert_flags & SSL_CERT_FLAG_SUITEB_128_LOS)
  |  |  ------------------
  |  |  |  |  522|   347k|# define SSL_CERT_FLAG_SUITEB_128_LOS            0x30000
  |  |  ------------------
  |  |  |  Branch (1831:26): [True: 0, False: 347k]
  |  |  ------------------
  ------------------
  |  Branch (1499:9): [True: 347k, False: 347k]
  ------------------
 1500|      0|        return SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE;
  ------------------
  |  |  462|      0|# define SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE     158
  ------------------
 1501|       |
 1502|   695k|    return 0;
 1503|   695k|}

tls1_default_timeout:
   97|  28.9k|{
   98|       |    /*
   99|       |     * 2 hours, the 24 hours mentioned in the TLSv1 spec is way too long for
  100|       |     * http, the cache would over fill
  101|       |     */
  102|  28.9k|    return (60 * 60 * 2);
  103|  28.9k|}
tls1_new:
  106|  28.9k|{
  107|  28.9k|    if (!ssl3_new(s))
  ------------------
  |  Branch (107:9): [True: 0, False: 28.9k]
  ------------------
  108|      0|        return 0;
  109|  28.9k|    if (!s->method->ssl_clear(s))
  ------------------
  |  Branch (109:9): [True: 0, False: 28.9k]
  ------------------
  110|      0|        return 0;
  111|       |
  112|  28.9k|    return 1;
  113|  28.9k|}
tls1_free:
  116|  28.9k|{
  117|  28.9k|    OPENSSL_free(s->ext.session_ticket);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  118|  28.9k|    ssl3_free(s);
  119|  28.9k|}
tls1_clear:
  122|   115k|{
  123|   115k|    if (!ssl3_clear(s))
  ------------------
  |  Branch (123:9): [True: 0, False: 115k]
  ------------------
  124|      0|        return 0;
  125|       |
  126|   115k|    if (s->method->version == TLS_ANY_VERSION)
  ------------------
  |  |   34|   115k|# define TLS_ANY_VERSION                 0x10000
  ------------------
  |  Branch (126:9): [True: 115k, False: 0]
  ------------------
  127|   115k|        s->version = TLS_MAX_VERSION;
  ------------------
  |  |   31|   115k|# define TLS_MAX_VERSION                 TLS1_3_VERSION
  |  |  ------------------
  |  |  |  |   30|   115k|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  ------------------
  128|      0|    else
  129|      0|        s->version = s->method->version;
  130|       |
  131|   115k|    return 1;
  132|   115k|}
tls1_group_id_lookup:
  195|   202k|{
  196|       |    /* ECC curves from RFC 4492 and RFC 7027 */
  197|   202k|    if (group_id < 1 || group_id > OSSL_NELEM(nid_list))
  ------------------
  |  |   13|   202k|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
  |  Branch (197:9): [True: 0, False: 202k]
  |  Branch (197:25): [True: 0, False: 202k]
  ------------------
  198|      0|        return NULL;
  199|   202k|    return &nid_list[group_id - 1];
  200|   202k|}
tls1_get_supported_groups:
  218|  57.9k|{
  219|       |
  220|       |    /* For Suite B mode only include P-256, P-384 */
  221|  57.9k|    switch (tls1_suiteb(s)) {
  ------------------
  |  | 1831|  57.9k|# define tls1_suiteb(s)  (s->cert->cert_flags & SSL_CERT_FLAG_SUITEB_128_LOS)
  |  |  ------------------
  |  |  |  |  522|  57.9k|# define SSL_CERT_FLAG_SUITEB_128_LOS            0x30000
  |  |  ------------------
  ------------------
  222|      0|    case SSL_CERT_FLAG_SUITEB_128_LOS:
  ------------------
  |  |  522|      0|# define SSL_CERT_FLAG_SUITEB_128_LOS            0x30000
  ------------------
  |  Branch (222:5): [True: 0, False: 57.9k]
  ------------------
  223|      0|        *pgroups = suiteb_curves;
  224|      0|        *pgroupslen = OSSL_NELEM(suiteb_curves);
  ------------------
  |  |   13|      0|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
  225|      0|        break;
  226|       |
  227|      0|    case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
  ------------------
  |  |  518|      0|# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY       0x10000
  ------------------
  |  Branch (227:5): [True: 0, False: 57.9k]
  ------------------
  228|      0|        *pgroups = suiteb_curves;
  229|      0|        *pgroupslen = 1;
  230|      0|        break;
  231|       |
  232|      0|    case SSL_CERT_FLAG_SUITEB_192_LOS:
  ------------------
  |  |  520|      0|# define SSL_CERT_FLAG_SUITEB_192_LOS            0x20000
  ------------------
  |  Branch (232:5): [True: 0, False: 57.9k]
  ------------------
  233|      0|        *pgroups = suiteb_curves + 1;
  234|      0|        *pgroupslen = 1;
  235|      0|        break;
  236|       |
  237|  57.9k|    default:
  ------------------
  |  Branch (237:5): [True: 57.9k, False: 0]
  ------------------
  238|  57.9k|        if (s->ext.supportedgroups == NULL) {
  ------------------
  |  Branch (238:13): [True: 57.9k, False: 0]
  ------------------
  239|  57.9k|            *pgroups = eccurves_default;
  240|  57.9k|            *pgroupslen = OSSL_NELEM(eccurves_default);
  ------------------
  |  |   13|  57.9k|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
  241|  57.9k|        } else {
  242|      0|            *pgroups = s->ext.supportedgroups;
  243|      0|            *pgroupslen = s->ext.supportedgroups_len;
  244|      0|        }
  245|  57.9k|        break;
  246|  57.9k|    }
  247|  57.9k|}
tls_curve_allowed:
  251|   173k|{
  252|   173k|    const TLS_GROUP_INFO *cinfo = tls1_group_id_lookup(curve);
  253|   173k|    unsigned char ctmp[2];
  254|       |
  255|   173k|    if (cinfo == NULL)
  ------------------
  |  Branch (255:9): [True: 0, False: 173k]
  ------------------
  256|      0|        return 0;
  257|       |# ifdef OPENSSL_NO_EC2M
  258|       |    if (cinfo->flags & TLS_CURVE_CHAR2)
  259|       |        return 0;
  260|       |# endif
  261|   173k|    ctmp[0] = curve >> 8;
  262|   173k|    ctmp[1] = curve & 0xff;
  263|   173k|    return ssl_security(s, op, cinfo->secbits, cinfo->nid, (void *)ctmp);
  264|   173k|}
tls1_get_formatlist:
  536|  28.9k|{
  537|       |    /*
  538|       |     * If we have a custom point format list use it otherwise use default
  539|       |     */
  540|  28.9k|    if (s->ext.ecpointformats) {
  ------------------
  |  Branch (540:9): [True: 0, False: 28.9k]
  ------------------
  541|      0|        *pformats = s->ext.ecpointformats;
  542|      0|        *num_formats = s->ext.ecpointformats_len;
  543|  28.9k|    } else {
  544|  28.9k|        *pformats = ecformats_default;
  545|       |        /* For Suite B we don't support char2 fields */
  546|  28.9k|        if (tls1_suiteb(s))
  ------------------
  |  | 1831|  28.9k|# define tls1_suiteb(s)  (s->cert->cert_flags & SSL_CERT_FLAG_SUITEB_128_LOS)
  |  |  ------------------
  |  |  |  |  522|  28.9k|# define SSL_CERT_FLAG_SUITEB_128_LOS            0x30000
  |  |  ------------------
  |  |  |  Branch (1831:26): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  547|      0|            *num_formats = sizeof(ecformats_default) - 1;
  548|  28.9k|        else
  549|  28.9k|            *num_formats = sizeof(ecformats_default);
  550|  28.9k|    }
  551|  28.9k|}
tls1_lookup_md:
  814|  1.94M|{
  815|  1.94M|    const EVP_MD *md;
  816|  1.94M|    if (lu == NULL)
  ------------------
  |  Branch (816:9): [True: 0, False: 1.94M]
  ------------------
  817|      0|        return 0;
  818|       |    /* lu->hash == NID_undef means no associated digest */
  819|  1.94M|    if (lu->hash == NID_undef) {
  ------------------
  |  |   14|  1.94M|#define NID_undef                       0
  ------------------
  |  Branch (819:9): [True: 115k, False: 1.82M]
  ------------------
  820|   115k|        md = NULL;
  821|  1.82M|    } else {
  822|  1.82M|        md = ssl_md(lu->hash_idx);
  823|  1.82M|        if (md == NULL)
  ------------------
  |  Branch (823:13): [True: 86.9k, False: 1.73M]
  ------------------
  824|  86.9k|            return 0;
  825|  1.82M|    }
  826|  1.85M|    if (pmd)
  ------------------
  |  Branch (826:9): [True: 927k, False: 927k]
  ------------------
  827|   927k|        *pmd = md;
  828|  1.85M|    return 1;
  829|  1.94M|}
tls12_get_psigalgs:
  924|   115k|{
  925|       |    /*
  926|       |     * If Suite B mode use Suite B sigalgs only, ignore any other
  927|       |     * preferences.
  928|       |     */
  929|   115k|#ifndef OPENSSL_NO_EC
  930|   115k|    switch (tls1_suiteb(s)) {
  ------------------
  |  | 1831|   115k|# define tls1_suiteb(s)  (s->cert->cert_flags & SSL_CERT_FLAG_SUITEB_128_LOS)
  |  |  ------------------
  |  |  |  |  522|   115k|# define SSL_CERT_FLAG_SUITEB_128_LOS            0x30000
  |  |  ------------------
  |  |  |  Branch (1831:26): [True: 0, False: 115k]
  |  |  ------------------
  ------------------
  931|      0|    case SSL_CERT_FLAG_SUITEB_128_LOS:
  ------------------
  |  |  522|      0|# define SSL_CERT_FLAG_SUITEB_128_LOS            0x30000
  ------------------
  |  Branch (931:5): [True: 0, False: 115k]
  ------------------
  932|      0|        *psigs = suiteb_sigalgs;
  933|      0|        return OSSL_NELEM(suiteb_sigalgs);
  ------------------
  |  |   13|      0|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
  934|       |
  935|      0|    case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
  ------------------
  |  |  518|      0|# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY       0x10000
  ------------------
  |  Branch (935:5): [True: 0, False: 115k]
  ------------------
  936|      0|        *psigs = suiteb_sigalgs;
  937|      0|        return 1;
  938|       |
  939|      0|    case SSL_CERT_FLAG_SUITEB_192_LOS:
  ------------------
  |  |  520|      0|# define SSL_CERT_FLAG_SUITEB_192_LOS            0x20000
  ------------------
  |  Branch (939:5): [True: 0, False: 115k]
  ------------------
  940|      0|        *psigs = suiteb_sigalgs + 1;
  941|      0|        return 1;
  942|   115k|    }
  943|   115k|#endif
  944|       |    /*
  945|       |     *  We use client_sigalgs (if not NULL) if we're a server
  946|       |     *  and sending a certificate request or if we're a client and
  947|       |     *  determining which shared algorithm to use.
  948|       |     */
  949|   115k|    if ((s->server == sent) && s->cert->client_sigalgs != NULL) {
  ------------------
  |  Branch (949:9): [True: 0, False: 115k]
  |  Branch (949:32): [True: 0, False: 0]
  ------------------
  950|      0|        *psigs = s->cert->client_sigalgs;
  951|      0|        return s->cert->client_sigalgslen;
  952|   115k|    } else if (s->cert->conf_sigalgs) {
  ------------------
  |  Branch (952:16): [True: 0, False: 115k]
  ------------------
  953|      0|        *psigs = s->cert->conf_sigalgs;
  954|      0|        return s->cert->conf_sigalgslen;
  955|   115k|    } else {
  956|   115k|        *psigs = tls12_sigalgs;
  957|   115k|        return OSSL_NELEM(tls12_sigalgs);
  ------------------
  |  |   13|   115k|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
  958|   115k|    }
  959|   115k|}
ssl_set_client_disabled:
 1181|  86.9k|{
 1182|  86.9k|    s->s3->tmp.mask_a = 0;
 1183|  86.9k|    s->s3->tmp.mask_k = 0;
 1184|  86.9k|    ssl_set_sig_mask(&s->s3->tmp.mask_a, s, SSL_SECOP_SIGALG_MASK);
  ------------------
  |  | 2313|  86.9k|# define SSL_SECOP_SIGALG_MASK           (14 | SSL_SECOP_OTHER_SIGALG)
  |  |  ------------------
  |  |  |  | 2279|  86.9k|# define SSL_SECOP_OTHER_SIGALG  (5 << 16)
  |  |  ------------------
  ------------------
 1185|  86.9k|    if (ssl_get_min_max_version(s, &s->s3->tmp.min_ver,
  ------------------
  |  Branch (1185:9): [True: 0, False: 86.9k]
  ------------------
 1186|  86.9k|                                &s->s3->tmp.max_ver, NULL) != 0)
 1187|      0|        return 0;
 1188|  86.9k|#ifndef OPENSSL_NO_PSK
 1189|       |    /* with PSK there must be client callback set */
 1190|  86.9k|    if (!s->psk_client_callback) {
  ------------------
  |  Branch (1190:9): [True: 86.9k, False: 0]
  ------------------
 1191|  86.9k|        s->s3->tmp.mask_a |= SSL_aPSK;
  ------------------
  |  |  197|  86.9k|# define SSL_aPSK                0x00000010U
  ------------------
 1192|  86.9k|        s->s3->tmp.mask_k |= SSL_PSK;
  ------------------
  |  |  182|  86.9k|# define SSL_PSK     (SSL_kPSK | SSL_kRSAPSK | SSL_kECDHEPSK | SSL_kDHEPSK)
  |  |  ------------------
  |  |  |  |  170|  86.9k|# define SSL_kPSK                0x00000008U
  |  |  ------------------
  |  |               # define SSL_PSK     (SSL_kPSK | SSL_kRSAPSK | SSL_kECDHEPSK | SSL_kDHEPSK)
  |  |  ------------------
  |  |  |  |  176|  86.9k|# define SSL_kRSAPSK             0x00000040U
  |  |  ------------------
  |  |               # define SSL_PSK     (SSL_kPSK | SSL_kRSAPSK | SSL_kECDHEPSK | SSL_kDHEPSK)
  |  |  ------------------
  |  |  |  |  177|  86.9k|# define SSL_kECDHEPSK           0x00000080U
  |  |  ------------------
  |  |               # define SSL_PSK     (SSL_kPSK | SSL_kRSAPSK | SSL_kECDHEPSK | SSL_kDHEPSK)
  |  |  ------------------
  |  |  |  |  178|  86.9k|# define SSL_kDHEPSK             0x00000100U
  |  |  ------------------
  ------------------
 1193|  86.9k|    }
 1194|  86.9k|#endif                          /* OPENSSL_NO_PSK */
 1195|  86.9k|#ifndef OPENSSL_NO_SRP
 1196|  86.9k|    if (!(s->srp_ctx.srp_Mask & SSL_kSRP)) {
  ------------------
  |  |  174|  86.9k|# define SSL_kSRP                0x00000020U
  ------------------
  |  Branch (1196:9): [True: 86.9k, False: 0]
  ------------------
 1197|  86.9k|        s->s3->tmp.mask_a |= SSL_aSRP;
  ------------------
  |  |  201|  86.9k|# define SSL_aSRP                0x00000040U
  ------------------
 1198|  86.9k|        s->s3->tmp.mask_k |= SSL_kSRP;
  ------------------
  |  |  174|  86.9k|# define SSL_kSRP                0x00000020U
  ------------------
 1199|  86.9k|    }
 1200|  86.9k|#endif
 1201|  86.9k|    return 1;
 1202|  86.9k|}
ssl_cipher_disabled:
 1214|  5.21M|{
 1215|  5.21M|    if (c->algorithm_mkey & s->s3->tmp.mask_k
  ------------------
  |  Branch (1215:9): [True: 2.60M, False: 2.60M]
  ------------------
 1216|  2.60M|        || c->algorithm_auth & s->s3->tmp.mask_a)
  ------------------
  |  Branch (1216:12): [True: 0, False: 2.60M]
  ------------------
 1217|  2.60M|        return 1;
 1218|  2.60M|    if (s->s3->tmp.max_ver == 0)
  ------------------
  |  Branch (1218:9): [True: 0, False: 2.60M]
  ------------------
 1219|      0|        return 1;
 1220|  2.60M|    if (!SSL_IS_DTLS(s)) {
  ------------------
  |  |  319|  2.60M|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  2.60M|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  ------------------
  |  Branch (1220:9): [True: 2.60M, False: 0]
  ------------------
 1221|  2.60M|        int min_tls = c->min_tls;
 1222|       |
 1223|       |        /*
 1224|       |         * For historical reasons we will allow ECHDE to be selected by a server
 1225|       |         * in SSLv3 if we are a client
 1226|       |         */
 1227|  2.60M|        if (min_tls == TLS1_VERSION && ecdhe
  ------------------
  |  |   27|  5.21M|# define TLS1_VERSION                    0x0301
  ------------------
  |  Branch (1227:13): [True: 347k, False: 2.26M]
  |  Branch (1227:40): [True: 0, False: 347k]
  ------------------
 1228|      0|                && (c->algorithm_mkey & (SSL_kECDHE | SSL_kECDHEPSK)) != 0)
  ------------------
  |  |  166|      0|# define SSL_kECDHE              0x00000004U
  ------------------
                              && (c->algorithm_mkey & (SSL_kECDHE | SSL_kECDHEPSK)) != 0)
  ------------------
  |  |  177|      0|# define SSL_kECDHEPSK           0x00000080U
  ------------------
  |  Branch (1228:20): [True: 0, False: 0]
  ------------------
 1229|      0|            min_tls = SSL3_VERSION;
  ------------------
  |  |  209|      0|# define SSL3_VERSION                    0x0300
  ------------------
 1230|       |
 1231|  2.60M|        if ((min_tls > s->s3->tmp.max_ver) || (c->max_tls < s->s3->tmp.min_ver))
  ------------------
  |  Branch (1231:13): [True: 0, False: 2.60M]
  |  Branch (1231:47): [True: 0, False: 2.60M]
  ------------------
 1232|      0|            return 1;
 1233|  2.60M|    }
 1234|  2.60M|    if (SSL_IS_DTLS(s) && (DTLS_VERSION_GT(c->min_dtls, s->s3->tmp.max_ver)
  ------------------
  |  |  319|  5.21M|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|  2.60M|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  |  |  |  Branch (319:26): [True: 0, False: 2.60M]
  |  |  ------------------
  ------------------
                  if (SSL_IS_DTLS(s) && (DTLS_VERSION_GT(c->min_dtls, s->s3->tmp.max_ver)
  ------------------
  |  |  138|      0|# define DTLS_VERSION_GT(v1, v2) (dtls_ver_ordinal(v1) < dtls_ver_ordinal(v2))
  |  |  ------------------
  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               # define DTLS_VERSION_GT(v1, v2) (dtls_ver_ordinal(v1) < dtls_ver_ordinal(v2))
  |  |  ------------------
  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (138:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1235|      0|                           || DTLS_VERSION_LT(c->max_dtls, s->s3->tmp.min_ver)))
  ------------------
  |  |  140|      0|# define DTLS_VERSION_LT(v1, v2) (dtls_ver_ordinal(v1) > dtls_ver_ordinal(v2))
  |  |  ------------------
  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               # define DTLS_VERSION_LT(v1, v2) (dtls_ver_ordinal(v1) > dtls_ver_ordinal(v2))
  |  |  ------------------
  |  |  |  |  137|      0|# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|# define DTLS1_BAD_VER                   0x0100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (140:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1236|      0|        return 1;
 1237|       |
 1238|  2.60M|    return !ssl_security(s, op, c->strength_bits, 0, (void *)c);
 1239|  2.60M|}
tls_use_ticket:
 1242|  28.9k|{
 1243|  28.9k|    if ((s->options & SSL_OP_NO_TICKET))
  ------------------
  |  |  333|  28.9k|# define SSL_OP_NO_TICKET                                0x00004000U
  ------------------
  |  Branch (1243:9): [True: 0, False: 28.9k]
  ------------------
 1244|      0|        return 0;
 1245|  28.9k|    return ssl_security(s, SSL_SECOP_TICKET, 0, 0, NULL);
  ------------------
  |  | 2305|  28.9k|# define SSL_SECOP_TICKET                (10 | SSL_SECOP_OTHER_NONE)
  |  |  ------------------
  |  |  |  | 2274|  28.9k|# define SSL_SECOP_OTHER_NONE    0
  |  |  ------------------
  ------------------
 1246|  28.9k|}
ssl_set_sig_mask:
 1668|  86.9k|{
 1669|  86.9k|    const uint16_t *sigalgs;
 1670|  86.9k|    size_t i, sigalgslen;
 1671|  86.9k|    uint32_t disabled_mask = SSL_aRSA | SSL_aDSS | SSL_aECDSA;
  ------------------
  |  |  189|  86.9k|# define SSL_aRSA                0x00000001U
  ------------------
                  uint32_t disabled_mask = SSL_aRSA | SSL_aDSS | SSL_aECDSA;
  ------------------
  |  |  191|  86.9k|# define SSL_aDSS                0x00000002U
  ------------------
                  uint32_t disabled_mask = SSL_aRSA | SSL_aDSS | SSL_aECDSA;
  ------------------
  |  |  195|  86.9k|# define SSL_aECDSA              0x00000008U
  ------------------
 1672|       |    /*
 1673|       |     * Go through all signature algorithms seeing if we support any
 1674|       |     * in disabled_mask.
 1675|       |     */
 1676|  86.9k|    sigalgslen = tls12_get_psigalgs(s, 1, &sigalgs);
 1677|  2.34M|    for (i = 0; i < sigalgslen; i++, sigalgs++) {
  ------------------
  |  Branch (1677:17): [True: 2.26M, False: 86.9k]
  ------------------
 1678|  2.26M|        const SIGALG_LOOKUP *lu = tls1_lookup_sigalg(*sigalgs);
 1679|  2.26M|        const SSL_CERT_LOOKUP *clu;
 1680|       |
 1681|  2.26M|        if (lu == NULL)
  ------------------
  |  Branch (1681:13): [True: 0, False: 2.26M]
  ------------------
 1682|      0|            continue;
 1683|       |
 1684|  2.26M|        clu = ssl_cert_lookup_by_idx(lu->sig_idx);
 1685|  2.26M|	if (clu == NULL)
  ------------------
  |  Branch (1685:6): [True: 0, False: 2.26M]
  ------------------
 1686|      0|		continue;
 1687|       |
 1688|       |        /* If algorithm is disabled see if we can enable it */
 1689|  2.26M|        if ((clu->amask & disabled_mask) != 0
  ------------------
  |  Branch (1689:13): [True: 260k, False: 2.00M]
  ------------------
 1690|   260k|                && tls12_sigalg_allowed(s, op, lu))
  ------------------
  |  Branch (1690:20): [True: 260k, False: 0]
  ------------------
 1691|   260k|            disabled_mask &= ~clu->amask;
 1692|  2.26M|    }
 1693|  86.9k|    *pmask_a |= disabled_mask;
 1694|  86.9k|}
tls12_copy_sigalgs:
 1698|  28.9k|{
 1699|  28.9k|    size_t i;
 1700|  28.9k|    int rv = 0;
 1701|       |
 1702|   782k|    for (i = 0; i < psiglen; i++, psig++) {
  ------------------
  |  Branch (1702:17): [True: 753k, False: 28.9k]
  ------------------
 1703|   753k|        const SIGALG_LOOKUP *lu = tls1_lookup_sigalg(*psig);
 1704|       |
 1705|   753k|        if (!tls12_sigalg_allowed(s, SSL_SECOP_SIGALG_SUPPORTED, lu))
  ------------------
  |  | 2307|   753k|# define SSL_SECOP_SIGALG_SUPPORTED      (11 | SSL_SECOP_OTHER_SIGALG)
  |  |  ------------------
  |  |  |  | 2279|   753k|# define SSL_SECOP_OTHER_SIGALG  (5 << 16)
  |  |  ------------------
  ------------------
  |  Branch (1705:13): [True: 86.9k, False: 666k]
  ------------------
 1706|  86.9k|            continue;
 1707|   666k|        if (!WPACKET_put_bytes_u16(pkt, *psig))
  ------------------
  |  |  820|   666k|    WPACKET_put_bytes__((pkt), (val), 2)
  ------------------
  |  Branch (1707:13): [True: 0, False: 666k]
  ------------------
 1708|      0|            return 0;
 1709|       |        /*
 1710|       |         * If TLS 1.3 must have at least one valid TLS 1.3 message
 1711|       |         * signing algorithm: i.e. neither RSA nor SHA1/SHA224
 1712|       |         */
 1713|   666k|        if (rv == 0 && (!SSL_IS_TLS13(s)
  ------------------
  |  |  322|  57.9k|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|  57.9k|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|  28.9k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 28.9k, False: 0]
  |  |  ------------------
  |  |  323|  28.9k|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|  57.9k|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 28.9k, False: 0]
  |  |  ------------------
  |  |  324|  57.9k|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|  28.9k|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 28.9k]
  |  |  ------------------
  ------------------
  |  Branch (1713:13): [True: 28.9k, False: 637k]
  ------------------
 1714|      0|            || (lu->sig != EVP_PKEY_RSA
  ------------------
  |  |   42|      0|# define EVP_PKEY_RSA    NID_rsaEncryption
  |  |  ------------------
  |  |  |  |  534|      0|#define NID_rsaEncryption               6
  |  |  ------------------
  ------------------
  |  Branch (1714:17): [True: 0, False: 0]
  ------------------
 1715|      0|                && lu->hash != NID_sha1
  ------------------
  |  | 2093|      0|#define NID_sha1                64
  ------------------
  |  Branch (1715:20): [True: 0, False: 0]
  ------------------
 1716|      0|                && lu->hash != NID_sha224)))
  ------------------
  |  | 2911|      0|#define NID_sha224              675
  ------------------
  |  Branch (1716:20): [True: 0, False: 0]
  ------------------
 1717|  28.9k|            rv = 1;
 1718|   666k|    }
 1719|  28.9k|    if (rv == 0)
  ------------------
  |  Branch (1719:9): [True: 0, False: 28.9k]
  ------------------
 1720|  28.9k|        SSLerr(SSL_F_TLS12_COPY_SIGALGS, SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
 1721|  28.9k|    return rv;
 1722|  28.9k|}
t1_lib.c:tls1_lookup_sigalg:
  801|  3.01M|{
  802|  3.01M|    size_t i;
  803|  3.01M|    const SIGALG_LOOKUP *s;
  804|       |
  805|  40.6M|    for (i = 0, s = sigalg_lookup_tbl; i < OSSL_NELEM(sigalg_lookup_tbl);
  ------------------
  |  |   13|  40.6M|# define OSSL_NELEM(x)    (sizeof(x)/sizeof((x)[0]))
  ------------------
  |  Branch (805:40): [True: 40.6M, False: 0]
  ------------------
  806|  40.6M|         i++, s++) {
  807|  40.6M|        if (s->sigalg == sigalg)
  ------------------
  |  Branch (807:13): [True: 3.01M, False: 37.6M]
  ------------------
  808|  3.01M|            return s;
  809|  40.6M|    }
  810|      0|    return NULL;
  811|  3.01M|}
t1_lib.c:sigalg_security_bits:
  999|   927k|{
 1000|   927k|    const EVP_MD *md = NULL;
 1001|   927k|    int secbits = 0;
 1002|       |
 1003|   927k|    if (!tls1_lookup_md(lu, &md))
  ------------------
  |  Branch (1003:9): [True: 0, False: 927k]
  ------------------
 1004|      0|        return 0;
 1005|   927k|    if (md != NULL)
  ------------------
  |  Branch (1005:9): [True: 869k, False: 57.9k]
  ------------------
 1006|   869k|    {
 1007|       |        /* Security bits: half digest bits */
 1008|   869k|        secbits = EVP_MD_size(md) * 4;
 1009|   869k|    } else {
 1010|       |        /* Values from https://tools.ietf.org/html/rfc8032#section-8.5 */
 1011|  57.9k|        if (lu->sigalg == TLSEXT_SIGALG_ed25519)
  ------------------
  |  | 2049|  57.9k|#define TLSEXT_SIGALG_ed25519                                   0x0807
  ------------------
  |  Branch (1011:13): [True: 28.9k, False: 28.9k]
  ------------------
 1012|  28.9k|            secbits = 128;
 1013|  28.9k|        else if (lu->sigalg == TLSEXT_SIGALG_ed448)
  ------------------
  |  | 2050|  28.9k|#define TLSEXT_SIGALG_ed448                                     0x0808
  ------------------
  |  Branch (1013:18): [True: 28.9k, False: 0]
  ------------------
 1014|  28.9k|            secbits = 224;
 1015|  57.9k|    }
 1016|   927k|    return secbits;
 1017|   927k|}
t1_lib.c:tls12_sigalg_allowed:
 1594|  1.01M|{
 1595|  1.01M|    unsigned char sigalgstr[2];
 1596|  1.01M|    int secbits;
 1597|       |
 1598|       |    /* See if sigalgs is recognised and if hash is enabled */
 1599|  1.01M|    if (!tls1_lookup_md(lu, NULL))
  ------------------
  |  Branch (1599:9): [True: 86.9k, False: 927k]
  ------------------
 1600|  86.9k|        return 0;
 1601|       |    /* DSA is not allowed in TLS 1.3 */
 1602|   927k|    if (SSL_IS_TLS13(s) && lu->sig == EVP_PKEY_DSA)
  ------------------
  |  |  322|  1.85M|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|  1.85M|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|   927k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 927k, False: 0]
  |  |  ------------------
  |  |  323|   927k|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|  1.85M|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 927k, False: 0]
  |  |  ------------------
  |  |  324|  1.85M|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|   927k|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 927k]
  |  |  ------------------
  ------------------
                  if (SSL_IS_TLS13(s) && lu->sig == EVP_PKEY_DSA)
  ------------------
  |  |   45|      0|# define EVP_PKEY_DSA    NID_dsa
  |  |  ------------------
  |  |  |  |  127|      0|#define NID_dsa         116
  |  |  ------------------
  ------------------
  |  Branch (1602:28): [True: 0, False: 0]
  ------------------
 1603|      0|        return 0;
 1604|       |    /* TODO(OpenSSL1.2) fully axe DSA/etc. in ClientHello per TLS 1.3 spec */
 1605|   927k|    if (!s->server && !SSL_IS_DTLS(s) && s->s3->tmp.min_ver >= TLS1_3_VERSION
  ------------------
  |  |  319|  1.85M|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  ------------------
  |  |  |  | 1994|   927k|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  ------------------
  ------------------
                  if (!s->server && !SSL_IS_DTLS(s) && s->s3->tmp.min_ver >= TLS1_3_VERSION
  ------------------
  |  |   30|  1.85M|# define TLS1_3_VERSION                  0x0304
  ------------------
  |  Branch (1605:9): [True: 927k, False: 0]
  |  Branch (1605:23): [True: 927k, False: 0]
  |  Branch (1605:42): [True: 0, False: 927k]
  ------------------
 1606|      0|        && (lu->sig == EVP_PKEY_DSA || lu->hash_idx == SSL_MD_SHA1_IDX
  ------------------
  |  |   45|      0|# define EVP_PKEY_DSA    NID_dsa
  |  |  ------------------
  |  |  |  |  127|      0|#define NID_dsa         116
  |  |  ------------------
  ------------------
                      && (lu->sig == EVP_PKEY_DSA || lu->hash_idx == SSL_MD_SHA1_IDX
  ------------------
  |  |  262|      0|# define SSL_MD_SHA1_IDX 1
  ------------------
  |  Branch (1606:13): [True: 0, False: 0]
  |  Branch (1606:40): [True: 0, False: 0]
  ------------------
 1607|      0|            || lu->hash_idx == SSL_MD_MD5_IDX
  ------------------
  |  |  261|      0|# define SSL_MD_MD5_IDX  0
  ------------------
  |  Branch (1607:16): [True: 0, False: 0]
  ------------------
 1608|      0|            || lu->hash_idx == SSL_MD_SHA224_IDX))
  ------------------
  |  |  271|      0|# define SSL_MD_SHA224_IDX 10
  ------------------
  |  Branch (1608:16): [True: 0, False: 0]
  ------------------
 1609|      0|        return 0;
 1610|       |
 1611|       |    /* See if public key algorithm allowed */
 1612|   927k|    if (ssl_cert_is_disabled(lu->sig_idx))
  ------------------
  |  Branch (1612:9): [True: 0, False: 927k]
  ------------------
 1613|      0|        return 0;
 1614|       |
 1615|   927k|    if (lu->sig == NID_id_GostR3410_2012_256
  ------------------
  |  | 4175|  1.85M|#define NID_id_GostR3410_2012_256               979
  ------------------
  |  Branch (1615:9): [True: 0, False: 927k]
  ------------------
 1616|   927k|            || lu->sig == NID_id_GostR3410_2012_512
  ------------------
  |  | 4180|  1.85M|#define NID_id_GostR3410_2012_512               980
  ------------------
  |  Branch (1616:16): [True: 0, False: 927k]
  ------------------
 1617|   927k|            || lu->sig == NID_id_GostR3410_2001) {
  ------------------
  |  | 3964|   927k|#define NID_id_GostR3410_2001           811
  ------------------
  |  Branch (1617:16): [True: 0, False: 927k]
  ------------------
 1618|       |        /* We never allow GOST sig algs on the server with TLSv1.3 */
 1619|      0|        if (s->server && SSL_IS_TLS13(s))
  ------------------
  |  |  322|      0|# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
  |  |  ------------------
  |  |  |  |  319|      0|# define SSL_IS_DTLS(s)  (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1994|      0|# define SSL_ENC_FLAG_DTLS               0x8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:27): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|                          && (s)->method->version >= TLS1_3_VERSION \
  |  |  ------------------
  |  |  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  |  |  ------------------
  |  |  |  Branch (323:30): [True: 0, False: 0]
  |  |  ------------------
  |  |  324|      0|                          && (s)->method->version != TLS_ANY_VERSION)
  |  |  ------------------
  |  |  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  |  |  ------------------
  |  |  |  Branch (324:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1619:13): [True: 0, False: 0]
  ------------------
 1620|      0|            return 0;
 1621|      0|        if (!s->server
  ------------------
  |  Branch (1621:13): [True: 0, False: 0]
  ------------------
 1622|      0|                && s->method->version == TLS_ANY_VERSION
  ------------------
  |  |   34|      0|# define TLS_ANY_VERSION                 0x10000
  ------------------
  |  Branch (1622:20): [True: 0, False: 0]
  ------------------
 1623|      0|                && s->s3->tmp.max_ver >= TLS1_3_VERSION) {
  ------------------
  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  ------------------
  |  Branch (1623:20): [True: 0, False: 0]
  ------------------
 1624|      0|            int i, num;
 1625|      0|            STACK_OF(SSL_CIPHER) *sk;
  ------------------
  |  |   20|      0|# define STACK_OF(type) struct stack_st_##type
  ------------------
 1626|       |
 1627|       |            /*
 1628|       |             * We're a client that could negotiate TLSv1.3. We only allow GOST
 1629|       |             * sig algs if we could negotiate TLSv1.2 or below and we have GOST
 1630|       |             * ciphersuites enabled.
 1631|       |             */
 1632|       |
 1633|      0|            if (s->s3->tmp.min_ver >= TLS1_3_VERSION)
  ------------------
  |  |   30|      0|# define TLS1_3_VERSION                  0x0304
  ------------------
  |  Branch (1633:17): [True: 0, False: 0]
  ------------------
 1634|      0|                return 0;
 1635|       |
 1636|      0|            sk = SSL_get_ciphers(s);
 1637|      0|            num = sk != NULL ? sk_SSL_CIPHER_num(sk) : 0;
  ------------------
  |  Branch (1637:19): [True: 0, False: 0]
  ------------------
 1638|      0|            for (i = 0; i < num; i++) {
  ------------------
  |  Branch (1638:25): [True: 0, False: 0]
  ------------------
 1639|      0|                const SSL_CIPHER *c;
 1640|       |
 1641|      0|                c = sk_SSL_CIPHER_value(sk, i);
 1642|       |                /* Skip disabled ciphers */
 1643|      0|                if (ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_SUPPORTED, 0))
  ------------------
  |  | 2289|      0|# define SSL_SECOP_CIPHER_SUPPORTED      (1 | SSL_SECOP_OTHER_CIPHER)
  |  |  ------------------
  |  |  |  | 2275|      0|# define SSL_SECOP_OTHER_CIPHER  (1 << 16)
  |  |  ------------------
  ------------------
  |  Branch (1643:21): [True: 0, False: 0]
  ------------------
 1644|      0|                    continue;
 1645|       |
 1646|      0|                if ((c->algorithm_mkey & SSL_kGOST) != 0)
  ------------------
  |  |  172|      0|# define SSL_kGOST               0x00000010U
  ------------------
  |  Branch (1646:21): [True: 0, False: 0]
  ------------------
 1647|      0|                    break;
 1648|      0|            }
 1649|      0|            if (i == num)
  ------------------
  |  Branch (1649:17): [True: 0, False: 0]
  ------------------
 1650|      0|                return 0;
 1651|      0|        }
 1652|      0|    }
 1653|       |
 1654|       |    /* Finally see if security callback allows it */
 1655|   927k|    secbits = sigalg_security_bits(lu);
 1656|   927k|    sigalgstr[0] = (lu->sigalg >> 8) & 0xff;
 1657|   927k|    sigalgstr[1] = lu->sigalg & 0xff;
 1658|   927k|    return ssl_security(s, op, secbits, lu->hash, (void *)sigalgstr);
 1659|   927k|}

SSL_CTX_SRP_CTX_free:
   23|  28.9k|{
   24|  28.9k|    if (ctx == NULL)
  ------------------
  |  Branch (24:9): [True: 0, False: 28.9k]
  ------------------
   25|      0|        return 0;
   26|  28.9k|    OPENSSL_free(ctx->srp_ctx.login);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   27|  28.9k|    OPENSSL_free(ctx->srp_ctx.info);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   28|  28.9k|    BN_free(ctx->srp_ctx.N);
   29|  28.9k|    BN_free(ctx->srp_ctx.g);
   30|  28.9k|    BN_free(ctx->srp_ctx.s);
   31|  28.9k|    BN_free(ctx->srp_ctx.B);
   32|  28.9k|    BN_free(ctx->srp_ctx.A);
   33|  28.9k|    BN_free(ctx->srp_ctx.a);
   34|  28.9k|    BN_free(ctx->srp_ctx.b);
   35|  28.9k|    BN_free(ctx->srp_ctx.v);
   36|  28.9k|    memset(&ctx->srp_ctx, 0, sizeof(ctx->srp_ctx));
   37|  28.9k|    ctx->srp_ctx.strength = SRP_MINIMAL_N;
  ------------------
  |  |  128|  28.9k|# define SRP_MINIMAL_N 1024
  ------------------
   38|  28.9k|    return 1;
   39|  28.9k|}
SSL_SRP_CTX_free:
   42|  28.9k|{
   43|  28.9k|    if (s == NULL)
  ------------------
  |  Branch (43:9): [True: 0, False: 28.9k]
  ------------------
   44|      0|        return 0;
   45|  28.9k|    OPENSSL_free(s->srp_ctx.login);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   46|  28.9k|    OPENSSL_free(s->srp_ctx.info);
  ------------------
  |  |  128|  28.9k|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   47|  28.9k|    BN_free(s->srp_ctx.N);
   48|  28.9k|    BN_free(s->srp_ctx.g);
   49|  28.9k|    BN_free(s->srp_ctx.s);
   50|  28.9k|    BN_free(s->srp_ctx.B);
   51|  28.9k|    BN_free(s->srp_ctx.A);
   52|  28.9k|    BN_free(s->srp_ctx.a);
   53|  28.9k|    BN_free(s->srp_ctx.b);
   54|  28.9k|    BN_free(s->srp_ctx.v);
   55|  28.9k|    memset(&s->srp_ctx, 0, sizeof(s->srp_ctx));
   56|  28.9k|    s->srp_ctx.strength = SRP_MINIMAL_N;
  ------------------
  |  |  128|  28.9k|# define SRP_MINIMAL_N 1024
  ------------------
   57|  28.9k|    return 1;
   58|  28.9k|}
SSL_SRP_CTX_init:
   61|  28.9k|{
   62|  28.9k|    SSL_CTX *ctx;
   63|       |
   64|  28.9k|    if ((s == NULL) || ((ctx = s->ctx) == NULL))
  ------------------
  |  Branch (64:9): [True: 0, False: 28.9k]
  |  Branch (64:24): [True: 0, False: 28.9k]
  ------------------
   65|      0|        return 0;
   66|       |
   67|  28.9k|    memset(&s->srp_ctx, 0, sizeof(s->srp_ctx));
   68|       |
   69|  28.9k|    s->srp_ctx.SRP_cb_arg = ctx->srp_ctx.SRP_cb_arg;
   70|       |    /* set client Hello login callback */
   71|  28.9k|    s->srp_ctx.TLS_ext_srp_username_callback =
   72|  28.9k|        ctx->srp_ctx.TLS_ext_srp_username_callback;
   73|       |    /* set SRP N/g param callback for verification */
   74|  28.9k|    s->srp_ctx.SRP_verify_param_callback =
   75|  28.9k|        ctx->srp_ctx.SRP_verify_param_callback;
   76|       |    /* set SRP client passwd callback */
   77|  28.9k|    s->srp_ctx.SRP_give_srp_client_pwd_callback =
   78|  28.9k|        ctx->srp_ctx.SRP_give_srp_client_pwd_callback;
   79|       |
   80|  28.9k|    s->srp_ctx.strength = ctx->srp_ctx.strength;
   81|       |
   82|  28.9k|    if (((ctx->srp_ctx.N != NULL) &&
  ------------------
  |  Branch (82:10): [True: 0, False: 28.9k]
  ------------------
   83|      0|         ((s->srp_ctx.N = BN_dup(ctx->srp_ctx.N)) == NULL)) ||
  ------------------
  |  Branch (83:10): [True: 0, False: 0]
  ------------------
   84|  28.9k|        ((ctx->srp_ctx.g != NULL) &&
  ------------------
  |  Branch (84:10): [True: 0, False: 28.9k]
  ------------------
   85|      0|         ((s->srp_ctx.g = BN_dup(ctx->srp_ctx.g)) == NULL)) ||
  ------------------
  |  Branch (85:10): [True: 0, False: 0]
  ------------------
   86|  28.9k|        ((ctx->srp_ctx.s != NULL) &&
  ------------------
  |  Branch (86:10): [True: 0, False: 28.9k]
  ------------------
   87|      0|         ((s->srp_ctx.s = BN_dup(ctx->srp_ctx.s)) == NULL)) ||
  ------------------
  |  Branch (87:10): [True: 0, False: 0]
  ------------------
   88|  28.9k|        ((ctx->srp_ctx.B != NULL) &&
  ------------------
  |  Branch (88:10): [True: 0, False: 28.9k]
  ------------------
   89|      0|         ((s->srp_ctx.B = BN_dup(ctx->srp_ctx.B)) == NULL)) ||
  ------------------
  |  Branch (89:10): [True: 0, False: 0]
  ------------------
   90|  28.9k|        ((ctx->srp_ctx.A != NULL) &&
  ------------------
  |  Branch (90:10): [True: 0, False: 28.9k]
  ------------------
   91|      0|         ((s->srp_ctx.A = BN_dup(ctx->srp_ctx.A)) == NULL)) ||
  ------------------
  |  Branch (91:10): [True: 0, False: 0]
  ------------------
   92|  28.9k|        ((ctx->srp_ctx.a != NULL) &&
  ------------------
  |  Branch (92:10): [True: 0, False: 28.9k]
  ------------------
   93|      0|         ((s->srp_ctx.a = BN_dup(ctx->srp_ctx.a)) == NULL)) ||
  ------------------
  |  Branch (93:10): [True: 0, False: 0]
  ------------------
   94|  28.9k|        ((ctx->srp_ctx.v != NULL) &&
  ------------------
  |  Branch (94:10): [True: 0, False: 28.9k]
  ------------------
   95|      0|         ((s->srp_ctx.v = BN_dup(ctx->srp_ctx.v)) == NULL)) ||
  ------------------
  |  Branch (95:10): [True: 0, False: 0]
  ------------------
   96|  28.9k|        ((ctx->srp_ctx.b != NULL) &&
  ------------------
  |  Branch (96:10): [True: 0, False: 28.9k]
  ------------------
   97|      0|         ((s->srp_ctx.b = BN_dup(ctx->srp_ctx.b)) == NULL))) {
  ------------------
  |  Branch (97:10): [True: 0, False: 0]
  ------------------
   98|      0|        SSLerr(SSL_F_SSL_SRP_CTX_INIT, ERR_R_BN_LIB);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
   99|      0|        goto err;
  100|      0|    }
  101|  28.9k|    if ((ctx->srp_ctx.login != NULL) &&
  ------------------
  |  Branch (101:9): [True: 0, False: 28.9k]
  ------------------
  102|      0|        ((s->srp_ctx.login = OPENSSL_strdup(ctx->srp_ctx.login)) == NULL)) {
  ------------------
  |  |  132|      0|        CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (102:9): [True: 0, False: 0]
  ------------------
  103|      0|        SSLerr(SSL_F_SSL_SRP_CTX_INIT, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  104|      0|        goto err;
  105|      0|    }
  106|  28.9k|    if ((ctx->srp_ctx.info != NULL) &&
  ------------------
  |  Branch (106:9): [True: 0, False: 28.9k]
  ------------------
  107|      0|        ((s->srp_ctx.info = BUF_strdup(ctx->srp_ctx.info)) == NULL)) {
  ------------------
  |  |   31|      0|# define BUF_strdup(s) OPENSSL_strdup(s)
  |  |  ------------------
  |  |  |  |  132|      0|        CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (107:9): [True: 0, False: 0]
  ------------------
  108|      0|        SSLerr(SSL_F_SSL_SRP_CTX_INIT, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  115|      0|# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |   29|      0|#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)
  |  |  ------------------
  ------------------
  109|      0|        goto err;
  110|      0|    }
  111|  28.9k|    s->srp_ctx.srp_Mask = ctx->srp_ctx.srp_Mask;
  112|       |
  113|  28.9k|    return 1;
  114|      0| err:
  115|      0|    OPENSSL_free(s->srp_ctx.login);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  116|      0|    OPENSSL_free(s->srp_ctx.info);
  ------------------
  |  |  128|      0|        CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  136|       |#  define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  137|       |#  define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  117|      0|    BN_free(s->srp_ctx.N);
  118|      0|    BN_free(s->srp_ctx.g);
  119|      0|    BN_free(s->srp_ctx.s);
  120|      0|    BN_free(s->srp_ctx.B);
  121|      0|    BN_free(s->srp_ctx.A);
  122|      0|    BN_free(s->srp_ctx.a);
  123|      0|    BN_free(s->srp_ctx.b);
  124|      0|    BN_free(s->srp_ctx.v);
  125|      0|    memset(&s->srp_ctx, 0, sizeof(s->srp_ctx));
  126|      0|    return 0;
  127|  28.9k|}
SSL_CTX_SRP_CTX_init:
  130|  28.9k|{
  131|  28.9k|    if (ctx == NULL)
  ------------------
  |  Branch (131:9): [True: 0, False: 28.9k]
  ------------------
  132|      0|        return 0;
  133|       |
  134|  28.9k|    memset(&ctx->srp_ctx, 0, sizeof(ctx->srp_ctx));
  135|  28.9k|    ctx->srp_ctx.strength = SRP_MINIMAL_N;
  ------------------
  |  |  128|  28.9k|# define SRP_MINIMAL_N 1024
  ------------------
  136|       |
  137|  28.9k|    return 1;
  138|  28.9k|}

