closedir.c 617 B

123456789101112131415161718192021222324252627282930313233343536
  1. /*
  2. closedir -- close a directory stream
  3. last edit: 11-Nov-1988 D A Gwyn
  4. */
  5. #include <errno.h>
  6. #include <stdlib.h>
  7. #include <sys/errno.h>
  8. #include <sys/types.h>
  9. #include <dirent.h>
  10. typedef void *pointer; /* (void *) if you have it */
  11. #ifndef NULL
  12. #define NULL 0
  13. #endif
  14. int _close(int d);
  15. int
  16. closedir(register DIR *dirp) /* stream from opendir */
  17. {
  18. register int fd;
  19. if ( dirp == NULL || dirp->dd_buf == NULL )
  20. {
  21. errno = EFAULT;
  22. return -1; /* invalid pointer */
  23. }
  24. fd = dirp->dd_fd; /* bug fix thanks to R. Salz */
  25. free( (pointer)dirp->dd_buf );
  26. free( (pointer)dirp );
  27. return _close( fd );
  28. }