xref: /csrg-svn/usr.bin/f77/libI77/endfile.c (revision 10673)
12491Sdlw /*
2*10673Sdlw char id_endfile[] = "@(#)endfile.c	1.6";
32491Sdlw  *
42491Sdlw  * endfile
52491Sdlw  */
62491Sdlw 
72491Sdlw #include "fio.h"
82491Sdlw 
9*10673Sdlw static char	endf[]	= "endfile";
102491Sdlw 
11*10673Sdlw f_end (a)
12*10673Sdlw alist	*a;
132491Sdlw {
14*10673Sdlw 	unit	*b;
15*10673Sdlw 
162491Sdlw 	lfname = NULL;
172491Sdlw 	elist = NO;
182491Sdlw 	errflag = a->aerr;
192491Sdlw 	lunit = a->aunit;
20*10673Sdlw 	if (not_legal(lunit))
21*10673Sdlw 		err (errflag, F_ERUNIT, endf)
222491Sdlw 	b = &units[lunit];
23*10673Sdlw 	if (!b->ufd)
24*10673Sdlw 		err (errflag, F_ERNOPEN, endf)
25*10673Sdlw 	if (b->uend)
26*10673Sdlw 		return(0);
272491Sdlw 	lfname = b->ufnm;
282491Sdlw 	b->uend = YES;
29*10673Sdlw 	return ( t_runc (b, errflag) );
302491Sdlw }
312491Sdlw 
32*10673Sdlw t_runc (b, flag)
33*10673Sdlw unit	*b;
34*10673Sdlw ioflag	flag;
352491Sdlw {
36*10673Sdlw 	long	loc;
37*10673Sdlw 
38*10673Sdlw 	if (b->uwrt)
39*10673Sdlw 		fflush (b->ufd);
40*10673Sdlw 	if (b->url || !b->useek || !b->ufnm)
41*10673Sdlw 		return (OK);	/* don't truncate direct access files, etc. */
42*10673Sdlw 	loc = ftell (b->ufd);
43*10673Sdlw 	if (truncate (b->ufnm, loc) != 0)
44*10673Sdlw 		err (flag, errno, endf)
45*10673Sdlw 	return (OK);
462491Sdlw }
47