1 #ifndef BABELTRACE_PLUGIN_PLUGIN_INTERNAL_H
2 #define BABELTRACE_PLUGIN_PLUGIN_INTERNAL_H
5 * BabelTrace - Plug-in Internal
7 * Copyright 2015 Jérémie Galarneau <jeremie.galarneau@efficios.com>
9 * Author: Jérémie Galarneau <jeremie.galarneau@efficios.com>
11 * Permission is hereby granted, free of charge, to any person obtaining a copy
12 * of this software and associated documentation files (the "Software"), to deal
13 * in the Software without restriction, including without limitation the rights
14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15 * copies of the Software, and to permit persons to whom the Software is
16 * furnished to do so, subject to the following conditions:
18 * The above copyright notice and this permission notice shall be included in
19 * all copies or substantial portions of the Software.
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30 #include <babeltrace/babeltrace-internal.h>
31 #include <babeltrace/plugin/plugin.h>
32 #include <babeltrace/plugin/plugin-dev.h>
33 #include <babeltrace/object-internal.h>
34 #include <babeltrace/types.h>
38 BT_PLUGIN_TYPE_SO
= 0,
39 BT_PLUGIN_TYPE_PYTHON
= 1,
43 struct bt_object base
;
44 enum bt_plugin_type type
;
47 /* Array of pointers to bt_component_class (owned by this) */
48 GPtrArray
*comp_classes
;
50 /* Info (owned by this) */
67 bt_bool description_set
;
71 /* Value depends on the specific plugin type */
73 void (*destroy_spec_data
)(struct bt_plugin
*);
76 struct bt_plugin_set
{
77 struct bt_object base
;
79 /* Array of struct bt_plugin * */
84 const char *bt_plugin_status_string(enum bt_plugin_status status
)
87 case BT_PLUGIN_STATUS_OK
:
88 return "BT_PLUGIN_STATUS_OK";
89 case BT_PLUGIN_STATUS_ERROR
:
90 return "BT_PLUGIN_STATUS_ERROR";
91 case BT_PLUGIN_STATUS_NOMEM
:
92 return "BT_PLUGIN_STATUS_NOMEM";
99 const char *bt_plugin_type_string(enum bt_plugin_type type
)
102 case BT_PLUGIN_TYPE_SO
:
103 return "BT_PLUGIN_TYPE_SO";
104 case BT_PLUGIN_TYPE_PYTHON
:
105 return "BT_PLUGIN_TYPE_PYTHON";
112 void bt_plugin_destroy(struct bt_object
*obj
)
114 struct bt_plugin
*plugin
;
117 plugin
= container_of(obj
, struct bt_plugin
, base
);
118 BT_LOGD("Destroying plugin object: addr=%p, name=\"%s\"",
119 plugin
, plugin
->info
.name
? plugin
->info
.name
->str
: NULL
);
121 if (plugin
->destroy_spec_data
) {
122 plugin
->destroy_spec_data(plugin
);
125 if (plugin
->comp_classes
) {
126 BT_LOGD_STR("Putting component classes.");
127 g_ptr_array_free(plugin
->comp_classes
, TRUE
);
130 if (plugin
->info
.name
) {
131 g_string_free(plugin
->info
.name
, TRUE
);
134 if (plugin
->info
.path
) {
135 g_string_free(plugin
->info
.path
, TRUE
);
138 if (plugin
->info
.description
) {
139 g_string_free(plugin
->info
.description
, TRUE
);
142 if (plugin
->info
.author
) {
143 g_string_free(plugin
->info
.author
, TRUE
);
146 if (plugin
->info
.license
) {
147 g_string_free(plugin
->info
.license
, TRUE
);
150 if (plugin
->info
.version
.extra
) {
151 g_string_free(plugin
->info
.version
.extra
, TRUE
);
158 struct bt_plugin
*bt_plugin_create_empty(enum bt_plugin_type type
)
160 struct bt_plugin
*plugin
= NULL
;
162 BT_LOGD("Creating empty plugin object: type=%s",
163 bt_plugin_type_string(type
));
165 plugin
= g_new0(struct bt_plugin
, 1);
167 BT_LOGE_STR("Failed to allocate one plugin.");
171 bt_object_init(plugin
, bt_plugin_destroy
);
174 /* Create empty array of component classes */
175 plugin
->comp_classes
=
176 g_ptr_array_new_with_free_func((GDestroyNotify
) bt_put
);
177 if (!plugin
->comp_classes
) {
178 BT_LOGE_STR("Failed to allocate a GPtrArray.");
182 /* Create empty info */
183 plugin
->info
.name
= g_string_new(NULL
);
184 if (!plugin
->info
.name
) {
185 BT_LOGE_STR("Failed to allocate a GString.");
189 plugin
->info
.path
= g_string_new(NULL
);
190 if (!plugin
->info
.path
) {
191 BT_LOGE_STR("Failed to allocate a GString.");
195 plugin
->info
.description
= g_string_new(NULL
);
196 if (!plugin
->info
.description
) {
197 BT_LOGE_STR("Failed to allocate a GString.");
201 plugin
->info
.author
= g_string_new(NULL
);
202 if (!plugin
->info
.author
) {
203 BT_LOGE_STR("Failed to allocate a GString.");
207 plugin
->info
.license
= g_string_new(NULL
);
208 if (!plugin
->info
.license
) {
209 BT_LOGE_STR("Failed to allocate a GString.");
213 plugin
->info
.version
.extra
= g_string_new(NULL
);
214 if (!plugin
->info
.version
.extra
) {
215 BT_LOGE_STR("Failed to allocate a GString.");
219 BT_LOGD("Created empty plugin object: type=%s, addr=%p",
220 bt_plugin_type_string(type
), plugin
);
231 void bt_plugin_set_path(struct bt_plugin
*plugin
, const char *path
)
235 g_string_assign(plugin
->info
.path
, path
);
236 plugin
->info
.path_set
= BT_TRUE
;
237 BT_LOGV("Set plugin's path: addr=%p, name=\"%s\", path=\"%s\"",
238 plugin
, bt_plugin_get_name(plugin
), path
);
242 void bt_plugin_set_name(struct bt_plugin
*plugin
, const char *name
)
246 g_string_assign(plugin
->info
.name
, name
);
247 plugin
->info
.name_set
= BT_TRUE
;
248 BT_LOGV("Set plugin's name: addr=%p, name=\"%s\"",
253 void bt_plugin_set_description(struct bt_plugin
*plugin
,
254 const char *description
)
258 g_string_assign(plugin
->info
.description
, description
);
259 plugin
->info
.description_set
= BT_TRUE
;
260 BT_LOGV("Set plugin's description: addr=%p, name=\"%s\"",
261 plugin
, bt_plugin_get_name(plugin
));
265 void bt_plugin_set_author(struct bt_plugin
*plugin
, const char *author
)
269 g_string_assign(plugin
->info
.author
, author
);
270 plugin
->info
.author_set
= BT_TRUE
;
271 BT_LOGV("Set plugin's author: addr=%p, name=\"%s\", author=\"%s\"",
272 plugin
, bt_plugin_get_name(plugin
), author
);
276 void bt_plugin_set_license(struct bt_plugin
*plugin
, const char *license
)
280 g_string_assign(plugin
->info
.license
, license
);
281 plugin
->info
.license_set
= BT_TRUE
;
282 BT_LOGV("Set plugin's path: addr=%p, name=\"%s\", license=\"%s\"",
283 plugin
, bt_plugin_get_name(plugin
), license
);
287 void bt_plugin_set_version(struct bt_plugin
*plugin
, unsigned int major
,
288 unsigned int minor
, unsigned int patch
, const char *extra
)
291 plugin
->info
.version
.major
= major
;
292 plugin
->info
.version
.minor
= minor
;
293 plugin
->info
.version
.patch
= patch
;
296 g_string_assign(plugin
->info
.version
.extra
, extra
);
299 plugin
->info
.version_set
= BT_TRUE
;
300 BT_LOGV("Set plugin's version: addr=%p, name=\"%s\", "
301 "major=%u, minor=%u, patch=%u, extra=\"%s\"",
302 plugin
, bt_plugin_get_name(plugin
),
303 major
, minor
, patch
, extra
);
307 void bt_plugin_freeze(struct bt_plugin
*plugin
)
311 if (plugin
->frozen
) {
315 BT_LOGD("Freezing plugin: addr=%p, name=\"%s\", path=\"%s\"",
316 plugin
, bt_plugin_get_name(plugin
),
317 bt_plugin_get_path(plugin
));
318 plugin
->frozen
= BT_TRUE
;
322 void bt_plugin_set_destroy(struct bt_object
*obj
)
324 struct bt_plugin_set
*plugin_set
=
325 container_of(obj
, struct bt_plugin_set
, base
);
331 BT_LOGD("Destroying plugin set: addr=%p", plugin_set
);
333 if (plugin_set
->plugins
) {
334 BT_LOGD_STR("Putting plugins.");
335 g_ptr_array_free(plugin_set
->plugins
, TRUE
);
342 struct bt_plugin_set
*bt_plugin_set_create(void)
344 struct bt_plugin_set
*plugin_set
= g_new0(struct bt_plugin_set
, 1);
350 BT_LOGD_STR("Creating empty plugin set.");
351 bt_object_init(plugin_set
, bt_plugin_set_destroy
);
353 plugin_set
->plugins
= g_ptr_array_new_with_free_func(
354 (GDestroyNotify
) bt_put
);
355 if (!plugin_set
->plugins
) {
356 BT_LOGE_STR("Failed to allocate a GPtrArray.");
361 BT_LOGD("Created empty plugin set: addr=%p", plugin_set
);
368 void bt_plugin_set_add_plugin(struct bt_plugin_set
*plugin_set
,
369 struct bt_plugin
*plugin
)
373 g_ptr_array_add(plugin_set
->plugins
, bt_get(plugin
));
374 BT_LOGV("Added plugin to plugin set: "
375 "plugin-set-addr=%p, plugin-addr=%p, plugin-name=\"%s\", "
376 "plugin-path=\"%s\"",
377 plugin_set
, plugin
, bt_plugin_get_name(plugin
),
378 bt_plugin_get_path(plugin
));
381 #endif /* BABELTRACE_PLUGIN_PLUGIN_INTERNAL_H */
This page took 0.037381 seconds and 4 git commands to generate.