annotate tests/example-dl-plugin.c @ 938:7b74df7e8913

irccd: native plugin support
author David Demelier <markand@malikania.fr>
date Mon, 11 Jan 2021 21:25:58 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
938
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * example-dl-plugin.c -- simple plugin for unit tests
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013-2021 David Demelier <markand@malikania.fr>
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <string.h>
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
20
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <irccd/dl-plugin.h>
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <irccd/event.h>
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <irccd/util.h>
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 struct kw {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 const char *key;
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 char value[256];
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 };
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
29
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 /*
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 * Options.
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 */
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 static struct kw options[] = {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 { "option-1", "value-1" }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 };
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 static const char *options_list[] = {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 "option-1",
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 NULL
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 };
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 /*
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 * Templates.
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 */
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 static struct kw templates[] = {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 { "template-1", "Welcome #{target}" }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 };
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
48
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 static const char *templates_list[] = {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 "template-1",
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 NULL
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 };
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
53
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 /*
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 * Paths.
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 */
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 static struct kw paths[] = {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 { "path-1", "/usr/local/etc" }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 };
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
60
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 static const char *paths_list[] = {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 "path-1",
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 NULL
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 };
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
65
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 static void
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 set(struct kw *table, size_t tablesz, const char *key, const char *value)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 for (size_t i = 0; i < tablesz; ++i) {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 if (strcmp(table[i].key, key) == 0) {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 strlcpy(table[i].value, value, sizeof (table[i].value));
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 break;
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
76
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 static const char *
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 get(const struct kw *table, size_t tablesz, const char *key)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 for (size_t i = 0; i < tablesz; ++i)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 if (strcmp(table[i].key, key) == 0)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 return table[i].value;
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
83
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 return NULL;
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
86
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 IRC_DL_EXPORT void
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 example_dl_plugin_set_option(const char *key, const char *value)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 set(options, IRC_UTIL_SIZE(options), key, value);
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
92
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 IRC_DL_EXPORT const char *
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 example_dl_plugin_get_option(const char *key)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 return get(options, IRC_UTIL_SIZE(options), key);
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
98
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 IRC_DL_EXPORT const char **
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 example_dl_plugin_get_options(void)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 return options_list;
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
104
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 IRC_DL_EXPORT void
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 example_dl_plugin_set_template(const char *key, const char *value)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 set(templates, IRC_UTIL_SIZE(templates), key, value);
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
110
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 IRC_DL_EXPORT const char *
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 example_dl_plugin_get_template(const char *key)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 return get(templates, IRC_UTIL_SIZE(templates), key);
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
116
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 IRC_DL_EXPORT const char **
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 example_dl_plugin_get_templates(void)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 return templates_list;
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
122
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 IRC_DL_EXPORT void
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 example_dl_plugin_set_path(const char *key, const char *value)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 set(paths, IRC_UTIL_SIZE(paths), key, value);
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
128
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 IRC_DL_EXPORT const char *
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 example_dl_plugin_get_path(const char *key)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 return get(paths, IRC_UTIL_SIZE(paths), key);
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
134
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 IRC_DL_EXPORT const char **
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 example_dl_plugin_get_paths(void)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 return paths_list;
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
140
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 IRC_DL_EXPORT void
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 example_dl_plugin_event(const struct irc_event *ev)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 (void)ev;
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
146
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 IRC_DL_EXPORT void
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 example_dl_plugin_load(void)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
151
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 IRC_DL_EXPORT void
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 example_dl_plugin_reload(void)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 }
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
156
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 IRC_DL_EXPORT void
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 example_dl_plugin_unload(void)
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 {
7b74df7e8913 irccd: native plugin support
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 }