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