diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index 1e4e12faa..87fd78fe0 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -1212,37 +1212,50 @@ inp_chk_for_multi_in_vcvs(struct line *c, int *line_number) bool ok = FALSE; do { - char *s; - ref_e = skip_non_ws(line); out_b = skip_ws(ref_e); + out_e = skip_back_ws(fcn_b); + if (out_e <= out_b) + break; fcn_e = strchr(fcn_b, '('); - s = strchr(fcn_e, ')'); - if (!s) + + ctrl_nodes_b = strchr(fcn_e, ')'); + if (!ctrl_nodes_b) break; - comma_ptr = strchr(line, ','); + ctrl_nodes_b = skip_ws(ctrl_nodes_b + 1); + + comma_ptr = strchr(ctrl_nodes_b, ','); if (!comma_ptr) break; - ctrl_nodes_b = skip_ws(s + 1); - xy_values1_b = skip_back_ws(comma_ptr); + + xy_values1_b = skip_back_ws_(comma_ptr, ctrl_nodes_b); if (xy_values1_b[-1] == '}') { - while (*--xy_values1_b != '{') - ; + while (--xy_values1_b >= ctrl_nodes_b) + if (*xy_values1_b == '{') + break; } else { - xy_values1_b = skip_back_non_ws(xy_values1_b); + xy_values1_b = skip_back_non_ws_(xy_values1_b, ctrl_nodes_b); } - ctrl_nodes_e = skip_back_ws(xy_values1_b); + if (xy_values1_b <= ctrl_nodes_b) + break; + + ctrl_nodes_e = skip_back_ws_(xy_values1_b, ctrl_nodes_b); + if (ctrl_nodes_e <= ctrl_nodes_b) + break; xy_values1_e = skip_ws(comma_ptr + 1); if (*xy_values1_e == '{') { - while (*xy_values1_e++ != '}') - ; + xy_values1_e = strchr(xy_values1_e, '}'); + if (xy_values1_e) + xy_values1_e ++; } else { xy_values1_e = skip_non_ws(xy_values1_e); } + if (!xy_values1_e) + break; xy_values2_b = skip_ws(xy_values1_e); @@ -1255,18 +1268,9 @@ inp_chk_for_multi_in_vcvs(struct line *c, int *line_number) } ref_str = copy_substring(line, ref_e); - - keep = *out_e; - *out_e = '\0'; - out_str = strdup(out_b); - *out_e = keep; - + out_str = copy_substring(out_b, out_e); fcn_name = copy_substring(fcn_b, fcn_e); - - keep = *ctrl_nodes_e; - *ctrl_nodes_e = '\0'; - ctrl_nodes_str = strdup(ctrl_nodes_b); - *ctrl_nodes_e = keep; + ctrl_nodes_str = copy_substring(ctrl_nodes_b, ctrl_nodes_e); keep = *xy_values1_e; *xy_values1_e = '\0';