diff options
author | Simon Josefsson <simon@josefsson.org> | 2011-09-21 15:49:06 +0200 |
---|---|---|
committer | Simon Josefsson <simon@josefsson.org> | 2011-09-21 15:49:06 +0200 |
commit | 5fdaefe2cfd2e38a83fee58c6a2b852d5e124d69 (patch) | |
tree | aba3494f385bea407fd4b4f840b8b9cdfef711c2 /gl/closedir.c | |
parent | 0f206a54a53abe0ca38216081d587cf98096fb26 (diff) | |
download | gnutls-5fdaefe2cfd2e38a83fee58c6a2b852d5e124d69.tar.gz |
Update gnulib files.
Diffstat (limited to 'gl/closedir.c')
-rw-r--r-- | gl/closedir.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/gl/closedir.c b/gl/closedir.c new file mode 100644 index 0000000000..700d60eeb4 --- /dev/null +++ b/gl/closedir.c @@ -0,0 +1,63 @@ +/* Stop reading the entries of a directory. + Copyright (C) 2006-2011 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <dirent.h> + +#if HAVE_CLOSEDIR + +/* Override closedir(), to keep track of the open file descriptors. + Needed because there is a function dirfd(). */ + +#else + +# include <stdlib.h> + +# include "dirent-private.h" + +#endif + +int +closedir (DIR *dirp) +{ +# if REPLACE_FCHDIR + int fd = dirfd (dirp); +# endif + int retval; + +#if HAVE_CLOSEDIR +# undef closedir + + retval = closedir (dirp); + +#else + + if (dirp->current != INVALID_HANDLE_VALUE) + FindClose (dirp->current); + free (dirp); + + retval = 0; + +#endif + +#if REPLACE_FCHDIR + if (retval >= 0) + _gl_unregister_fd (fd); +#endif + return retval; +} |