xref: /csrg-svn/lib/libc/gen/opendir.c (revision 6097)
15750Smckusick /* Copyright (c) 1982 Regents of the University of California */
25750Smckusick 
3*6097Smckusic static char sccsid[] = "@(#)opendir.c 4.2 03/10/82";
45750Smckusick 
55750Smckusick #include <sys/types.h>
6*6097Smckusic #include <sys/stat.h>
75750Smckusick #include <ndir.h>
85750Smckusick 
95750Smckusick /*
105750Smckusick  * open a directory.
115750Smckusick  */
125750Smckusick DIR *
135750Smckusick opendir(name)
145750Smckusick 	char *name;
155750Smckusick {
16*6097Smckusic 	register DIR *dirp;
17*6097Smckusic 	struct stat sbuf;
185750Smckusick 
195750Smckusick 	dirp = (DIR *)malloc(sizeof(DIR));
205750Smckusick 	dirp->dd_fd = open(name, 0);
215750Smckusick 	if (dirp->dd_fd == -1) {
225750Smckusick 		free(dirp);
235750Smckusick 		return NULL;
245750Smckusick 	}
25*6097Smckusic 	fstat(dirp->dd_fd, &sbuf);
26*6097Smckusic 	if ((sbuf.st_mode & S_IFDIR) == 0) {
27*6097Smckusic 		free(dirp);
28*6097Smckusic 		return NULL;
29*6097Smckusic 	}
305750Smckusick 	dirp->dd_loc = 0;
315750Smckusick 	return dirp;
325750Smckusick }
33