diff -r 9ea29ac18837 -r 93ad018fb602 targets/var_access.c --- a/targets/var_access.c Wed Dec 01 09:54:02 2021 +0100 +++ b/targets/var_access.c Thu Dec 09 10:21:45 2021 +0100 @@ -1,37 +1,33 @@ -#define __Unpack_case_t(TYPENAME) \ - case TYPENAME##_ENUM :\ - *flags = ((__IEC_##TYPENAME##_t *)varp)->flags;\ - forced_value_p = *real_value_p = &((__IEC_##TYPENAME##_t *)varp)->value;\ +#define __Unpack_case_t(TYPENAME) \ + case TYPENAME##_ENUM : \ + if(flags) *flags = ((__IEC_##TYPENAME##_t *)varp)->flags; \ + if(value_p) *value_p = &((__IEC_##TYPENAME##_t *)varp)->value; \ + if(size) *size = sizeof(TYPENAME); \ break; -#define __Unpack_case_p(TYPENAME)\ - case TYPENAME##_O_ENUM :\ - *flags = __IEC_OUTPUT_FLAG;\ - case TYPENAME##_P_ENUM :\ - *flags |= ((__IEC_##TYPENAME##_p *)varp)->flags;\ - *real_value_p = ((__IEC_##TYPENAME##_p *)varp)->value;\ - forced_value_p = &((__IEC_##TYPENAME##_p *)varp)->fvalue;\ +#define __Unpack_case_p(TYPENAME) \ + case TYPENAME##_O_ENUM : \ + case TYPENAME##_P_ENUM : \ + if(flags) *flags = ((__IEC_##TYPENAME##_p *)varp)->flags; \ + if(value_p) *value_p = ((__IEC_##TYPENAME##_p *)varp)->value; \ + if(size) *size = sizeof(TYPENAME); \ break; #define __Is_a_string(dsc) (dsc->type == STRING_ENUM) ||\ (dsc->type == STRING_P_ENUM) ||\ (dsc->type == STRING_O_ENUM) -static void* UnpackVar(__Unpack_desc_type *dsc, void **real_value_p, char *flags) +static int UnpackVar(__Unpack_desc_type *dsc, void **value_p, char *flags, size_t *size) { void *varp = dsc->ptr; - void *forced_value_p = NULL; - *flags = 0; /* find data to copy*/ switch(dsc->type){ __ANY(__Unpack_case_t) __ANY(__Unpack_case_p) default: - break; + return 0; /* should never happen */ } - if (*flags & __IEC_FORCE_FLAG) - return forced_value_p; - return *real_value_p; + return 1; }