/*-1* SPDX-License-Identifier: BSD-3-Clause2*3* Copyright (c) 1983, 19934* Regents of the University of California. All rights reserved.5*6* Redistribution and use in source and binary forms, with or without7* modification, are permitted provided that the following conditions8* are met:9* 1. Redistributions of source code must retain the above copyright10* notice, this list of conditions and the following disclaimer.11* 2. Redistributions in binary form must reproduce the above copyright12* notice, this list of conditions and the following disclaimer in the13* documentation and/or other materials provided with the distribution.14* 3. Neither the name of the University nor the names of its contributors15* may be used to endorse or promote products derived from this software16* without specific prior written permission.17*18* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND19* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE20* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE21* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE22* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL23* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS24* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)25* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT26* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY27* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF28* SUCH DAMAGE.29*/3031#include "namespace.h"32#include <sys/types.h>33#include <dirent.h>34#include <pthread.h>35#include <stdlib.h>36#include <unistd.h>37#include "un-namespace.h"3839#include "libc_private.h"40#include "gen-private.h"41#include "telldir.h"4243/*44* close a directory.45*/46int47fdclosedir(DIR *dirp)48{49int fd;5051if (__isthreaded)52_pthread_mutex_lock(&dirp->dd_lock);53fd = dirp->dd_fd;54dirp->dd_fd = -1;55dirp->dd_loc = 0;56free((void *)dirp->dd_buf);57free(dirp->dd_compat_de);58_reclaim_telldir(dirp);59if (__isthreaded) {60_pthread_mutex_unlock(&dirp->dd_lock);61_pthread_mutex_destroy(&dirp->dd_lock);62}63free((void *)dirp);64return (fd);65}6667int68closedir(DIR *dirp)69{7071return (_close(fdclosedir(dirp)));72}737475