dirent revision da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensenset prototyped
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensenset nodefine
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensenlib stat64 -D_LARGEFILE64_SOURCE
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensentyp off64_t -D_LARGEFILE64_SOURCE
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensenset define
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensenlib opendir
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensenhdr dirent,ndir
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensensys dir
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensennxt dirent
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensentst botch_d_ino_dirent64 -D_LARGEFILE64_SOURCE note{ dirent64.d_ino vs. readdir64 mismatch }end compile{
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen #if !__arm__
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen )
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen #endif
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen #include <dirent.h>
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen int
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen main()
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen {
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen struct dirent64 ent;
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami char aha[5-((int)sizeof(ent.d_ino))];
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen return sizeof(aha);
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen }
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen}end
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahramiif ( ! _lib_opendir ) {
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami /*
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami * <dirent.h> for systems with no opendir()
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami */
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami #ifndef _DIRENT_H
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami #define _DIRENT_H
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami typedef struct
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami {
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami int dd_fd; /* file descriptor */
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami #ifdef _DIR_PRIVATE_
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami _DIR_PRIVATE_
bfed486ad8de8b8ebc6345a8e10accae08bf2f45Ali Bahrami #endif
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen } DIR;
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen struct dirent
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen {
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen long d_fileno; /* entry serial number */
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen int d_reclen; /* entry length */
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen int d_namlen; /* entry name length */
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen char d_name[1]; /* entry name */
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen };
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen #ifndef _DIR_PRIVATE_
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen #ifdef rewinddir
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen #undef rewinddir
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen #define rewinddir(p) seekdir(p,0L)
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen #endif
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen
30588217a56ff2c9137248fb2e5065c4f0101459Mike Christensen extern DIR* opendir(const char*);
extern void closedir(DIR*);
extern struct dirent* readdir(DIR*);
extern void seekdir(DIR*, long);
extern long telldir(DIR*);
#endif
#endif
}
elif ( _nxt_dirent && _lib_stat64 && _typ_off64_t && _botch_d_ino_dirent64 ) pass{
cat <<!
/*
* <dirent.h> for [fl]stat64 and off64_t with sizeof(ino64_t)==4
*/
#ifndef _AST_STD_H
#include $_nxt_dirent /* the native <dirent.h> */
#else
#ifndef _DIR64_H
#define _DIR64_H
#include <ast_std.h>
#if _typ_off64_t
#undef off_t
#endif
#undef __ino64_t
#define __ino64_t int64_t
#include $_nxt_dirent /* the native <dirent.h> */
#undef __ino64_t
#define __ino64_t __ino64_t
#if _typ_off64_t
#define off_t off64_t
#endif
#if _lib_readdir64 && _typ_struct_dirent64
#ifndef dirent
#define dirent dirent64
#endif
#ifndef readdir
#define readdir readdir64
#endif
#endif
#endif
#endif
!
}end
elif ( _nxt_dirent && _lib_stat64 && _typ_off64_t ) pass{
cat <<!
/*
* <dirent.h> for [fl]stat64 and off64_t
*/
#ifndef _AST_STD_H
#include $_nxt_dirent /* the native <dirent.h> */
#else
#ifndef _DIR64_H
#define _DIR64_H
#include <ast_std.h>
#if _typ_off64_t
#undef off_t
#endif
#include $_nxt_dirent /* the native <dirent.h> */
#if _typ_off64_t
#define off_t off64_t
#endif
#if _lib_readdir64 && _typ_struct_dirent64
#ifndef dirent
#define dirent dirent64
#endif
#ifndef readdir
#define readdir readdir64
#endif
#endif
#endif
#endif
!
}end
elif ( _nxt_dirent && _hdr_dirent ) pass{
cat <<!
/*
* <dirent.h> for systems with ok <dirent.h>
*/
#ifndef _DIRENT_H
#include $_nxt_dirent /* the native <dirent.h> */
#ifndef _DIRENT_H
#define _DIRENT_H
#endif
#endif
!
}end
elif ( _hdr_ndir ) {
/*
* <dirent.h> for systems with opendir() and <ndir.h>
*/
#ifndef _DIRENT_H
#define _DIRENT_H
#if defined(__STDPP__directive) && defined(__STDPP__hide)
__STDPP__directive pragma pp:hide closedir opendir readdir seekdir telldir
#else
#define closedir ______closedir
#define opendir ______opendir
#define readdir ______readdir
#define seekdir ______seekdir
#define telldir ______telldir
#endif
#include <ndir.h>
#if defined(__STDPP__directive) && defined(__STDPP__hide)
__STDPP__directive pragma pp:nohide closedir opendir readdir seekdir telldir
#else
#undef closedir
#undef opendir
#undef readdir
#undef seekdir
#undef telldir
#endif
#ifndef dirent
#define dirent direct
#endif
#if !defined(d_fileno) && !defined(d_ino)
#define d_fileno d_ino
#endif
#ifdef rewinddir
#undef rewinddir
#define rewinddir(p) seekdir(p,0L)
#endif
extern DIR* opendir(const char*);
extern void closedir(DIR*);
extern struct dirent* readdir(DIR*);
extern void seekdir(DIR*, long);
extern long telldir(DIR*);
#endif
}
elif ( _sys_dir ) {
/*
* <dirent.h> for systems with opendir() and no <ndir.h>
*/
#ifndef _DIRENT_H
#define _DIRENT_H
#if defined(__STDPP__directive) && defined(__STDPP__hide)
__STDPP__directive pragma pp:hide closedir opendir readdir seekdir telldir
#else
#define closedir ______closedir
#define opendir ______opendir
#define readdir ______readdir
#define seekdir ______seekdir
#define telldir ______telldir
#endif
#include <sys/dir.h>
#if defined(__STDPP__directive) && defined(__STDPP__hide)
__STDPP__directive pragma pp:nohide closedir opendir readdir seekdir telldir
#else
#undef closedir
#undef opendir
#undef readdir
#undef seekdir
#undef telldir
#endif
#ifndef dirent
#define dirent direct
#endif
#if !defined(d_fileno) && !defined(d_ino)
#define d_fileno d_ino
#endif
#ifdef rewinddir
#undef rewinddir
#define rewinddir(p) seekdir(p,0L)
#endif
extern DIR* opendir(const char*);
extern void closedir(DIR*);
extern struct dirent* readdir(DIR*);
extern void seekdir(DIR*, long);
extern long telldir(DIR*);
#endif
}
endif