X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fdata-in.c;h=ace167090c57b9f2f2fe97a4d4e96cd80405764d;hb=563b6160d2ed20120fbb62410a65e03c28537383;hp=b6fa5167f008a8aaa471b3d3fe9762fed7301fb5;hpb=bdebbd4db2d6c539eadb145f726382fe338e4219;p=pspp diff --git a/src/data/data-in.c b/src/data/data-in.c index b6fa5167f0..ace167090c 100644 --- a/src/data/data-in.c +++ b/src/data/data-in.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011, 2012 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 @@ -281,7 +281,6 @@ parse_number (struct data_in *i) struct string tmp; - bool explicit_decimals = false; int save_errno; char *tail; @@ -298,9 +297,9 @@ parse_number (struct data_in *i) ds_extend (&tmp, 64); /* Prefix character may precede sign. */ - if (!ss_is_empty (style->prefix)) + if (style->prefix.s[0] != '\0') { - ss_match_byte (&i->input, ss_first (style->prefix)); + ss_match_byte (&i->input, style->prefix.s[0]); ss_ltrim (&i->input, ss_cstr (CC_SPACES)); } @@ -317,9 +316,9 @@ parse_number (struct data_in *i) } /* Prefix character may follow sign. */ - if (!ss_is_empty (style->prefix)) + if (style->prefix.s[0] != '\0') { - ss_match_byte (&i->input, ss_first (style->prefix)); + ss_match_byte (&i->input, style->prefix.s[0]); ss_ltrim (&i->input, ss_cstr (CC_SPACES)); } @@ -334,7 +333,6 @@ parse_number (struct data_in *i) /* Decimal point and following digits. */ if (ss_match_byte (&i->input, style->decimal)) { - explicit_decimals = true; ds_put_byte (&tmp, '.'); while (c_isdigit (ss_first (i->input))) ds_put_byte (&tmp, ss_get_byte (&i->input)); @@ -345,7 +343,6 @@ parse_number (struct data_in *i) && !ss_is_empty (i->input) && strchr ("eEdD-+", ss_first (i->input))) { - explicit_decimals = true; ds_put_byte (&tmp, 'e'); if (strchr ("eEdD", ss_first (i->input))) @@ -366,8 +363,8 @@ parse_number (struct data_in *i) } /* Suffix character. */ - if (!ss_is_empty (style->suffix)) - ss_match_byte (&i->input, ss_first (style->suffix)); + if (style->suffix.s[0] != '\0') + ss_match_byte (&i->input, style->suffix.s[0]); if (!ss_is_empty (i->input)) { @@ -922,7 +919,7 @@ parse_year (struct data_in *i, long *year, size_t max_digits) else *year += epoch_century + 100; } - if (*year >= 1582 || *year <= 19999) + if (*year >= 1582 && *year <= 19999) return NULL; return xasprintf (_("Year (%ld) must be between 1582 and 19999."), *year); @@ -1047,7 +1044,7 @@ parse_minute_second (struct data_in *i, double *time) *cp++ = ss_get_byte (&i->input); *cp = '\0'; - *time += strtod (buf, NULL); + *time += c_strtod (buf, NULL); return NULL; } @@ -1123,7 +1120,7 @@ parse_date (struct data_in *i) double time = 0, date = 0; enum time_sign time_sign = SIGN_NO_TIME; - const char *template = fmt_date_template (i->format); + const char *template = fmt_date_template (i->format, 0); size_t template_width = strlen (template); char *error; @@ -1180,14 +1177,18 @@ parse_date (struct data_in *i) case '-': case '/': case '.': - case 'X': error = parse_date_delimiter (i); break; case ':': error = parse_time_delimiter (i); case ' ': - parse_spaces (i); - error = NULL; + if (i->format != FMT_MOYR) + { + parse_spaces (i); + error = NULL; + } + else + error = parse_date_delimiter (i); break; default: assert (count == 1);