rewinddir.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /* Restart reading the entries of a directory from the beginning.
  2. Copyright (C) 2011-2021 Free Software Foundation, Inc.
  3. This program is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation; either version 3 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program. If not, see <https://www.gnu.org/licenses/>. */
  13. #include <config.h>
  14. /* Specification. */
  15. #include <dirent.h>
  16. #include <errno.h>
  17. #include "dirent-private.h"
  18. /* Don't assume that UNICODE is not defined. */
  19. #undef FindFirstFile
  20. #define FindFirstFile FindFirstFileA
  21. void
  22. rewinddir (DIR *dirp)
  23. {
  24. /* Like in closedir(). */
  25. if (dirp->current != INVALID_HANDLE_VALUE)
  26. FindClose (dirp->current);
  27. /* Like in opendir(). */
  28. dirp->status = -1;
  29. dirp->current = FindFirstFile (dirp->dir_name_mask, &dirp->entry);
  30. if (dirp->current == INVALID_HANDLE_VALUE)
  31. {
  32. switch (GetLastError ())
  33. {
  34. case ERROR_FILE_NOT_FOUND:
  35. dirp->status = -2;
  36. break;
  37. default:
  38. /* Save the error code for the next readdir() call. */
  39. dirp->status = ENOENT;
  40. break;
  41. }
  42. }
  43. }