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:
Pawel Jakub Dawidek 2013-08-18 20:11:34 +00:00
parent a8717658d3
commit 50079a51bb
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=254499
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