Blame gnu/rewinddir.c

Packit 1ef1a9
/* Restart reading the entries of a directory from the beginning.
Packit 1ef1a9
   Copyright (C) 2011-2015 Free Software Foundation, Inc.
Packit 1ef1a9
Packit 1ef1a9
   This program is free software: you can redistribute it and/or modify
Packit 1ef1a9
   it under the terms of the GNU General Public License as published by
Packit 1ef1a9
   the Free Software Foundation; either version 3 of the License, or
Packit 1ef1a9
   (at your option) any later version.
Packit 1ef1a9
Packit 1ef1a9
   This program is distributed in the hope that it will be useful,
Packit 1ef1a9
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 1ef1a9
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 1ef1a9
   GNU General Public License for more details.
Packit 1ef1a9
Packit 1ef1a9
   You should have received a copy of the GNU General Public License
Packit 1ef1a9
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
Packit 1ef1a9
Packit 1ef1a9
#include <config.h>
Packit 1ef1a9
Packit 1ef1a9
/* Specification.  */
Packit 1ef1a9
#include <dirent.h>
Packit 1ef1a9
Packit 1ef1a9
#include <errno.h>
Packit 1ef1a9
Packit 1ef1a9
#include "dirent-private.h"
Packit 1ef1a9
Packit 1ef1a9
void
Packit 1ef1a9
rewinddir (DIR *dirp)
Packit 1ef1a9
{
Packit 1ef1a9
  /* Like in closedir().  */
Packit 1ef1a9
  if (dirp->current != INVALID_HANDLE_VALUE)
Packit 1ef1a9
    FindClose (dirp->current);
Packit 1ef1a9
Packit 1ef1a9
  /* Like in opendir().  */
Packit 1ef1a9
  dirp->status = -1;
Packit 1ef1a9
  dirp->current = FindFirstFile (dirp->dir_name_mask, &dirp->entry);
Packit 1ef1a9
  if (dirp->current == INVALID_HANDLE_VALUE)
Packit 1ef1a9
    {
Packit 1ef1a9
      switch (GetLastError ())
Packit 1ef1a9
        {
Packit 1ef1a9
        case ERROR_FILE_NOT_FOUND:
Packit 1ef1a9
          dirp->status = -2;
Packit 1ef1a9
          break;
Packit 1ef1a9
        default:
Packit 1ef1a9
          /* Save the error code for the next readdir() call.  */
Packit 1ef1a9
          dirp->status = ENOENT;
Packit 1ef1a9
          break;
Packit 1ef1a9
        }
Packit 1ef1a9
    }
Packit 1ef1a9
}