re PR libfortran/25139 ("Invalid argument" error on I/O)

2005-12-28  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libgfortran/25139
	* io/unix.c (fd_truncate): Set s->active to zero.
	PR libgfortran/25510
	* libgfortran.h: Add ERROR_INTERNAL and ERROR_INTERNAL_UNIT.
	* runtime/error.c (translate_error): Add messages for new errors.
	* io/list_read.c (next_char): Use new errors.
	* io/transfer.c (next_record_r) (next_record_w): Use new errors.

From-SVN: r109122
This commit is contained in:
Jerry DeLisle 2005-12-28 20:58:08 +00:00
parent ff7417d4c9
commit 844234fb50
6 changed files with 27 additions and 4 deletions

View File

@ -1,3 +1,13 @@
2005-12-28 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/25139
* io/unix.c (fd_truncate): Set s->active to zero.
PR libgfortran/25510
* libgfortran.h: Add ERROR_INTERNAL and ERROR_INTERNAL_UNIT.
* runtime/error.c (translate_error): Add messages for new errors.
* io/list_read.c (next_char): Use new errors.
* io/transfer.c (next_record_r) (next_record_w): Use new errors.
2005-12-28 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/25550

View File

@ -164,7 +164,7 @@ next_char (st_parameter_dt *dtp)
check for NULL here is cautionary. */
if (p == NULL)
{
generate_error (&dtp->common, ERROR_OS, NULL);
generate_error (&dtp->common, ERROR_INTERNAL_UNIT, NULL);
return '\0';
}

View File

@ -1702,7 +1702,7 @@ next_record_r (st_parameter_dt *dtp)
record = record * dtp->u.p.current_unit->recl;
if (sseek (dtp->u.p.current_unit->s, record) == FAILURE)
{
generate_error (&dtp->common, ERROR_OS, NULL);
generate_error (&dtp->common, ERROR_INTERNAL_UNIT, NULL);
break;
}
dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl;
@ -1863,7 +1863,10 @@ next_record_w (st_parameter_dt *dtp, int done)
record = record * dtp->u.p.current_unit->recl;
if (sseek (dtp->u.p.current_unit->s, record) == FAILURE)
goto io_error;
{
generate_error (&dtp->common, ERROR_INTERNAL_UNIT, NULL);
return;
}
dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl;
}

View File

@ -601,7 +601,7 @@ fd_truncate (unix_stream * s)
}
s->physical_offset = s->file_length = s->logical_offset;
s->active = 0;
return SUCCESS;
}

View File

@ -407,6 +407,8 @@ typedef enum
ERROR_BAD_US,
ERROR_READ_VALUE,
ERROR_READ_OVERFLOW,
ERROR_INTERNAL,
ERROR_INTERNAL_UNIT,
ERROR_LAST /* Not a real error, the last error # + 1. */
}
error_codes;

View File

@ -423,6 +423,14 @@ translate_error (int code)
p = "Numeric overflow on read";
break;
case ERROR_INTERNAL:
p = "Internal error in run-time library";
break;
case ERROR_INTERNAL_UNIT:
p = "Internal unit I/O error";
break;
default:
p = "Unknown error code";
break;