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