int fbuf_reset (gfc_unit * u) { int seekval = 0; if (!u->fbuf) return 0; fbuf_debug (u, "fbuf_reset: "); fbuf_flush (u, u->mode); /* If we read past the current position, seek the underlying device back. */ if (u->mode == READING && u->fbuf->act > u->fbuf->pos) { seekval = - (u->fbuf->act - u->fbuf->pos); fbuf_debug (u, "fbuf_reset seekval %d, ", seekval); } u->fbuf->act = u->fbuf->pos = 0; return seekval; }
void st_flush (st_parameter_filepos *fpp) { gfc_unit *u; library_start (&fpp->common); u = find_unit (fpp->common.unit); if (u != NULL) { /* Make sure format buffer is flushed. */ if (u->flags.form == FORM_FORMATTED) fbuf_flush (u, u->mode); sflush (u->s); unlock_unit (u); } else /* FLUSH on unconnected unit is illegal: F95 std., 9.3.5. */ generate_error (&fpp->common, LIBERROR_BAD_OPTION, "Specified UNIT in FLUSH is not connected"); library_end (); }