12491Sdlw /* 2*14826Sdlw char id_endfile[] = "@(#)endfile.c 1.7"; 32491Sdlw * 42491Sdlw * endfile 52491Sdlw */ 62491Sdlw 72491Sdlw #include "fio.h" 82491Sdlw 910673Sdlw static char endf[] = "endfile"; 102491Sdlw 1110673Sdlw f_end (a) 1210673Sdlw alist *a; 132491Sdlw { 1410673Sdlw unit *b; 1510673Sdlw 162491Sdlw lfname = NULL; 172491Sdlw elist = NO; 182491Sdlw errflag = a->aerr; 192491Sdlw lunit = a->aunit; 2010673Sdlw if (not_legal(lunit)) 2110673Sdlw err (errflag, F_ERUNIT, endf) 222491Sdlw b = &units[lunit]; 2310673Sdlw if (!b->ufd) 2410673Sdlw err (errflag, F_ERNOPEN, endf) 2510673Sdlw if (b->uend) 2610673Sdlw return(0); 272491Sdlw lfname = b->ufnm; 282491Sdlw b->uend = YES; 29*14826Sdlw return ( t_runc (b, errflag, endf) ); 302491Sdlw } 312491Sdlw 32*14826Sdlw t_runc (b, flag, str) 3310673Sdlw unit *b; 3410673Sdlw ioflag flag; 35*14826Sdlw char *str; 362491Sdlw { 3710673Sdlw long loc; 3810673Sdlw 3910673Sdlw if (b->uwrt) 4010673Sdlw fflush (b->ufd); 4110673Sdlw if (b->url || !b->useek || !b->ufnm) 4210673Sdlw return (OK); /* don't truncate direct access files, etc. */ 4310673Sdlw loc = ftell (b->ufd); 4410673Sdlw if (truncate (b->ufnm, loc) != 0) 45*14826Sdlw err (flag, errno, str) 46*14826Sdlw if (b->uwrt && ! nowreading(b)) 47*14826Sdlw err (flag, errno, str) 4810673Sdlw return (OK); 492491Sdlw } 50