gobject-introspection r430 - in trunk: . girepository
- From: johan svn gnome org
- To: svn-commits-list gnome org
- Subject: gobject-introspection r430 - in trunk: . girepository
- Date: Thu, 21 Aug 2008 06:47:49 +0000 (UTC)
Author: johan
Date: Thu Aug 21 06:47:49 2008
New Revision: 430
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=430&view=rev
Log:
2008-08-21 Johan Dahlin <johan gnome org>
* girepository/girepository.c (g_irepository_require):
Rewrap and fix double free bug by leaking a bit.
Modified:
trunk/ChangeLog
trunk/girepository/girepository.c
Modified: trunk/girepository/girepository.c
==============================================================================
--- trunk/girepository/girepository.c (original)
+++ trunk/girepository/girepository.c Thu Aug 21 06:47:49 2008
@@ -520,52 +520,65 @@
fname = g_strconcat (namespace, ".typelib", NULL);
- for (ldir = search_path; ldir; ldir = ldir->next) {
- dir = ldir->data;
- full_path = g_build_filename (dir, fname, NULL);
- mfile = g_mapped_file_new (full_path, FALSE, &error1);
- if (error1) {
- g_clear_error (&error1);
- g_free (full_path);
- continue;
- }
- typelib = g_typelib_new_from_mapped_file (mfile);
- typelib_namespace = g_typelib_get_string (typelib, ((Header *) typelib->data)->namespace);
- if (strcmp (typelib_namespace, namespace) != 0) {
- g_free (full_path);
+ for (ldir = search_path; ldir; ldir = ldir->next)
+ {
+ Header *header;
+
+ full_path = g_build_filename (ldir->data, fname, NULL);
+ mfile = g_mapped_file_new (full_path, FALSE, &error1);
+ if (error1)
+ {
+ g_clear_error (&error1);
+ g_free (full_path);
+ continue;
+ }
+
+ typelib = g_typelib_new_from_mapped_file (mfile);
+ header = (Header *) typelib->data;
+ typelib_namespace = g_typelib_get_string (typelib, header->namespace);
+
+ if (strcmp (typelib_namespace, namespace) != 0)
+ {
+ g_free (full_path);
+ g_set_error (error, G_IREPOSITORY_ERROR,
+ G_IREPOSITORY_ERROR_NAMESPACE_MISMATCH,
+ "Typelib file %s for namespace '%s' contains "
+ "namespace '%s' which doesn't match the file name",
+ full_path, namespace, typelib_namespace);
+ return NULL;
+ }
+ break;
+ }
+
+ if (typelib == NULL)
+ {
g_set_error (error, G_IREPOSITORY_ERROR,
- G_IREPOSITORY_ERROR_NAMESPACE_MISMATCH,
- "Typelib file %s for namespace '%s' contains namespace '%s'"
- " which doesn't match the file name",
- full_path, namespace, typelib_namespace);
- return NULL;
+ G_IREPOSITORY_ERROR_TYPELIB_NOT_FOUND,
+ "Typelib file for namespace '%s' was not found in search"
+ " path or could not be openened", namespace);
+ return NULL;
}
- break;
- }
+
g_free (fname);
- if (typelib == NULL) {
- g_free (full_path);
- g_set_error (error, G_IREPOSITORY_ERROR,
- G_IREPOSITORY_ERROR_TYPELIB_NOT_FOUND,
- "Typelib file for namespace '%s' was not found in search"
- " path or could not be openened", namespace);
- return NULL;
- }
+
/* optionally load shared library and attach it to the typelib */
shlib = ((Header *) typelib->data)->shared_library;
- if (shlib) {
- shlib_fname = g_typelib_get_string (typelib, shlib);
- module = g_module_open (shlib_fname, G_MODULE_BIND_LAZY|G_MODULE_BIND_LOCAL);
- if (module == NULL) {
- g_free (full_path);
- g_set_error (error, G_IREPOSITORY_ERROR,
- G_IREPOSITORY_ERROR_TYPELIB_NOT_FOUND,
- "Typelib for namespace '%s' references shared library %s,"
- " but it could not be openened (%s)",
- namespace, shlib_fname, g_module_error ());
- return NULL;
+ if (shlib)
+ {
+ shlib_fname = g_typelib_get_string (typelib, shlib);
+ module = g_module_open (shlib_fname,
+ G_MODULE_BIND_LAZY|G_MODULE_BIND_LOCAL);
+ if (module == NULL)
+ {
+ g_free (full_path);
+ g_set_error (error, G_IREPOSITORY_ERROR,
+ G_IREPOSITORY_ERROR_TYPELIB_NOT_FOUND,
+ "Typelib for namespace '%s' references shared library "
+ "%s, but it could not be openened (%s)",
+ namespace, shlib_fname, g_module_error ());
+ return NULL;
+ }
}
- }
g_hash_table_remove (table, namespace);
register_internal (repository, full_path, typelib);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]