Cleanup: remove strcpy usage
Remove strcpy use in: - bone_autoside_name - BLI_string_flip_side_name - datatoc_icon utility. - RNA define error messages. - RNA UI registration. - extern/xdnd.
This commit is contained in:
parent
2100ebca7a
commit
69d92bd3de
5
extern/xdnd/xdnd.c
vendored
5
extern/xdnd/xdnd.c
vendored
@ -464,8 +464,9 @@ static char *concat_string_list (char **t, int *bytes)
|
||||
break;
|
||||
if (!(t[n][0]))
|
||||
break;
|
||||
strcpy (s + l, t[n]);
|
||||
l += strlen (t[n]) + 1;
|
||||
int t_size = strlen (t[n]) + 1;
|
||||
memcpy (s + l, t[n], t_size);
|
||||
l += t_size;
|
||||
}
|
||||
*bytes = l;
|
||||
s[l] = '\0';
|
||||
|
@ -270,10 +270,11 @@ void *GHOST_DropTargetWin32::getDropDataAsString(IDataObject *p_data_object)
|
||||
if (p_data_object->QueryGetData(&fmtetc) == S_OK) {
|
||||
if (p_data_object->GetData(&fmtetc, &stgmed) == S_OK) {
|
||||
char *str = (char *)::GlobalLock(stgmed.hGlobal);
|
||||
int str_size = ::strlen(str) + 1;
|
||||
|
||||
tmp_string = (char *)::malloc(::strlen(str) + 1);
|
||||
tmp_string = (char *)::malloc(str_size);
|
||||
if (tmp_string) {
|
||||
::strcpy(tmp_string, str);
|
||||
::memcpy(tmp_string, str, str_size);
|
||||
}
|
||||
/* Free memory. */
|
||||
::GlobalUnlock(stgmed.hGlobal);
|
||||
|
@ -2,6 +2,8 @@
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#include "BLI_string.h"
|
||||
|
||||
#include "BKE_action.h"
|
||||
|
||||
#include "DNA_action_types.h"
|
||||
@ -53,10 +55,10 @@ TEST(action_groups, ReconstructGroupsWithReordering)
|
||||
bActionGroup groupB = {nullptr};
|
||||
bActionGroup groupC = {nullptr};
|
||||
bActionGroup groupD = {nullptr};
|
||||
strcpy(groupA.name, "groupA");
|
||||
strcpy(groupB.name, "groupB");
|
||||
strcpy(groupC.name, "groupC");
|
||||
strcpy(groupD.name, "groupD");
|
||||
STRNCPY(groupA.name, "groupA");
|
||||
STRNCPY(groupB.name, "groupB");
|
||||
STRNCPY(groupC.name, "groupC");
|
||||
STRNCPY(groupD.name, "groupD");
|
||||
|
||||
BLI_addtail(&action.groups, &groupA);
|
||||
BLI_addtail(&action.groups, &groupB);
|
||||
|
@ -703,7 +703,7 @@ bool bone_autoside_name(
|
||||
{
|
||||
uint len;
|
||||
char basename[MAXBONENAME] = "";
|
||||
char extension[5] = "";
|
||||
const char *extension = NULL;
|
||||
|
||||
len = strlen(name);
|
||||
if (len == 0) {
|
||||
@ -723,18 +723,18 @@ bool bone_autoside_name(
|
||||
/* z-axis - vertical (top/bottom) */
|
||||
if (IS_EQF(head, 0.0f)) {
|
||||
if (tail < 0) {
|
||||
strcpy(extension, "Bot");
|
||||
extension = "Bot";
|
||||
}
|
||||
else if (tail > 0) {
|
||||
strcpy(extension, "Top");
|
||||
extension = "Top";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (head < 0) {
|
||||
strcpy(extension, "Bot");
|
||||
extension = "Bot";
|
||||
}
|
||||
else {
|
||||
strcpy(extension, "Top");
|
||||
extension = "Top";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -742,18 +742,18 @@ bool bone_autoside_name(
|
||||
/* y-axis - depth (front/back) */
|
||||
if (IS_EQF(head, 0.0f)) {
|
||||
if (tail < 0) {
|
||||
strcpy(extension, "Fr");
|
||||
extension = "Fr";
|
||||
}
|
||||
else if (tail > 0) {
|
||||
strcpy(extension, "Bk");
|
||||
extension = "Bk";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (head < 0) {
|
||||
strcpy(extension, "Fr");
|
||||
extension = "Fr";
|
||||
}
|
||||
else {
|
||||
strcpy(extension, "Bk");
|
||||
extension = "Bk";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -761,19 +761,19 @@ bool bone_autoside_name(
|
||||
/* x-axis - horizontal (left/right) */
|
||||
if (IS_EQF(head, 0.0f)) {
|
||||
if (tail < 0) {
|
||||
strcpy(extension, "R");
|
||||
extension = "R";
|
||||
}
|
||||
else if (tail > 0) {
|
||||
strcpy(extension, "L");
|
||||
extension = "L";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (head < 0) {
|
||||
strcpy(extension, "R");
|
||||
extension = "R";
|
||||
/* XXX Shouldn't this be simple else, as for z and y axes? */
|
||||
}
|
||||
else if (head > 0) {
|
||||
strcpy(extension, "L");
|
||||
extension = "L";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -782,7 +782,7 @@ bool bone_autoside_name(
|
||||
* - truncate if there is an extension and it wouldn't be able to fit
|
||||
* - otherwise, just append to end
|
||||
*/
|
||||
if (extension[0]) {
|
||||
if (extension) {
|
||||
bool changed = true;
|
||||
|
||||
while (changed) { /* remove extensions */
|
||||
|
@ -133,14 +133,14 @@ size_t BLI_string_flip_side_name(char *name_dst,
|
||||
BLI_string_debug_size(name_dst, name_dst_maxncpy);
|
||||
|
||||
size_t len;
|
||||
char *prefix = alloca(name_dst_maxncpy); /* The part before the facing */
|
||||
char *suffix = alloca(name_dst_maxncpy); /* The part after the facing */
|
||||
char *replace = alloca(name_dst_maxncpy); /* The replacement string */
|
||||
char *number = alloca(name_dst_maxncpy); /* The number extension string */
|
||||
char *prefix = alloca(name_dst_maxncpy); /* The part before the facing */
|
||||
char *suffix = alloca(name_dst_maxncpy); /* The part after the facing */
|
||||
char *number = alloca(name_dst_maxncpy); /* The number extension string */
|
||||
const char *replace = NULL;
|
||||
char *index = NULL;
|
||||
bool is_set = false;
|
||||
|
||||
*prefix = *suffix = *replace = *number = '\0';
|
||||
*prefix = *suffix = *number = '\0';
|
||||
|
||||
/* always copy the name, since this can be called with an uninitialized string */
|
||||
len = BLI_strncpy_rlen(name_dst, name_src, name_dst_maxncpy);
|
||||
@ -169,19 +169,19 @@ size_t BLI_string_flip_side_name(char *name_dst,
|
||||
switch (name_dst[len - 1]) {
|
||||
case 'l':
|
||||
prefix[len - 1] = 0;
|
||||
strcpy(replace, "r");
|
||||
replace = "r";
|
||||
break;
|
||||
case 'r':
|
||||
prefix[len - 1] = 0;
|
||||
strcpy(replace, "l");
|
||||
replace = "l";
|
||||
break;
|
||||
case 'L':
|
||||
prefix[len - 1] = 0;
|
||||
strcpy(replace, "R");
|
||||
replace = "R";
|
||||
break;
|
||||
case 'R':
|
||||
prefix[len - 1] = 0;
|
||||
strcpy(replace, "L");
|
||||
replace = "L";
|
||||
break;
|
||||
default:
|
||||
is_set = false;
|
||||
@ -193,22 +193,22 @@ size_t BLI_string_flip_side_name(char *name_dst,
|
||||
is_set = true;
|
||||
switch (name_dst[0]) {
|
||||
case 'l':
|
||||
strcpy(replace, "r");
|
||||
replace = "r";
|
||||
BLI_strncpy(suffix, name_dst + 1, name_dst_maxncpy);
|
||||
prefix[0] = 0;
|
||||
break;
|
||||
case 'r':
|
||||
strcpy(replace, "l");
|
||||
replace = "l";
|
||||
BLI_strncpy(suffix, name_dst + 1, name_dst_maxncpy);
|
||||
prefix[0] = 0;
|
||||
break;
|
||||
case 'L':
|
||||
strcpy(replace, "R");
|
||||
replace = "R";
|
||||
BLI_strncpy(suffix, name_dst + 1, name_dst_maxncpy);
|
||||
prefix[0] = 0;
|
||||
break;
|
||||
case 'R':
|
||||
strcpy(replace, "L");
|
||||
replace = "L";
|
||||
BLI_strncpy(suffix, name_dst + 1, name_dst_maxncpy);
|
||||
prefix[0] = 0;
|
||||
break;
|
||||
@ -222,10 +222,10 @@ size_t BLI_string_flip_side_name(char *name_dst,
|
||||
if (((index = BLI_strcasestr(prefix, "right")) == prefix) || (index == prefix + len - 5)) {
|
||||
is_set = true;
|
||||
if (index[0] == 'r') {
|
||||
strcpy(replace, "left");
|
||||
replace = "left";
|
||||
}
|
||||
else {
|
||||
strcpy(replace, (index[1] == 'I') ? "LEFT" : "Left");
|
||||
replace = (index[1] == 'I' ? "LEFT" : "Left");
|
||||
}
|
||||
*index = 0;
|
||||
BLI_strncpy(suffix, index + 5, name_dst_maxncpy);
|
||||
@ -233,10 +233,10 @@ size_t BLI_string_flip_side_name(char *name_dst,
|
||||
else if (((index = BLI_strcasestr(prefix, "left")) == prefix) || (index == prefix + len - 4)) {
|
||||
is_set = true;
|
||||
if (index[0] == 'l') {
|
||||
strcpy(replace, "right");
|
||||
replace = "right";
|
||||
}
|
||||
else {
|
||||
strcpy(replace, (index[1] == 'E') ? "RIGHT" : "Right");
|
||||
replace = (index[1] == 'E' ? "RIGHT" : "Right");
|
||||
}
|
||||
*index = 0;
|
||||
BLI_strncpy(suffix, index + 4, name_dst_maxncpy);
|
||||
@ -244,7 +244,7 @@ size_t BLI_string_flip_side_name(char *name_dst,
|
||||
}
|
||||
|
||||
return BLI_snprintf_rlen(
|
||||
name_dst, name_dst_maxncpy, "%s%s%s%s", prefix, replace, suffix, number);
|
||||
name_dst, name_dst_maxncpy, "%s%s%s%s", prefix, replace ? replace : "", suffix, number);
|
||||
}
|
||||
|
||||
/* Unique name utils. */
|
||||
|
@ -36,17 +36,6 @@
|
||||
/* -------------------------------------------------------------------- */
|
||||
/* Utility functions */
|
||||
|
||||
static int path_ensure_slash(char *path)
|
||||
{
|
||||
int len = strlen(path);
|
||||
if (len == 0 || path[len - 1] != SEP) {
|
||||
path[len] = SEP;
|
||||
path[len + 1] = '\0';
|
||||
return len + 1;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
static bool path_test_extension(const char *filepath, const char *ext)
|
||||
{
|
||||
const size_t a = strlen(filepath);
|
||||
@ -81,6 +70,25 @@ static const char *path_basename(const char *path)
|
||||
return filename ? filename + 1 : path;
|
||||
}
|
||||
|
||||
static bool path_join(char *filepath,
|
||||
size_t filepath_maxncpy,
|
||||
const char *dirpath,
|
||||
const char *filename)
|
||||
{
|
||||
int dirpath_len = strlen(dirpath);
|
||||
if (dirpath_len && dirpath[dirpath_len - 1] == SEP) {
|
||||
dirpath_len--;
|
||||
}
|
||||
const int filename_len = strlen(filename);
|
||||
if (dirpath_len + 1 + filename_len + 1 > filepath_maxncpy) {
|
||||
return false;
|
||||
}
|
||||
memcpy(filepath, dirpath, dirpath_len);
|
||||
filepath[dirpath_len] = SEP;
|
||||
memcpy(filepath + dirpath_len + 1, filename, filename_len + 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/* Write a PNG from RGBA pixels */
|
||||
|
||||
@ -392,8 +400,6 @@ static bool icondir_to_png(const char *path_src, const char *file_dst)
|
||||
DIR *dir;
|
||||
const struct dirent *fname;
|
||||
char filepath[1024];
|
||||
char *filename;
|
||||
int path_str_len;
|
||||
int found = 0, fail = 0;
|
||||
|
||||
struct IconMergeContext context;
|
||||
@ -411,15 +417,12 @@ static bool icondir_to_png(const char *path_src, const char *file_dst)
|
||||
return false;
|
||||
}
|
||||
|
||||
strcpy(filepath, path_src);
|
||||
path_str_len = path_ensure_slash(filepath);
|
||||
filename = &filepath[path_str_len];
|
||||
|
||||
while ((fname = readdir(dir)) != NULL) {
|
||||
if (path_test_extension(fname->d_name, ".dat")) {
|
||||
|
||||
strcpy(filename, fname->d_name);
|
||||
|
||||
if (!path_join(filepath, sizeof(filepath), path_src, fname->d_name)) {
|
||||
printf("%s: path is too long (%s, %s)\n", __func__, path_src, fname->d_name);
|
||||
return false;
|
||||
}
|
||||
if (icon_merge(&context, filepath, &pixels_canvas, &canvas_w, &canvas_h)) {
|
||||
found++;
|
||||
}
|
||||
|
@ -526,7 +526,7 @@ static int rna_find_sdna_member(SDNA *sdna,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rna_validate_identifier(const char *identifier, char *error, bool property)
|
||||
static bool rna_validate_identifier(const char *identifier, bool property, const char **r_error)
|
||||
{
|
||||
int a = 0;
|
||||
|
||||
@ -548,15 +548,15 @@ static int rna_validate_identifier(const char *identifier, char *error, bool pro
|
||||
};
|
||||
|
||||
if (!isalpha(identifier[0])) {
|
||||
strcpy(error, "first character failed isalpha() check");
|
||||
return 0;
|
||||
*r_error = "first character failed isalpha() check";
|
||||
return false;
|
||||
}
|
||||
|
||||
for (a = 0; identifier[a]; a++) {
|
||||
if (DefRNA.preprocess && property) {
|
||||
if (isalpha(identifier[a]) && isupper(identifier[a])) {
|
||||
strcpy(error, "property names must contain lower case characters only");
|
||||
return 0;
|
||||
*r_error = "property names must contain lower case characters only";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -565,20 +565,20 @@ static int rna_validate_identifier(const char *identifier, char *error, bool pro
|
||||
}
|
||||
|
||||
if (identifier[a] == ' ') {
|
||||
strcpy(error, "spaces are not okay in identifier names");
|
||||
return 0;
|
||||
*r_error = "spaces are not okay in identifier names";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isalnum(identifier[a]) == 0) {
|
||||
strcpy(error, "one of the characters failed an isalnum() check and is not an underscore");
|
||||
return 0;
|
||||
*r_error = "one of the characters failed an isalnum() check and is not an underscore";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
for (a = 0; kwlist[a]; a++) {
|
||||
if (STREQ(identifier, kwlist[a])) {
|
||||
strcpy(error, "this keyword is reserved by Python");
|
||||
return 0;
|
||||
*r_error = "this keyword is reserved by Python";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -594,13 +594,13 @@ static int rna_validate_identifier(const char *identifier, char *error, bool pro
|
||||
|
||||
for (a = 0; kwlist_prop[a]; a++) {
|
||||
if (STREQ(identifier, kwlist_prop[a])) {
|
||||
strcpy(error, "this keyword is reserved by Python");
|
||||
return 0;
|
||||
*r_error = "this keyword is reserved by Python";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
void RNA_identifier_sanitize(char *identifier, int property)
|
||||
@ -907,9 +907,9 @@ StructRNA *RNA_def_struct_ptr(BlenderRNA *brna, const char *identifier, StructRN
|
||||
PropertyRNA *prop;
|
||||
|
||||
if (DefRNA.preprocess) {
|
||||
char error[512];
|
||||
const char *error = NULL;
|
||||
|
||||
if (rna_validate_identifier(identifier, error, false) == 0) {
|
||||
if (!rna_validate_identifier(identifier, false, &error)) {
|
||||
CLOG_ERROR(&LOG, "struct identifier \"%s\" error - %s", identifier, error);
|
||||
DefRNA.error = true;
|
||||
}
|
||||
@ -1269,9 +1269,9 @@ PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont_,
|
||||
PropertyRNA *prop;
|
||||
|
||||
if (DefRNA.preprocess) {
|
||||
char error[512];
|
||||
const char *error = NULL;
|
||||
|
||||
if (rna_validate_identifier(identifier, error, true) == 0) {
|
||||
if (!rna_validate_identifier(identifier, true, &error)) {
|
||||
CLOG_ERROR(
|
||||
&LOG, "property identifier \"%s.%s\" - %s", CONTAINER_RNA_ID(cont), identifier, error);
|
||||
DefRNA.error = true;
|
||||
@ -1290,8 +1290,8 @@ PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont_,
|
||||
}
|
||||
else {
|
||||
#ifndef NDEBUG
|
||||
char error[512];
|
||||
if (rna_validate_identifier(identifier, error, true) == 0) {
|
||||
const char *error = NULL;
|
||||
if (!rna_validate_identifier(identifier, true, &error)) {
|
||||
CLOG_ERROR(&LOG,
|
||||
"runtime property identifier \"%s.%s\" - %s",
|
||||
CONTAINER_RNA_ID(cont),
|
||||
@ -3477,8 +3477,8 @@ void RNA_def_property_collection_funcs(PropertyRNA *prop,
|
||||
|
||||
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
|
||||
{
|
||||
char error[512];
|
||||
if (rna_validate_identifier(type, error, false) == 0) {
|
||||
const char *error = NULL;
|
||||
if (!rna_validate_identifier(type, false, &error)) {
|
||||
CLOG_ERROR(&LOG, "struct identifier \"%s\" error - %s", type, error);
|
||||
DefRNA.error = true;
|
||||
return;
|
||||
@ -4247,9 +4247,8 @@ static FunctionRNA *rna_def_function(StructRNA *srna, const char *identifier)
|
||||
FunctionDefRNA *dfunc;
|
||||
|
||||
if (DefRNA.preprocess) {
|
||||
char error[512];
|
||||
|
||||
if (rna_validate_identifier(identifier, error, false) == 0) {
|
||||
const char *error = NULL;
|
||||
if (!rna_validate_identifier(identifier, false, &error)) {
|
||||
CLOG_ERROR(&LOG, "function identifier \"%s\" - %s", identifier, error);
|
||||
DefRNA.error = true;
|
||||
}
|
||||
|
@ -30,6 +30,8 @@
|
||||
|
||||
#include "rna_internal.h" /* own include */
|
||||
|
||||
#define MESH_DM_INFO_STR_MAX 16384
|
||||
|
||||
static const EnumPropertyItem space_items[] = {
|
||||
{CONSTRAINT_SPACE_WORLD, "WORLD", 0, "World Space", "The most global space in Blender"},
|
||||
{CONSTRAINT_SPACE_POSE,
|
||||
@ -763,7 +765,7 @@ void rna_Object_me_eval_info(
|
||||
if (me_eval) {
|
||||
ret = BKE_mesh_debug_info(me_eval);
|
||||
if (ret) {
|
||||
strcpy(result, ret);
|
||||
BLI_strncpy(result, ret, MESH_DM_INFO_STR_MAX);
|
||||
MEM_freeN(ret);
|
||||
}
|
||||
}
|
||||
@ -1329,7 +1331,8 @@ void RNA_api_object(StructRNA *srna)
|
||||
"(only needed if current Context's depsgraph is not suitable)");
|
||||
RNA_def_parameter_flags(parm, PropertyFlag(0), PARM_RNAPTR);
|
||||
/* weak!, no way to return dynamic string type */
|
||||
parm = RNA_def_string(func, "result", nullptr, 16384, "", "Requested information");
|
||||
parm = RNA_def_string(
|
||||
func, "result", nullptr, MESH_DM_INFO_STR_MAX, "", "Requested information");
|
||||
RNA_def_parameter_flags(
|
||||
parm, PROP_THICK_WRAP, ParameterFlag(0)); /* needed for string return value */
|
||||
RNA_def_function_output(func, parm);
|
||||
|
@ -266,7 +266,7 @@ static StructRNA *rna_Panel_register(Main *bmain,
|
||||
RNA_pointer_create(nullptr, &RNA_Panel, &dummy_panel, &dummy_panel_ptr);
|
||||
|
||||
/* We have to set default context! Else we get a void string... */
|
||||
strcpy(dummy_pt.translation_context, BLT_I18NCONTEXT_DEFAULT_BPYRNA);
|
||||
STRNCPY(dummy_pt.translation_context, BLT_I18NCONTEXT_DEFAULT_BPYRNA);
|
||||
|
||||
/* validate the python class */
|
||||
if (validate(&dummy_panel_ptr, data, have_function) != 0) {
|
||||
@ -286,7 +286,7 @@ static StructRNA *rna_Panel_register(Main *bmain,
|
||||
if ((1 << dummy_pt.region_type) & RGN_TYPE_HAS_CATEGORY_MASK) {
|
||||
if (dummy_pt.category[0] == '\0') {
|
||||
/* Use a fallback, otherwise an empty value will draw the panel in every category. */
|
||||
strcpy(dummy_pt.category, PNL_CATEGORY_FALLBACK);
|
||||
STRNCPY(dummy_pt.category, PNL_CATEGORY_FALLBACK);
|
||||
# ifndef NDEBUG
|
||||
printf("%s '%s' misses category, please update the script\n", error_prefix, dummy_pt.idname);
|
||||
# endif
|
||||
@ -989,7 +989,7 @@ static StructRNA *rna_Menu_register(Main *bmain,
|
||||
RNA_pointer_create(nullptr, &RNA_Menu, &dummy_menu, &dummy_menu_ptr);
|
||||
|
||||
/* We have to set default context! Else we get a void string... */
|
||||
strcpy(dummy_mt.translation_context, BLT_I18NCONTEXT_DEFAULT_BPYRNA);
|
||||
STRNCPY(dummy_mt.translation_context, BLT_I18NCONTEXT_DEFAULT_BPYRNA);
|
||||
|
||||
/* validate the python class */
|
||||
if (validate(&dummy_menu_ptr, data, have_function) != 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user