aboutsummaryrefslogtreecommitdiff
path: root/src/ld-library.c
diff options
context:
space:
mode:
authorPřemysl Janouch <p.janouch@gmail.com>2010-10-27 20:49:21 +0200
committerPřemysl Janouch <p.janouch@gmail.com>2010-10-27 20:49:21 +0200
commit9271ce11344f672564b50d90aa838ba1bb30c5d1 (patch)
tree4026571346122da971a4e45076547b59c438b624 /src/ld-library.c
parent8b5fa9a49ac01ce604343c846d54acfd9de8802a (diff)
downloadlogdiag-9271ce11344f672564b50d90aa838ba1bb30c5d1.tar.gz
logdiag-9271ce11344f672564b50d90aa838ba1bb30c5d1.tar.xz
logdiag-9271ce11344f672564b50d90aa838ba1bb30c5d1.zip
Separate LdLua and LdSymbolCategory.
Originally, ld_lua_load_file_to_category() was adding registered symbols into a passed LdSymbolCategory object. This interface has been rewritten to be more generic by using callbacks to notify about new symbols.
Diffstat (limited to 'src/ld-library.c')
-rw-r--r--src/ld-library.c34
1 files changed, 22 insertions, 12 deletions
diff --git a/src/ld-library.c b/src/ld-library.c
index 66d8709..8fe3a41 100644
--- a/src/ld-library.c
+++ b/src/ld-library.c
@@ -43,19 +43,17 @@ G_DEFINE_TYPE (LdLibrary, ld_library, G_TYPE_OBJECT);
static void
ld_library_finalize (GObject *gobject);
-static LdSymbolCategory *
-load_category (LdLibrary *self, const char *path, const char *name);
+static LdSymbolCategory *load_category
+ (LdLibrary *self, const char *path, const char *name);
-static gboolean
-foreach_dir (const gchar *path,
+static gboolean foreach_dir (const gchar *path,
gboolean (*callback) (const gchar *, const gchar *, gpointer),
gpointer userdata, GError **error);
-static gboolean
-load_category_cb (const gchar *base,
- const gchar *filename, gpointer userdata);
-static gboolean
-ld_library_load_cb (const gchar *base,
+static gboolean load_category_cb (const gchar *base,
const gchar *filename, gpointer userdata);
+static void load_category_symbol_cb (LdSymbol *symbol, gpointer user_data);
+static gboolean ld_library_load_cb
+ (const gchar *base, const gchar *filename, gpointer userdata);
static void
@@ -227,13 +225,25 @@ load_category_cb (const gchar *base, const gchar *filename, gpointer userdata)
data = (LoadCategoryData *) userdata;
if (ld_lua_check_file (data->self->priv->lua, filename))
- ld_lua_load_file_to_category
- (data->self->priv->lua, filename, data->cat);
-
+ ld_lua_load_file (data->self->priv->lua, filename,
+ load_category_symbol_cb, data->cat);
return TRUE;
}
/*
+ * load_category_symbol_cb:
+ *
+ * Insert newly registered symbols into the category.
+ */
+static void
+load_category_symbol_cb (LdSymbol *symbol, gpointer user_data)
+{
+ /* TODO: Don't just add blindly, also check for name collisions. */
+ ld_symbol_category_insert_child
+ (LD_SYMBOL_CATEGORY (user_data), G_OBJECT (symbol), -1);
+}
+
+/*
* LibraryLoadData:
*
* Data shared between ld_library_load() and ld_library_load_cb().