projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
render: Add comment.
[pspp]
/
src
/
language
/
data-io
/
placement-parser.c
diff --git
a/src/language/data-io/placement-parser.c
b/src/language/data-io/placement-parser.c
index 443b9b591643e68faf3e307471d29b81cdb3720d..8a08208b8a0d68a41d544a859be1be8dc3619f80 100644
(file)
--- a/
src/language/data-io/placement-parser.c
+++ b/
src/language/data-io/placement-parser.c
@@
-167,7
+167,7
@@
fixed_parse_columns (struct lexer *lexer, struct pool *pool, size_t var_cnt,
*formats = pool_nalloc (pool, var_cnt + 1, sizeof **formats);
*format_cnt = var_cnt + 1;
*formats = pool_nalloc (pool, var_cnt + 1, sizeof **formats);
*format_cnt = var_cnt + 1;
- (*formats)[0].type = PRS_TYPE_T;
+ (*formats)[0].type =
(enum fmt_type)
PRS_TYPE_T;
(*formats)[0].w = fc;
for (i = 1; i <= var_cnt; i++)
(*formats)[i] = format;
(*formats)[0].w = fc;
for (i = 1; i <= var_cnt; i++)
(*formats)[i] = format;
@@
-213,7
+213,7
@@
fixed_parse_fortran (struct lexer *lexer, struct pool *pool, enum fmt_use use,
new_formats = &f;
new_format_cnt = 1;
if (use == FMT_FOR_INPUT && lex_match (lexer, T_SLASH))
new_formats = &f;
new_format_cnt = 1;
if (use == FMT_FOR_INPUT && lex_match (lexer, T_SLASH))
- f.type = PRS_TYPE_NEW_REC;
+ f.type =
(enum fmt_type)
PRS_TYPE_NEW_REC;
else
{
char type[FMT_TYPE_LEN_MAX + 1];
else
{
char type[FMT_TYPE_LEN_MAX + 1];
@@
-222,10
+222,10
@@
fixed_parse_fortran (struct lexer *lexer, struct pool *pool, enum fmt_use use,
return false;
if (!c_strcasecmp (type, "T"))
return false;
if (!c_strcasecmp (type, "T"))
- f.type = PRS_TYPE_T;
+ f.type =
(enum fmt_type)
PRS_TYPE_T;
else if (!c_strcasecmp (type, "X"))
{
else if (!c_strcasecmp (type, "X"))
{
- f.type = PRS_TYPE_X;
+ f.type =
(enum fmt_type)
PRS_TYPE_X;
f.w = count;
count = 1;
}
f.w = count;
count = 1;
}
@@
-399,18
+399,21
@@
parse_record_placement (struct lexer *lexer, int *record, int *column)
{
while (lex_match (lexer, T_SLASH))
{
{
while (lex_match (lexer, T_SLASH))
{
- if (lex_is_
integ
er (lexer))
+ if (lex_is_
numb
er (lexer))
{
{
- if ((int) lex_integer (lexer) <= *record)
+ double orignum = lex_number (lexer);
+ long n = (lex_is_integer (lexer)?lex_integer (lexer):*record);
+ bool out_of_range = orignum > INT_MAX || orignum < INT_MIN;
+ if (n <= *record || out_of_range)
{
{
- msg (SE, _("The record number specified, %
ld
, is at or "
+ msg (SE, _("The record number specified, %
.0f
, is at or "
"before the previous record, %d. Data "
"fields must be listed in order of "
"increasing record number."),
"before the previous record, %d. Data "
"fields must be listed in order of "
"increasing record number."),
-
lex_integer (lexer)
, *record);
+
orignum
, *record);
return false;
}
return false;
}
- *record =
lex_integer (lexer)
;
+ *record =
n
;
lex_get (lexer);
}
else
lex_get (lexer);
}
else