pdp11v/usr/src/lib/lib2/fstat.c

Compare this file to the similar file:
Show the results in this format:

/*	@(#)fstat.c	1.1	*/

# include <stand.h>
# include <sys/ino.h>
# include <sys/stat.h>

fstat (fdesc, buf)
register struct stat *buf; {
	register struct iob *io;
	extern long time ();

	fdesc -= 3;

	if (fdesc < -3
	    || fdesc >= NFILES
	    || (fdesc >= 0 && ((io = &_iobuf[fdesc])->i_flgs & F_ALLOC) == 0)) {
		errno = EBADF;
		return (-1);
	}

	if (fdesc < 0 || (io->i_flgs & F_FILE) == 0) {
		if (fdesc < 0)
			buf->st_dev = 0;
		else
			buf->st_dev = io->i_dp - &_dtab[0];
		buf->st_ino = 0;
		buf->st_mode = 020600;
		buf->st_nlink = 1;
		buf->st_uid = 0;
		buf->st_gid = 1;
		buf->st_rdev = buf->st_dev;
		buf->st_size = 0;
		buf->st_atime = time ((long *) 0);
		buf->st_mtime = buf->st_ctime = buf->st_atime;

		return (0);
	}

	buf->st_dev = io->i_dp - &_dtab[0];
	buf->st_ino = io->i_ino.i_number;
	buf->st_mode = io->i_ino.i_mode;
	buf->st_nlink = io->i_ino.i_nlink;
	buf->st_uid = io->i_ino.i_uid;
	buf->st_gid = io->i_ino.i_gid;
	buf->st_rdev = io->i_ino.i_rdev;
	buf->st_size = io->i_ino.i_size;
	buf->st_atime = io->i_atime;
	buf->st_mtime = io->i_mtime;
	buf->st_ctime = io->i_ctime;

	return (0);
}