diff options
Diffstat (limited to 'gcc-4.8/libgfortran/io/list_read.c')
-rw-r--r-- | gcc-4.8/libgfortran/io/list_read.c | 55 |
1 files changed, 33 insertions, 22 deletions
diff --git a/gcc-4.8/libgfortran/io/list_read.c b/gcc-4.8/libgfortran/io/list_read.c index 60f4549cd..43f606085 100644 --- a/gcc-4.8/libgfortran/io/list_read.c +++ b/gcc-4.8/libgfortran/io/list_read.c @@ -118,7 +118,7 @@ free_saved (st_parameter_dt *dtp) static void free_line (st_parameter_dt *dtp) { - dtp->u.p.item_count = 0; + dtp->u.p.line_buffer_pos = 0; dtp->u.p.line_buffer_enabled = 0; if (dtp->u.p.line_buffer == NULL) @@ -150,15 +150,15 @@ next_char (st_parameter_dt *dtp) { dtp->u.p.at_eol = 0; - c = dtp->u.p.line_buffer[dtp->u.p.item_count]; - if (c != '\0' && dtp->u.p.item_count < 64) + c = dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos]; + if (c != '\0' && dtp->u.p.line_buffer_pos < 64) { - dtp->u.p.line_buffer[dtp->u.p.item_count] = '\0'; - dtp->u.p.item_count++; + dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos] = '\0'; + dtp->u.p.line_buffer_pos++; goto done; } - dtp->u.p.item_count = 0; + dtp->u.p.line_buffer_pos = 0; dtp->u.p.line_buffer_enabled = 0; } @@ -640,7 +640,7 @@ l_push_char (st_parameter_dt *dtp, char c) if (dtp->u.p.line_buffer == NULL) dtp->u.p.line_buffer = xcalloc (SCRATCH_SIZE, 1); - dtp->u.p.line_buffer[dtp->u.p.item_count++] = c; + dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos++] = c; } @@ -750,7 +750,7 @@ read_logical (st_parameter_dt *dtp, int length) { dtp->u.p.nml_read_error = 1; dtp->u.p.line_buffer_enabled = 1; - dtp->u.p.item_count = 0; + dtp->u.p.line_buffer_pos = 0; return; } @@ -758,14 +758,17 @@ read_logical (st_parameter_dt *dtp, int length) bad_logical: - free_line (dtp); - if (nml_bad_return (dtp, c)) + { + free_line (dtp); return; + } + free_saved (dtp); if (c == EOF) { + free_line (dtp); hit_eof (dtp); return; } @@ -773,6 +776,7 @@ read_logical (st_parameter_dt *dtp, int length) eat_line (dtp); snprintf (message, MSGLEN, "Bad logical value while reading item %d", dtp->u.p.item_count); + free_line (dtp); generate_error (&dtp->common, LIBERROR_READ_VALUE, message); return; @@ -913,9 +917,9 @@ read_integer (st_parameter_dt *dtp, int length) else if (c != '\n') eat_line (dtp); - free_line (dtp); snprintf (message, MSGLEN, "Bad integer for item %d in list input", dtp->u.p.item_count); + free_line (dtp); generate_error (&dtp->common, LIBERROR_READ_VALUE, message); return; @@ -1298,9 +1302,9 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length) else if (c != '\n') eat_line (dtp); - free_line (dtp); snprintf (message, MSGLEN, "Bad floating point number for item %d", dtp->u.p.item_count); + free_line (dtp); generate_error (&dtp->common, LIBERROR_READ_VALUE, message); return 1; @@ -1406,9 +1410,9 @@ eol_4: else if (c != '\n') eat_line (dtp); - free_line (dtp); snprintf (message, MSGLEN, "Bad complex value in item %d of list input", dtp->u.p.item_count); + free_line (dtp); generate_error (&dtp->common, LIBERROR_READ_VALUE, message); } @@ -1770,7 +1774,7 @@ read_real (st_parameter_dt *dtp, void * dest, int length) { dtp->u.p.nml_read_error = 1; dtp->u.p.line_buffer_enabled = 1; - dtp->u.p.item_count = 0; + dtp->u.p.line_buffer_pos = 0; return; } @@ -1789,9 +1793,9 @@ read_real (st_parameter_dt *dtp, void * dest, int length) else if (c != '\n') eat_line (dtp); - free_line (dtp); snprintf (message, MSGLEN, "Bad real number in item %d of list input", dtp->u.p.item_count); + free_line (dtp); generate_error (&dtp->common, LIBERROR_READ_VALUE, message); } @@ -1806,11 +1810,10 @@ check_type (st_parameter_dt *dtp, bt type, int len) if (dtp->u.p.saved_type != BT_UNKNOWN && dtp->u.p.saved_type != type) { - free_line (dtp); snprintf (message, MSGLEN, "Read type %s where %s was expected for item %d", type_name (dtp->u.p.saved_type), type_name (type), dtp->u.p.item_count); - + free_line (dtp); generate_error (&dtp->common, LIBERROR_READ_VALUE, message); return 1; } @@ -1820,12 +1823,12 @@ check_type (st_parameter_dt *dtp, bt type, int len) if (dtp->u.p.saved_length != len) { - free_line (dtp); snprintf (message, MSGLEN, "Read kind %d %s where kind %d is required for item %d", dtp->u.p.saved_length, type_name (dtp->u.p.saved_type), len, dtp->u.p.item_count); generate_error (&dtp->common, LIBERROR_READ_VALUE, message); + free_line (dtp); return 1; } @@ -2031,8 +2034,6 @@ list_formatted_read (st_parameter_dt *dtp, bt type, void *p, int kind, void finish_list_read (st_parameter_dt *dtp) { - int err; - free_saved (dtp); fbuf_flush (dtp->u.p.current_unit, dtp->u.p.mode); @@ -2043,12 +2044,22 @@ finish_list_read (st_parameter_dt *dtp) return; } - err = eat_line (dtp); - if (err == LIBERROR_END) + if (!is_internal_unit (dtp)) + { + int c; + c = next_char (dtp); + if (c == EOF) { free_line (dtp); hit_eof (dtp); + return; + } + if (c != '\n') + eat_line (dtp); } + + free_line (dtp); + } /* NAMELIST INPUT |