WM: return the string length from operator name conversion
- In some cases it avoids using strlen on the result. - Use ATTR_NONNULL for all arguments. - Remove NULL pointer check for WM_operator_bl_idname src argument. - Rename from/to to src/dst.
This commit is contained in:
@@ -1157,9 +1157,7 @@ static int rna_wmKeyMapItem_idname_length(PointerRNA *ptr)
|
||||
{
|
||||
wmKeyMapItem *kmi = ptr->data;
|
||||
char pyname[OP_MAX_TYPENAME];
|
||||
|
||||
WM_operator_py_idname(pyname, kmi->idname);
|
||||
return strlen(pyname);
|
||||
return WM_operator_py_idname(pyname, kmi->idname);
|
||||
}
|
||||
|
||||
static void rna_wmKeyMapItem_idname_set(PointerRNA *ptr, const char *value)
|
||||
|
@@ -895,12 +895,14 @@ char *WM_prop_pystring_assign(struct bContext *C,
|
||||
int index);
|
||||
/**
|
||||
* Convert: `some.op` -> `SOME_OT_op` or leave as-is.
|
||||
* \return the length of `dst`.
|
||||
*/
|
||||
void WM_operator_bl_idname(char *to, const char *from);
|
||||
size_t WM_operator_bl_idname(char *dst, const char *src) ATTR_NONNULL(1, 2);
|
||||
/**
|
||||
* Convert: `SOME_OT_op` -> `some.op` or leave as-is.
|
||||
* \return the length of `dst`.
|
||||
*/
|
||||
void WM_operator_py_idname(char *to, const char *from);
|
||||
size_t WM_operator_py_idname(char *dst, const char *src) ATTR_NONNULL(1, 2);
|
||||
/**
|
||||
* Sanity check to ensure #WM_operator_bl_idname won't fail.
|
||||
* \returns true when there are no problems with \a idname, otherwise report an error.
|
||||
|
@@ -106,47 +106,38 @@
|
||||
/** \name Operator API
|
||||
* \{ */
|
||||
|
||||
void WM_operator_py_idname(char *to, const char *from)
|
||||
size_t WM_operator_py_idname(char *dst, const char *src)
|
||||
{
|
||||
const char *sep = strstr(from, "_OT_");
|
||||
const char *sep = strstr(src, "_OT_");
|
||||
if (sep) {
|
||||
int ofs = (sep - from);
|
||||
int ofs = (sep - src);
|
||||
|
||||
/* NOTE: we use ascii `tolower` instead of system `tolower`, because the
|
||||
* latter depends on the locale, and can lead to `idname` mismatch. */
|
||||
memcpy(to, from, sizeof(char) * ofs);
|
||||
BLI_str_tolower_ascii(to, ofs);
|
||||
memcpy(dst, src, sizeof(char) * ofs);
|
||||
BLI_str_tolower_ascii(dst, ofs);
|
||||
|
||||
to[ofs] = '.';
|
||||
BLI_strncpy(to + (ofs + 1), sep + 4, OP_MAX_TYPENAME - (ofs + 1));
|
||||
}
|
||||
else {
|
||||
/* should not happen but support just in case */
|
||||
BLI_strncpy(to, from, OP_MAX_TYPENAME);
|
||||
dst[ofs] = '.';
|
||||
return BLI_strncpy_rlen(dst + (ofs + 1), sep + 4, OP_MAX_TYPENAME - (ofs + 1)) + (ofs + 1);
|
||||
}
|
||||
/* Should not happen but support just in case. */
|
||||
return BLI_strncpy_rlen(dst, src, OP_MAX_TYPENAME);
|
||||
}
|
||||
|
||||
void WM_operator_bl_idname(char *to, const char *from)
|
||||
size_t WM_operator_bl_idname(char *dst, const char *src)
|
||||
{
|
||||
if (from) {
|
||||
const char *sep = strchr(from, '.');
|
||||
|
||||
int from_len;
|
||||
if (sep && (from_len = strlen(from)) < OP_MAX_TYPENAME - 3) {
|
||||
const int ofs = (sep - from);
|
||||
memcpy(to, from, sizeof(char) * ofs);
|
||||
BLI_str_toupper_ascii(to, ofs);
|
||||
memcpy(to + ofs, "_OT_", 4);
|
||||
memcpy(to + (ofs + 4), sep + 1, (from_len - ofs));
|
||||
}
|
||||
else {
|
||||
/* should not happen but support just in case */
|
||||
BLI_strncpy(to, from, OP_MAX_TYPENAME);
|
||||
}
|
||||
}
|
||||
else {
|
||||
to[0] = 0;
|
||||
const char *sep = strchr(src, '.');
|
||||
int from_len;
|
||||
if (sep && (from_len = strlen(src)) < OP_MAX_TYPENAME - 3) {
|
||||
const int ofs = (sep - src);
|
||||
memcpy(dst, src, sizeof(char) * ofs);
|
||||
BLI_str_toupper_ascii(dst, ofs);
|
||||
memcpy(dst + ofs, "_OT_", 4);
|
||||
memcpy(dst + (ofs + 4), sep + 1, (from_len - ofs));
|
||||
return (from_len - ofs) - 1;
|
||||
}
|
||||
/* Should not happen but support just in case. */
|
||||
return BLI_strncpy_rlen(dst, src, OP_MAX_TYPENAME);
|
||||
}
|
||||
|
||||
bool WM_operator_py_idname_ok_or_report(ReportList *reports,
|
||||
|
Reference in New Issue
Block a user