summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysys/my_getopt.c3
-rw-r--r--plugin/fulltext/plugin_example.c27
-rw-r--r--sql/sql_plugin.cc10
3 files changed, 36 insertions, 4 deletions
diff --git a/mysys/my_getopt.c b/mysys/my_getopt.c
index 4573d27555a..dd2663970ee 100644
--- a/mysys/my_getopt.c
+++ b/mysys/my_getopt.c
@@ -111,6 +111,9 @@ int handle_options(int *argc, char ***argv,
int error, i;
LINT_INIT(opt_found);
+ /* handle_options() assumes arg0 (program name) always exists */
+ DBUG_ASSERT(argc && *argc >= 1);
+ DBUG_ASSERT(argv && *argv);
(*argc)--; /* Skip the program name */
(*argv)++; /* --- || ---- */
init_variables(longopts);
diff --git a/plugin/fulltext/plugin_example.c b/plugin/fulltext/plugin_example.c
index c38498fb9e8..67c16a91268 100644
--- a/plugin/fulltext/plugin_example.c
+++ b/plugin/fulltext/plugin_example.c
@@ -216,6 +216,29 @@ static struct st_mysql_show_var simple_status[]=
};
/*
+ Plugin system variables.
+*/
+
+static long sysvar_one_value;
+static char *sysvar_two_value;
+
+static MYSQL_SYSVAR_LONG(simple_sysvar_one, sysvar_one_value,
+ PLUGIN_VAR_RQCMDARG,
+ "Simple fulltext parser example system variable number one. Give a number.",
+ NULL, NULL, 100L, 10L, ~0L, 0);
+
+static MYSQL_SYSVAR_STR(simple_sysvar_two, sysvar_two_value,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
+ "Simple fulltext parser example system variable number two. Give a string.",
+ NULL, NULL, NULL);
+
+static struct st_mysql_sys_var* simple_system_variables[]= {
+ MYSQL_SYSVAR(simple_sysvar_one),
+ MYSQL_SYSVAR(simple_sysvar_two),
+ NULL
+};
+
+/*
Plugin library descriptor
*/
@@ -231,8 +254,8 @@ mysql_declare_plugin(ftexample)
simple_parser_plugin_deinit,/* deinit function (when unloaded) */
0x0001, /* version */
simple_status, /* status variables */
- NULL, /* system variables */
- NULL /* config options */
+ simple_system_variables, /* system variables */
+ NULL
}
mysql_declare_plugin_end;
diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc
index 83d71af227e..bac7c4f61b8 100644
--- a/sql/sql_plugin.cc
+++ b/sql/sql_plugin.cc
@@ -701,6 +701,8 @@ static bool plugin_add(MEM_ROOT *tmp_root,
sql_print_error(ER(ER_UDF_EXISTS), name->str);
DBUG_RETURN(TRUE);
}
+ /* Clear the whole struct to catch future extensions. */
+ bzero((char*) &tmp, sizeof(tmp));
if (! (tmp.plugin_dl= plugin_dl_add(dl, report)))
DBUG_RETURN(TRUE);
/* Find plugin by name */
@@ -1569,7 +1571,8 @@ bool mysql_install_plugin(THD *thd, const LEX_STRING *name, const LEX_STRING *dl
{
TABLE_LIST tables;
TABLE *table;
- int error, argc=0;
+ int error, argc;
+ char *argv[2];
struct st_plugin_int *tmp;
DBUG_ENTER("mysql_install_plugin");
@@ -1585,7 +1588,10 @@ bool mysql_install_plugin(THD *thd, const LEX_STRING *name, const LEX_STRING *dl
pthread_mutex_lock(&LOCK_plugin);
rw_wrlock(&LOCK_system_variables_hash);
- error= plugin_add(thd->mem_root, name, dl, &argc, NULL, REPORT_TO_USER);
+ argv[0]= ""; /* handle_options() assumes arg0 (program name) always exists */
+ argv[1]= NULL;
+ argc= 1;
+ error= plugin_add(thd->mem_root, name, dl, &argc, argv, REPORT_TO_USER);
rw_unlock(&LOCK_system_variables_hash);
if (error || !(tmp= plugin_find_internal(name, MYSQL_ANY_PLUGIN)))