int closedir(DIR *dirp) { if (0 == dirp->dd_fd || _NDIRS < dirp->dd_fd) { DFerr = EBADF; return Error_; } FIND_END(dirp->dd_buf); memset(dirp, 0, sizeof(DIR)); return Success_; }
/*------------------------------------------------------------------------ Close a directory <dirp> previously opened with a call to opendir(). Returns 0 on success or -1 on failure. dirent_errno is set to 0 on success or to one of the following on error: EINVAL - Bad dirp, probably not opened or already closed. ------------------------------------------------------------------------*/ int closedir(DIR *dirp) { if (NULL == dirp) { dirent_errno = EINVAL; return -1; } FIND_END(&(dirp->d_buf)); memset(dirp, 0, sizeof(DIR)); free(dirp); dirent_errno = 0; return 0; }