1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-24 20:06:38 +02:00

New arguments for function "register" in scripts (author, license), with optional check of license when script is loaded

This commit is contained in:
Sebastien Helleu
2008-01-11 15:08:36 +01:00
parent 8a67299912
commit add64d6f47
22 changed files with 395 additions and 149 deletions
+85 -4
View File
@@ -22,6 +22,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
@@ -31,6 +32,73 @@
#include "script-callback.h"
#define SCRIPT_OPTION_CHECK_LICENSE "check_license"
int script_option_check_license = 0;
/*
* script_config_read: read config options
*/
void
script_config_read (struct t_weechat_plugin *weechat_plugin)
{
char *string;
weechat_printf (NULL, "script_config_read");
string = weechat_config_get_plugin (SCRIPT_OPTION_CHECK_LICENSE);
if (!string)
{
weechat_config_set_plugin (SCRIPT_OPTION_CHECK_LICENSE, "on");
string = weechat_config_get_plugin (SCRIPT_OPTION_CHECK_LICENSE);
}
if (string && (weechat_config_string_to_boolean (string) > 0))
script_option_check_license = 1;
else
script_option_check_license = 0;
}
/*
* script_config_cb: callback called when config option is changed
*/
int
script_config_cb (void *data, char *type, char *option, char *value)
{
(void) type;
(void) option;
(void) value;
script_config_read (data);
return WEECHAT_RC_OK;
}
/*
* script_init: initialize script
*/
void
script_init (struct t_weechat_plugin *weechat_plugin)
{
char *option;
int length;
script_config_read (weechat_plugin);
length = strlen (weechat_plugin->name) + 32;
option= (char *)malloc (length);
if (option)
{
snprintf (option, length - 1, "%s.%s",
weechat_plugin->name, SCRIPT_OPTION_CHECK_LICENSE);
weechat_hook_config ("plugin", option,
&script_config_cb, (void *)weechat_plugin);
}
}
/*
* script_pointer_to_string: convert pointer to string for usage
* in a script (any language)
@@ -211,9 +279,8 @@ struct t_plugin_script *
script_add (struct t_weechat_plugin *weechat_plugin,
struct t_plugin_script **script_list,
char *filename,
char *name, char *version,
char *shutdown_func, char *description,
char *charset)
char *name, char *author, char *version, char *license,
char *shutdown_func, char *description, char *charset)
{
struct t_plugin_script *new_script;
@@ -226,15 +293,29 @@ script_add (struct t_weechat_plugin *weechat_plugin,
return NULL;
}
if (script_option_check_license
&& (weechat_strcmp_ignore_chars (weechat_plugin->license, license,
"0123456789-.,/\\()[]{}", 0) != 0))
{
weechat_printf (NULL,
_("%s%s: warning, license \"%s\" for script \"%s\" "
"differs from plugin license (\"%s\")"),
weechat_prefix ("error"), weechat_plugin->name,
license, name, weechat_plugin->license);
}
new_script = (struct t_plugin_script *)malloc (sizeof (struct t_plugin_script));
if (new_script)
{
new_script->filename = strdup (filename);
new_script->interpreter = NULL;
new_script->name = strdup (name);
new_script->author = strdup (author);
new_script->version = strdup (version);
new_script->shutdown_func = strdup (shutdown_func);
new_script->license = strdup (license);
new_script->description = strdup (description);
new_script->shutdown_func = (shutdown_func) ?
strdup (shutdown_func) : NULL;
new_script->charset = (charset) ? strdup (charset) : NULL;
new_script->callbacks = NULL;