#include "filed.h"
const int dbglvl = 50;
+#ifdef HAVE_WIN32
+const char *plugin_type = "-fd.dll";
+#else
const char *plugin_type = "-fd.so";
+#endif
extern int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level);
Plugin *plugin;
int i = 0;
- if (!plugin_list) {
+ if (!plugin_list || !jcr->plugin_ctx_list) {
return; /* Return if no plugins loaded */
}
struct save_pkt sp;
bEvent event;
- if (!plugin_list) {
+ if (!plugin_list || !jcr->plugin_ctx_list) {
return 1; /* Return if no plugins loaded */
}
int len;
int i = 0;
bpContext *plugin_ctx_list = (bpContext *)jcr->plugin_ctx_list;
+ if (!plugin_ctx_list) {
+ goto bail_out;
+ }
Dmsg1(100, "Read plugin stream string=%s\n", name);
skip_nonspaces(&p); /* skip over jcr->JobFiles */
}
plugin_list = New(alist(10, not_owned_by_alist));
- load_plugins((void *)&binfo, (void *)&bfuncs, plugin_dir, plugin_type);
+ if (!load_plugins((void *)&binfo, (void *)&bfuncs, plugin_dir, plugin_type)) {
+ /* Either none found, or some error */
+ if (plugin_list->size() == 0) {
+ delete plugin_list;
+ plugin_list = NULL;
+ return;
+ }
+ }
/* Plug entry points called from findlib */
plugin_bopen = my_plugin_bopen;
/*
* Create a new instance of each plugin for this Job
+ * Note, plugin_list can exist but jcr->plugin_ctx_list can
+ * be NULL if no plugins were loaded.
*/
void new_plugins(JCR *jcr)
{
Plugin *plugin;
int i = 0;
- if (!plugin_list) {
- return;
+ if (!plugin_list || !jcr->plugin_ctx_list) {
+ return; /* no plugins, nothing to do */
}
bpContext *plugin_ctx_list = (bpContext *)jcr->plugin_ctx_list;
#include "htable.h"
+static const int dbglvl = 500;
+
/* ===================================================================
* htable
*/
}
/* Multiply by large prime number, take top bits, mask for remainder */
index = ((hash * 1103515249) >> rshift) & mask;
- Dmsg2(500, "Leave hash_index hash=0x%x index=%d\n", hash, index);
+ Dmsg2(dbglvl, "Leave hash_index hash=0x%x index=%d\n", hash, index);
}
/*
return false; /* already exists */
}
ASSERT(index < buckets);
- Dmsg2(500, "Insert: hash=%p index=%d\n", hash, index);
+ Dmsg2(dbglvl, "Insert: hash=%p index=%d\n", hash, index);
hp = (hlink *)(((char *)item)+loffset);
- Dmsg4(500, "Insert hp=%p index=%d item=%p offset=%u\n", hp,
+ Dmsg4(dbglvl, "Insert hp=%p index=%d item=%p offset=%u\n", hp,
index, item, loffset);
hp->next = table[index];
hp->hash = hash;
hp->key = key;
table[index] = hp;
- Dmsg3(500, "Insert hp->next=%p hp->hash=0x%x hp->key=%s\n",
+ Dmsg3(dbglvl, "Insert hp->next=%p hp->hash=0x%x hp->key=%s\n",
hp->next, hp->hash, hp->key);
if (++num_items >= max_items) {
- Dmsg2(500, "num_items=%d max_items=%d\n", num_items, max_items);
+ Dmsg2(dbglvl, "num_items=%d max_items=%d\n", num_items, max_items);
grow_table();
}
- Dmsg3(500, "Leave insert index=%d num_items=%d key=%s\n", index, num_items, key);
+ Dmsg3(dbglvl, "Leave insert index=%d num_items=%d key=%s\n", index, num_items, key);
return true;
}
for (hlink *hp=table[index]; hp; hp=(hlink *)hp->next) {
// Dmsg2(100, "hp=%p key=%s\n", hp, hp->key);
if (hash == hp->hash && strcmp(key, hp->key) == 0) {
- Dmsg1(500, "lookup return %p\n", ((char *)hp)-loffset);
+ Dmsg1(dbglvl, "lookup return %p\n", ((char *)hp)-loffset);
return ((char *)hp)-loffset;
}
}
void *htable::next()
{
- Dmsg1(500, "Enter next: walkptr=%p\n", walkptr);
+ Dmsg1(dbglvl, "Enter next: walkptr=%p\n", walkptr);
if (walkptr) {
walkptr = (hlink *)(walkptr->next);
}
while (!walkptr && walk_index < buckets) {
walkptr = table[walk_index++];
if (walkptr) {
- Dmsg3(500, "new walkptr=%p next=%p inx=%d\n", walkptr,
+ Dmsg3(dbglvl, "new walkptr=%p next=%p inx=%d\n", walkptr,
walkptr->next, walk_index-1);
}
}
if (walkptr) {
- Dmsg2(500, "next: rtn %p walk_index=%d\n",
+ Dmsg2(dbglvl, "next: rtn %p walk_index=%d\n",
((char *)walkptr)-loffset, walk_index);
return ((char *)walkptr)-loffset;
}
- Dmsg0(500, "next: return NULL\n");
+ Dmsg0(dbglvl, "next: return NULL\n");
return NULL;
}
void *htable::first()
{
- Dmsg0(500, "Enter first\n");
+ Dmsg0(dbglvl, "Enter first\n");
walkptr = table[0]; /* get first bucket */
walk_index = 1; /* Point to next index */
while (!walkptr && walk_index < buckets) {
walkptr = table[walk_index++]; /* go to next bucket */
if (walkptr) {
- Dmsg3(500, "first new walkptr=%p next=%p inx=%d\n", walkptr,
+ Dmsg3(dbglvl, "first new walkptr=%p next=%p inx=%d\n", walkptr,
walkptr->next, walk_index-1);
}
}
if (walkptr) {
- Dmsg1(500, "Leave first walkptr=%p\n", walkptr);
+ Dmsg1(dbglvl, "Leave first walkptr=%p\n", walkptr);
return ((char *)walkptr)-loffset;
}
- Dmsg0(500, "Leave first walkptr=NULL\n");
+ Dmsg0(dbglvl, "Leave first walkptr=NULL\n");
return NULL;
}
bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, const char *type)
{
bool found = false;
-//#ifndef HAVE_WIN32
t_loadPlugin loadPlugin;
Plugin *plugin;
DIR* dp = NULL;
if (!(dp = opendir(plugin_dir))) {
berrno be;
- Jmsg(NULL, M_ERROR, 0, _("Failed to open Plugin directory %s: ERR=%s\n"),
+ Jmsg(NULL, M_ERROR_TERM, 0, _("Failed to open Plugin directory %s: ERR=%s\n"),
plugin_dir, be.bstrerror());
goto get_out;
}
for ( ;; ) {
if ((readdir_r(dp, entry, &result) != 0) || (result == NULL)) {
if (!found) {
- Jmsg(NULL, M_INFO, 0, _("Failed to find any plugins in %s\n"),
+ Jmsg(NULL, M_WARNING, 0, _("Failed to find any plugins in %s\n"),
plugin_dir);
}
break;
if (dp) {
closedir(dp);
}
-//#endif
return found;
}
*/
void unload_plugins()
{
-//#ifndef HAVE_WIN32
Plugin *plugin;
if (!plugin_list) {
}
delete plugin_list;
plugin_list = NULL;
-//#endif
}