return parse_dict_rename (lexer, dict, relax);
else
{
- lex_error (lexer, _("expecting a valid subcommand"));
+ lex_error_expecting (lexer, "MAP", "DROP", "KEEP", "RENAME");
return false;
}
}
/* Check that the first and last tokens are suitable as
variable names. */
const char *s0 = lex_tokcstr (lexer);
- if (!id_is_valid (s0, dict_get_encoding (dict), true))
- return NULL;
+ char *error = id_is_valid__ (s0, dict_get_encoding (dict));
+ if (error)
+ {
+ lex_error (lexer, "%s", error);
+ free (error);
+ return NULL;
+ }
const char *s1 = lex_next_tokcstr (lexer, 2);
- if (!id_is_valid (s1, dict_get_encoding (dict), true))
- return NULL;
+ error = id_is_valid__ (s1, dict_get_encoding (dict));
+ if (error)
+ {
+ lex_next_error (lexer, 2, 2, "%s", error);
+ free (error);
+ return NULL;
+ }
int x0 = strcspn (s0, "0123456789");
int x1 = strcspn (s1, "0123456789");
if (n_newvars >= n_oldvars)
break;
const char *new_name = lex_tokcstr (lexer);
- if (!relax && ! id_is_plausible (new_name, true))
- goto fail;
+ if (!relax)
+ {
+ char *error = id_is_plausible__ (new_name);
+ if (error)
+ {
+ lex_error (lexer, "%s", error);
+ free (error);
+ goto fail;
+ }
+ }
if (!check_rename (dict, var_get_name (oldvars[n_newvars]), new_name))
goto fail;
dict_delete_vars (dict, v, nv);
free (v);
- if (dict_get_var_cnt (dict) == 0)
+ if (dict_get_n_vars (dict) == 0)
{
msg (SE, _("Cannot DROP all variables from dictionary."));
return false;
dict_reorder_vars (dict, v, nv);
/* Delete the remaining variables. */
- v = xnrealloc (v, dict_get_var_cnt (dict) - nv, sizeof *v);
- for (i = nv; i < dict_get_var_cnt (dict); i++)
+ if (dict_get_n_vars (dict) == nv)
+ {
+ free (v);
+ return true;
+ }
+
+ v = xnrealloc (v, dict_get_n_vars (dict) - nv, sizeof *v);
+ for (i = nv; i < dict_get_n_vars (dict); i++)
v[i - nv] = dict_get_var (dict, i);
- dict_delete_vars (dict, v, dict_get_var_cnt (dict) - nv);
+ dict_delete_vars (dict, v, dict_get_n_vars (dict) - nv);
free (v);
return true;