--- 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;
}