diff options
author | Přemysl Janouch <p.janouch@gmail.com> | 2010-10-27 20:49:21 +0200 |
---|---|---|
committer | Přemysl Janouch <p.janouch@gmail.com> | 2010-10-27 20:49:21 +0200 |
commit | 9271ce11344f672564b50d90aa838ba1bb30c5d1 (patch) | |
tree | 4026571346122da971a4e45076547b59c438b624 /src/ld-library.c | |
parent | 8b5fa9a49ac01ce604343c846d54acfd9de8802a (diff) | |
download | logdiag-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.c | 34 |
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(). |