X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fflip.c;h=73e1e7cb1140fcc45628c3e3c1a47d23d4dd484d;hb=dbb0228a4c98cbf4756ba651fda158c1565b3b55;hp=d0949980472699e505018ef45ac5d1fb89a489d8;hpb=05e356b2a3087e819ef3b5388e29c822f41502e1;p=pspp diff --git a/src/flip.c b/src/flip.c index d094998047..73e1e7cb11 100644 --- a/src/flip.c +++ b/src/flip.c @@ -14,8 +14,8 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. */ + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ #include "config.h" #include "error.h" @@ -38,6 +38,9 @@ #include "var.h" #include "vfm.h" +#ifndef HAVE_SYS_TYPES_H +#include +#endif /* List of variable names. */ struct varname @@ -181,25 +184,27 @@ destroy_flip_pgm (struct flip_pgm *flip) static int make_new_var (char name[]) { + char *cp; + + /* Trim trailing spaces. */ + cp = strchr (name, '\0'); + while (cp > name && isspace ((unsigned char) cp[-1])) + *--cp = '\0'; + /* Fix invalid characters. */ - { - char *cp; - - for (cp = name; *cp && !isspace (*cp); cp++) + for (cp = name; *cp && cp < name + SHORT_NAME_LEN; cp++) + if (cp == name) { - *cp = toupper ((unsigned char) *cp); - if (!isalpha (*cp) && *cp != '@' && *cp != '#' - && (cp == name || (*cp != '.' && *cp != '$' && *cp != '_' - && !isdigit (*cp)))) - { - if (cp == name) - *cp = 'V'; /* _ not valid in first position. */ - else - *cp = '_'; - } + if (!CHAR_IS_ID1 (*cp) || *cp == '$') + *cp = 'V'; } - *cp = 0; - } + else + { + if (!CHAR_IS_IDN (*cp)) + *cp = '_'; + } + *cp = '\0'; + st_uppercase (name); if (dict_create_var (default_dict, name, 0)) return 1; @@ -323,8 +328,7 @@ flip_sink_write (struct case_sink *sink, const struct ccase *c) { char name[INT_DIGITS + 2]; sprintf (name, "V%d", (int) f); - strncpy (v->name, name, SHORT_NAME_LEN); - name[SHORT_NAME_LEN] = 0; + st_trim_copy (v->name, name, sizeof v->name); } } else