Implement fdclosedir(3) function, which is equivalent to the closedir(3)

function, but returns directory file descriptor instead of closing it.

Submitted by:	Mariusz Zaborski <oshogbo@FreeBSD.org>
Sponsored by:	Google Summer of Code 2013
This commit is contained in:
pjd 2013-08-18 20:11:34 +00:00
parent ab20de7f07
commit b717fb9f08
4 changed files with 25 additions and 3 deletions

View File

@ -79,6 +79,7 @@ int dirfd(DIR *);
#endif
#if __BSD_VISIBLE
DIR *__opendir2(const char *, int);
int fdclosedir(DIR *);
int getdents(int, char *, int);
int getdirentries(int, char *, int, long *);
#endif

View File

@ -384,6 +384,7 @@ FBSD_1.3 {
clock_getcpuclockid;
dirfd;
dup3;
fdclosedir;
fdlopen;
__FreeBSD_libc_enter_restricted_mode;
getcontextx;

View File

@ -49,7 +49,7 @@ __FBSDID("$FreeBSD$");
* close a directory.
*/
int
closedir(DIR *dirp)
fdclosedir(DIR *dirp)
{
int fd;
@ -65,5 +65,12 @@ closedir(DIR *dirp)
_pthread_mutex_destroy(&dirp->dd_lock);
}
free((void *)dirp);
return(_close(fd));
return (fd);
}
int
closedir(DIR *dirp)
{
return (_close(fdclosedir(dirp)));
}

View File

@ -28,7 +28,7 @@
.\" @(#)directory.3 8.1 (Berkeley) 6/4/93
.\" $FreeBSD$
.\"
.Dd July 5, 2012
.Dd August 18, 2013
.Dt DIRECTORY 3
.Os
.Sh NAME
@ -40,6 +40,7 @@
.Nm seekdir ,
.Nm rewinddir ,
.Nm closedir ,
.Nm fdclosedir ,
.Nm dirfd
.Nd directory operations
.Sh LIBRARY
@ -64,6 +65,8 @@
.Ft int
.Fn closedir "DIR *dirp"
.Ft int
.Fn fdclosedir "DIR *dirp"
.Ft int
.Fn dirfd "DIR *dirp"
.Sh DESCRIPTION
The
@ -208,6 +211,13 @@ On failure, \-1 is returned and the global variable
is set to indicate the error.
.Pp
The
.Fn fdclosedir
function is equivalent to the
.Fn closedir
function except that this function returns directory file descriptor instead of
closing it.
.Pp
The
.Fn dirfd
function
returns the integer file descriptor associated with the named
@ -252,6 +262,9 @@ The
.Fn fdopendir
function appeared in
.Fx 8.0 .
.Fn fdclosedir
function appeared in
.Fx 10.0 .
.Sh BUGS
The invalidation of
.Fn telldir