--- /dev/null
+! { dg-do run }
+! pr19314 inquire(..position=..) segfaults
+! test by Thomas.Koenig@online.de
+! bdavis9659@comcast.net
+ implicit none
+ character*20 chr
+ open(7,STATUS='SCRATCH')
+ inquire(7,position=chr)
+ if (chr.NE.'ASIS') CALL ABORT
+ close(7)
+ open(7,STATUS='SCRATCH',ACCESS='DIRECT',RECL=100)
+ inquire(7,position=chr)
+ if (chr.NE.'UNDEFINED') CALL ABORT
+ close(7)
+ open(7,STATUS='SCRATCH',POSITION='REWIND')
+ inquire(7,position=chr)
+ if (chr.NE.'REWIND') CALL ABORT
+ close(7)
+ open(7,STATUS='SCRATCH',POSITION='ASIS')
+ inquire(7,position=chr)
+ if (chr.NE.'ASIS') CALL ABORT
+ close(7)
+ open(7,STATUS='SCRATCH',POSITION='APPEND')
+ inquire(7,position=chr)
+ if (chr.NE.'APPEND') CALL ABORT
+ close(7)
+ open(7,STATUS='SCRATCH',POSITION='REWIND')
+ write(7,*)'this is a record written to the file'
+ inquire(7,position=chr)
+ if (chr.NE.'ASIS') CALL ABORT
+ rewind(7)
+ inquire(7,position=chr)
+ if (chr.NE.'REWIND') CALL ABORT
+ close(7)
+ end
if (ioparm.position != NULL)
{
if (u == NULL || u->flags.access == ACCESS_DIRECT)
- p = undefined;
+ p = undefined;
else
- {
- p = NULL; /* TODO: Try to decode what the standard says... */
- }
-
- cf_strcpy (ioparm.blank, ioparm.blank_len, p);
+ switch (u->flags.position)
+ {
+ case POSITION_REWIND:
+ p = "REWIND";
+ break;
+ case POSITION_APPEND:
+ p = "APPEND";
+ break;
+ case POSITION_ASIS:
+ p = "ASIS";
+ break;
+ default:
+ /* if not direct access, it must be
+ either REWIND, APPEND, or ASIS.
+ ASIS seems to be the best default */
+ p = "ASIS";
+ break;
+ }
+ cf_strcpy (ioparm.position, ioparm.position_len, p);
}
if (ioparm.action != NULL)