/*
* dirent.c
*
- * Derived from DIRLIB.C by Matt J. Weinstein
+ * Derived from DIRLIB.C by Matt J. Weinstein
* This note appears in the DIRLIB.H
* DIRLIB.H by M. J. Weinstein Released to public domain 1-Jan-89
*
* Updated by Jeremy Bettis <jeremy@hksys.com>
* Significantly revised and rewinddir, seekdir and telldir added by Colin
* Peters <colin@fu.is.saga-u.ac.jp>
- *
+ *
* $Revision: 1.6 $
* $Author: sam $
* $Date: 2002/11/13 20:51:04 $
#include <stdlib.h>
#include <stdio.h>
-#ifdef HAVE_ERRNO_H
-# include <errno.h>
-#else
- static int errno;
- /* FIXME: anything clever to put here? */
-# define EFAULT 12
-# define ENOTDIR 12
-# define ENOENT 12
-# define ENOMEM 12
-# define EINVAL 12
-#endif
+#include <errno.h>
#include <string.h>
#ifndef UNDER_CE
# include <io.h>
struct dirent
{
- long d_ino; /* Always zero. */
- unsigned short d_reclen; /* Always zero. */
- unsigned short d_namlen; /* Length of name in d_name. */
- char d_name[FILENAME_MAX]; /* File name. */
+ long d_ino; /* Always zero. */
+ unsigned short d_reclen; /* Always zero. */
+ unsigned short d_namlen; /* Length of name in d_name. */
+ char d_name[FILENAME_MAX]; /* File name. */
};
typedef struct
{
- /* disk transfer area for this dir */
- WIN32_FIND_DATA dd_dta;
+ /* disk transfer area for this dir */
+ WIN32_FIND_DATA dd_dta;
- /* dirent struct to return from dir (NOTE: this makes this thread
- * safe as long as only one thread uses a particular DIR struct at
- * a time) */
- struct dirent dd_dir;
+ /* dirent struct to return from dir (NOTE: this makes this thread
+ * safe as long as only one thread uses a particular DIR struct at
+ * a time) */
+ struct dirent dd_dir;
- /* findnext handle */
- HANDLE dd_handle;
+ /* findnext handle */
+ HANDLE dd_handle;
- /*
+ /*
* Status of search:
- * 0 = not started yet (next entry to read is first entry)
- * -1 = off the end
- * positive = 0 based index of next entry
- */
- int dd_stat;
-
- /* given path for dir with search pattern (struct is extended) */
- char dd_name[1];
+ * 0 = not started yet (next entry to read is first entry)
+ * -1 = off the end
+ * positive = 0 based index of next entry
+ */
+ int dd_stat;
+
+ /* given path for dir with search pattern (struct is extended) */
+ char dd_name[1];
} DIR;
/*
* Returns a pointer to a DIR structure appropriately filled in to begin
* searching a directory.
*/
-DIR *
+DIR *
vlc_opendir (const CHAR *szPath)
{
DIR *nd;
dirp->dd_handle = INVALID_HANDLE_VALUE;
dirp->dd_stat = 0;
}
-
-/*
- * telldir
- *
- * Returns the "position" in the "directory stream" which can be used with
- * seekdir to go back to an old entry. We simply return the value in stat.
- */
-long
-vlc_telldir (DIR * dirp)
-{
- errno = 0;
-
- if (!dirp)
- {
- errno = EFAULT;
- return -1;
- }
- return dirp->dd_stat;
-}
-
-/*
- * seekdir
- *
- * Seek to an entry previously returned by telldir. We rewind the directory
- * and call readdir repeatedly until either dd_stat is the position number
- * or -1 (off the end). This is not perfect, in that the directory may
- * have changed while we weren't looking. But that is probably the case with
- * any such system.
- */
-void
-vlc_seekdir (DIR * dirp, long lPos)
-{
- errno = 0;
-
- if (!dirp)
- {
- errno = EFAULT;
- return;
- }
-
- if (lPos < -1)
- {
- /* Seeking to an invalid position. */
- errno = EINVAL;
- return;
- }
- else if (lPos == -1)
- {
- /* Seek past end. */
- if (dirp->dd_handle != INVALID_HANDLE_VALUE)
- {
- FindClose ((HANDLE)dirp->dd_handle);
- }
- dirp->dd_handle = INVALID_HANDLE_VALUE;
- dirp->dd_stat = -1;
- }
- else
- {
- /* Rewind and read forward to the appropriate index. */
- vlc_rewinddir (dirp);
-
- while ((dirp->dd_stat < lPos) && vlc_readdir (dirp))
- ;
- }
-}