ref.h: doc: fix typo
[babeltrace.git] / lib / plugin-system / source.c
CommitLineData
0777b693
JG
1/*
2 * source.c
3 *
0d884c50 4 * Babeltrace Source Component
0777b693
JG
5 *
6 * Copyright 2015 Jérémie Galarneau <jeremie.galarneau@efficios.com>
7 *
8 * Author: Jérémie Galarneau <jeremie.galarneau@efficios.com>
9 *
10 * Permission is hereby granted, free of charge, to any person obtaining a copy
11 * of this software and associated documentation files (the "Software"), to deal
12 * in the Software without restriction, including without limitation the rights
13 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 * copies of the Software, and to permit persons to whom the Software is
15 * furnished to do so, subject to the following conditions:
16 *
17 * The above copyright notice and this permission notice shall be included in
18 * all copies or substantial portions of the Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 * SOFTWARE.
27 */
28
b8a06801 29#include <babeltrace/ref.h>
fd0f910d 30#include <babeltrace/compiler.h>
0777b693 31#include <babeltrace/plugin/source-internal.h>
0d884c50 32#include <babeltrace/plugin/component-internal.h>
47e5a032
JG
33#include <babeltrace/plugin/notification/iterator.h>
34#include <babeltrace/plugin/notification/iterator-internal.h>
0777b693 35
7c7c0433
JG
36BT_HIDDEN
37enum bt_component_status bt_component_source_validate(
38 struct bt_component *component)
39{
cc8f4066
JG
40 enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
41 struct bt_component_source *source;
42
43 if (!component) {
44 ret = BT_COMPONENT_STATUS_INVALID;
45 goto end;
46 }
47
48 if (!component->class) {
49 ret = BT_COMPONENT_STATUS_INVALID;
50 goto end;
51 }
52
53 if (component->class->type != BT_COMPONENT_TYPE_SOURCE) {
54 ret = BT_COMPONENT_STATUS_INVALID;
55 goto end;
56 }
57
58 source = container_of(component, struct bt_component_source, parent);
56a1cced 59 if (!source->init_iterator) {
cc8f4066
JG
60 ret = BT_COMPONENT_STATUS_INVALID;
61 goto end;
62 }
63end:
64 return ret;
0777b693
JG
65}
66
8738a040 67BT_HIDDEN
fb2dcc52 68struct bt_component *bt_component_source_create(
7c7c0433 69 struct bt_component_class *class, struct bt_value *params)
0777b693 70{
0d884c50
JG
71 struct bt_component_source *source = NULL;
72 enum bt_component_status ret;
38b48196 73
0d884c50 74 source = g_new0(struct bt_component_source, 1);
0777b693
JG
75 if (!source) {
76 goto end;
77 }
78
aab65362
JG
79 source->parent.class = bt_get(class);
80 ret = bt_component_init(&source->parent, NULL);
0d884c50 81 if (ret != BT_COMPONENT_STATUS_OK) {
38b48196 82 BT_PUT(source);
0777b693
JG
83 goto end;
84 }
0777b693
JG
85end:
86 return source ? &source->parent : NULL;
87}
47e5a032 88
b916cce6
JG
89enum bt_component_status
90bt_component_source_set_iterator_init_cb(struct bt_component *component,
91 bt_component_source_init_iterator_cb init_iterator)
92{
93 struct bt_component_source *source;
94 enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
95
fec2a9f2
JG
96 if (component->class->type != BT_COMPONENT_TYPE_SOURCE ||
97 !component->initializing) {
b916cce6
JG
98 ret = BT_COMPONENT_STATUS_INVALID;
99 goto end;
100 }
101
102 source = container_of(component, struct bt_component_source, parent);
103 source->init_iterator = init_iterator;
104end:
105 return ret;
106}
107
38b48196 108struct bt_notification_iterator *bt_component_source_create_iterator(
47e5a032
JG
109 struct bt_component *component)
110{
5645cd95 111 return bt_component_create_iterator(component);
47e5a032 112}
This page took 0.030061 seconds and 4 git commands to generate.