xref: /csrg-svn/sys/stand/stat.c (revision 63279)
1*63279Smckusick /*-
2*63279Smckusick  * Copyright (c) 1993 The Regents of the University of California.
3*63279Smckusick  * All rights reserved.
4*63279Smckusick  *
5*63279Smckusick  * %sccs.include.redist.c%
6*63279Smckusick  *
7*63279Smckusick  *	@(#)stat.c	7.1 (Berkeley) 06/11/93
8*63279Smckusick  */
9*63279Smckusick 
10*63279Smckusick #include <stand/stand.h>
11*63279Smckusick 
12*63279Smckusick fstat(fd, sb)
13*63279Smckusick 	int fd;
14*63279Smckusick 	struct stat *sb;
15*63279Smckusick {
16*63279Smckusick 	register struct open_file *f = &files[fd];
17*63279Smckusick 
18*63279Smckusick 	if ((unsigned)fd >= SOPEN_MAX || f->f_flags == 0) {
19*63279Smckusick 		errno = EBADF;
20*63279Smckusick 		return (-1);
21*63279Smckusick 	}
22*63279Smckusick 
23*63279Smckusick 	/* operation not defined on raw devices */
24*63279Smckusick 	if (f->f_flags & F_RAW) {
25*63279Smckusick 		errno = EOPNOTSUPP;
26*63279Smckusick 		return (-1);
27*63279Smckusick 	}
28*63279Smckusick 
29*63279Smckusick 	errno = (f->f_ops->stat)(f, sb);
30*63279Smckusick 	return (0);
31*63279Smckusick }
32*63279Smckusick 
33*63279Smckusick stat(str, sb)
34*63279Smckusick 	const char *str;
35*63279Smckusick 	struct stat *sb;
36*63279Smckusick {
37*63279Smckusick 	int fd, rv;
38*63279Smckusick 
39*63279Smckusick 	fd = open(str, 0);
40*63279Smckusick 	if (fd < 0)
41*63279Smckusick 		return (-1);
42*63279Smckusick 	rv = fstat(fd, sb);
43*63279Smckusick 	(void)close(fd);
44*63279Smckusick 	return (rv);
45*63279Smckusick }
46