Subversion Repositories DevTools

Rev

Blame | Last modification | View Log | RSS feed

#ifndef DIRENT_H_INCLUDED
#define DIRENT_H_INCLUDED
/* Filename:   dirent.h
 *
 * Purpose:    UNIX directory services
 *
 * Note:       dirfd() not supported
 */
#if !defined(WIN32)
#error Target not WIN32 ...
#endif
#include <unistd.h>                 /* UNIX types */
#if !defined(_POSIX_)
#define  _POSIX_
#endif
#include <limits.h>                 /* PATH_MAX, NAME_MAX */

#define DIRBLKSIZ   1024

#if !defined(MAXPATHLEN)
#define MAXPATHLEN  PATH_MAX
#endif
#if !defined(MAXNAMLEN)
#define MAXNAMLEN   NAME_MAX
#endif

struct dirent {
#define d_ino       d_fileno        /* Backward compatibility */
        u_long      d_fileno;       /* File number directory */
        u_short     d_reclen;       /* Length of this record */
        u_short     d_namlen;       /* Length of string in d_name */
#if defined(_POSIX_SOURCE) && !defined(_DIRENT_SOURCE)
        long        d_reserved1;
        long        d_reserved2;
        u_long      d_reserved3;
        u_long      d_reserved4;
#else
        long        d_ctime;        /* Creation time */
        long        d_mtime;        /* Modification time */
        u_long      d_size;         /* File size */
        u_long      d_attr;         /* File attributes */
#endif  /*_POSIX_SOURCE*/
        char        d_name[ MAXNAMLEN+1 ];
};


#if defined(_POSIX_SOURCE) && !defined(_DIRENT_SOURCE)
typedef void *DIR;
#else
    #if defined(_DIRENT_SOURCE) || defined(DEBUG)
    /* _dirlist, linked list of directory entries
         *  only required within 'dirent.c'.
         */
    struct _dirlist {
        long        dl_ctime;
        long        dl_mtime;
        u_long      dl_size;
        u_long      dl_size2;
        u_long      dl_attr;
        char       *dl_entry;
        struct _dirlist *dl_next;
    };
    #endif /*_DIRENT_SOURCE*/

typedef struct _dirdesc {
        int         dd_fd;          /* File descriptor associated with directory */
        int         dd_id;          /* Uniquely identify open dir */
        long        dd_loc;         /* Offset in current buffer */
        long        dd_size;        /* Amount of data returned by getdirentries */
        char       *dd_buf;         /* Data buffer */
        int         dd_len;         /* Size of data buffer */
        long        dd_seek;        /* Magic cookie returned by getdirentries */
        void       *dd_ddloc;       /* Linked list of ddloc structs for telldir/seekdir */
/* Extensions, USE AT OWN RISK */
        struct _dirlist *dd_contents;
        struct _dirlist *dd_current;
/* End of extensions */
} DIR;
#endif   /* _POSIX_SOURCE */

#include <cdefs.h>

__BEGIN_DECLS
extern DIR              *opendir __P((char *));
extern int              closedir __P((DIR *));
extern struct dirent    *readdir __P((DIR *));
extern void             rewinddir __P((DIR *));
#ifndef _POSIX_SOURCE
extern void             seekdir __P((DIR *, long));
extern long             telldir __P((DIR *));
extern void             rewinddir __P((DIR *));
extern int              alphasort __P((const void *, const void *));
extern int              scandir __P(());
extern int              getdirentries __P((int, char *, int, long *));
#endif /*_POSIX_SOURCE*/
extern int              IsHPFSFileSystem __P((const char *name));
__END_DECLS

#endif /*DIRENT_H_INCLUDED*/