xref: /csrg-svn/usr.bin/f77/libI77/endfile.c (revision 14826)
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