diff options
-rw-r--r-- | mysys/my_getopt.c | 3 | ||||
-rw-r--r-- | plugin/fulltext/plugin_example.c | 27 | ||||
-rw-r--r-- | sql/sql_plugin.cc | 10 |
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))) |