#ifndef _SYS_DIR_H
#define _SYS_DIR_H
#include <sys/isa_defs.h>
#include <sys/int_types.h>
#ifdef __cplusplus
extern "C" {
#endif
#if !defined(KERNEL) && !defined(DEV_BSIZE)
#define DEV_BSIZE 512
#endif
#define DIRBUF 8192
#define DIRBLKSIZ DIRBUF
#define MAXNAMLEN 255
#if _FILE_OFFSET_BITS == 32
struct direct {
ulong_t d_ino;
ushort_t d_reclen;
ushort_t d_namlen;
char d_name[MAXNAMLEN+1];
};
#elif _FILE_OFFSET_BITS == 64
struct direct {
ino_t d_ino;
ushort_t d_reclen;
ushort_t d_namlen;
char d_name[MAXNAMLEN+1];
};
#endif
#if defined(_LARGEFILE64_SOURCE)
struct direct64 {
ino64_t d_ino;
ushort_t d_reclen;
ushort_t d_namlen;
char d_name[MAXNAMLEN+1];
};
#endif
#undef DIRSIZ
#undef DIRSIZ64
#if _FILE_OFFSET_BITS == 32
#define DIRSIZ(dp) \
((sizeof (struct direct) - sizeof ((dp)->d_name) + \
(strlen((dp)->d_name)+1) + 3) & ~3)
#elif _FILE_OFFSET_BITS == 64
#define DIRSIZ(dp) \
((sizeof (struct direct64) - sizeof ((dp)->d_name) + \
(strlen((dp)->d_name)+1) + 3) & ~3)
#endif
#if defined(_LARGEFILE64_SOURCE)
#define DIRSIZ64(dp) \
((sizeof (struct direct64) - sizeof ((dp)->d_name) + \
(strlen((dp)->d_name)+1) + 3) & ~3)
#endif
#ifndef KERNEL
typedef struct _dirdesc {
int dd_fd;
int dd_loc;
int dd_size;
char *dd_buf;
} DIR;
#ifndef NULL
#define NULL 0
#endif
#if defined(_LP64) && defined(_LARGEFILE64_SOURCE)
#ifdef __PRAGMA_REDEFINE_EXTNAME
#pragma redefine_extname readdir64 readdir
#pragma redefine_extname scandir64 scandir
#pragma redefine_extname alphasort64 alphasort
#else
#define readdir64 readdir
#define scandir64 scandir
#define alphasort64 alphasort
#define direct64 direct
#endif
#endif
#if !defined(_LP64) && (_FILE_OFFSET_BITS == 64)
#ifdef __PRAGMA_REDEFINE_EXTNAME
#pragma redefine_extname readdir readdir64
#pragma redefine_extname scandir scandir64
#pragma redefine_extname alphasort alphasort64
#else
#define readdir readdir64
#define scandir scandir64
#define alphasort alphasort64
#define direct direct64
#endif
#endif
#if defined(__STDC__)
extern DIR *opendir(const char *);
extern struct direct *readdir(DIR *);
extern long telldir(DIR *);
extern void seekdir(DIR *, long);
extern int scandir(char *, struct direct *(*[]),
int (*)(struct direct *),
int (*)(struct direct **, struct direct **));
extern int alphasort(struct direct **, struct direct **);
extern void rewinddir(DIR *);
extern int closedir(DIR *);
#else
extern DIR *opendir();
extern struct direct *readdir();
extern long telldir();
extern void seekdir();
extern int scandir();
extern int alphasort();
extern void rewinddir();
extern void closedir();
#endif
#if defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
!defined(__PRAGMA_REDEFINE_EXTNAME))
#if defined(__STDC__)
extern struct direct64 *readdir64(DIR *);
extern int scandir64(char *, struct direct64 *(*[]),
int (*)(struct direct64 *),
int (*)(struct direct64 **, struct direct64 **));
extern int alphasort64(struct direct64 **, struct direct64 **);
#else
extern struct direct64 *readdir64();
extern int scandir64();
extern int alphasort64();
#endif
#endif
#define rewinddir(dirp) seekdir((dirp), 0)
#endif
#ifdef __cplusplus
}
#endif
#endif