qulogic/gplugin

Update Perl loader for new class hierarchy.
feature/fix-perl-tcc
2019-01-25, Elliott Sales de Andrade
1c8ac56f13a6
Parents 3570a01b60a7
Children 6c3425b02dbc
Update Perl loader for new class hierarchy.
--- a/perl/gplugin-perl-loader.c Fri Jan 25 04:35:21 2019 -0500
+++ b/perl/gplugin-perl-loader.c Fri Jan 25 04:38:27 2019 -0500
@@ -26,11 +26,7 @@
#undef _
#include <glib/gi18n.h>
-/******************************************************************************
- * Globals
- *****************************************************************************/
-static GObjectClass *parent_class = NULL;
-static volatile GType type_real = 0;
+G_DEFINE_DYNAMIC_TYPE(GPluginPerlLoader, gplugin_perl_loader, GPLUGIN_TYPE_LOADER);
/* I can't believe I have to use this variable name... */
static PerlInterpreter *my_perl = NULL;
@@ -102,14 +98,16 @@
}
/******************************************************************************
- * Object Stuff
+ * GObject Stuff
*****************************************************************************/
static void
+gplugin_perl_loader_init(G_GNUC_UNUSED GPluginPerlLoader *loader) {
+}
+
+static void
gplugin_perl_loader_class_init(GPluginPerlLoaderClass *klass) {
GPluginLoaderClass *loader_class = GPLUGIN_LOADER_CLASS(klass);
- parent_class = g_type_class_peek_parent(klass);
-
loader_class->supported_extensions =
gplugin_perl_loader_class_supported_extensions;
loader_class->query = gplugin_perl_loader_query;
@@ -121,8 +119,7 @@
}
static void
-gplugin_perl_loader_class_finalize(GPluginPerlLoaderClass *klass,
- gpointer class_data)
+gplugin_perl_loader_class_finalize(G_GNUC_UNUSED GPluginPerlLoaderClass *klass)
{
/* perl uninitialization */
gplugin_perl_loader_uninit_perl();
@@ -133,33 +130,5 @@
*****************************************************************************/
void
gplugin_perl_loader_register(GPluginNativePlugin *plugin) {
- if(g_once_init_enter(&type_real)) {
- GType type = 0;
-
- static const GTypeInfo info = {
- .class_size = sizeof(GPluginPerlLoaderClass),
- .class_init = (GClassInitFunc)gplugin_perl_loader_class_init,
- .class_finalize = (GClassFinalizeFunc)gplugin_perl_loader_class_finalize,
- .instance_size = sizeof(GPluginPerlLoader),
- };
-
- type = gplugin_native_plugin_register_type(plugin,
- GPLUGIN_TYPE_LOADER,
- "GPluginPerlLoader",
- &info,
- 0);
-
- g_once_init_leave(&type_real, type);
- }
+ gplugin_perl_loader_register_type(G_TYPE_MODULE(plugin));
}
-
-GType
-gplugin_perl_loader_get_type(void) {
- if(G_UNLIKELY(type_real == 0)) {
- g_warning("gplugin_perl_loader_get_type was called before "
- "the type was registered!\n");
- }
-
- return type_real;
-}
-
--- a/perl/gplugin-perl-loader.h Fri Jan 25 04:35:21 2019 -0500
+++ b/perl/gplugin-perl-loader.h Fri Jan 25 04:38:27 2019 -0500
@@ -32,21 +32,17 @@
#include <gplugin-native.h>
struct _GPluginPerlLoader {
+ /*< private >*/
GPluginLoader parent;
- void (*_gplugin_reserved_1)(void);
- void (*_gplugin_reserved_2)(void);
- void (*_gplugin_reserved_3)(void);
- void (*_gplugin_reserved_4)(void);
+ gpointer reserved[4];
};
struct _GPluginPerlLoaderClass {
+ /*< private >*/
GPluginLoaderClass parent;
- void (*_gplugin_reserved_1)(void);
- void (*_gplugin_reserved_2)(void);
- void (*_gplugin_reserved_3)(void);
- void (*_gplugin_reserved_4)(void);
+ gpointer reserved[4];
};
G_BEGIN_DECLS
--- a/perl/gplugin-perl-plugin.c Fri Jan 25 04:35:21 2019 -0500
+++ b/perl/gplugin-perl-plugin.c Fri Jan 25 04:38:27 2019 -0500
@@ -26,14 +26,17 @@
#undef _
#include <glib/gi18n.h>
-#define GPLUGIN_PERL_PLUGIN_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE((obj), GPLUGIN_TYPE_PERL_PLUGIN, GPluginPerlPluginPrivate))
-
/******************************************************************************
* Typedefs
*****************************************************************************/
typedef struct {
PerlInterpreter *interpreter;
+
+ /* overrides */
+ gchar *filename;
+ GPluginLoader *loader;
+ GPluginPluginInfo *info;
+ GPluginPluginState state;
} GPluginPerlPluginPrivate;
/******************************************************************************
@@ -43,11 +46,33 @@
PROP_ZERO,
PROP_INTERPRETER,
N_PROPERTIES,
+ /* overrides */
+ PROP_FILENAME = N_PROPERTIES,
+ PROP_LOADER,
+ PROP_INFO,
+ PROP_STATE
};
static GParamSpec *properties[N_PROPERTIES] = {NULL,};
-static GObjectClass *parent_class = NULL;
-static volatile GType type_real = 0;
+/* I hate forward declarations... */
+static void gplugin_perl_plugin_iface_init(GPluginPluginInterface *iface);
+
+G_DEFINE_DYNAMIC_TYPE_EXTENDED(
+ GPluginPerlPlugin,
+ gplugin_perl_plugin,
+ G_TYPE_OBJECT,
+ 0,
+ G_ADD_PRIVATE_DYNAMIC(GPluginPerlPlugin)
+ G_IMPLEMENT_INTERFACE(GPLUGIN_TYPE_PLUGIN, gplugin_perl_plugin_iface_init)
+);
+
+/******************************************************************************
+ * GPluginPlugin Implementation
+ *****************************************************************************/
+static void
+gplugin_perl_plugin_iface_init(G_GNUC_UNUSED GPluginPluginInterface *iface)
+{
+}
/******************************************************************************
* Private Stuff
@@ -56,7 +81,7 @@
gplugin_perl_plugin_set_interpreter(GPluginPerlPlugin *plugin,
PerlInterpreter *interpreter)
{
- GPluginPerlPluginPrivate *priv = GPLUGIN_PERL_PLUGIN_GET_PRIVATE(plugin);
+ GPluginPerlPluginPrivate *priv = gplugin_perl_plugin_get_instance_private(plugin);
priv->interpreter = interpreter;
}
@@ -69,12 +94,28 @@
GParamSpec *pspec)
{
GPluginPerlPlugin *plugin = GPLUGIN_PERL_PLUGIN(obj);
+ GPluginPerlPluginPrivate *priv = gplugin_perl_plugin_get_instance_private(plugin);
switch(param_id) {
case PROP_INTERPRETER:
g_value_set_pointer(value,
gplugin_perl_plugin_get_interpreter(plugin));
break;
+
+ /* overrides */
+ case PROP_FILENAME:
+ g_value_set_string(value, priv->filename);
+ break;
+ case PROP_LOADER:
+ g_value_set_object(value, priv->loader);
+ break;
+ case PROP_INFO:
+ g_value_set_object(value, priv->info);
+ break;
+ case PROP_STATE:
+ g_value_set_enum(value, priv->state);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
break;
@@ -86,12 +127,28 @@
const GValue *value, GParamSpec *pspec)
{
GPluginPerlPlugin *plugin = GPLUGIN_PERL_PLUGIN(obj);
+ GPluginPerlPluginPrivate *priv = gplugin_perl_plugin_get_instance_private(plugin);
switch(param_id) {
case PROP_INTERPRETER:
gplugin_perl_plugin_set_interpreter(plugin,
g_value_get_pointer(value));
break;
+
+ /* overrides */
+ case PROP_FILENAME:
+ priv->filename = g_value_dup_string(value);
+ break;
+ case PROP_LOADER:
+ priv->loader = g_value_dup_object(value);
+ break;
+ case PROP_INFO:
+ priv->info = g_value_dup_object(value);
+ break;
+ case PROP_STATE:
+ priv->state = g_value_get_enum(value);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
}
@@ -99,23 +156,33 @@
static void
gplugin_perl_plugin_finalize(GObject *obj) {
- GPluginPerlPluginPrivate *priv = GPLUGIN_PERL_PLUGIN_GET_PRIVATE(obj);
+ GPluginPerlPluginPrivate *priv = gplugin_perl_plugin_get_instance_private(GPLUGIN_PERL_PLUGIN(obj));
perl_destruct(priv->interpreter);
perl_free(priv->interpreter);
priv->interpreter = NULL;
- G_OBJECT_CLASS(parent_class)->finalize(obj);
+ g_clear_pointer(&priv->filename, g_free);
+ g_clear_object(&priv->loader);
+ g_clear_object(&priv->info);
+
+ G_OBJECT_CLASS(gplugin_perl_plugin_parent_class)->finalize(obj);
+}
+
+static void
+gplugin_perl_plugin_init(G_GNUC_UNUSED GPluginPerlPlugin *plugin)
+{
+}
+
+static void
+gplugin_perl_plugin_class_finalize(G_GNUC_UNUSED GPluginPerlPluginClass *klass)
+{
}
static void
gplugin_perl_plugin_class_init(GPluginPerlPluginClass *klass) {
GObjectClass *obj_class = G_OBJECT_CLASS(klass);
- parent_class = g_type_class_peek_parent(klass);
-
- g_type_class_add_private(klass, sizeof(GPluginPerlPluginPrivate));
-
obj_class->get_property = gplugin_perl_plugin_get_property;
obj_class->set_property = gplugin_perl_plugin_set_property;
obj_class->finalize = gplugin_perl_plugin_finalize;
@@ -127,50 +194,30 @@
);
g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
+
+ /* add our overrides */
+ g_object_class_override_property(obj_class, PROP_FILENAME, "filename");
+ g_object_class_override_property(obj_class, PROP_LOADER, "loader");
+ g_object_class_override_property(obj_class, PROP_INFO, "info");
+ g_object_class_override_property(obj_class, PROP_STATE, "state");
}
/******************************************************************************
* API
*****************************************************************************/
void
-gplugin_perl_plugin_register(GPluginNativePlugin *plugin) {
- if(g_once_init_enter(&type_real)) {
- GType type = 0;
-
- static const GTypeInfo info = {
- .class_size = sizeof(GPluginPerlPluginClass),
- .class_init = (GClassInitFunc)gplugin_perl_plugin_class_init,
- .instance_size = sizeof(GPluginPerlPlugin),
- };
-
- type = gplugin_native_plugin_register_type(plugin,
- GPLUGIN_TYPE_PLUGIN,
- "GPluginPerlPlugin",
- &info,
- 0);
-
- g_once_init_leave(&type_real, type);
- }
-}
-
-GType
-gplugin_perl_plugin_get_type(void) {
- if(G_UNLIKELY(type_real == 0)) {
- g_warning("gplugin_perl_plugin_get_type was called before "
- "the type was registered!\n");
- }
-
- return type_real;
+gplugin_perl_plugin_register(GPluginNativePlugin *native)
+{
+ gplugin_perl_plugin_register_type(G_TYPE_MODULE(native));
}
PerlInterpreter *
-gplugin_perl_plugin_get_interpreter(const GPluginPerlPlugin *plugin) {
+gplugin_perl_plugin_get_interpreter(GPluginPerlPlugin *plugin) {
GPluginPerlPluginPrivate *priv = NULL;
g_return_val_if_fail(GPLUGIN_IS_PERL_PLUGIN(plugin), NULL);
- priv = GPLUGIN_PERL_PLUGIN_GET_PRIVATE(plugin);
+ priv = gplugin_perl_plugin_get_instance_private(plugin);
return priv->interpreter;
}
-
--- a/perl/gplugin-perl-plugin.h Fri Jan 25 04:35:21 2019 -0500
+++ b/perl/gplugin-perl-plugin.h Fri Jan 25 04:38:27 2019 -0500
@@ -36,29 +36,25 @@
#undef _
struct _GPluginPerlPlugin {
- GPluginPlugin parent;
+ /*< private >*/
+ GObject parent;
- void (*_gplugin_reserved_1)(void);
- void (*_gplugin_reserved_2)(void);
- void (*_gplugin_reserved_3)(void);
- void (*_gplugin_reserved_4)(void);
+ gpointer reserved[4];
};
struct _GPluginPerlPluginClass {
- GPluginPluginClass parent;
+ /*< private >*/
+ GObjectClass parent;
- void (*_gplugin_reserved_1)(void);
- void (*_gplugin_reserved_2)(void);
- void (*_gplugin_reserved_3)(void);
- void (*_gplugin_reserved_4)(void);
+ gpointer reserved[4];
};
G_BEGIN_DECLS
-void gplugin_perl_plugin_register(GPluginNativePlugin *plugin);
+void gplugin_perl_plugin_register(GPluginNativePlugin *native);
GType gplugin_perl_plugin_get_type(void);
-PerlInterpreter *gplugin_perl_plugin_get_interpreter(const GPluginPerlPlugin *plugin);
+PerlInterpreter *gplugin_perl_plugin_get_interpreter(GPluginPerlPlugin *plugin);
G_END_DECLS