xref: /csrg-svn/sys/stand/stat.c (revision 63370)
163279Smckusick /*-
2*63370Sbostic  * Copyright (c) 1993
3*63370Sbostic  *	The Regents of the University of California.  All rights reserved.
463279Smckusick  *
563279Smckusick  * %sccs.include.redist.c%
663279Smckusick  *
7*63370Sbostic  *	@(#)stat.c	8.1 (Berkeley) 06/11/93
863279Smckusick  */
963279Smckusick 
1063279Smckusick #include <stand/stand.h>
1163279Smckusick 
fstat(fd,sb)1263279Smckusick fstat(fd, sb)
1363279Smckusick 	int fd;
1463279Smckusick 	struct stat *sb;
1563279Smckusick {
1663279Smckusick 	register struct open_file *f = &files[fd];
1763279Smckusick 
1863279Smckusick 	if ((unsigned)fd >= SOPEN_MAX || f->f_flags == 0) {
1963279Smckusick 		errno = EBADF;
2063279Smckusick 		return (-1);
2163279Smckusick 	}
2263279Smckusick 
2363279Smckusick 	/* operation not defined on raw devices */
2463279Smckusick 	if (f->f_flags & F_RAW) {
2563279Smckusick 		errno = EOPNOTSUPP;
2663279Smckusick 		return (-1);
2763279Smckusick 	}
2863279Smckusick 
2963279Smckusick 	errno = (f->f_ops->stat)(f, sb);
3063279Smckusick 	return (0);
3163279Smckusick }
3263279Smckusick 
stat(str,sb)3363279Smckusick stat(str, sb)
3463279Smckusick 	const char *str;
3563279Smckusick 	struct stat *sb;
3663279Smckusick {
3763279Smckusick 	int fd, rv;
3863279Smckusick 
3963279Smckusick 	fd = open(str, 0);
4063279Smckusick 	if (fd < 0)
4163279Smckusick 		return (-1);
4263279Smckusick 	rv = fstat(fd, sb);
4363279Smckusick 	(void)close(fd);
4463279Smckusick 	return (rv);
4563279Smckusick }
46