xref: /original-bsd/usr.bin/f77/libI77/endfile.c (revision 92d3de31)
1 /*
2 char id_endfile[] = "@(#)endfile.c	1.6";
3  *
4  * endfile
5  */
6 
7 #include "fio.h"
8 
9 static char	endf[]	= "endfile";
10 
11 f_end (a)
12 alist	*a;
13 {
14 	unit	*b;
15 
16 	lfname = NULL;
17 	elist = NO;
18 	errflag = a->aerr;
19 	lunit = a->aunit;
20 	if (not_legal(lunit))
21 		err (errflag, F_ERUNIT, endf)
22 	b = &units[lunit];
23 	if (!b->ufd)
24 		err (errflag, F_ERNOPEN, endf)
25 	if (b->uend)
26 		return(0);
27 	lfname = b->ufnm;
28 	b->uend = YES;
29 	return ( t_runc (b, errflag) );
30 }
31 
32 t_runc (b, flag)
33 unit	*b;
34 ioflag	flag;
35 {
36 	long	loc;
37 
38 	if (b->uwrt)
39 		fflush (b->ufd);
40 	if (b->url || !b->useek || !b->ufnm)
41 		return (OK);	/* don't truncate direct access files, etc. */
42 	loc = ftell (b->ufd);
43 	if (truncate (b->ufnm, loc) != 0)
44 		err (flag, errno, endf)
45 	return (OK);
46 }
47