Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-05-06 09:45:54 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-05-06 09:57:19 +0300
commit9e3bfd92107f3b69e4d1a05ee9cfb9ce00c1ad80 (patch)
tree3bac253a809b198141b18542a2b38c97ef13d21a /source/blender/blenkernel/intern/idprop_utils.c
parent2dd0cb4964e854985e746d457756a72e8c872360 (diff)
IDProp API: use stored string length for IDP_repr
Also NULL check ID pointers.
Diffstat (limited to 'source/blender/blenkernel/intern/idprop_utils.c')
-rw-r--r--source/blender/blenkernel/intern/idprop_utils.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/source/blender/blenkernel/intern/idprop_utils.c b/source/blender/blenkernel/intern/idprop_utils.c
index 21005da2d97..449ecee93d9 100644
--- a/source/blender/blenkernel/intern/idprop_utils.c
+++ b/source/blender/blenkernel/intern/idprop_utils.c
@@ -96,23 +96,21 @@ static void idp_str_append_escape(struct ReprState *state, const char *str, cons
static void idp_repr_fn_recursive(struct ReprState *state, const IDProperty *prop)
{
/* Note: 'strlen' will be calculated at compile time for literals. */
-#define STR_APPEND_STR(str) { \
- state->str_append_fn(state->user_data, str, (uint)strlen(str)); \
-} ((void)0)
+#define STR_APPEND_STR(str) state->str_append_fn(state->user_data, str, (uint)strlen(str))
-#define STR_APPEND_STR_QUOTE(str) { \
- idp_str_append_escape(state, str, (uint)strlen(str), true); \
-} ((void)0)
+#define STR_APPEND_STR_QUOTE(str) idp_str_append_escape(state, str, (uint)strlen(str), true)
+#define STR_APPEND_STR_LEN_QUOTE(str, str_len) idp_str_append_escape(state, str, str_len, true)
-#define STR_APPEND_FMT(format, ...) { \
- const uint len = (uint)BLI_snprintf_rlen(state->buf, sizeof(state->buf), format, __VA_ARGS__); \
- state->str_append_fn(state->user_data, state->buf, len); \
-} ((void)0)
+#define STR_APPEND_FMT(format, ...) \
+ state->str_append_fn( \
+ state->user_data, \
+ state->buf, \
+ (uint)BLI_snprintf_rlen(state->buf, sizeof(state->buf), format, __VA_ARGS__))
switch (prop->type) {
case IDP_STRING:
{
- STR_APPEND_STR_QUOTE(IDP_String(prop));
+ STR_APPEND_STR_LEN_QUOTE(IDP_String(prop), (uint)MAX2(0, prop->len - 1));
break;
}
case IDP_INT:
@@ -191,11 +189,16 @@ static void idp_repr_fn_recursive(struct ReprState *state, const IDProperty *pro
case IDP_ID:
{
const ID *id = prop->data.pointer;
- STR_APPEND_STR("bpy.data.");
- STR_APPEND_STR(BKE_idcode_to_name_plural(GS(id->name)));
- STR_APPEND_STR("[");
- STR_APPEND_STR_QUOTE(id->name + 2);
- STR_APPEND_STR("]");
+ if (id != NULL) {
+ STR_APPEND_STR("bpy.data.");
+ STR_APPEND_STR(BKE_idcode_to_name_plural(GS(id->name)));
+ STR_APPEND_STR("[");
+ STR_APPEND_STR_QUOTE(id->name + 2);
+ STR_APPEND_STR("]");
+ }
+ else {
+ STR_APPEND_STR("None");
+ }
break;
}
default:
@@ -207,6 +210,7 @@ static void idp_repr_fn_recursive(struct ReprState *state, const IDProperty *pro
#undef STR_APPEND_STR
#undef STR_APPEND_STR_QUOTE
+#undef STR_APPEND_STR_LEN_QUOTE
#undef STR_APPEND_FMT
}