parser BUGFIX value statement
this statement has integer value instead char *
diff --git a/src/parser_yin.c b/src/parser_yin.c
index 58a919d..a080d66 100644
--- a/src/parser_yin.c
+++ b/src/parser_yin.c
@@ -7538,6 +7538,7 @@
long long int ll;
unsigned long u;
int i;
+ int64_t v_;
#define YIN_EXTCOMPLEX_GETPLACE(STMT, TYPE) \
p = lys_ext_complex_get_substmt(STMT, ext, &info); \
@@ -7753,10 +7754,6 @@
if (yin_parse_extcomplex_bool(mod, node, ext, LY_STMT_MODIFIER, "invert-match", NULL, unres)) {
goto error;
}
- } else if (!strcmp(node->name, "value")) {
- if (yin_parse_extcomplex_str(mod, node, ext, LY_STMT_VALUE, 0, "value", unres)) {
- goto error;
- }
} else if (!strcmp(node->name, "fraction-digits")) {
YIN_EXTCOMPLEX_GETPLACE(LY_STMT_DIGITS, uint8_t);
@@ -7832,6 +7829,32 @@
(**(uint32_t **)p) = (uint32_t)u;
YIN_EXTCOMPLEX_ENLARGE(uint32_t*);
+ } if (!strcmp(node->name, "value")) {
+ YIN_EXTCOMPLEX_GETPLACE(LY_STMT_VALUE, int32_t*);
+
+ GETVAL(value, node, "value");
+ while (isspace(value[0])) {
+ value++;
+ }
+
+ /* convert it to int32_t */
+ v_ = strtoll(value, NULL, 10);
+
+ /* range check */
+ if (v_ < INT32_MIN || v_ > INT32_MAX) {
+ LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, node->name);
+ goto error;
+ }
+
+ if (lyp_yin_parse_subnode_ext(mod, ext, LYEXT_PAR_EXTINST, node, LYEXT_SUBSTMT_VALUE, i, unres)) {
+ goto error;
+ }
+
+ /* store the value */
+ *(int32_t **)p = malloc(sizeof(int32_t));
+ (**(int32_t **)p) = (int32_t)v_;
+
+ YIN_EXTCOMPLEX_ENLARGE(int32_t*);
} else if (!strcmp(node->name, "position")) {
YIN_EXTCOMPLEX_GETPLACE(LY_STMT_POSITION, uint32_t*);