~ubuntu-branches/ubuntu/saucy/uwsgi/saucy

« back to all changes in this revision

Viewing changes to plugins.c

  • Committer: Package Import Robot
  • Author(s): Janos Guljas
  • Date: 2012-04-30 17:35:22 UTC
  • mfrom: (1.1.7)
  • Revision ID: package-import@ubuntu.com-20120430173522-qucwu1au3s9bflhb
Tags: 1.2+dfsg-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
81
81
        if (strchr(plugin_name, '/')) {
82
82
                plugin_handle = dlopen(plugin_name, RTLD_NOW | RTLD_GLOBAL);
83
83
                if (!plugin_handle) {
84
 
                        uwsgi_log( "%s\n", dlerror());
 
84
                        if (!has_option)
 
85
                                uwsgi_log( "%s\n", dlerror());
85
86
                        goto end;
86
87
                }
87
88
                plugin_symbol_name_start = uwsgi_get_last_char(plugin_name, '/');
115
116
 
116
117
success:
117
118
        if (!plugin_handle) {
118
 
                uwsgi_log( "%s\n", dlerror());
 
119
                if (!has_option)
 
120
                        uwsgi_log( "%s\n", dlerror());
119
121
        }
120
122
        else {
121
123
                char *plugin_entry_symbol = uwsgi_concat2n(plugin_symbol_name_start, strlen(plugin_symbol_name_start)-3, "", 0);
170
172
                                return NULL;
171
173
                        }
172
174
                        if (has_option) {
173
 
                                struct uwsgi_option *op = uwsgi.options;
 
175
                                struct uwsgi_option *op = up->options;
174
176
                                int found = 0;
175
177
                                while (op && op->name) {
176
178
                                        if (!strcmp(has_option, op->name)) {
208
210
                                up->on_load();
209
211
                        return plugin_handle;
210
212
                }
211
 
                uwsgi_log( "%s\n", dlerror());
 
213
                if (!has_option)
 
214
                        uwsgi_log( "%s\n", dlerror());
212
215
        }
213
216
 
214
217
end:
219
222
 
220
223
        return NULL;
221
224
}
 
225
 
 
226
int uwsgi_try_autoload(char *option) {
 
227
        DIR *d;
 
228
        struct dirent *dp;
 
229
        // step dir, check for user-supplied plugins directory
 
230
        struct uwsgi_string_list *pdir = uwsgi.plugins_dir;
 
231
        while(pdir) {
 
232
                d = opendir(pdir->value);
 
233
                if (d) {
 
234
                        while ((dp = readdir(d)) != NULL) {
 
235
                                if (uwsgi_endswith(dp->d_name, "_plugin.so")) {
 
236
                                        char *filename = uwsgi_concat3(pdir->value, "/", dp->d_name);
 
237
                                        if (uwsgi_load_plugin(-1, filename, option)) {  
 
238
                                                uwsgi_log("option \"%s\" found in plugin %s\n", option, filename);
 
239
                                                free(filename);
 
240
                                                closedir(d);
 
241
                                                // add new options
 
242
                                                build_options();
 
243
                                                return 1;
 
244
                                        }
 
245
                                        free(filename);
 
246
                                }
 
247
                        }
 
248
                        closedir(d);
 
249
                }
 
250
                pdir = pdir->next;
 
251
        }
 
252
 
 
253
        // last step: search in compile-time plugin_dir
 
254
        d = opendir(UWSGI_PLUGIN_DIR);
 
255
        if (!d) return 0;
 
256
 
 
257
        while((dp = readdir(d)) != NULL) {
 
258
                if (uwsgi_endswith(dp->d_name, "_plugin.so")) {
 
259
                                char *filename = uwsgi_concat3(UWSGI_PLUGIN_DIR, "/", dp->d_name);
 
260
                                if (uwsgi_load_plugin(-1, filename, option)) {
 
261
                                        uwsgi_log("option \"%s\" found in plugin %s\n", option, filename);
 
262
                                        free(filename);
 
263
                                        closedir(d);
 
264
                                        // add new options
 
265
                                        build_options();
 
266
                                        return 1;
 
267
                                }
 
268
                                free(filename);
 
269
                }
 
270
        }
 
271
 
 
272
        closedir(d);
 
273
 
 
274
        return 0;
 
275
 
 
276
}