예제 #1
0
/**
 * lt_script_db_new:
 *
 * Create a new instance of a #lt_script_db_t.
 *
 * Returns: (transfer full): a new instance of #lt_script_db_t.
 */
lt_script_db_t *
lt_script_db_new(void)
{
	lt_script_db_t *retval = lt_mem_alloc_object(sizeof (lt_script_db_t));

	if (retval) {
		lt_error_t *err = NULL;
		lt_script_t *le;

		LT_ITER_TMPL_INIT (&retval->parent, _lt_script_db);

		retval->script_entries = lt_trie_new();
		lt_mem_add_ref((lt_mem_t *)retval, retval->script_entries,
			       (lt_destroy_func_t)lt_trie_unref);

		le = lt_script_create();
		lt_script_set_tag(le, "*");
		lt_script_set_name(le, "Wildcard entry");
		lt_trie_replace(retval->script_entries,
				lt_script_get_tag(le),
				le,
				(lt_destroy_func_t)lt_script_unref);
		le = lt_script_create();
		lt_script_set_tag(le, "");
		lt_script_set_name(le, "Empty entry");
		lt_trie_replace(retval->script_entries,
				lt_script_get_tag(le),
				le,
				(lt_destroy_func_t)lt_script_unref);

		retval->xml = lt_xml_new();
		if (!retval->xml) {
			lt_script_db_unref(retval);
			retval = NULL;
			goto bail;
		}
		lt_mem_add_ref((lt_mem_t *)retval, retval->xml,
			       (lt_destroy_func_t)lt_xml_unref);

		lt_script_db_parse(retval, &err);
		if (lt_error_is_set(err, LT_ERR_ANY)) {
			lt_error_print(err, LT_ERR_ANY);
			lt_script_db_unref(retval);
			retval = NULL;
			lt_error_unref(err);
		}
	}
  bail:

	return retval;
}
예제 #2
0
/**
 * lt_db_finalize:
 *
 * Decreases the reference count of the language tags database, which was
 * increased with lt_db_initialize().
 */
void
lt_db_finalize(void)
{
	lt_lang_db_unref(__db_lang);
	lt_extlang_db_unref(__db_extlang);
	lt_script_db_unref(__db_script);
	lt_region_db_unref(__db_region);
	lt_variant_db_unref(__db_variant);
	lt_grandfathered_db_unref(__db_grandfathered);
	lt_redundant_db_unref(__db_redundant);
	lt_ext_modules_unload();
}