[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[VAR_NAME_LEN 15/17] REGRESSION: Eliminate restriction to VAR_NAME_LEN i
From: |
Ben Pfaff |
Subject: |
[VAR_NAME_LEN 15/17] REGRESSION: Eliminate restriction to VAR_NAME_LEN in reg_get_name(). |
Date: |
Sat, 5 Feb 2011 13:25:57 -0800 |
There's still an obvious problem here that the prefix isn't being trimmed
down so that the suffix will fit. Since an upcoming series of changes
would have to completely redo how this would be done, I'm not fixing that
now, only marking it with XXX.
Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8. The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.
---
src/language/stats/regression.q | 45 ++++++++++++++++----------------------
1 files changed, 19 insertions(+), 26 deletions(-)
diff --git a/src/language/stats/regression.q b/src/language/stats/regression.q
index b6ee6aa..b879cae 100644
--- a/src/language/stats/regression.q
+++ b/src/language/stats/regression.q
@@ -1,5 +1,5 @@
/* PSPP - a program for statistical analysis.
- Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2009, 2010, 2011 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -42,7 +42,8 @@
#include <math/moments.h>
#include <output/tab.h>
-#include "xalloc.h"
+#include "gl/intprops.h"
+#include "gl/xalloc.h"
#include "gettext.h"
#define _(msgid) gettext (msgid)
@@ -602,29 +603,19 @@ regression_trns_resid_proc (void *t_, struct ccase **c,
return TRNS_CONTINUE;
}
-/*
- Returns false if NAME is a duplicate of any existing variable name.
-*/
-static bool
-try_name (const struct dictionary *dict, const char *name)
-{
- if (dict_lookup_var (dict, name) != NULL)
- return false;
-
- return true;
-}
-
-static void
-reg_get_name (const struct dictionary *dict, char name[VAR_NAME_LEN],
- const char prefix[VAR_NAME_LEN])
+static char *
+reg_get_name (const struct dictionary *dict, const char *prefix)
{
- int i = 1;
+ char *name;
+ int i;
- snprintf (name, VAR_NAME_LEN, "%s%d", prefix, i);
- while (!try_name (dict, name))
+ /* XXX handle too-long prefixes */
+ name = xmalloc (strlen (prefix) + INT_BUFSIZE_BOUND (i) + 1);
+ for (i = 1; ; i++)
{
- i++;
- snprintf (name, VAR_NAME_LEN, "%s%d", prefix, i);
+ sprintf (name, "%s%d", prefix, i);
+ if (dict_lookup_var (dict, name) == NULL)
+ return name;
}
}
@@ -634,7 +625,7 @@ reg_save_var (struct dataset *ds, const char *prefix,
trns_proc_func * f,
{
struct dictionary *dict = dataset_dict (ds);
static int trns_index = 1;
- char name[VAR_NAME_LEN];
+ char *name;
struct variable *new_var;
struct reg_trns *t = NULL;
@@ -642,9 +633,11 @@ reg_save_var (struct dataset *ds, const char *prefix,
trns_proc_func * f,
t->trns_id = trns_index;
t->n_trns = n_trns;
t->c = c;
- reg_get_name (dict, name, prefix);
- new_var = dict_create_var (dict, name, 0);
- assert (new_var != NULL);
+
+ name = reg_get_name (dict, prefix);
+ new_var = dict_create_var_assert (dict, name, 0);
+ free (name);
+
*v = new_var;
add_transformation (ds, f, regression_trns_free, t);
trns_index++;
--
1.7.1
- [VAR_NAME_LEN 14/17] FLIP: Eliminate false dependency on VAR_NAME_LEN., (continued)
- [VAR_NAME_LEN 14/17] FLIP: Eliminate false dependency on VAR_NAME_LEN., Ben Pfaff, 2011/02/05
- [VAR_NAME_LEN 03/17] vector: Remove VAR_NAME_LEN limit for internal representation of name., Ben Pfaff, 2011/02/05
- [VAR_NAME_LEN 01/17] dict: Make dict_make_unique_var_name() return an allocated string., Ben Pfaff, 2011/02/05
- [VAR_NAME_LEN 07/17] DATAFILE ATTRIBUTE, VARIABLE ATTRIBUTE: Eliminate VAR_NAME_LEN limit., Ben Pfaff, 2011/02/05
- [VAR_NAME_LEN 06/17] GET DATA /TYPE=TXT: Get rid of VAR_NAME_LEN limit on variable names., Ben Pfaff, 2011/02/05
- [VAR_NAME_LEN 09/17] VECTOR: Eliminate VAR_NAME_LEN limit for variable names., Ben Pfaff, 2011/02/05
- [VAR_NAME_LEN 17/17] por-file-reader: Remove dependency on VAR_NAME_LEN., Ben Pfaff, 2011/02/05
- [VAR_NAME_LEN 02/17] variable: Remove VAR_NAME_LEN limit for internal representation of name., Ben Pfaff, 2011/02/05
- [VAR_NAME_LEN 10/17] DEBUG EVALUATE: Eliminate VAR_NAME_LEN limit., Ben Pfaff, 2011/02/05
- [VAR_NAME_LEN 04/17] combine-files: Eliminate VAR_NAME_LEN restriction from combine_files()., Ben Pfaff, 2011/02/05
- [VAR_NAME_LEN 15/17] REGRESSION: Eliminate restriction to VAR_NAME_LEN in reg_get_name().,
Ben Pfaff <=
- [VAR_NAME_LEN 13/17] DESCRIPTIVES: Eliminate main restriction on Z-score variable name length., Ben Pfaff, 2011/02/05
- [VAR_NAME_LEN 16/17] text-data-import-dialog: Eliminate VAR_NAME_LEN restriction., Ben Pfaff, 2011/02/05
- [VAR_NAME_LEN 11/17] variable-parser: Rewrite parse_DATA_LIST_vars()., Ben Pfaff, 2011/02/05
- [VAR_NAME_LEN 12/17] variable-parser: Drop VAR_NAME_LEN restriction from var_set_lookup_var_idx()., Ben Pfaff, 2011/02/05
- Re: [VAR_NAME_LEN 00/17] Eliminate uses of VAR_NAME_LEN, John Darrington, 2011/02/08