]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/plugins.h
Attempt to fix bat seg faults
[bacula/bacula] / bacula / src / lib / plugins.h
index ae60f8328da2d768f16cd3654c9ab675745e3348..7e84e16cfc6285ec60cac10ed3adb6d781140aa2 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2007-2008 Free Software Foundation Europe e.V.
+   Copyright (C) 2007-2009 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
    Switzerland, email:ftf@fsfeurope.org.
 */
 /*
- * Bacula plugin loader/unloader
+ * Common plugin definitions
  *
  * Kern Sibbald, October 2007
  */
 #ifndef __PLUGINS_H
 #define __PLUGINS_H
 
-#include "bacula.h"
-#ifndef HAVE_WIN32
-#include <dlfcn.h>
-#endif
-#ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#define NAMELEN(dirent) (strlen((dirent)->d_name))
-#endif
-#ifndef HAVE_READDIR_R
-int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
-#endif
-
-#ifndef RTLD_NOW
-#define RTLD_NOW 2
-#endif
-
 /****************************************************************************
  *                                                                          *
  *                Common definitions for all plugins                        *
  *                                                                          *
  ****************************************************************************/
 
+#ifndef BUILD_PLUGIN
 extern DLL_IMP_EXP alist *plugin_list;
+#endif
 
-/* Universal return codes from all functions */
+/* Universal return codes from all plugin functions */
 typedef enum {
-  bRC_OK    = 0,                         /* OK */
-  bRC_Stop  = 1,                         /* Stop calling other plugins */
-  bRC_Error = 2,                         /* Some kind of error */
-  bRC_More  = 3,                         /* More files to backup */
+  bRC_OK     = 0,                        /* OK */
+  bRC_Stop   = 1,                        /* Stop calling other plugins */
+  bRC_Error  = 2,                        /* Some kind of error */
+  bRC_More   = 3,                        /* More files to backup */
+  bRC_Term   = 4,                        /* Unload me */
+  bRC_Seen   = 5,                        /* Return code from checkFiles */
+
+  bRC_Max    = 9999                      /* Max code Bacula can use */
 } bRC;
 
+
+
 /* Context packet as first argument of all functions */
-typedef struct s_bpContext {
+struct bpContext {
   void *bContext;                        /* Bacula private context */
   void *pContext;                        /* Plugin private context */
-} bpContext;
+};
 
 extern "C" {
 typedef bRC (*t_loadPlugin)(void *binfo, void *bfuncs, void **pinfo, void **pfuncs);
@@ -83,12 +75,19 @@ public:
    void *pinfo;
    void *pfuncs;
    void *pHandle;
+   bool disabled;
 };
 
 /* Functions */
 extern Plugin *new_plugin();
-extern bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, const char *type);
+extern bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir, 
+        const char *type, bool is_plugin_compatible(Plugin *plugin));
 extern void unload_plugins();
 
+/* Each daemon can register a debug hook that will be called
+ * after a fatal signal
+ */
+typedef void (dbg_plugin_hook_t)(Plugin *plug, FILE *fp);
+extern void dbg_plugin_add_hook(dbg_plugin_hook_t *fct);
 
 #endif /* __PLUGINS_H */