If a in command set name="value" value is encapsulated in double quotes, it is always treated as a string variable.
This commit is contained in:
parent
6af98bf90b
commit
bfe9e29580
|
|
@ -257,7 +257,13 @@ cp_vset(char *varname, enum cp_types type, void *value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*CDHW This needs leak checking carefully CDHW*/
|
/* Read a wordlist, e.g. from the options or set commands
|
||||||
|
e.g. set myvar=myval or set myvar="myval" or myvar=( "myval1" myval2 ) or
|
||||||
|
set myvar1=myval1 myvar2=myval2 myvar3="myval3"
|
||||||
|
Separate into name and value(s)
|
||||||
|
Generate variables (real, string or list)
|
||||||
|
Value in double quotes will always become string variable.
|
||||||
|
Without quotes tokens like 2N5401_C will be evaluated as real number 2n, i.e. 2e-9 */
|
||||||
struct variable *
|
struct variable *
|
||||||
cp_setparse(wordlist *wl)
|
cp_setparse(wordlist *wl)
|
||||||
{
|
{
|
||||||
|
|
@ -318,8 +324,14 @@ cp_setparse(wordlist *wl)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* val = cp_unquote(val); DG: bad old val is lost*/
|
/* if val is in double quotes, treat as string */
|
||||||
copyval = cp_unquote(val); /*DG*/
|
copyval = cp_unquote(val);
|
||||||
|
if (!eq(val, copyval)) {
|
||||||
|
vars = var_alloc_string(copy(name), copy(copyval), vars);
|
||||||
|
tfree(name);
|
||||||
|
tfree(copyval);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
strcpy(val, copyval);
|
strcpy(val, copyval);
|
||||||
tfree(copyval);
|
tfree(copyval);
|
||||||
|
|
||||||
|
|
@ -336,12 +348,18 @@ cp_setparse(wordlist *wl)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
copyval = ss = cp_unquote(wl->wl_word);
|
copyval = ss = cp_unquote(wl->wl_word);
|
||||||
td = ft_numparse(&ss, FALSE);
|
/* if val is in double quotes, treat as string */
|
||||||
if (td)
|
if (!eq(wl->wl_word, copyval)) {
|
||||||
vv = var_alloc_real(NULL, *td, NULL);
|
|
||||||
else
|
|
||||||
vv = var_alloc_string(NULL, copy(ss), NULL);
|
vv = var_alloc_string(NULL, copy(ss), NULL);
|
||||||
tfree(copyval); /*DG: must free ss any way to avoid cp_unquote memory leak*/
|
}
|
||||||
|
else {
|
||||||
|
td = ft_numparse(&ss, FALSE);
|
||||||
|
if (td)
|
||||||
|
vv = var_alloc_real(NULL, *td, NULL);
|
||||||
|
else
|
||||||
|
vv = var_alloc_string(NULL, copy(ss), NULL);
|
||||||
|
}
|
||||||
|
tfree(copyval);
|
||||||
if (listv) {
|
if (listv) {
|
||||||
lv->va_next = vv;
|
lv->va_next = vv;
|
||||||
lv = vv;
|
lv = vv;
|
||||||
|
|
@ -365,12 +383,19 @@ cp_setparse(wordlist *wl)
|
||||||
}
|
}
|
||||||
|
|
||||||
copyval = ss = cp_unquote(val);
|
copyval = ss = cp_unquote(val);
|
||||||
td = ft_numparse(&ss, FALSE);
|
/* if val is in double quotes, treat as string */
|
||||||
if (td) {
|
if (!eq(val, copyval)) {
|
||||||
/*** We should try to get CP_NUM's... */
|
vars = var_alloc_string(copy(name), copy(copyval), vars);
|
||||||
vars = var_alloc_real(copy(name), *td, vars);
|
}
|
||||||
} else {
|
else {
|
||||||
vars = var_alloc_string(copy(name), copy(val), vars);
|
td = ft_numparse(&ss, FALSE);
|
||||||
|
if (td) {
|
||||||
|
/*** We should try to get CP_NUM's... */
|
||||||
|
vars = var_alloc_real(copy(name), *td, vars);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
vars = var_alloc_string(copy(name), copy(val), vars);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tfree(copyval); /*DG: must free ss any way to avoid cp_unquote memory leak */
|
tfree(copyval); /*DG: must free ss any way to avoid cp_unquote memory leak */
|
||||||
tfree(name); /* va: cp_unquote memory leak: free name for every loop */
|
tfree(name); /* va: cp_unquote memory leak: free name for every loop */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue