mirror of
https://github.com/weechat/weechat.git
synced 2026-06-12 14:14:48 +02:00
plugin/script: replace calls to malloc by weechat_asprintf
This commit is contained in:
@@ -1413,6 +1413,23 @@ plugin_script_api_command (struct t_weechat_plugin *weechat_plugin,
|
||||
command, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Builds full name of option: "script.option".
|
||||
*
|
||||
* Note: result must be freed after use.
|
||||
*/
|
||||
|
||||
char *
|
||||
plugin_script_api_build_option_full_name (struct t_weechat_plugin *weechat_plugin,
|
||||
struct t_plugin_script *script,
|
||||
const char *option)
|
||||
{
|
||||
char *option_full_name;
|
||||
|
||||
weechat_asprintf (&option_full_name, "%s.%s", script->name, option);
|
||||
return option_full_name;
|
||||
}
|
||||
|
||||
/*
|
||||
* Gets value of a script option (format in file is "plugin.script.option").
|
||||
*/
|
||||
@@ -1422,24 +1439,20 @@ plugin_script_api_config_get_plugin (struct t_weechat_plugin *weechat_plugin,
|
||||
struct t_plugin_script *script,
|
||||
const char *option)
|
||||
{
|
||||
char *option_fullname;
|
||||
char *option_full_name;
|
||||
const char *return_value;
|
||||
|
||||
if (!script)
|
||||
return NULL;
|
||||
|
||||
option_fullname = malloc ((strlen (script->name) +
|
||||
strlen (option) + 2));
|
||||
if (!option_fullname)
|
||||
option_full_name = plugin_script_api_build_option_full_name (
|
||||
weechat_plugin, script, option);
|
||||
if (!option_full_name)
|
||||
return NULL;
|
||||
|
||||
strcpy (option_fullname, script->name);
|
||||
strcat (option_fullname, ".");
|
||||
strcat (option_fullname, option);
|
||||
return_value = weechat_config_get_plugin (option_full_name);
|
||||
|
||||
return_value = weechat_config_get_plugin (option_fullname);
|
||||
|
||||
free (option_fullname);
|
||||
free (option_full_name);
|
||||
|
||||
return return_value;
|
||||
}
|
||||
@@ -1457,24 +1470,20 @@ plugin_script_api_config_is_set_plugin (struct t_weechat_plugin *weechat_plugin,
|
||||
struct t_plugin_script *script,
|
||||
const char *option)
|
||||
{
|
||||
char *option_fullname;
|
||||
char *option_full_name;
|
||||
int return_code;
|
||||
|
||||
if (!script)
|
||||
return 0;
|
||||
|
||||
option_fullname = malloc ((strlen (script->name) +
|
||||
strlen (option) + 2));
|
||||
if (!option_fullname)
|
||||
option_full_name = plugin_script_api_build_option_full_name (
|
||||
weechat_plugin, script, option);
|
||||
if (!option_full_name)
|
||||
return 0;
|
||||
|
||||
strcpy (option_fullname, script->name);
|
||||
strcat (option_fullname, ".");
|
||||
strcat (option_fullname, option);
|
||||
return_code = weechat_config_is_set_plugin (option_full_name);
|
||||
|
||||
return_code = weechat_config_is_set_plugin (option_fullname);
|
||||
|
||||
free (option_fullname);
|
||||
free (option_full_name);
|
||||
|
||||
return return_code;
|
||||
}
|
||||
@@ -1488,24 +1497,20 @@ plugin_script_api_config_set_plugin (struct t_weechat_plugin *weechat_plugin,
|
||||
struct t_plugin_script *script,
|
||||
const char *option, const char *value)
|
||||
{
|
||||
char *option_fullname;
|
||||
char *option_full_name;
|
||||
int return_code;
|
||||
|
||||
if (!script)
|
||||
return 0;
|
||||
|
||||
option_fullname = malloc ((strlen (script->name) +
|
||||
strlen (option) + 2));
|
||||
if (!option_fullname)
|
||||
option_full_name = plugin_script_api_build_option_full_name (
|
||||
weechat_plugin, script, option);
|
||||
if (!option_full_name)
|
||||
return 0;
|
||||
|
||||
strcpy (option_fullname, script->name);
|
||||
strcat (option_fullname, ".");
|
||||
strcat (option_fullname, option);
|
||||
return_code = weechat_config_set_plugin (option_full_name, value);
|
||||
|
||||
return_code = weechat_config_set_plugin (option_fullname, value);
|
||||
|
||||
free (option_fullname);
|
||||
free (option_full_name);
|
||||
|
||||
return return_code;
|
||||
}
|
||||
@@ -1519,23 +1524,19 @@ plugin_script_api_config_set_desc_plugin (struct t_weechat_plugin *weechat_plugi
|
||||
struct t_plugin_script *script,
|
||||
const char *option, const char *description)
|
||||
{
|
||||
char *option_fullname;
|
||||
char *option_full_name;
|
||||
|
||||
if (!script)
|
||||
return;
|
||||
|
||||
option_fullname = malloc ((strlen (script->name) +
|
||||
strlen (option) + 2));
|
||||
if (!option_fullname)
|
||||
option_full_name = plugin_script_api_build_option_full_name (
|
||||
weechat_plugin, script, option);
|
||||
if (!option_full_name)
|
||||
return;
|
||||
|
||||
strcpy (option_fullname, script->name);
|
||||
strcat (option_fullname, ".");
|
||||
strcat (option_fullname, option);
|
||||
weechat_config_set_desc_plugin (option_full_name, description);
|
||||
|
||||
weechat_config_set_desc_plugin (option_fullname, description);
|
||||
|
||||
free (option_fullname);
|
||||
free (option_full_name);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1547,24 +1548,20 @@ plugin_script_api_config_unset_plugin (struct t_weechat_plugin *weechat_plugin,
|
||||
struct t_plugin_script *script,
|
||||
const char *option)
|
||||
{
|
||||
char *option_fullname;
|
||||
char *option_full_name;
|
||||
int return_code;
|
||||
|
||||
if (!script)
|
||||
return 0;
|
||||
|
||||
option_fullname = malloc ((strlen (script->name) +
|
||||
strlen (option) + 2));
|
||||
if (!option_fullname)
|
||||
option_full_name = plugin_script_api_build_option_full_name (
|
||||
weechat_plugin, script, option);
|
||||
if (!option_full_name)
|
||||
return 0;
|
||||
|
||||
strcpy (option_fullname, script->name);
|
||||
strcat (option_fullname, ".");
|
||||
strcat (option_fullname, option);
|
||||
return_code = weechat_config_unset_plugin (option_full_name);
|
||||
|
||||
return_code = weechat_config_unset_plugin (option_fullname);
|
||||
|
||||
free (option_fullname);
|
||||
free (option_full_name);
|
||||
|
||||
return return_code;
|
||||
}
|
||||
|
||||
+71
-103
@@ -508,22 +508,21 @@ plugin_script_auto_load (struct t_weechat_plugin *weechat_plugin,
|
||||
const char *filename))
|
||||
{
|
||||
char *weechat_data_dir, *dir_name;
|
||||
int dir_length;
|
||||
|
||||
/* build directory, adding WeeChat data directory */
|
||||
weechat_data_dir = weechat_info_get ("weechat_data_dir", "");
|
||||
if (!weechat_data_dir)
|
||||
return;
|
||||
dir_length = strlen (weechat_data_dir) + strlen (weechat_plugin->name) + 16;
|
||||
dir_name = malloc (dir_length);
|
||||
if (!dir_name)
|
||||
|
||||
if (weechat_asprintf (&dir_name,
|
||||
"%s/%s/autoload",
|
||||
weechat_data_dir,
|
||||
weechat_plugin->name) < 0)
|
||||
{
|
||||
free (weechat_data_dir);
|
||||
return;
|
||||
}
|
||||
|
||||
snprintf (dir_name, dir_length,
|
||||
"%s/%s/autoload", weechat_data_dir, weechat_plugin->name);
|
||||
weechat_exec_on_files (dir_name, 0, 0, callback, NULL);
|
||||
|
||||
free (weechat_data_dir);
|
||||
@@ -595,7 +594,6 @@ plugin_script_search_path (struct t_weechat_plugin *weechat_plugin,
|
||||
int search_system_dir)
|
||||
{
|
||||
char *final_name, *weechat_data_dir, *dir_system;
|
||||
int length;
|
||||
struct stat st;
|
||||
|
||||
if (!filename)
|
||||
@@ -608,14 +606,12 @@ plugin_script_search_path (struct t_weechat_plugin *weechat_plugin,
|
||||
if (weechat_data_dir)
|
||||
{
|
||||
/* try WeeChat user's autoload dir */
|
||||
length = strlen (weechat_data_dir) + strlen (weechat_plugin->name) + 8 +
|
||||
strlen (filename) + 16;
|
||||
final_name = malloc (length);
|
||||
if (final_name)
|
||||
if (weechat_asprintf (&final_name,
|
||||
"%s/%s/autoload/%s",
|
||||
weechat_data_dir,
|
||||
weechat_plugin->name,
|
||||
filename) >= 0)
|
||||
{
|
||||
snprintf (final_name, length,
|
||||
"%s/%s/autoload/%s",
|
||||
weechat_data_dir, weechat_plugin->name, filename);
|
||||
if ((stat (final_name, &st) == 0) && (st.st_size > 0))
|
||||
{
|
||||
free (weechat_data_dir);
|
||||
@@ -623,15 +619,13 @@ plugin_script_search_path (struct t_weechat_plugin *weechat_plugin,
|
||||
}
|
||||
free (final_name);
|
||||
}
|
||||
|
||||
/* try WeeChat language user's dir */
|
||||
length = strlen (weechat_data_dir) + strlen (weechat_plugin->name) +
|
||||
strlen (filename) + 16;
|
||||
final_name = malloc (length);
|
||||
if (final_name)
|
||||
if (weechat_asprintf (&final_name,
|
||||
"%s/%s/%s",
|
||||
weechat_data_dir,
|
||||
weechat_plugin->name,
|
||||
filename) >= 0)
|
||||
{
|
||||
snprintf (final_name, length,
|
||||
"%s/%s/%s", weechat_data_dir, weechat_plugin->name, filename);
|
||||
if ((stat (final_name, &st) == 0) && (st.st_size > 0))
|
||||
{
|
||||
free (weechat_data_dir);
|
||||
@@ -639,14 +633,12 @@ plugin_script_search_path (struct t_weechat_plugin *weechat_plugin,
|
||||
}
|
||||
free (final_name);
|
||||
}
|
||||
|
||||
/* try WeeChat user's dir */
|
||||
length = strlen (weechat_data_dir) + strlen (filename) + 16;
|
||||
final_name = malloc (length);
|
||||
if (final_name)
|
||||
if (weechat_asprintf (&final_name,
|
||||
"%s/%s",
|
||||
weechat_data_dir,
|
||||
filename) >= 0)
|
||||
{
|
||||
snprintf (final_name, length,
|
||||
"%s/%s", weechat_data_dir, filename);
|
||||
if ((stat (final_name, &st) == 0) && (st.st_size > 0))
|
||||
{
|
||||
free (weechat_data_dir);
|
||||
@@ -659,17 +651,16 @@ plugin_script_search_path (struct t_weechat_plugin *weechat_plugin,
|
||||
|
||||
if (search_system_dir)
|
||||
{
|
||||
/* try WeeChat system dir */
|
||||
dir_system = weechat_info_get ("weechat_sharedir", "");
|
||||
if (dir_system)
|
||||
{
|
||||
length = strlen (dir_system) + strlen (weechat_plugin->name) +
|
||||
strlen (filename) + 16;
|
||||
final_name = malloc (length);
|
||||
if (final_name)
|
||||
/* try WeeChat system dir */
|
||||
if (weechat_asprintf (&final_name,
|
||||
"%s/%s/%s",
|
||||
dir_system,
|
||||
weechat_plugin->name,
|
||||
filename) >= 0)
|
||||
{
|
||||
snprintf (final_name,length,
|
||||
"%s/%s/%s", dir_system, weechat_plugin->name, filename);
|
||||
if ((stat (final_name, &st) == 0) && (st.st_size > 0))
|
||||
{
|
||||
free (dir_system);
|
||||
@@ -1266,7 +1257,7 @@ plugin_script_action_install (struct t_weechat_plugin *weechat_plugin,
|
||||
{
|
||||
char **argv, *name, *ptr_base_name, *base_name, *new_path, *autoload_path;
|
||||
char *symlink_path, str_signal[128], *ptr_name, *weechat_data_dir, *dir_separator;
|
||||
int argc, i, length, rc, autoload, existing_script, script_loaded;
|
||||
int argc, i, rc, autoload, existing_script, script_loaded;
|
||||
struct t_plugin_script *ptr_script;
|
||||
|
||||
if (!*list)
|
||||
@@ -1331,13 +1322,12 @@ plugin_script_action_install (struct t_weechat_plugin *weechat_plugin,
|
||||
|
||||
/* move file from install dir to language dir */
|
||||
weechat_data_dir = weechat_info_get ("weechat_data_dir", "");
|
||||
length = strlen (weechat_data_dir) + strlen (weechat_plugin->name) +
|
||||
strlen (base_name) + 16;
|
||||
new_path = malloc (length);
|
||||
if (new_path)
|
||||
if (weechat_asprintf (&new_path,
|
||||
"%s/%s/%s",
|
||||
weechat_data_dir,
|
||||
weechat_plugin->name,
|
||||
base_name) >= 0)
|
||||
{
|
||||
snprintf (new_path, length, "%s/%s/%s",
|
||||
weechat_data_dir, weechat_plugin->name, base_name);
|
||||
if (weechat_file_copy (name, new_path))
|
||||
{
|
||||
/* remove old file */
|
||||
@@ -1346,24 +1336,18 @@ plugin_script_action_install (struct t_weechat_plugin *weechat_plugin,
|
||||
/* make link in autoload dir */
|
||||
if (autoload)
|
||||
{
|
||||
length = strlen (weechat_data_dir) +
|
||||
strlen (weechat_plugin->name) + 8 +
|
||||
strlen (base_name) + 16;
|
||||
autoload_path = malloc (length);
|
||||
if (autoload_path)
|
||||
if (weechat_asprintf (&autoload_path,
|
||||
"%s/%s/autoload/%s",
|
||||
weechat_data_dir,
|
||||
weechat_plugin->name,
|
||||
base_name) >= 0)
|
||||
{
|
||||
snprintf (autoload_path, length,
|
||||
"%s/%s/autoload/%s",
|
||||
weechat_data_dir, weechat_plugin->name,
|
||||
base_name);
|
||||
dir_separator = weechat_info_get ("dir_separator", "");
|
||||
length = 2 + strlen (dir_separator) +
|
||||
strlen (base_name) + 1;
|
||||
symlink_path = malloc (length);
|
||||
if (symlink_path)
|
||||
if (weechat_asprintf (&symlink_path,
|
||||
"..%s%s",
|
||||
dir_separator,
|
||||
base_name) >= 0)
|
||||
{
|
||||
snprintf (symlink_path, length, "..%s%s",
|
||||
dir_separator, base_name);
|
||||
rc = symlink (symlink_path, autoload_path);
|
||||
(void) rc;
|
||||
free (symlink_path);
|
||||
@@ -1495,7 +1479,7 @@ plugin_script_action_autoload (struct t_weechat_plugin *weechat_plugin,
|
||||
{
|
||||
char **argv, *name, *ptr_base_name, *base_name, *autoload_path;
|
||||
char *symlink_path, *ptr_name, *weechat_data_dir, *dir_separator;
|
||||
int argc, i, length, rc, autoload;
|
||||
int argc, i, rc, autoload;
|
||||
|
||||
if (!*list)
|
||||
return;
|
||||
@@ -1543,26 +1527,20 @@ plugin_script_action_autoload (struct t_weechat_plugin *weechat_plugin,
|
||||
if (base_name)
|
||||
{
|
||||
weechat_data_dir = weechat_info_get ("weechat_data_dir", "");
|
||||
length = strlen (weechat_data_dir) +
|
||||
strlen (weechat_plugin->name) + 8 +
|
||||
strlen (base_name) + 16;
|
||||
autoload_path = malloc (length);
|
||||
if (autoload_path)
|
||||
if (weechat_asprintf (&autoload_path,
|
||||
"%s/%s/autoload/%s",
|
||||
weechat_data_dir,
|
||||
weechat_plugin->name,
|
||||
base_name) >= 0)
|
||||
{
|
||||
snprintf (autoload_path, length,
|
||||
"%s/%s/autoload/%s",
|
||||
weechat_data_dir, weechat_plugin->name,
|
||||
base_name);
|
||||
if (autoload)
|
||||
{
|
||||
dir_separator = weechat_info_get ("dir_separator", "");
|
||||
length = 2 + strlen (dir_separator) +
|
||||
strlen (base_name) + 1;
|
||||
symlink_path = malloc (length);
|
||||
if (symlink_path)
|
||||
if (weechat_asprintf (&symlink_path,
|
||||
"..%s%s",
|
||||
dir_separator,
|
||||
base_name) >= 0)
|
||||
{
|
||||
snprintf (symlink_path, length, "..%s%s",
|
||||
dir_separator, base_name);
|
||||
rc = symlink (symlink_path, autoload_path);
|
||||
(void) rc;
|
||||
free (symlink_path);
|
||||
@@ -1645,41 +1623,31 @@ void
|
||||
plugin_script_display_short_list (struct t_weechat_plugin *weechat_plugin,
|
||||
struct t_plugin_script *scripts)
|
||||
{
|
||||
const char *scripts_loaded;
|
||||
char *buf;
|
||||
int length;
|
||||
struct t_plugin_script *ptr_script;
|
||||
char scripts_loaded[1024], **buf;
|
||||
|
||||
if (scripts)
|
||||
if (!scripts)
|
||||
return;
|
||||
|
||||
buf = weechat_string_dyn_alloc (256);
|
||||
if (!buf)
|
||||
return;
|
||||
|
||||
snprintf (scripts_loaded, sizeof (scripts_loaded),
|
||||
/* TRANSLATORS: "%s" is language (for example "perl") */
|
||||
_("%s scripts loaded:"),
|
||||
weechat_plugin->name);
|
||||
|
||||
weechat_string_dyn_concat (buf, scripts_loaded, -1);
|
||||
weechat_string_dyn_concat (buf, " ", -1);
|
||||
for (ptr_script = scripts; ptr_script; ptr_script = ptr_script->next_script)
|
||||
{
|
||||
/* TRANSLATORS: "%s" is language (for example "perl") */
|
||||
scripts_loaded = _("%s scripts loaded:");
|
||||
|
||||
length = strlen (scripts_loaded) + strlen (weechat_plugin->name) + 1;
|
||||
|
||||
for (ptr_script = scripts; ptr_script;
|
||||
ptr_script = ptr_script->next_script)
|
||||
{
|
||||
length += strlen (ptr_script->name) + 2;
|
||||
}
|
||||
length++;
|
||||
|
||||
buf = malloc (length);
|
||||
if (buf)
|
||||
{
|
||||
snprintf (buf, length, scripts_loaded, weechat_plugin->name);
|
||||
strcat (buf, " ");
|
||||
for (ptr_script = scripts; ptr_script;
|
||||
ptr_script = ptr_script->next_script)
|
||||
{
|
||||
strcat (buf, ptr_script->name);
|
||||
if (ptr_script->next_script)
|
||||
strcat (buf, ", ");
|
||||
}
|
||||
weechat_printf (NULL, "%s", buf);
|
||||
free (buf);
|
||||
}
|
||||
weechat_string_dyn_concat (buf, ptr_script->name, -1);
|
||||
if (ptr_script->next_script)
|
||||
weechat_string_dyn_concat (buf, ", ", -1);
|
||||
}
|
||||
weechat_printf (NULL, "%s", *buf);
|
||||
weechat_string_dyn_free (buf, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user