Пример #1
0
void hash_file_stop(void)
{
	gtkhash_hash_file_set_stop(&hash_priv.file_data, true);

	while (gtkhash_hash_file_get_state(&hash_priv.file_data)
		!= HASH_FILE_STATE_IDLE)
	{
		gtk_main_iteration_do(false);
	}

	if (hash_priv.uris) {
		g_slist_free_full(hash_priv.uris, g_free);
		hash_priv.uris = NULL;
	}
}
Пример #2
0
static bool gtkhash_hash_file_thread(struct hash_file_s *data)
{
	static void (* const state_funcs[])(struct hash_file_s *) = {
		[HASH_FILE_STATE_IDLE]        = NULL,
		[HASH_FILE_STATE_START]       = gtkhash_hash_file_start,
		[HASH_FILE_STATE_OPEN]        = gtkhash_hash_file_open,
		[HASH_FILE_STATE_GET_SIZE]    = gtkhash_hash_file_get_size,
		[HASH_FILE_STATE_READ]        = gtkhash_hash_file_read,
		[HASH_FILE_STATE_HASH]        = gtkhash_hash_file_hash,
		[HASH_FILE_STATE_HASH_FINISH] = gtkhash_hash_file_hash_finish,
		[HASH_FILE_STATE_CLOSE]       = gtkhash_hash_file_close,
		[HASH_FILE_STATE_FINISH]      = gtkhash_hash_file_finish,
		[HASH_FILE_STATE_CALLBACK]    = gtkhash_hash_file_callback,
	};

	enum hash_file_state_e state = gtkhash_hash_file_get_state(data);

	state_funcs[state](data);

	return true;
}

void gtkhash_hash_file(struct hash_file_s *data, const char *uri,
	const uint8_t *hmac_key, const size_t key_size)
{
	g_assert(data);
	g_assert(uri && *uri);
	g_assert(gtkhash_hash_file_get_state(data) == HASH_FILE_STATE_IDLE);
	g_assert(data->priv.source == 0);
	g_assert(data->priv.report_source == 0);